This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA] dwarf2-frame.c: Support DW_EH_PE_textrel encoding
- From: Corinna Vinschen <vinschen at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Thu, 2 Oct 2003 22:06:52 +0200
- Subject: [RFA] dwarf2-frame.c: Support DW_EH_PE_textrel encoding
- Reply-to: gdb-patches at sources dot redhat dot com
Hi,
I'm not sure if the patch is actually 100% correct but I think it's
not far from that.
For a few weeks now, gcc emits the DW_EH_PE_textrel encoding for sh
and (AFAICS) ia64. This encoding type is unsupported in gdb so far.
The below patch tries to accomodate this encoding.
Is the patch ok as it is? On sh, the testcases failing with a gcc
emitting this encoding run through with the below patch and the
overall FAIL count is the same as before.
Corinna
* dwarf2-frame.c (struct comp_unit): Add tbase member to store
base for DW_EH_PE_textrel encodings.
(read_encoded_value): Add a DW_EH_PE_textrel case.
(dwarf2_build_frame_info): Set unit.tbase to beginning of text
section.
Index: dwarf2-frame.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2-frame.c,v
retrieving revision 1.14
diff -u -p -r1.14 dwarf2-frame.c
--- dwarf2-frame.c 9 Sep 2003 03:31:07 -0000 1.14
+++ dwarf2-frame.c 2 Oct 2003 19:56:24 -0000
@@ -885,6 +885,9 @@ struct comp_unit
/* Base for DW_EH_PE_datarel encodings. */
bfd_vma dbase;
+
+ /* Base for DW_EH_PE_textrel encodings. */
+ bfd_vma tbase;
};
const struct objfile_data *dwarf2_frame_data;
@@ -1063,6 +1066,9 @@ read_encoded_value (struct comp_unit *un
case DW_EH_PE_datarel:
base = unit->dbase;
break;
+ case DW_EH_PE_textrel:
+ base = unit->tbase;
+ break;
case DW_EH_PE_aligned:
base = 0;
offset = buf - unit->dwarf_frame_buffer;
@@ -1523,6 +1529,7 @@ dwarf2_build_frame_info (struct objfile
unit.objfile = objfile;
unit.addr_size = objfile->obfd->arch_info->bits_per_address / 8;
unit.dbase = 0;
+ unit.tbase = 0;
/* First add the information from the .eh_frame section. That way,
the FDEs from that section are searched last. */
@@ -1546,6 +1553,11 @@ dwarf2_build_frame_info (struct objfile
got = bfd_get_section_by_name (unit.abfd, ".got");
if (got)
unit.dbase = got->vma;
+
+ /* gcc emits the DW_EH_PE_textrel encoding type on sh and ia64 so far. */
+ got = bfd_get_section_by_name (unit.abfd, ".text");
+ if (got)
+ unit.tbase = got->vma;
frame_ptr = unit.dwarf_frame_buffer;
while (frame_ptr < unit.dwarf_frame_buffer + unit.dwarf_frame_size)
--
Corinna Vinschen
Cygwin Developer
Red Hat, Inc.