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