On 06/07/2012 09:49 AM, Nuno Lopes wrote:> Hi,
>
> I'm trying to understand better how linker_private (and friends) work.
> From what I can understand from the manual
> (http://llvm.org/docs/LangRef.html#linkage_linker_private), it seems
> that a linker_private function cannot be removed by the optimizers.
> Only the linker can discard the symbol. However, I tested with 'opt
> -O1' and a function with *no users* is removed. Same thing happens
> with the other linker_private_* linkage types.
>
> Is my reading of the documentation correct (i.e., is this a bug in LLVM)?
>
> Thanks,
> Nuno
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
The point behind private symbols for a linker is usually so that people
cannot disassemble or in some other way misuse the final image that you
create.
I don't think this has anything to do with the optimizer.
So after the shared object or executable is created, you can't find
anymore, by name, where the code or data for that symbol resides.
In the case of shared objects, it means that you cannot write code that
does a dllopen and tries to find the entrypoint by name.