summaryrefslogtreecommitdiff
path: root/tools/m1n1-raw.ld
diff options
context:
space:
mode:
authormagh <magh@maghmogh.com>2023-03-06 18:44:55 -0600
committermagh <magh@maghmogh.com>2023-03-06 18:44:55 -0600
commite80d9d8871b325a04b18f90a9ea4bb7fd148fb25 (patch)
tree79dbdb8506b7ff1e92549188d1b94cfc0b3503ae /tools/m1n1-raw.ld
add m1n1HEADmaster
Diffstat (limited to 'tools/m1n1-raw.ld')
-rw-r--r--tools/m1n1-raw.ld150
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;