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
|
/NUM_APPLETS.h
|
||||||
/usage_compressed.h
|
/usage_compressed.h
|
||||||
/usage.h
|
/usage.h
|
||||||
|
/common_bufsiz.h*
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
. ./.config || exit 1
|
. ./.config || exit 1
|
||||||
|
|
||||||
debug=false
|
debug=false
|
||||||
|
#debug=true
|
||||||
|
|
||||||
postcompile=false
|
postcompile=false
|
||||||
test x"$1" = x"--post" && { postcompile=true; shift; }
|
test x"$1" = x"--post" && { postcompile=true; shift; }
|
||||||
@ -62,6 +63,11 @@ generate_malloc_and_exit() {
|
|||||||
$exitcmd
|
$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?
|
# User does not want any funky stuff?
|
||||||
test x"$CONFIG_FEATURE_USE_BSS_TAIL" = x"y" || generate_std_and_exit
|
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?
|
# How much space between _end[] and next page?
|
||||||
PAGE_MASK=$((PAGE_SIZE-1))
|
PAGE_MASK=$((PAGE_SIZE-1))
|
||||||
COMMON_BUFSIZE=$(( (-END) & PAGE_MASK ))
|
TAIL_SIZE=$(( (-END) & PAGE_MASK ))
|
||||||
echo "COMMON_BUFSIZE = $COMMON_BUFSIZE bytes"
|
$debug && echo "TAIL_SIZE:$TAIL_SIZE bytes"
|
||||||
|
|
||||||
if test x"$method" != x"malloc"; then
|
if test x"$method" = x"1k" || test x"$method" = x"big"; then
|
||||||
if test $COMMON_BUFSIZE -lt 1024; then
|
if test $TAIL_SIZE -lt 1024; then
|
||||||
# _end[] has no enough space for bb_common_bufsiz1[]
|
# _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
|
rm -- "$common_bufsiz_h.1k.OK" 2>/dev/null
|
||||||
{ md5sum <.config | cut -d' ' -f1; stat -c "%Y" .config; } >"$common_bufsiz_h.1k.FAIL"
|
{ 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)!"
|
rm busybox_unstripped busybox 2>/dev/null
|
||||||
echo "Rerun make to build a binary which doesn't use it!"
|
# Note: here we can do either a "malloc" or "std" build.
|
||||||
rm busybox_unstripped busybox
|
# "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"
|
exitcmd="exit 1"
|
||||||
|
generate_malloc_and_exit
|
||||||
else
|
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
|
rm -- "$common_bufsiz_h.1k.FAIL" 2>/dev/null
|
||||||
echo $COMMON_BUFSIZE >"$common_bufsiz_h.1k.OK"
|
echo $TAIL_SIZE >"$common_bufsiz_h.1k.OK"
|
||||||
test $COMMON_BUFSIZE -gt $((1024+32)) && echo "Rerun make to use larger COMMON_BUFSIZE"
|
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
|
fi
|
||||||
fi
|
fi
|
||||||
@ -127,13 +154,12 @@ fi
|
|||||||
if test -f "$common_bufsiz_h.1k.OK"; then
|
if test -f "$common_bufsiz_h.1k.OK"; then
|
||||||
# Previous build succeeded fitting 1k into _end[].
|
# Previous build succeeded fitting 1k into _end[].
|
||||||
# Try bigger COMMON_BUFSIZE if possible.
|
# Try bigger COMMON_BUFSIZE if possible.
|
||||||
COMMON_BUFSIZE=`cat -- "$common_bufsiz_h.1k.OK"`
|
TAIL_SIZE=`cat -- "$common_bufsiz_h.1k.OK"`
|
||||||
# Round down a bit
|
round_down_COMMON_BUFSIZE $TAIL_SIZE
|
||||||
COMMON_BUFSIZE=$(( (COMMON_BUFSIZE-32) & 0xfffffe0 ))
|
|
||||||
COMMON_BUFSIZE=$(( COMMON_BUFSIZE < 1024 ? 1024 : COMMON_BUFSIZE ))
|
|
||||||
test $COMMON_BUFSIZE = 1024 && generate_1k_and_exit
|
test $COMMON_BUFSIZE = 1024 && generate_1k_and_exit
|
||||||
generate_big_and_exit $COMMON_BUFSIZE "big"
|
generate_big_and_exit $COMMON_BUFSIZE "big"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -f "$common_bufsiz_h.1k.FAIL"; then
|
if test -f "$common_bufsiz_h.1k.FAIL"; then
|
||||||
# Previous build FAILED to fit 1k into _end[].
|
# Previous build FAILED to fit 1k into _end[].
|
||||||
# Was it with same .config?
|
# 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 yes, then build a "malloced" version
|
||||||
if test x"$oldcfg" = x"$curcfg"; then
|
if test x"$oldcfg" = x"$curcfg"; then
|
||||||
echo "Will not try 1k build, it failed before. Touch .config to override"
|
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
|
generate_malloc_and_exit
|
||||||
fi
|
fi
|
||||||
# else: try 1k version
|
# else: try 1k version
|
||||||
@ -149,5 +176,6 @@ if test -f "$common_bufsiz_h.1k.FAIL"; then
|
|||||||
rm -- "$common_bufsiz_h.1k.FAIL"
|
rm -- "$common_bufsiz_h.1k.FAIL"
|
||||||
generate_1k_and_exit
|
generate_1k_and_exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# There was no 1k build yet. Try it.
|
# There was no 1k build yet. Try it.
|
||||||
generate_1k_and_exit
|
generate_1k_and_exit
|
||||||
|
Loading…
Reference in New Issue
Block a user