Consider the example command line below
$ llvm-ld -disable-opt hello.bc -l std -o hello.out
Why does -disable-opt links in all the bitcode from the libstd.so into
hello.out?
- Sanjiv
Consider the example command line below
$ llvm-ld -disable-opt hello.bc -l std -o hello.out
Why does -disable-opt links in all the bitcode from the libstd.so into
hello.out?
- Sanjiv
... because it just disables optimization passed. It does not disable linking.
?
> Consider the example command line below
>
> $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>
> Why does -disable-opt links in all the bitcode from the libstd.so into
> hello.out?... because it just disables optimization passed. It does not disable linking.
?
-
Devang
It should link in whatever is needed and not the whole lib.
- Sanjiv
> Consider the example command line below
>
> $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>
> Why does -disable-opt links in all the bitcode from the libstd.so into
> hello.out?... because it just disables optimization passed. It does not disable linking.
?
-
Devang
______
I think I did not explain the question really well.
-disable-opt links the whole lib into the final program while not using
-disable-opt links in only the required symbols. Why ?
- Sanjiv
> Consider the example command line below
>
> $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>
> Why does -disable-opt links in all the bitcode from the libstd.so into
> hello.out?... because it just disables optimization passed. It does not disable linking.
?
-
Devang
______I think I did not explain the question really well.
-disable-opt links the whole lib into the final program while not using
-disable-opt links in only the required symbols. Why ?
I think you are confusing the order. Probably what is happening is
whole lib is getting linked in, then optimization is throwing away a
bunch of stuff.
Linking works on modules at a time, so if hello.bc uses some symbol X,
it will pull in the entire module inside the library which contains a
definition of X.
- Daniel
Hello Sanjiv,
Wouldn't that be considered a dead-code elimination optimization? If so, then that feature would be disabled by the -disable-opt option.
--Sam
>> > Consider the example command line below
>> >
>> > $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>> >
>> > Why does -disable-opt links in all the bitcode from the libstd.so into
>> > hello.out?
>>
>> ... because it just disables optimization passed. It does not disable linking.
>> ?
>> -
>> Devang
>> ______
> I think I did not explain the question really well.
>
> -disable-opt links the whole lib into the final program while not using
> -disable-opt links in only the required symbols. Why ?I think you are confusing the order. Probably what is happening is
whole lib is getting linked in, then optimization is throwing away a
bunch of stuff.Linking works on modules at a time, so if hello.bc uses some symbol X,
it will pull in the entire module inside the library which contains a
definition of X.- Daniel
Ok. so when you
$ llvm-ld -link-as-library a.bc b.bc c.bc -o stdlib.so
The generated file stdlib.so becomes a single module. Right ?
- Sanjiv