1PHDRS 2{ 3 rodata PT_LOAD FILEHDR PHDRS FLAGS (4); 4 btext PT_LOAD FLAGS (0x08000005); 5 text PT_LOAD; 6 data PT_LOAD; 7 random PT_OPENBSD_RANDOMIZE; 8 syscalls PT_OPENBSD_SYSCALLS; 9 relro PT_GNU_RELRO; 10 dynamic PT_DYNAMIC; 11 note PT_NOTE; 12} 13 14SECTIONS 15{ 16 /* RODATA */ 17 . = 0 + SIZEOF_HEADERS; 18 .ARM.exidx : { *(.ARM.exidx*) } :rodata 19 .dynsym : { *(.dynsym) } :rodata 20 .gnu.hash : { *(.gnu.hash) } :rodata 21 .dynstr : { *(.dynstr) } :rodata 22 .rodata : { *(.rodata .rodata.*) } :rodata 23 .eh_frame : { *(.eh_frame) } :rodata 24 25 /* TEXT */ 26 . = ALIGN(0x10000); 27 .boot.text : 28 { 29 . = ALIGN(0x1000); 30 boot_text_start = .; 31 *(.boot.text) 32 . = ALIGN(0x1000); 33 boot_text_end = .; 34 } :btext 35 . = ALIGN(0x1000); 36 .text : { *(.text .text.*) } :text 37 38 /* RELRO DATA */ 39 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000); 40 .openbsd.randomdata : 41 { 42 *(.openbsd.randomdata .openbsd.randomdata.*) 43 } :data :relro :random 44 .openbsd.syscalls : 45 { 46 *(.openbsd.syscalls .openbsd.syscalls.*) 47 } :syscalls 48 49 .data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro 50 .dynamic : { *(.dynamic) } :data :relro :dynamic 51 .got : { *(.got.plt) *(.got) } :data :relro 52 . = DATA_SEGMENT_RELRO_END (0, .); 53 54 /* BOOTDATA */ 55 . = ALIGN(0x1000); 56 boot_data_start = .; 57 .rel.dyn : 58 { 59 *(.rel.text .rel.text.*) 60 *(.rel.rodata .rel.rodata.*) 61 *(.rel.data .rel.data.*) 62 *(.rel.got) 63 *(.rel.bss .rel.bss.*) 64 } :data 65/* XXX .rel.plt is unused but cannot delete: ld.bfd zeros DT_RELASZ then! */ 66 .rel.plt : { *(.rel.plt) } :data 67 .hash : { *(.hash) } :data 68 .note : { *(.note.openbsd.*) } :data :note 69 .boot.data : { *(.boot.data .boot.data.*) } :data 70 boot_data_end = .; 71 72 /* DATA */ 73 . = ALIGN(0x1000); 74 .data : { *(.data .data.*) } :data 75 .bss : { *(.dynbss) *(.bss .bss.*) *(COMMON) } :data 76 . = DATA_SEGMENT_END (.); 77 78 /DISCARD/ : { *(.note.GNU-stack) } 79} 80