generate_BUFSIZ.sh: yet another tweak
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
3e134ebf6a
commit
4c8fa34417
1
include/.gitignore
vendored
1
include/.gitignore
vendored
@ -8,3 +8,4 @@
|
||||
/NUM_APPLETS.h
|
||||
/usage_compressed.h
|
||||
/usage.h
|
||||
/common_bufsiz.h*
|
||||
|
@ -6,6 +6,7 @@
|
||||
. ./.config || exit 1
|
||||
|
||||
debug=false
|
||||
#debug=true
|
||||
|
||||
postcompile=false
|
||||
test x"$1" = x"--post" && { postcompile=true; shift; }
|
||||
@ -62,6 +63,11 @@ generate_malloc_and_exit() {
|
||||
$exitcmd
|
||||
}
|
||||
|
||||
round_down_COMMON_BUFSIZE() {
|
||||
COMMON_BUFSIZE=$(( ($1-32) & 0xfffffe0 ))
|
||||
COMMON_BUFSIZE=$(( COMMON_BUFSIZE < 1024 ? 1024 : COMMON_BUFSIZE ))
|
||||
}
|
||||
|
||||
# User does not want any funky stuff?
|
||||
test x"$CONFIG_FEATURE_USE_BSS_TAIL" = x"y" || generate_std_and_exit
|
||||
|
||||
@ -102,22 +108,43 @@ if $postcompile; then
|
||||
|
||||
# How much space between _end[] and next page?
|
||||
PAGE_MASK=$((PAGE_SIZE-1))
|
||||
COMMON_BUFSIZE=$(( (-END) & PAGE_MASK ))
|
||||
echo "COMMON_BUFSIZE = $COMMON_BUFSIZE bytes"
|
||||
TAIL_SIZE=$(( (-END) & PAGE_MASK ))
|
||||
$debug && echo "TAIL_SIZE:$TAIL_SIZE bytes"
|
||||
|
||||
if test x"$method" != x"malloc"; then
|
||||
if test $COMMON_BUFSIZE -lt 1024; then
|
||||
if test x"$method" = x"1k" || test x"$method" = x"big"; then
|
||||
if test $TAIL_SIZE -lt 1024; then
|
||||
# _end[] has no enough space for bb_common_bufsiz1[]
|
||||
echo "Warning! Space in _end[] is too small ($TAIL_SIZE bytes)!"
|
||||
echo "Rerun make to build a binary which doesn't use it!"
|
||||
rm -- "$common_bufsiz_h.1k.OK" 2>/dev/null
|
||||
{ md5sum <.config | cut -d' ' -f1; stat -c "%Y" .config; } >"$common_bufsiz_h.1k.FAIL"
|
||||
echo "Warning! Space in _end[] is too small ($COMMON_BUFSIZE bytes)!"
|
||||
echo "Rerun make to build a binary which doesn't use it!"
|
||||
rm busybox_unstripped busybox
|
||||
rm busybox_unstripped busybox 2>/dev/null
|
||||
# Note: here we can do either a "malloc" or "std" build.
|
||||
# "malloc" gives a bit bigger code:
|
||||
# text bss filename
|
||||
# 804355 5385 busybox.std
|
||||
# 804618 4361 busybox.malloc
|
||||
# but may have a smaller .bss (not guaranteed!). Use "pmap -x" to verify.
|
||||
exitcmd="exit 1"
|
||||
generate_malloc_and_exit
|
||||
else
|
||||
PREV_SIZE=1024
|
||||
test x"$method" = x"big" && PREV_SIZE=`cat -- "$common_bufsiz_h.1k.OK"`
|
||||
round_down_COMMON_BUFSIZE $PREV_SIZE
|
||||
PREV_BUFSIZE=$COMMON_BUFSIZE
|
||||
|
||||
rm -- "$common_bufsiz_h.1k.FAIL" 2>/dev/null
|
||||
echo $COMMON_BUFSIZE >"$common_bufsiz_h.1k.OK"
|
||||
test $COMMON_BUFSIZE -gt $((1024+32)) && echo "Rerun make to use larger COMMON_BUFSIZE"
|
||||
echo $TAIL_SIZE >"$common_bufsiz_h.1k.OK"
|
||||
round_down_COMMON_BUFSIZE $TAIL_SIZE
|
||||
# emit message only if COMMON_BUFSIZE is indeed larger
|
||||
test $COMMON_BUFSIZE -gt $PREV_BUFSIZE \
|
||||
&& echo "Rerun make to use larger COMMON_BUFSIZE ($COMMON_BUFSIZE)"
|
||||
#TODO: test $PREV_BUFSIZE -lt $TAIL_SIZE && PANIC!!!
|
||||
#Code size with COMMON_BUFSIZE > 1024 may be bigger than code with COMMON_BUFSIZE = 1024!
|
||||
#(currently we just hope "-32 and round down to 32" saves us)
|
||||
|
||||
test $COMMON_BUFSIZE = 1024 && generate_1k_and_exit
|
||||
generate_big_and_exit $COMMON_BUFSIZE "big"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -127,13 +154,12 @@ fi
|
||||
if test -f "$common_bufsiz_h.1k.OK"; then
|
||||
# Previous build succeeded fitting 1k into _end[].
|
||||
# Try bigger COMMON_BUFSIZE if possible.
|
||||
COMMON_BUFSIZE=`cat -- "$common_bufsiz_h.1k.OK"`
|
||||
# Round down a bit
|
||||
COMMON_BUFSIZE=$(( (COMMON_BUFSIZE-32) & 0xfffffe0 ))
|
||||
COMMON_BUFSIZE=$(( COMMON_BUFSIZE < 1024 ? 1024 : COMMON_BUFSIZE ))
|
||||
TAIL_SIZE=`cat -- "$common_bufsiz_h.1k.OK"`
|
||||
round_down_COMMON_BUFSIZE $TAIL_SIZE
|
||||
test $COMMON_BUFSIZE = 1024 && generate_1k_and_exit
|
||||
generate_big_and_exit $COMMON_BUFSIZE "big"
|
||||
fi
|
||||
|
||||
if test -f "$common_bufsiz_h.1k.FAIL"; then
|
||||
# Previous build FAILED to fit 1k into _end[].
|
||||
# Was it with same .config?
|
||||
@ -142,6 +168,7 @@ if test -f "$common_bufsiz_h.1k.FAIL"; then
|
||||
# If yes, then build a "malloced" version
|
||||
if test x"$oldcfg" = x"$curcfg"; then
|
||||
echo "Will not try 1k build, it failed before. Touch .config to override"
|
||||
# Note: here we can do either a "malloc" or "std" build.
|
||||
generate_malloc_and_exit
|
||||
fi
|
||||
# else: try 1k version
|
||||
@ -149,5 +176,6 @@ if test -f "$common_bufsiz_h.1k.FAIL"; then
|
||||
rm -- "$common_bufsiz_h.1k.FAIL"
|
||||
generate_1k_and_exit
|
||||
fi
|
||||
|
||||
# There was no 1k build yet. Try it.
|
||||
generate_1k_and_exit
|
||||
|
Loading…
Reference in New Issue
Block a user