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