jcs's openbsd hax
openbsd
1#!/bin/sh -
2
3random_uniform() {
4 local _upper_bound
5
6 if [[ $1 -gt 0 ]]; then
7 _upper_bound=$(($1 - 1))
8 else
9 _upper_bound=0
10 fi
11
12 echo `jot -r 1 0 $_upper_bound 2>/dev/null`
13}
14
15umask 007
16
17PAGE_SIZE=`sysctl -n hw.pagesize`
18PAD=$1
19GAPDUMMY=$2
20
21RANDOM1=`random_uniform $((3 * PAGE_SIZE))`
22RANDOM2=`random_uniform $PAGE_SIZE`
23RANDOM3=`random_uniform $PAGE_SIZE`
24RANDOM4=`random_uniform $PAGE_SIZE`
25RANDOM5=`random_uniform $PAGE_SIZE`
26
27cat > gap.link << __EOF__
28
29PHDRS {
30 text PT_LOAD FILEHDR PHDRS;
31 rodata PT_LOAD;
32 data PT_LOAD;
33 bss PT_LOAD;
34}
35
36SECTIONS {
37 .text : ALIGN($PAGE_SIZE) {
38 LONG($PAD);
39 . += $RANDOM1;
40 . = ALIGN($PAGE_SIZE);
41 endboot = .;
42 PROVIDE (endboot = .);
43 . = ALIGN($PAGE_SIZE);
44 . += $RANDOM2;
45 . = ALIGN(16);
46 *(.text .text.*)
47 } :text =$PAD
48
49 .rodata : {
50 LONG($PAD);
51 . += $RANDOM3;
52 . = ALIGN(16);
53 *(.rodata .rodata.*)
54 } :rodata =$PAD
55
56 .data : {
57 LONG($PAD);
58 . = . + $RANDOM4; /* fragment of page */
59 . = ALIGN(16);
60 *(.data .data.*)
61 } :data =$PAD
62
63 .bss : {
64 . = . + $RANDOM5; /* fragment of page */
65 . = ALIGN(16);
66 *(.bss .bss.*)
67 } :bss
68}
69__EOF__
70
71$LD $LDFLAGS -r gap.link $GAPDUMMY -o gap.o