Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / x86 / tools / calc_run_size.sh
1 #!/bin/sh
2 #
3 # Calculate the amount of space needed to run the kernel, including room for
4 # the .bss and .brk sections.
5 #
6 # Usage:
7 # objdump -h a.out | sh calc_run_size.sh
8
9 NUM='\([0-9a-fA-F]*[ \t]*\)'
10 OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"$NUM$NUM$NUM$NUM"'.*/\1\4/p')
11 if [ -z "$OUT" ] ; then
12         echo "Never found .bss or .brk file offset" >&2
13         exit 1
14 fi
15
16 OUT=$(echo ${OUT# })
17 sizeA=$(printf "%d" 0x${OUT%% *})
18 OUT=${OUT#* }
19 offsetA=$(printf "%d" 0x${OUT%% *})
20 OUT=${OUT#* }
21 sizeB=$(printf "%d" 0x${OUT%% *})
22 OUT=${OUT#* }
23 offsetB=$(printf "%d" 0x${OUT%% *})
24
25 run_size=$(( $offsetA + $sizeA + $sizeB ))
26
27 # BFD linker shows the same file offset in ELF.
28 if [ "$offsetA" -ne "$offsetB" ] ; then
29         # Gold linker shows them as consecutive.
30         endB=$(( $offsetB + $sizeB ))
31         if [ "$endB" != "$run_size" ] ; then
32                 printf "sizeA: 0x%x\n" $sizeA >&2
33                 printf "offsetA: 0x%x\n" $offsetA >&2
34                 printf "sizeB: 0x%x\n" $sizeB >&2
35                 printf "offsetB: 0x%x\n" $offsetB >&2
36                 echo ".bss and .brk are non-contiguous" >&2
37                 exit 1
38         fi
39 fi
40
41 printf "%d\n" $run_size
42 exit 0