2021-12-17 12:31:36 +00:00
|
|
|
ENTRY(_start)
|
|
|
|
|
|
|
|
_stack_size = 0x20000;
|
2024-08-25 07:27:56 +00:00
|
|
|
_stack_size_el3 = 0x8000;
|
2021-12-17 12:31:36 +00:00
|
|
|
|
|
|
|
/* We are actually relocatable */
|
|
|
|
. = 0;
|
|
|
|
|
|
|
|
PHDRS
|
|
|
|
{
|
|
|
|
hdr PT_LOAD;
|
|
|
|
text PT_LOAD;
|
|
|
|
rodata PT_LOAD;
|
|
|
|
data PT_LOAD;
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTIONS {
|
|
|
|
_base = .;
|
|
|
|
|
|
|
|
_text_start = .;
|
|
|
|
.init : ALIGN(0x4000) {
|
|
|
|
*(.init)
|
|
|
|
*(.init.*)
|
|
|
|
} :text
|
|
|
|
.text : ALIGN(0x4000) {
|
|
|
|
*(.text)
|
|
|
|
*(.text.*)
|
|
|
|
. = ALIGN(8);
|
|
|
|
*(.got.plt)
|
|
|
|
. = ALIGN(0x4000);
|
|
|
|
} :text
|
|
|
|
_text_size = . - _text_start;
|
|
|
|
.rodata : ALIGN(0x4000) {
|
|
|
|
*(.rodata)
|
|
|
|
*(.rodata.*)
|
|
|
|
. = ALIGN(8);
|
|
|
|
} :rodata
|
|
|
|
.rela.dyn : {
|
|
|
|
_rela_start = .;
|
|
|
|
*(.rela)
|
|
|
|
*(.rela.text)
|
|
|
|
*(.rela.got)
|
|
|
|
*(.rela.plt)
|
|
|
|
*(.rela.bss)
|
|
|
|
*(.rela.ifunc)
|
|
|
|
*(.rela.text.*)
|
|
|
|
*(.rela.data)
|
|
|
|
*(.rela.data.*)
|
2022-03-09 11:47:42 +00:00
|
|
|
*(.rela.rodata)
|
|
|
|
*(.rela.rodata*)
|
2021-12-17 12:31:36 +00:00
|
|
|
*(.rela.dyn)
|
|
|
|
_rela_end = .;
|
|
|
|
. = ALIGN(0x4000);
|
|
|
|
} :rodata
|
|
|
|
_rodata_end = .;
|
|
|
|
_data_start = .;
|
|
|
|
.data : ALIGN(0x4000) {
|
|
|
|
*(.data)
|
|
|
|
*(.data.*)
|
|
|
|
. = ALIGN(8);
|
|
|
|
_got_start = .;
|
|
|
|
*(.got)
|
|
|
|
_got_end = .;
|
|
|
|
. = ALIGN(0x4000);
|
|
|
|
_file_end = .;
|
|
|
|
} :data
|
|
|
|
.bss : ALIGN(0x4000) {
|
|
|
|
_bss_start = .;
|
|
|
|
*(.bss)
|
|
|
|
*(.bss.*)
|
|
|
|
*(.dynbss)
|
|
|
|
*(COMMON)
|
|
|
|
_bss_end = .;
|
|
|
|
} : data
|
2024-08-25 07:27:56 +00:00
|
|
|
.stack_el3 : ALIGN(0x4000) {
|
|
|
|
PROVIDE(_stack_top_el3 = .);
|
|
|
|
. += _stack_size_el3 - 8;
|
|
|
|
QUAD(0x5176694b43415453);
|
|
|
|
PROVIDE(_stack_bot_el3 = .);
|
|
|
|
}
|
2021-12-17 12:31:36 +00:00
|
|
|
.stack : ALIGN(0x4000) {
|
|
|
|
PROVIDE(_stack_top = .);
|
|
|
|
. += _stack_size - 8;
|
|
|
|
QUAD(0x544f424b43415453);
|
|
|
|
PROVIDE(_stack_bot = .);
|
|
|
|
} :data
|
|
|
|
ASSERT(ALIGN(0x4000) == ., "Stack size is not aligned!")
|
|
|
|
_data_size = . - _data_start;
|
|
|
|
_end = .;
|
|
|
|
_payload_start = .;
|
|
|
|
|
|
|
|
.symtab 0 : { *(.symtab) }
|
|
|
|
.strtab 0 : { *(.strtab) }
|
|
|
|
.shstrtab 0 : { *(.shstrtab) }
|
|
|
|
|
|
|
|
/DISCARD/ : {
|
|
|
|
*(.discard)
|
|
|
|
*(.discard.*)
|
|
|
|
*(.interp .dynamic)
|
|
|
|
*(.dynsym .dynstr .hash .gnu.hash)
|
|
|
|
*(.eh_frame)
|
|
|
|
*(.gnu.version*)
|
|
|
|
*(.note*)
|
|
|
|
*(.comment*)
|
|
|
|
}
|
|
|
|
|
|
|
|
.empty (NOLOAD) : {
|
|
|
|
*(.plt) *(.plt.*) *(.iplt) *(.igot)
|
|
|
|
*(.data.rel.ro)
|
|
|
|
}
|
|
|
|
ASSERT(SIZEOF(.empty) == 0, "Unexpected sections detected!")
|
|
|
|
|
|
|
|
.got.plt (NOLOAD) : {
|
|
|
|
*(.got.plt)
|
|
|
|
}
|
|
|
|
ASSERT(SIZEOF(.got.plt) == 0 || SIZEOF(.got.plt) == 0x18, "Unexpected GOT PLT detected!")
|
|
|
|
|
|
|
|
.stab 0 : { *(.stab) }
|
|
|
|
.stabstr 0 : { *(.stabstr) }
|
|
|
|
.stab.excl 0 : { *(.stab.excl) }
|
|
|
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
|
|
.stab.index 0 : { *(.stab.index) }
|
|
|
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
|
|
.comment 0 : { *(.comment) }
|
|
|
|
.debug 0 : { *(.debug) }
|
|
|
|
.line 0 : { *(.line) }
|
|
|
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
|
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
|
|
.debug_aranges 0 : { *(.debug_aranges) }
|
|
|
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
|
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
|
|
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
|
|
.debug_line 0 : { *(.debug_line) }
|
|
|
|
.debug_frame 0 : { *(.debug_frame) }
|
|
|
|
.debug_str 0 : { *(.debug_str) }
|
|
|
|
.debug_loc 0 : { *(.debug_loc) }
|
|
|
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
|
|
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
|
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
|
|
.debug_typenames 0 : { *(.debug_typenames) }
|
|
|
|
.debug_varnames 0 : { *(.debug_varnames) }
|
|
|
|
.debug_pubtypes 0 : { *(.debug_pubtypes) }
|
|
|
|
.debug_ranges 0 : { *(.debug_ranges) }
|
|
|
|
.debug_types 0 : { *(.debug_types) }
|
|
|
|
.debug_addr 0 : { *(.debug_addr) }
|
|
|
|
.debug_line_str 0 : { *(.debug_line_str) }
|
|
|
|
.debug_loclists 0 : { *(.debug_loclists) }
|
|
|
|
.debug_macro 0 : { *(.debug_macro) }
|
|
|
|
.debug_names 0 : { *(.debug_names) }
|
|
|
|
.debug_rnglists 0 : { *(.debug_rnglists) }
|
|
|
|
.debug_str_offsets 0 : { *(.debug_str_offsets) }
|
|
|
|
.debug_sup 0 : { *(.debug_sup) }
|
|
|
|
}
|
|
|
|
|
|
|
|
PROT_READ = 0x01;
|
|
|
|
PROT_WRITE = 0x02;
|
|
|
|
PROT_EXECUTE = 0x04;
|