libdwarf
Examing Section Group data

Accessing Section Group data. More...

Accessing Section Group data.

With split dwarf your libdwarf calls after than the initial open are done against the base Dwarf_Dbg and libdwarf automatically looks in the open tied dbg when and as appropriate. the tied-dbg can be detached too, see example3 link, though you must call dwarf_finish() on the detached dw_tied_dbg, the library will not do that for you..

Section groups apply to Elf COMDAT groups too.

*/
void examplesecgroup(Dwarf_Debug dbg)
{
int res = 0;
Dwarf_Unsigned section_count = 0;
Dwarf_Unsigned group_count;
Dwarf_Unsigned selected_group = 0;
Dwarf_Unsigned group_map_entry_count = 0;
Dwarf_Unsigned *sec_nums = 0;
Dwarf_Unsigned *group_nums = 0;
const char ** sec_names = 0;
Dwarf_Error error = 0;
res = dwarf_sec_group_sizes(dbg,&section_count,
&group_count,&selected_group, &group_map_entry_count,
&error);
if (res != DW_DLV_OK) {
/* Something is badly wrong*/
return;
}
/* In an object without split-dwarf sections
or COMDAT sections we now have
selected_group == 1. */
sec_nums = calloc(group_map_entry_count,sizeof(Dwarf_Unsigned));
if (!sec_nums) {
/* FAIL. out of memory */
return;
}
group_nums = calloc(group_map_entry_count,sizeof(Dwarf_Unsigned));
if (!group_nums) {
free(group_nums);
/* FAIL. out of memory */
return;
}
sec_names = calloc(group_map_entry_count,sizeof(char*));
if (!sec_names) {
free(group_nums);
free(sec_nums);
/* FAIL. out of memory */
return;
}
res = dwarf_sec_group_map(dbg,group_map_entry_count,
group_nums,sec_nums,sec_names,&error);
if (res != DW_DLV_OK) {
/* FAIL. Something badly wrong. */
free(sec_names);
free(group_nums);
free(sec_nums);
}
for ( i = 0; i < group_map_entry_count; ++i) {
/* Now do something with
group_nums[i],sec_nums[i],sec_names[i] */
}
/* The strings are in Elf data.
Do not free() the strings themselves.*/
free(sec_names);
free(group_nums);
free(sec_nums);
}
dwarf_sec_group_sizes
int dwarf_sec_group_sizes(Dwarf_Debug dw_dbg, Dwarf_Unsigned *dw_section_count_out, Dwarf_Unsigned *dw_group_count_out, Dwarf_Unsigned *dw_selected_group_out, Dwarf_Unsigned *dw_map_entry_count_out, Dwarf_Error *dw_error)
Get Section Groups data counts.
Dwarf_Debug
struct Dwarf_Debug_s * Dwarf_Debug
Definition: libdwarf.h:537
Dwarf_Unsigned
unsigned long long Dwarf_Unsigned
Definition: libdwarf.h:209
dwarf_sec_group_map
int dwarf_sec_group_map(Dwarf_Debug dw_dbg, Dwarf_Unsigned dw_map_entry_count, Dwarf_Unsigned *dw_group_numbers_array, Dwarf_Unsigned *dw_sec_numbers_array, const char **dw_sec_names_array, Dwarf_Error *dw_error)
Returns a map between group numbers and section numbers.
Dwarf_Error
struct Dwarf_Error_s * Dwarf_Error
Definition: libdwarf.h:531