PHDRS { rodata PT_LOAD FILEHDR PHDRS FLAGS (4); btext PT_LOAD FLAGS (0x08000005); text PT_LOAD FLAGS (1); pltgot PT_LOAD; data PT_LOAD; random PT_OPENBSD_RANDOMIZE; syscalls PT_OPENBSD_SYSCALLS; relro PT_GNU_RELRO; dynamic PT_DYNAMIC; note PT_NOTE; } SECTIONS { /* RODATA */ . = 0 + SIZEOF_HEADERS; .dynsym : { *(.dynsym) } :rodata .gnu.hash : { *(.gnu.hash) } :rodata .dynstr : { *(.dynstr) } :rodata .rodata : { *(.rodata .rodata.*) } :rodata .eh_frame : { *(.eh_frame) } :rodata /* TEXT */ . = ALIGN(0x1000); .boot.text : { . = ALIGN(0x1000); boot_text_start = .; *(.boot.text) . = ALIGN(0x1000); boot_text_end = .; } :btext . = ALIGN(0x1000); .text : { *(.text .text.*) } :text /* PLT and GOT */ . = ALIGN(0x1000); .plt : { *(.plt) } :pltgot .got : { *(.got.plt) *(.got) } :pltgot /* RELRO DATA */ . = DATA_SEGMENT_ALIGN (0x1000, 0x1000); .openbsd.randomdata : { *(.openbsd.randomdata .openbsd.randomdata.*) } :data :relro :random .openbsd.syscalls : { *(.openbsd.syscalls .openbsd.syscalls.*) } :syscalls .data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro .dynamic : { *(.dynamic) } :data :relro :dynamic . = DATA_SEGMENT_RELRO_END (0, .); /* BOOTDATA */ . = ALIGN(0x1000); boot_data_start = .; .rela.dyn : { *(.rela.text .rela.text.*) *(.rela.rodata .rela.rodata.*) *(.rela.data .rela.data.*) *(.rela.got) *(.rela.bss .rela.bss.*) } :data /* XXX .rela.plt is unused but cannot delete: ld.bfd zeros DT_RELASZ then! */ .rela.plt : { *(.rela.plt) } :data .hash : { *(.hash) } :data .note : { *(.note.openbsd.*) } :data :note .boot.data : { *(.boot.data .boot.data.*) } :data boot_data_end = .; /* DATA */ . = ALIGN(0x1000); .data : { *(.data .data.*) } :data .bss : { *(.dynbss) *(.bss .bss.*) *(COMMON) } :data . = DATA_SEGMENT_END (.); /DISCARD/ : { *(.note.GNU-stack) } }