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 7:36 PM, Dave Korn <dave.korn.cygwin@gmail.com> wrote:
> On 26/02/2011 02:14, H.J. Lu wrote:
>
>>
>> The question is if LTO linker should link in non-LTO copy of the same function
>> and ignore the LTO-IR copy:
>
> ?Well, I think the linker should link at least one of them in, preferably the
> IR one if it can so that it can be optimised along with the rest of the
> program, but if for some reason the linker can't see that it's needed until
> after ltrans, then it has no choice but to link the non-LTO copy, and settle
> for what should after all only be a missed optimisation rather than
> correctness problem.

The fact that linker doesn't link in the LTO copy means that the non-LTO copy
isn't required by GCC.

>> [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
>
> ?When I tried this with ld.hjl on i686-pc-cygwin, I got an undefined
> reference to __udivdi3, is that supposed to happen?

That is also my question. What should happen if div.o only has IR?
My take on this is this is a user error.

>> 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?
>
> ?Well, to make that work, wouldn't we have to treat all archives as if they
> were opened in --whole-archive mode during stage1, and let the plugin claim
> every archive member that contains any IR and then rely on LTRANS to optimise
> away all but the used code, right?
>
> ?I must admit I don't understand why LTO doesn't emit undefs in the LTO
> symtab for builtins. ?I think life would be easier all round if the LTO symtab
> for main.o contained a reference to __udivdi3 all along, so that we could just
> let the usual mechanism pull in all (and only) the needed stuff straight off
> in stage1 and not give LTRANS so much redundant work to do.
>

That will be wrong since LTO may not need to call __udivdi3 if it can
be folded.

-- 
H.J.


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