| /* Maximum number of CPUs/cores */ |
| CPUS = 16; |
| |
| SECTIONS |
| { |
| /* This is the actual SMM handler. |
| * |
| * We just put code, rodata, data and bss all in a row. |
| */ |
| .handler (.): { |
| /* Assembler stub */ |
| *(.handler) |
| |
| /* C code of the SMM handler */ |
| *(.text); |
| *(.text.*); |
| |
| /* C read-only data of the SMM handler */ |
| . = ALIGN(16); |
| *(.rodata) |
| *(.rodata.*) |
| *(.data.rel.ro.*) |
| |
| /* C read-write data of the SMM handler */ |
| . = ALIGN(4); |
| *(.data) |
| |
| /* C uninitialized data of the SMM handler */ |
| . = ALIGN(4); |
| *(.bss) |
| *(.sbss) |
| |
| /* What is this? */ |
| *(COMMON) |
| . = ALIGN(4); |
| } |
| |
| /* We are using the TSEG interleaved to stuff the SMM handlers |
| * for all CPU cores in there. The jump table redirects the execution |
| * to the actual SMM handler |
| */ |
| . = 0x8000 - (( CPUS - 1) * 0x400); |
| .jumptable : { |
| *(.jumptable) |
| } |
| |
| /* Data used in early SMM TSEG handler. */ |
| . = 0x8400; |
| .earlydata : { |
| *(.earlydata) |
| } |
| |
| /DISCARD/ : { |
| *(.comment) |
| *(.note) |
| *(.note.*) |
| } |
| } |