Files
s390-tools/zipl/boot/stage2.lds.S
Mikhail Zaslonko 73f211ecb1 zipl/boot: Combine linker scripts for CCW DASD dumpers
Combine linker scripts for single volume and multi-volume ECKD dumpers
to avoid duplicating. Use C preprocessor to define conditional symbols.
Cleanup the generic stage2 linker script(stage2.lds). Since it is still
used for FBA and TAPE dumpers (fba2dump and tape2dump) the .stage2dump.tail
section should be preserved.

Signed-off-by: Mikhail Zaslonko <zaslonko@linux.ibm.com>
Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com>
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
2024-11-22 17:20:01 +01:00

93 lines
2.1 KiB
ArmAsm

/*
* Memory layout for stage 2
* =========================
*
* General memory layout
* ---------------------
*
* 0x0000-0x1fff Lowcore
* 0x2000-0x4fff Sections (load): head, text, data, rodata, rodata.str
* 0x5000-0x5fff Sections: bss
* 0x6000-0x8fff Memory allocation (heap)
* 0x9000-0x9fff Memory to load stage3 parameter to
* 0xa000-0xdfff Memory to load stage3 to
* 0xe000-0xe3ff command line extra
* 0xe400-0xffff Stack
*
* Special memory locations
* ------------------------
*
* 0x78 Stage 2 description parameters
* 0x2018 Stage 2 entry point
* 0x4ff0 Stage 2 dump parameters (FBA or Tape standalone dump)
*/
#include "boot/loaders_layout.h"
SECTIONS
{
. = STAGE2_DESC;
__stage2_desc = .;
. = STAGE2_LOAD_ADDRESS;
.stage2.head : { *(.stage2.head) }
. = STAGE2_ENTRY;
.text.start : {
*(.text.start)
}
.text : { *(.text) }
__ex_table_start = .;
.ex_table : { *(.ex_table) }
__ex_table_stop = .;
.rodata : {*(.rodata) }
.data : { *(.data) }
__stage2_params = .;
. = STAGE2DUMP_TAIL_ADDRESS;
.stage2dump.tail : { *(.stage2dump.tail) }
__bss_start = .;
.bss : { *(.bss) }
__bss_stop = .;
. = STAGE2_HEAP_ADDRESS;
__heap_start = .;
.heap : {
. += STAGE2_HEAP_SIZE;
ASSERT(__heap_stop - __heap_start == STAGE2_HEAP_SIZE,
"Heap section doesn't conform to the described memory layout");
}
__heap_stop = .;
/* Memory reserved for stage3. Use a dummy section to check if changes
* in stage3 memory layout work with stage2 and vice versa.
*/
. = STAGE3_PARAMS_ADDRESS;
.stage3 : {
. += STAGE3_PARAMS_MAXIMUM_SIZE;
. = STAGE3_LOAD_ADDRESS - STAGE3_PARAMS_ADDRESS;
. += STAGE3_MAXIMUM_SIZE;
. = COMMAND_LINE_EXTRA - STAGE3_PARAMS_ADDRESS;
. += COMMAND_LINE_EXTRA_SIZE;
}
. = STAGE2_STACK_ADDRESS;
__stack_start = .;
.stack : {
. += STAGE2_STACK_SIZE;
ASSERT(__stack_end - __stack_start == STAGE2_STACK_SIZE,
"Stack section doesn't conform to the described memory layout");
}
__stack_end = .;
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)
*(.interp)
*(.note.GNU-stack)
*(.note.package)
}
}