From cc902e3272cb8ae10055aaff8cb6525620e12226 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Wed, 13 Jan 2016 02:31:12 +0000 Subject: [PATCH] mpers.awk: add support for DWARF files generated by clang * mpers.awk: Define default_pointer_size. Initialize byte_size for DW_TAG_pointer_type to default_pointer_size. Set parent for DW_TAG_member only. Handle DW_AT_count as an alternative to DW_AT_upper_bound. --- mpers.awk | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mpers.awk b/mpers.awk index 73bf0b03..99248c57 100644 --- a/mpers.awk +++ b/mpers.awk @@ -1,7 +1,7 @@ #!/bin/gawk # # Copyright (c) 2015 Elvira Khabirova -# Copyright (c) 2015 Dmitry V. Levin +# Copyright (c) 2015-2016 Dmitry V. Levin # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -173,6 +173,8 @@ function what_is(what_idx, type_idx, special, item, \ return leave(what_idx, "") } BEGIN { + match(ARCH_FLAG, /[[:digit:]]+/, temparray) + default_pointer_size = temparray[0] / 8 print "#include " } /^<[[:xdigit:]]+>/ { @@ -181,9 +183,6 @@ BEGIN { idx = "0x" matches[2] array[idx]["idx"] = idx parent[level] = idx - if (level > 1) { - array[idx]["parent"] = parent[level-1] - } } /^DW_AT_data_member_location/ { if (!match($0, /\(DW_OP_plus_uconst:[[:space:]]+([[:digit:]]+)\)/, temparray)) @@ -211,10 +210,18 @@ BEGIN { match($0, /[[:digit:]]+/, temparray) array[parent[level-1]]["upper_bound"] = temparray[0] + 1 } +/^DW_AT_count/ { + match($0, /[[:digit:]]+/, temparray) + array[parent[level-1]]["upper_bound"] = temparray[0] +} /^Abbrev Number:[^(]+\(DW_TAG_/ { if (match($0, /typedef|union_type|structure_type|pointer_type\ |enumeration_type|array_type|base_type|member/, temparray)) { array[idx]["special"] = temparray[0] + if ("pointer_type" == temparray[0]) + array[idx]["byte_size"] = default_pointer_size + if (level > 1 && "member" == temparray[0]) + array[idx]["parent"] = parent[level-1] } } END { -- 2.40.0