jcs's openbsd hax
openbsd
1PHDRS
2{
3 rodata PT_LOAD FILEHDR PHDRS FLAGS (4);
4 btext PT_LOAD FLAGS (0x08000005);
5 text PT_LOAD FLAGS (1);
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 . = 0 + SIZEOF_HEADERS;
17 /* 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 .boot.text :
27 {
28 . = ALIGN(0x1000);
29 boot_text_start = .;
30 *(.boot.text)
31 . = ALIGN(0x1000);
32 boot_text_end = .;
33 } :btext
34 . = ALIGN(0x1000);
35 .text : { *(.text .text.*) } :text
36
37 /* RELRO DATA */
38 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
39 .openbsd.randomdata :
40 {
41 *(.openbsd.randomdata .openbsd.randomdata.*)
42 } :data :relro :random
43 .openbsd.syscalls :
44 {
45 *(.openbsd.syscalls .openbsd.syscalls.*)
46 } :syscalls
47
48 .data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
49 .dynamic : { *(.dynamic) } :data :relro :dynamic
50 .got : { *(.got.plt) *(.got) } :data :relro
51 . = DATA_SEGMENT_RELRO_END (0, .);
52
53 /* BOOTDATA */
54 boot_data_start = .;
55 .rela.dyn :
56 {
57 *(.rela.text .rela.text.*)
58 *(.rela.rodata .rela.rodata.*)
59 *(.rela.data .rela.data.*)
60 *(.rela.got)
61 *(.rela.bss .rela.bss.*)
62 } :data
63/* XXX .rela.plt is unused but cannot delete: ld.bfd zeros DT_RELASZ then! */
64 .rela.plt : { *(.rela.plt) } :data
65 .hash : { *(.hash) } :data
66 .note : { *(.note.openbsd.*) } :data :note
67 .boot.data : { *(.boot.data .boot.data.*) } :data
68 boot_data_end = .;
69
70 /* DATA */
71 . = ALIGN(0x1000);
72 .sdata : { *(.sdata .sdata.*) } :data
73 .data : { *(.data .data.*) } :data
74 .sbss : { *(.sbss .sbss.*) } :data
75 .bss : { *(.dynbss) *(.bss .bss.*) *(COMMON) } :data
76 . = DATA_SEGMENT_END (.);
77
78 /DISCARD/ : { *(.note.GNU-stack) }
79}