This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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]

_bfd_elf_init_private_section_data setting output section type improperly for .stabstr


I've a small patch for a bug I believe I've found in the binutils/ld
mainline.  I stumbled across it when trying to build and prelink a
libc-2.3.2.so containing .stab and .stabstr sections.

Long and short of it, an update to this conditional in
_bfd_elf_init_private_section_data was causing the section type of
.stabstr to get set to SHT_PROGBITS, when it should have been
SHT_STRTAB.  This caused assign_section_numbers to fail to process
.stabstr as SHT_PROGBITS, causing the .stab section to get output with
a sh_entsize of zero.  This, in turn, triggered an assertion in the
prelink tool:

prelink: stabs.c:100: adjust_stabs: Assertion `dso->shdr[n].sh_entsize
== 12' failed.

This patch passes all current bintuils test cases.  My new test case
fails with the original _bfd_elf_init_private_section_data, and passes
with the new change.

Hope this is in an acceptable format; let me know if there are any
problems, questions, concerns, etc.

Thanks,

Mike

==== src/bfd/elf.c#3 - src/bfd/elf.c ====
--- src/bfd/elf.c#3     2006-05-10 21:10:55.000000000 -0700
+++ src/bfd/elf.c       2006-05-10 19:52:30.000000000 -0700
@@ -6054,7 +6054,8 @@ _bfd_elf_init_private_section_data (bfd
     output BFD section flags has been set to something different.
     elf_fake_sections will set ELF section type based on BFD
     section flags.  */
-  if (osec->flags == isec->flags || !osec->flags)
+  if (osec->flags == isec->flags
+      || (!osec->flags && elf_section_type (osec) == SHT_NULL))
    elf_section_type (osec) = elf_section_type (isec);

  /* Set things up for objcopy and relocatable link.  The output
==== (added) src/ld/testsuite/ld-elf/stab.d ====
--- /dev/null   2006-04-17 10:27:56.868292750 -0700
+++ src/ld/testsuite/ld-elf/stab.d      2006-05-10 19:53:55.000000000 -0700
@@ -0,0 +1,12 @@
+#source: start.s
+#as: -gstabs
+#readelf: -N
+#ld:
+
+#...
+  \[[0-9 ][0-9]\] \.stab
+       PROGBITS        00000000 0000[0-9a-f][0-9a-f]
0000[0-9a-f][0-9a-f] 0c   [1-9]+   0  4
+#...
+  \[[0-9 ][0-9]\] \.stabstr
+       STRTAB          00000000 0000[0-9a-f][0-9a-f]
0000[0-9a-f][0-9a-f] 00   0   0  1
+#...


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