summaryrefslogtreecommitdiffstats
path: root/libdw
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2012-06-25 17:18:53 +0200
committerMark Wielaard <[email protected]>2012-06-27 10:02:59 +0200
commita0172d75311f36adb6db58000474d31f8a9cd553 (patch)
tree39bce79b9c203afcb2283f3d0994830999c912c2 /libdw
parentb2589ffa7c2bec754952acc8116e03853d65563d (diff)
Add low-level support for .debug_macro.
Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'libdw')
-rw-r--r--libdw/ChangeLog7
-rw-r--r--libdw/dwarf.h1
-rw-r--r--libdw/dwarf_begin_elf.c1
-rw-r--r--libdw/dwarf_formudata.c10
-rw-r--r--libdw/libdwP.h1
5 files changed, 19 insertions, 1 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 3ff83e45..48bbaa0e 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,10 @@
+2012-06-26 Mark Wielaard <[email protected]>
+
+ * libdwP.h: Add IDX_debug_macro.
+ * dwarf.h: Add DW_AT_GNU_macros.
+ * dwarf_begin_elf.c (dwarf_scnnames): Add .debug_macro.
+ * dwarf_formudata.c (dwarf_formudata): Recognize DW_AT_GNU_macros.
+
2012-04-27 Mark Wielaard <[email protected]>
* libdw/dwarf_highpc.c (dwarf_highpc): Handle DW_AT_high_pc being
diff --git a/libdw/dwarf.h b/libdw/dwarf.h
index 38f663d6..01aee5ad 100644
--- a/libdw/dwarf.h
+++ b/libdw/dwarf.h
@@ -266,6 +266,7 @@ enum
DW_AT_GNU_all_tail_call_sites = 0x2116,
DW_AT_GNU_all_call_sites = 0x2117,
DW_AT_GNU_all_source_call_sites = 0x2118,
+ DW_AT_GNU_macros = 0x2119,
DW_AT_hi_user = 0x3fff
};
diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c
index fc6ac8d6..3e01800a 100644
--- a/libdw/dwarf_begin_elf.c
+++ b/libdw/dwarf_begin_elf.c
@@ -61,6 +61,7 @@ static const char dwarf_scnnames[IDX_last][17] =
[IDX_debug_pubnames] = ".debug_pubnames",
[IDX_debug_str] = ".debug_str",
[IDX_debug_macinfo] = ".debug_macinfo",
+ [IDX_debug_macro] = ".debug_macro",
[IDX_debug_ranges] = ".debug_ranges"
};
#define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof (dwarf_scnnames[0]))
diff --git a/libdw/dwarf_formudata.c b/libdw/dwarf_formudata.c
index f5b2a1a1..f08e0d8f 100644
--- a/libdw/dwarf_formudata.c
+++ b/libdw/dwarf_formudata.c
@@ -140,13 +140,21 @@ dwarf_formudata (attr, return_uval)
break;
case DW_AT_macro_info:
- /* macptr */
+ /* macptr into .debug_macinfo */
if (__libdw_formptr (attr, IDX_debug_macinfo,
DWARF_E_NO_ENTRY, NULL,
return_uval) == NULL)
return -1;
break;
+ case DW_AT_GNU_macros:
+ /* macptr into .debug_macro */
+ if (__libdw_formptr (attr, IDX_debug_macro,
+ DWARF_E_NO_ENTRY, NULL,
+ return_uval) == NULL)
+ return -1;
+ break;
+
case DW_AT_ranges:
case DW_AT_start_scope:
/* rangelistptr */
diff --git a/libdw/libdwP.h b/libdw/libdwP.h
index 3c1925b3..77e1b31f 100644
--- a/libdw/libdwP.h
+++ b/libdw/libdwP.h
@@ -71,6 +71,7 @@ enum
IDX_debug_pubnames,
IDX_debug_str,
IDX_debug_macinfo,
+ IDX_debug_macro,
IDX_debug_ranges,
IDX_last
};