Thank you Andrew. The pc relative addressing mode was the trick!
movl $1, EXCEPTION_EXECUTE_HANDLER(%rip)
Regards,
Stephen
Andrew Fish wrote:
>
> On Nov 19, 2013, at 9:34 AM, Stephen Polkowski <[email protected]
> <mailto:[email protected]>> wrote:
>
>> Hello,
>>
>> I'm building a #GP fault handler for a shell application. I named my
>> file __gp_fault_handler.S and I added it to my inf file. Everything
>> compiles and
>> the exception handler actually works.
>>
>> However, now I want to set a global variable that is declared in a
>> separate "C" file. When I assemble my file GAS uses a R_X86_64_32S
>> offset to the
>> variable. In my other "C" files I see that the compiler uses a
>> R_X86_64_64 offset
>> to my variable instead.
>>
>> How can I get the GNU assembler to output a R_X86_64_64 offset in the
>> EDK2 build?
>>
>
> Well I use clang so the answer may not be exactly the same….
>
> There are pseudo addressing modes for dealing with GOT (Global Offset
> Table) in the assembler. So I’m guessing you just need to use that
> addressing mode. So you can use something like
> _gGlobalName@GOTPCREL(%rip) to get the address of the global address
> into a register and then you can read the data. The offset will get
> resolved a link time.
>
> Here is a clang example (-S means make assemble file, -Os is optimize
> for size).
>
> ~/work/Compiler>cat global.c
>
> extern int gX;
>
> int main()
> {
> return gX;
> }
>
> ~/work/Compiler>clang -S global.c -Os
> ~/work/Compiler>cat global.S
> .section __TEXT,__text,regular,pure_instructions
> .globl _main
> _main: ## @main
> .cfi_startproc
> ## BB#0:
> pushq %rbp
> Ltmp2:
> .cfi_def_cfa_offset 16
> Ltmp3:
> .cfi_offset %rbp, -16
> movq %rsp, %rbp
> Ltmp4:
> .cfi_def_cfa_register %rbp
> movq _gX@GOTPCREL(%rip), %rax
> movl (%rax), %eax
> popq %rbp
> ret
> .cfi_endproc
>
>
> .subsections_via_symbols
>
> I don’t know of any code in the edk2 that does this, as it is much
> simpler to just place the global in the assembly file. Then all you
> have to do is _gGlobalName(%rip) to get the address of the global.
>
> Thanks,
>
> Andrew Fish
>
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Shape the Mobile Experience: Free Subscription
> Software experts and developers: Be at the forefront of tech innovation.
> Intel(R) Software Adrenaline delivers strategic insight and game-changing
> conversations that shape the rapidly evolving mobile landscape. Sign up now.
> http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
--
Stephen Polkowski
Centaur Technology
Austin, TX
(512) 418-5730
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel