On Thu, Dec 2, 2010 at 9:20 AM, Ian Lance Taylor <i...@google.com> wrote:
> "H.J. Lu" <hjl.to...@gmail.com> writes:
>
>> On Thu, Dec 2, 2010 at 9:00 AM, Ian Lance Taylor <i...@google.com> wrote:
>>> "H.J. Lu" <hjl.to...@gmail.com> writes:
>>>
>>>> I am not saying we should go with 2 stage linking. Just for clarification.
>>>> In 2 stage linking, the first stage only does symbol resolution. The 
>>>> complete
>>>> linking starts at the second stage.  So we don't do really complete relink
>>>> in 2 stage linking.
>>>
>>> Understood.  But you still read and process all the symbols twice.  It
>>> can be done if it must be done, but it would be significantly better to
>>> do something else if possible.
>>>
>>
>> Without 2 stage linking, which many compilers do for LTO, we will add hack
>> on top of hack.  As Richard pointed out, we need at least
>>
>> -lc -lgcc -lm -lpthreads -lgcov  and maybe libssp, libgomp, ...
>>
>> -lm is currently added by user, not GCC driver
>>
>> Pass-through is just a hack, not a solution.
>
> But I just suggested a different approach, which as far as I can see
> solves the entire problem.  Why not criticize that approach, rather than
> continusing to discuss -pass-through, which we agree is a hack?

How do you deal with -lm:

[...@gnu-6 pr12245-6]$ cat y.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int
main (int argc, char **argv)
{
  int d = atoi (argv[1]);
  printf ("%f\n", sin (d));
  return 0;
}
[...@gnu-6 pr12245-6]$ make
/usr/gcc-4.6/bin/gcc -O2 -fwhole-program -flto=jobserver -fuse-linker-plugin
-c -o y.o y.c
/usr/gcc-4.6/bin/gcc -static -o foo -O2 -fwhole-program -flto=jobserver
-fuse-linker-plugin y.o -lm
/tmp/ccrHdm25.ltrans0.ltrans.o: In function `main':
ccrHdm25.ltrans0.o:(.text.startup+0x19): undefined reference to `sin'
collect2: ld returned 1 exit status
make: *** [foo] Error 1
[...@gnu-6 pr12245-6]$

        
-- 
H.J.

Reply via email to