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