http://sourceware.org/bugzilla/show_bug.cgi?id=12171

           Summary: Local Common symbols cause ld to segfault
           Product: binutils
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: ld
        AssignedTo: unassig...@sources.redhat.com
        ReportedBy: f...@mailinator.com


Created attachment 5101
  --> http://sourceware.org/bugzilla/attachment.cgi?id=5101
"hello.c" and "test.o" for test case described in report

If you can manage to construct an object file where one of the symbols is both
STB_LOCAL and SHN_COMMON, then feeding that object file to ld will cause a
segfault. It might be sensible to give an error message instead. Ideally, ld
would be able to allocate the local common symbol to .bss as usual.

Interestingly, the GNU assembler has an ".lcomm" directive which does *not*
create local common symbols.  Also worth a mention: The tool "elflint"
considers local commons "nonsense".  I tend to agree, but I still don't think
ld should segfault.


% uname -a
Linux redacted 2.6.24-28-generic #1 SMP Thu Sep 16 15:01:14 UTC 2010 i686
GNU/Linux
% ld --version
GNU ld (GNU Binutils for Debian) 2.19.51.20090508
Copyright 2008 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
% gcc --version
gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

% readelf -s test.o

Symbol table '.symtab' contains 7 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 FILE    LOCAL  DEFAULT  ABS test.s
     2: 00000000     0 SECTION LOCAL  DEFAULT    1 .text
     3: 00000000     0 SECTION LOCAL  DEFAULT    2 .data
     4: 00000000     0 SECTION LOCAL  DEFAULT    3 .bss
     5: 00000004     4 OBJECT  LOCAL  DEFAULT  COM foo
     6: 00000000     6 FUNC    GLOBAL DEFAULT    1 get_foo

% gcc hello.c test.o
collect2: ld terminated with signal 11 [Segmentation fault]

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

_______________________________________________
bug-binutils mailing list
bug-binutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-binutils

Reply via email to