Re: How does GCC access global variables on x86

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

 



On Tue, Feb 7, 2012 at 12:09 PM, Andrew Haley <aph@xxxxxxxxxx> wrote:
> On 02/07/2012 04:56 PM, Xin Tong wrote:
>> I am wondering how gcc accesses global variables on x86. from the code
>> i have seen so far, it seems to use the %RIP as the base register. Is
>> it always like this?
>>
>>   4006f9:       f0 80 0d bf 0b 20 00    lock orb $0x0,0x200bbf(%rip)
>>      # 6012c0 <t2lockor>
>>   400700:       00
>>
>> t2lockor is a global variables.
>
> This is x86_64, I think.  The answer is that it depends on whether you
> are using PIC, and the model you're using.  Try -mcmodel=large for a
> variation.  PC-relative loads are convenient for everything except the
> large memory model.

What are large memory model and PIC, can you please briefly explain.
the PC of instructions are going to change in the linkage stage. so
the linker patches the offset if rip is used to access the global
variables.

Thanks

Xin

>
> Andrew.
>



[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