Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 1 | |
| 2 | /* Maximum number of CPUs/cores */ |
| 3 | CPUS = 4; |
Aaron Durbin | e73dae4 | 2015-03-29 22:16:55 -0500 | [diff] [blame] | 4 | ENTRY(smm_handler_start); |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 5 | |
| 6 | SECTIONS |
| 7 | { |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 8 | /* This is the actual SMM handler. |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 9 | * |
| 10 | * We just put code, rodata, data and bss all in a row. |
| 11 | */ |
| 12 | . = 0xa0000; |
| 13 | .handler (.): { |
Julius Werner | ec5e5e0 | 2014-08-20 15:29:56 -0700 | [diff] [blame] | 14 | _program = .; |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 15 | /* Assembler stub */ |
| 16 | *(.handler) |
| 17 | |
| 18 | /* C code of the SMM handler */ |
| 19 | *(.text); |
| 20 | *(.text.*); |
| 21 | |
| 22 | /* C read-only data of the SMM handler */ |
| 23 | . = ALIGN(16); |
| 24 | *(.rodata) |
| 25 | *(.rodata.*) |
| 26 | |
| 27 | /* C read-write data of the SMM handler */ |
| 28 | . = ALIGN(4); |
| 29 | *(.data) |
Aaron Durbin | e73dae4 | 2015-03-29 22:16:55 -0500 | [diff] [blame] | 30 | *(.data.*) |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 31 | |
| 32 | /* C uninitialized data of the SMM handler */ |
| 33 | . = ALIGN(4); |
| 34 | *(.bss) |
Aaron Durbin | e73dae4 | 2015-03-29 22:16:55 -0500 | [diff] [blame] | 35 | *(.bss.*) |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 36 | *(.sbss) |
Aaron Durbin | e73dae4 | 2015-03-29 22:16:55 -0500 | [diff] [blame] | 37 | *(.sbss.*) |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 38 | |
Julius Werner | ec5e5e0 | 2014-08-20 15:29:56 -0700 | [diff] [blame] | 39 | /* What is this? (Something we don't need with -fno-common.) */ |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 40 | *(COMMON) |
| 41 | . = ALIGN(4); |
Julius Werner | ec5e5e0 | 2014-08-20 15:29:56 -0700 | [diff] [blame] | 42 | _eprogram = .; |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 43 | } |
| 44 | |
| 45 | /* We are using the ASEG interleaved to stuff the SMM handlers |
| 46 | * for all CPU cores in there. The jump table redirects the execution |
| 47 | * to the actual SMM handler |
| 48 | */ |
| 49 | . = 0xa8000 - (( CPUS - 1) * 0x400); |
| 50 | .jumptable : { |
Aaron Durbin | 58d5e21 | 2015-05-15 15:23:39 -0500 | [diff] [blame] | 51 | KEEP(*(.jumptable)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 52 | } |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 53 | |
| 54 | /DISCARD/ : { |
| 55 | *(.comment) |
| 56 | *(.note) |
| 57 | *(.note.*) |
Patrick Georgi | 9c41063 | 2014-06-25 17:54:54 +0200 | [diff] [blame] | 58 | *(.eh_frame) |
| 59 | *(.debug_*) |
Stefan Reinauer | debb11f | 2008-10-29 04:46:52 +0000 | [diff] [blame] | 60 | } |
| 61 | } |