2 # Called from top-level directory a-la
4 # scripts/generate_BUFSIZ.sh include/common_bufsiz.h
12 test x"$NM" = x"" && NM="${CONFIG_CROSS_COMPILER_PREFIX}nm"
13 test x"$CC" = x"" && CC="${CONFIG_CROSS_COMPILER_PREFIX}gcc"
17 test -f "$1" && diff "$1.$$" "$1" >/dev/null && rm "$1.$$" && return
21 generate_std_and_exit() {
22 $debug && echo "Default: bb_common_bufsiz1[] in bss"
24 echo "enum { COMMON_BUFSIZE = 1024 };"
25 echo "extern char bb_common_bufsiz1[];"
26 echo "#define setup_common_bufsiz() ((void)0)"
27 } | regenerate "$common_bufsiz_h"
31 # User does not want any funky stuff?
32 test x"$CONFIG_FEATURE_USE_BSS_TAIL" = x"y" || generate_std_and_exit
34 test -f busybox_unstripped || {
35 # We did not try anything yet
36 $debug && echo "Will try to fit bb_common_bufsiz1[] into _end[]"
38 echo "enum { COMMON_BUFSIZE = 1024 };"
39 echo "extern char _end[]; /* linker-provided label */"
40 echo "#define bb_common_bufsiz1 _end"
41 echo "#define setup_common_bufsiz() ((void)0)"
42 } | regenerate "$common_bufsiz_h"
43 echo 1024 >"$common_bufsiz_h.BUFSIZE"
48 END=`$NM busybox_unstripped | grep ' . _end$'| cut -d' ' -f1`
49 test x"$END" = x"" && generate_std_and_exit
50 $debug && echo "END:0x$END $((0x$END))"
56 #if defined(PAGE_SIZE) && PAGE_SIZE > 0
57 char page_size[PAGE_SIZE];
62 $CC -c "page_size_$$.c" || generate_std_and_exit
63 PAGE_SIZE=`$NM --size-sort "page_size_$$.o" | cut -d' ' -f1`
64 rm "page_size_$$.c" "page_size_$$.o"
65 test x"$PAGE_SIZE" = x"" && generate_std_and_exit
66 $debug && echo "PAGE_SIZE:0x$PAGE_SIZE $((0x$PAGE_SIZE))"
67 PAGE_SIZE=$((0x$PAGE_SIZE))
68 test $PAGE_SIZE -lt 1024 && generate_std_and_exit
70 # How much space between _end[] and next page?
71 PAGE_MASK=$((PAGE_SIZE-1))
72 REM=$(( (-END) & PAGE_MASK ))
73 $debug && echo "REM:$REM"
75 if test $REM -lt 1024; then
76 # _end[] has no enough space for bb_common_bufsiz1[],
77 # users will need to malloc it.
79 echo "enum { COMMON_BUFSIZE = 1024 };"
80 echo "extern char *bb_common_bufsiz1;"
81 echo "void setup_common_bufsiz(void);"
82 } | regenerate "$common_bufsiz_h"
83 # Check that we aren't left with a buggy binary:
84 if test -f "$common_bufsiz_h.BUFSIZE"; then
85 rm "$common_bufsiz_h.BUFSIZE"
86 echo "Warning! Space in _end[] is too small ($REM bytes)!"
87 echo "Rerun make to build a binary which doesn't use it!"
90 echo "COMMON_BUFSIZE = 1024 bytes, the buffer will be malloced"
94 # _end[] has REM bytes for bb_common_bufsiz1[]
96 test -f "$common_bufsiz_h.BUFSIZE" && OLD=`cat "$common_bufsiz_h.BUFSIZE"`
97 $debug && echo "OLD:$OLD"
99 echo "enum { COMMON_BUFSIZE = $REM };"
100 echo "extern char _end[]; /* linker-provided label */"
101 echo "#define bb_common_bufsiz1 _end"
102 echo "#define setup_common_bufsiz() ((void)0)"
103 } | regenerate "$common_bufsiz_h"
104 echo $REM >"$common_bufsiz_h.BUFSIZE"
106 # Check that code did not grow too much and thus _end[] did not shrink:
107 if test $OLD -gt $REM; then
108 echo "Warning! Space in _end[] has decreased from $OLD to $REM bytes!"
113 if test $OLD != $REM; then
114 echo "Space in _end[] is $REM bytes. Rerun make to use larger COMMON_BUFSIZE."
116 echo "COMMON_BUFSIZE = $REM bytes"