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]

Re: [PATCH,trunk+2.20] Fix issues in ld.bfd plugin interface [0/6]


On Fri, Feb 25, 2011 at 4:43 PM, Dave Korn <dave.korn.cygwin@gmail.com> wrote:
>
> ?After my patches, LD gives the following results:
>
>> FAIL: ld-plugin/lto-4r-a
>> FAIL: ld-plugin/lto-4r-b
>> FAIL: ld-plugin/lto-4r-c
>> FAIL: ld-plugin/lto-4r-d
>> FAIL: LTO 4a
>> FAIL: LTO 4c
>> FAIL: LTO 4d
>> FAIL: LTO 10
>> FAIL: LTO 12a
>> FAIL: LTO 12b
>> FAIL: LTO 15
>
> ?Relative to current LD, that has fixes to 12365, 5 symbol, 3b and 5. ?The
> new FAILures on 12a/b and 15 are actually a difference of interpretation about
> how the linker is supposed to work between me and HJ's code. ?The tests assume
> that it is not possible to override builtins such as __udivdi3 or memcpy, but
> it works OK with the attached patches, so I'm not sure why these tests do what
> they do. ?For example, test LTO 15 has this source file compiled as an object:
>
>> #include <stdio.h>
>>
>> int main(int argc, char **argv)
>> {
>> ? printf ("PASS\n");
>> ? return (int) ((unsigned long long) argc / argv[0][0]);
>> }
>
> ... and this one in a library archive member:
>
>> extern void abort (void);
>> unsigned long long
>> __udivdi3(unsigned long long n, unsigned long long d)
>> {
>> ? abort ();
>> ? return n + d;
>> }
>
> ... so I would have thought that the ideal case would be for an LTO link to
> mimic a non-LTO link, and pull in the definition of __udivdi3 there and abort.
>
> ?That aside, the only thing that LD still doesn't handle after these patches
> is mixed object files that are created by using "ld -r" to merge multiple IR
> and non-IR object files.
>

The question is if LTO linker should link in non-LTO copy of the same function
and ignore the LTO-IR copy:

[hjl@gnu-6 pr12496-2]$ make
as --32  -o start.o start.s
/usr/gcc-4.6/bin/gcc -m32 -B./ -flto   -c -o main.o main.c
/usr/gcc-4.6/bin/gcc -m32 -B./ -flto   -c -o div.o div.c
ar rv libdiv.a div.o
ar: creating libdiv.a
a - div.o
/usr/gcc-4.6/bin/gcc -m32 -B./ -O2 -flto -nostdlib -o prog
-Wl,--start-group start.o main.o libdiv.a -Wl,--end-group

Here div.o is compiled with -O0 -flto and the final link is compiled
with -O2 -flto. I would expect div.c is compiled with -O2 -flto, not -O0,
if div.c is linked in. Am I expecting too much?


-- 
H.J.


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