On Jul 25, 2014, at 4:07 AM, Varad Gautam varadgautam@gmail.com wrote:
The same problem appears when I build BeagleBoardPkg: AutoGen.* contains proper PCDs, so does the build report. Yet, objdump shows PcdGet calls to return 0. -objdump snippets- ArmPlatformPrePiUnicore.lib: FixedPcdGet32 (PcdFdBaseAddress); 5e: f04f 2080 mov.w r0, #2147516416 ; 0x80008000 62: f7ff fffe bl 0 <PrePiMain> ... StacksSize = PcdGet32 (PcdCPUCorePrimaryStackSize); bc: 4b6e ldr r3, [pc, #440] ; (278 <PrePiMain+0x278>) be: 681b ldr r3, [r3, #0] c0: 9325 str r3, [sp, #148] ; 0x94
This looks like a GOT load. The address pc+440 is the address of the pointer to the global. What does pc+440 point to?
Maybe your toolchain is having an issue with GOT?
Thanks,
Andrew Fish
PS If you reference a global you were not compiled with, but linked with it becomes an indirect access. this is clang, but you get the idea (I used armv6 as armv7 emits movw/movt). The linker would patch L_global$non_lazy_ptr with a pointer to the global at link time.
~/work/Compiler>cat got.c
extern int global;
int test() { return global; }
~/work/Compiler>clang -arch armv6 -Os -S got.c ~/work/Compiler>cat got.S .section __TEXT,__text,regular,pure_instructions .section __TEXT,__textcoal_nt,coalesced,pure_instructions .section __TEXT,__const_coal,coalesced .section __TEXT,__picsymbolstub4,symbol_stubs,none,16 .section __TEXT,__StaticInit,regular,pure_instructions .section __TEXT,__cstring,cstring_literals .syntax unified .section __TEXT,__text,regular,pure_instructions .globl _test .align 2 _test: @ @test @ BB#0: ldr r0, LCPI0_0 LPC0_0: ldr r0, [pc, r0] ldr r0, [r0] bx lr .align 2 @ BB#1: .data_region LCPI0_0: .long L_global$non_lazy_ptr-(LPC0_0+8) .end_data_region
.section __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers .align 2 L_global$non_lazy_ptr: .indirect_symbol _global .long 0
.subsections_via_symbols
I have tried using a different toolchain :). What else is possible? I am looking into the BaseTools build process. Could someone please verify this for BeagleBoardPkg?
Thanks, Varad