diff options
| author | magh <magh@maghmogh.com> | 2023-03-06 18:44:55 -0600 |
|---|---|---|
| committer | magh <magh@maghmogh.com> | 2023-03-06 18:44:55 -0600 |
| commit | e80d9d8871b325a04b18f90a9ea4bb7fd148fb25 (patch) | |
| tree | 79dbdb8506b7ff1e92549188d1b94cfc0b3503ae /tools/m1n1-raw.ld | |
Diffstat (limited to 'tools/m1n1-raw.ld')
| -rw-r--r-- | tools/m1n1-raw.ld | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/tools/m1n1-raw.ld b/tools/m1n1-raw.ld new file mode 100644 index 0000000..56ebfe4 --- /dev/null +++ b/tools/m1n1-raw.ld @@ -0,0 +1,150 @@ +ENTRY(_start) + +_stack_size = 0x20000; + +/* 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.*) + *(.rela.rodata) + *(.rela.rodata*) + *(.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 + .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; |
