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
72