I have two assembly codes, code1.s
and code2.s
and I want to build a relocatable (using -fPIC switch) shared library from these two.
I want code2.s
call a function, named myfun1
, which is defined in code1.s
.
When I use call myfun1@PLT
in code2.s
it finds the function and it works like a charm but it uses PLT section to call this function which is in the same shared library. I want to do this without adhering to PLT section. When I remove @PLT
I get the relocation R_X86_64_PC32 against symbol
error for myfun1
.
How can I do this without using PLT section? Is there any way at all? I think it should be feasible as the shared library should be relocatable but not necessary each of its object files, therefore why calling a function inside the same library should goes through the PLT section.
Here is my compile commands:
For codeX.s:
gcc -c codeX.s -fPIC -DPIC -o codeX.o
or
gcc -c codeX.s -o codeX.o
and for sharelibrary named libcodes.so:
gcc -shared -fPIC -DPIC -o libcodes.so code1.o code2.o
Just as you may be curious why I am doing so, I have many object files and each of them wants to call myfun1
. Here I just made it simpler to ask the technical part. Even I tries to put myfun1
in all codeX.s
files but I get the error that myfun1
is defined multiple times. I don't that much care about space and if I get to put myfun1
in all files.
myfun1
is defined in same shared object (shared library) as thecall myfun1
instruction, it should work. – Powel