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