diff --git a/src/cpu/x86/smm/smm.ld b/src/cpu/x86/smm/smm.ld index 5d316a8f4d..c1981610b8 100644 --- a/src/cpu/x86/smm/smm.ld +++ b/src/cpu/x86/smm/smm.ld @@ -1,6 +1,7 @@ /* Maximum number of CPUs/cores */ CPUS = 4; +ENTRY(smm_handler_start); SECTIONS { @@ -25,11 +26,14 @@ SECTIONS /* C read-write data of the SMM handler */ . = ALIGN(4); *(.data) + *(.data.*) /* C uninitialized data of the SMM handler */ . = ALIGN(4); *(.bss) + *(.bss.*) *(.sbss) + *(.sbss.*) /* What is this? */ *(COMMON) diff --git a/src/cpu/x86/smm/smm_tseg.ld b/src/cpu/x86/smm/smm_tseg.ld index 99f2aa0a67..b57461caa0 100644 --- a/src/cpu/x86/smm/smm_tseg.ld +++ b/src/cpu/x86/smm/smm_tseg.ld @@ -1,5 +1,6 @@ /* Maximum number of CPUs/cores */ CPUS = 16; +ENTRY(smm_handler_start); SECTIONS { @@ -52,11 +53,14 @@ SECTIONS /* C read-write data of the SMM handler */ . = ALIGN(4); *(.data) + *(.data.*) /* C uninitialized data of the SMM handler */ . = ALIGN(4); *(.bss) + *(.bss.*) *(.sbss) + *(.sbss.*) *(COMMON) . = ALIGN(4); diff --git a/src/cpu/x86/smm/smmhandler.S b/src/cpu/x86/smm/smmhandler.S index 5d3aae3701..611c0f3fa3 100644 --- a/src/cpu/x86/smm/smmhandler.S +++ b/src/cpu/x86/smm/smmhandler.S @@ -75,6 +75,7 @@ * * All the bad magic is not all that bad after all. */ +.global smm_handler_start smm_handler_start: movw $(smm_gdtptr16 - smm_handler_start + SMM_HANDLER_OFFSET), %bx data32 lgdt %cs:(%bx) diff --git a/src/cpu/x86/smm/smmhandler_tseg.S b/src/cpu/x86/smm/smmhandler_tseg.S index c9d78b9dce..ee8bd26468 100644 --- a/src/cpu/x86/smm/smmhandler_tseg.S +++ b/src/cpu/x86/smm/smmhandler_tseg.S @@ -91,6 +91,7 @@ * * All the bad magic is not all that bad after all. */ +.global smm_handler_start smm_handler_start: movl $(TSEG_BAR), %eax /* Get TSEG base from PCIE */ addr32 movl (%eax), %edx /* Save TSEG_BAR in %edx */