Re: relocation problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi lan,
I  was allready surprised with

	__asm__("mov %ax, i");	
   c:	66 89 04 25 00 00 00 	mov    %ax,0x0

but I thought that this is another issue. Thanks!

Cheers,
Dzianis

2009/3/12 Ian Lance Taylor <iant@xxxxxxxxxx>:
> Dzianis Barzakouski <barzakouski@xxxxxxxxxxxxxx> writes:
>
>> I am trying to compile following code:
>>
>> ===lib.c====
>> extern int foo();
>>
>> int bar()
>> {
>>     int j = foo();
>>     return j;
>> }
>> ==========
>>
>> ===add.c===
>> static int i = 0;
>>
>> int foo()
>> {
>>     __asm__("mov 42, %ax");
>>     __asm__("mov %ax, i");
>>     return i;
>> }
>> ==========
>>
>> gcc -fPIC -c -o lib.o lib.c
>> gcc -fPIC -c -o add.o add.c
>> gcc -shared lib.o add.o -o lib.so
>> /usr/bin/ld: add.o: relocation R_X86_64_32S against `a local symbol'
>> can not be used when making a shared object; recompile with -fPIC
>>
>> I thought that is due static declaration but it removing don't solves
>> the problem. Is this expected behavior? If yes, can somebody explain?
>
> Compiling with -fPIC changes the assembler output to use different
> instructions.  You have written your asm statement using a non-PIC
> instruction sequence.  If you want this to work in a shared library, you
> need to use a PIC instruction sequence.
>
> You can find the PIC instruction sequence by compiling some code with
> --save-temps and looking at the .s file.  In this case it should be
> something like
>    mov %ax, i(%rip)
>
> Ian
>


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux