[RFA] MIPS_TEXT symbols should be associated to .text section?

Thiemo Seufer ica2_ts@csv.ica.uni-stuttgart.de
Fri Jul 30 00:31:00 GMT 2004


Mark Kettenis wrote:
>    From: Thiemo Seufer <ica2_ts@csv.ica.uni-stuttgart.de>
>    Date: Fri, 30 Jul 2004 00:19:04 +0200
> 
>    Joel Brobecker wrote:
>    > Hello BFD maintainers,
>    > 
>    > Ping? This patch is only 8 days old, and I wouldn't send a reminder
>    > just a week after sending it, but GDB is completely broken without
>    > this patch (ie "break main; run" doesn't work)... Would somebody mind
>    > having a look at it and tell me if it is good or not?
> 
> Joel, I'm seeing similar problems on NetBSD/mips (NetBSD/pmax 1.6.2 to
> be precise).

AFAICS it will hit all elf{32-,32-n,64-}{big,little}mips targets (as
opposed to *trad*mips), which are covered by SGI_COMPAT.

>    [snip]
> 
>    > >  #if 0 /* for SGI_COMPAT */
>    > >      case SHN_MIPS_TEXT:
>    > >        asym->section = mips_elf_text_section_ptr;
> 
>    The last three lines in this patch suggest AFAICS to use
>    mips_elf_text_section_ptr instead of bfd_get_section_by_name,
>    and to make the test conditional on SGI_COMPAT. The SHN_MIPS_DATA
>    below should probably get handled similiarily.
> 
> Well, mips_elf_text_section_ptr doesn't really exist.

Right, that appears to be some leftover of earlier code. Looks like
elf_tdata()->elf_text_section replaced it.

Joel, can you try the appended (untested) patch and tell me if it
works for you?


Thiemo


Index: bfd/elfxx-mips.c
===================================================================
RCS file: /cvs/src/src/bfd/elfxx-mips.c,v
retrieving revision 1.106
diff -u -p -r1.106 elfxx-mips.c
--- bfd/elfxx-mips.c	1 Jul 2004 14:53:40 -0000	1.106
+++ bfd/elfxx-mips.c	30 Jul 2004 00:28:55 -0000
@@ -4192,15 +4192,31 @@ _bfd_mips_elf_symbol_processing (bfd *ab
       asym->section = bfd_und_section_ptr;
       break;
 
-#if 0 /* for SGI_COMPAT */
     case SHN_MIPS_TEXT:
-      asym->section = mips_elf_text_section_ptr;
+      {
+	asection *section = elf_tdata (abfd)->elf_text_section;
+
+	BFD_ASSERT (SGI_COMPAT (abfd));
+	if (section != NULL)
+	  {
+	    asym->section = section;
+	    /* MIPS_TEXT is a bit special, the address is not an offset
+	       to the base of the .text section.  So substract the section
+	       base address to make it an offset.  */
+	    asym->value -= section->vma;
+	  }
+      }
       break;
 
     case SHN_MIPS_DATA:
-      asym->section = mips_elf_data_section_ptr;
+      {
+	asection *section = elf_tdata (abfd)->elf_data_section;
+
+	BFD_ASSERT (SGI_COMPAT (abfd));
+	if (section != NULL)
+	  asym->section = section;
+      }
       break;
-#endif
     }
 }
 



More information about the Binutils mailing list