On Nov 19, 2013, at 9:34 AM, Stephen Polkowski <step...@centtech.com> 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
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel