bug-binutils
[Top][All Lists]
Advanced

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

[Bug ld/23935] New: ld.bfd does not rescan fat LTO archives to resolve p


From: vlad at ispras dot ru
Subject: [Bug ld/23935] New: ld.bfd does not rescan fat LTO archives to resolve plugin-added references
Date: Thu, 29 Nov 2018 20:12:18 +0000

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

            Bug ID: 23935
           Summary: ld.bfd does not rescan fat LTO archives to resolve
                    plugin-added references
           Product: binutils
           Version: 2.32 (HEAD)
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: ld
          Assignee: unassigned at sourceware dot org
          Reporter: vlad at ispras dot ru
  Target Milestone: ---

#!/bin/sh -

cat > prog.c << EOF
#include <stdio.h>
int main() { printf("hi\n"); return 0; }
EOF

cat > libfoo.c << EOF
#include <stdio.h>
int puts(const char *s) { return 0; }
EOF

gcc -c -flto -fno-builtin -ffat-lto-objects libfoo.c -o libfoo.o
ar rcs libfoo.a libfoo.o

# gold="-fuse-ld=gold"

gcc -c -flto prog.c -o prog.o
gcc $gold -Wl,-emain -L. -static -nostdlib prog.o -lfoo

################################################################################

>From <https://sourceware.org/ml/binutils/2014-08/msg00025.html> I gather that
in
the presence of LTO recompiled objects, the archives are supposed to be
rescanned automatically.  This does not happen in the example above.

When LTOing prog.o, GCC transforms the printf call to a puts call. I expect
this
new call to see a resolution in libfoo.a.  And it happens indeed, if one uses
Gold.  Not so for the BFD linker:

    /usr/bin/ld: /tmp/ccvITLI4.ltrans0.ltrans.o: in function `main':
    <artificial>:(.text+0xc): undefined reference to `puts'

Notice the -ffat-lto-objects switch.  Without it, libfoo.a would contain only
LTO bytecode and both linkers would error out.  It seems, the logic is off
somewhere taking "contains LTO bytecode" for "contains only LTO bytecode".

-- 
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]