src/sys/conf/makegap.sh

72 lines
1.1 KiB
Bash

#!/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 $LDFLAGS -r gap.link $GAPDUMMY -o gap.o