This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] dwarf2-frame.c: Support DW_EH_PE_textrel encoding


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]