bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gas/24748] New: 2.32+: bisected build notes-related segfault compil


From: nix at esperi dot org.uk
Subject: [Bug gas/24748] New: 2.32+: bisected build notes-related segfault compiling libstdc++ targetting x86-32
Date: Sat, 29 Jun 2019 20:00:58 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=24748

            Bug ID: 24748
           Summary: 2.32+: bisected build notes-related segfault compiling
                    libstdc++ targetting x86-32
           Product: binutils
           Version: 2.33 (HEAD)
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: gas
          Assignee: unassigned at sourceware dot org
          Reporter: nix at esperi dot org.uk
  Target Milestone: ---

Created attachment 11873
  --> https://sourceware.org/bugzilla/attachment.cgi?id=11873&action=edit
Output of a GCC 9.1 libstdc++ 32-bit biarch x86_64 libstdc++ compilation of
strstream.cc

The attached .s file (generated during GCC 9.1 libstdc++ stage2 build from
strstream.C) yields assertion failures or dereferences of nearly-null pointers
when assembled with an x86-64-native gas --32 from binutils 2.32 or trunk.
I've bisected this to

commit 2e48456f0236d39b6de98feb7168f56cef155912
Author: Nick Clifton <address@hidden>
Date:   Fri Jul 6 11:46:14 2018 +0100

    Fix the relocs created to adjust notes created by the assembler.

            * write.c (maybe_generate_build_notes): Bias reloc offsets by the
            number of notes already generated.

Reverting this commit makes the crashes described below go away. Obviously,
this crash only happens when gas is configured with
--enable-generate-build-notes. I suspect this option is not exactly ready for
prime-time given the number of spurious test failures that occur when it's
turned on because of test results that have not been updated to expect
.gnu.build-attributes sections to be present.

The segfault on trunk looks like:

/tmp/as -v -I /usr/src/gcc/9.1.0-212/libstdc++-v3/../libgcc -I
/usr/local/tmp/shai-build-trees/gcc-65011/x86_64-pc-linux-gnu/32/libstdc++-v3/include/x86_64-pc-linux-gnu
-I
/usr/local/tmp/shai-build-trees/gcc-65011/x86_64-pc-linux-gnu/32/libstdc++-v3/include
-I /usr/src/gcc/9.1.0-212/libstdc++-v3/libsupc++ -I
/usr/local/tmp/shai-build-trees/gcc-65011/x86_64-pc-linux-gnu/32/libstdc++-v3/include/backward
--32 -o strstream.o strstream.s
[...]
Program received signal SIGSEGV, Segmentation fault.
0x000000000042820a in write_relocs (abfd=0x4c8640, sec=0x4e0f30, xxx=<optimized
out>) at ../../gas/write.c:1244
1244      while ((r = *rp) != NULL)
(gdb) print rp
$1 = (struct reloc_list **) 0x4c87a0
(gdb) print *rp
$2 = (struct reloc_list *) 0x6165727473727473
(gdb) print **rp
Cannot access memory at address 0x6165727473727473

In 2.32, we instead get an assertion failure:

/usr/bin/as: BFD (GNU Binutils) 2.32.0.20190624 assertion fail
/usr/src/binutils/2.32-168/bfd/elf.c:3588

... or, under GDB, a crash:

GNU assembler version 2.32.0 (x86_64-pc-linux-gnu) using BFD version (GNU
Binutils) 2.32.0.20190628

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7cfafa0 in bfd_install_relocation (abfd=0x4c8640,
reloc_entry=reloc_entry@entry=0x862b98, data_start=data_start@entry=0x861a90,
data_start_offset=0, input_section=input_section@entry=0x7b5d78,
error_message=error_message@entry=0x7fffffffd358)
    at ../../binutils/bfd/reloc.c:1026
1026      if (howto && howto->special_function)
(gdb) bt
#0  0x00007ffff7cfafa0 in bfd_install_relocation (abfd=0x4c8640,
reloc_entry=reloc_entry@entry=0x862b98, data_start=data_start@entry=0x861a90,
data_start_offset=0, input_section=input_section@entry=0x7b5d78,
error_message=error_message@entry=0x7fffffffd358)
    at ../../binutils/bfd/reloc.c:1026
#1  0x0000000000427fca in install_reloc (sec=sec@entry=0x7b5d78,
reloc=reloc@entry=0x862b98, fragp=fragp@entry=0x861a10, file=0x44bb27 "
defined", line=0) at ../../binutils/gas/write.c:1173
#2  0x0000000000428bf7 in write_relocs (abfd=0x4c8640, sec=0x7b5d78,
xxx=<optimized out>) at ../../binutils/gas/write.c:1324
#3  0x00007ffff7cfc38f in bfd_map_over_sections (abfd=0x4c8640,
operation=operation@entry=0x4289f0 <write_relocs>,
user_storage=user_storage@entry=0x0) at ../../binutils/bfd/section.c:1374
#4  0x000000000042ab4b in write_object_file () at
../../binutils/gas/write.c:2452
#5  0x00000000004043ae in main (argc=<optimized out>, argv=<optimized out>) at
../../binutils/gas/as.c:1386
(gdb) print howto
$1 = (reloc_howto_type *) 0x7f00f7dc87a8
(gdb) print howto->special_function
Cannot access memory at address 0x7f00f7dc87c0

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]