123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #!/bin/sh
- #
- # Calculate the amount of space needed to run the kernel, including room for
- # the .bss and .brk sections.
- #
- # Usage:
- # objdump -h a.out | sh calc_run_size.sh
- NUM='\([0-9a-fA-F]*[ \t]*\)'
- OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"$NUM$NUM$NUM$NUM"'.*/\1\4/p')
- if [ -z "$OUT" ] ; then
- echo "Never found .bss or .brk file offset" >&2
- exit 1
- fi
- OUT=$(echo ${OUT# })
- sizeA=$(printf "%d" 0x${OUT%% *})
- OUT=${OUT#* }
- offsetA=$(printf "%d" 0x${OUT%% *})
- OUT=${OUT#* }
- sizeB=$(printf "%d" 0x${OUT%% *})
- OUT=${OUT#* }
- offsetB=$(printf "%d" 0x${OUT%% *})
- run_size=$(( $offsetA + $sizeA + $sizeB ))
- # BFD linker shows the same file offset in ELF.
- if [ "$offsetA" -ne "$offsetB" ] ; then
- # Gold linker shows them as consecutive.
- endB=$(( $offsetB + $sizeB ))
- if [ "$endB" != "$run_size" ] ; then
- printf "sizeA: 0x%x\n" $sizeA >&2
- printf "offsetA: 0x%x\n" $offsetA >&2
- printf "sizeB: 0x%x\n" $sizeB >&2
- printf "offsetB: 0x%x\n" $offsetB >&2
- echo ".bss and .brk are non-contiguous" >&2
- exit 1
- fi
- fi
- printf "%d\n" $run_size
- exit 0
|