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