I'm working on upgrading OpenSSL in OpenSolaris to the latest version
which includes a number of hand-coded asm files which give large perf
gains on amd64.
When I compile and link the OpenSSL library I'm getting a couple of
errors like this:

Text relocation remains      referenced
    against symbol    offset    in file
OPENSSL_cpuid_setup   0x1       libcrypto.a(x86_64cpuid.o)

The link stage includes the following options "-z text -B direct". After
playing around with Sun Studio with -KPIC and looking at assembler
output from the test programs I traced the issue down to the function
calls the asm is doing (like OPENSSL_cpuid_setup above).
If I append @PLT to the function call the errors disappear. For e.g.

call OPENSSL_cpuid_setup

becomes 

call OPENSSL_cpuid_setup at PLT

This makes intuitive sense as the function calls will now reference the
Procedure Lookup Table so things like lazy loading should work.

Is this ok (the adding of @PLT)? Do I need to save regs before using
@PLT? Anything else I should be aware of?

Thanks,

-Mark


Reply via email to