← Commit list

a7bb3c139

Denys Vlasenko
Denys Vlasenko
2009-10-08
FAILED Duration: 28s

Subject

*: code shrink via NOINLINE

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

archival/bz/blocksort.c+1 -1
@@ -585,7 +585,7 @@ uint8_t mmed3(uint8_t a, uint8_t b, uint8_t c)
#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
#define MAIN_QSORT_STACK_SIZE 100
-static
+static NOINLINE
void mainQSort3(uint32_t* ptr,
uint8_t* block,
uint16_t* quadrant,
archival/cpio.c+1 -1
@@ -117,7 +117,7 @@ static off_t cpio_pad4(off_t size)
/* Return value will become exit code.
* It's ok to exit instead of return. */
-static int cpio_o(void)
+static NOINLINE int cpio_o(void)
{
static const char trailer[] ALIGN1 = "TRAILER!!!";
struct name_s {
archival/lzop.c+1 -1
@@ -75,7 +75,7 @@ static void copy3(uint8_t* ip, const uint8_t* m_pos, unsigned off)
#define TEST_IP (ip < ip_end)
#define TEST_OP (op <= op_end)
-static int lzo1x_optimize(uint8_t *in, unsigned in_len,
+static NOINLINE int lzo1x_optimize(uint8_t *in, unsigned in_len,
uint8_t *out, unsigned *out_len,
void* wrkmem UNUSED_PARAM)
{
docs/keep_data_small.txt+31 -0
@@ -214,3 +214,34 @@ Result (non-static busybox built against glibc):
text data bss dec hex filename
634416 2736 23856 661008 a1610 busybox
632580 2672 22944 658196 a0b14 busybox_noalign
+
+
+
+ Keeping code small
+
+Set CONFIG_EXTRA_CFLAGS="-fno-inline-functions-called-once",
+produce "make bloatcheck", see the biggest auto-inlined functions.
+Now, set CONFIG_EXTRA_CFLAGS back to "", but add NOINLINE
+to some of these functions. In 1.16.x timeframe, the results were
+(annotated "make bloatcheck" output):
+
+function old new delta
+expand_vars_to_list - 1712 +1712 win
+lzo1x_optimize - 1429 +1429 win
+arith_apply - 1326 +1326 win
+read_interfaces - 1163 +1163 loss, leave w/o NOINLINE
+logdir_open - 1148 +1148 win
+check_deps - 1148 +1148 loss
+rewrite - 1039 +1039 win
+run_pipe 358 1396 +1038 win
+write_status_file - 1029 +1029 almost the same, leave w/o NOINLINE
+dump_identity - 987 +987 win
+mainQSort3 - 921 +921 win
+parse_one_line - 916 +916 loss
+summarize - 897 +897 almost the same
+do_shm - 884 +884 win
+cpio_o - 863 +863 win
+subCommand - 841 +841 loss
+receive - 834 +834 loss
+
+855 bytes saved in total.
libbb/dump.c+1 -1
@@ -96,7 +96,7 @@ static NOINLINE int bb_dump_size(FS *fs)
return cur_size;
}
-static void rewrite(priv_dumper_t *dumper, FS *fs)
+static NOINLINE void rewrite(priv_dumper_t *dumper, FS *fs)
{
enum { NOTOKAY, USEBCNT, USEPREC } sokay;
PR *pr, **nextpr = NULL;
miscutils/hdparm.c+1 -1
@@ -1185,7 +1185,7 @@ static const char BuffType[] ALIGN1 =
"unknown""\0" "1Sect""\0" "DualPort""\0" "DualPortCache"
;
-static void dump_identity(const struct hd_driveid *id)
+static NOINLINE void dump_identity(const struct hd_driveid *id)
{
int i;
const unsigned short *id_regs = (const void*) id;
runit/svlogd.c+1 -1
@@ -603,7 +603,7 @@ static void logdir_close(struct logdir *ld)
ld->processor = NULL;
}
-static unsigned logdir_open(struct logdir *ld, const char *fn)
+static NOINLINE unsigned logdir_open(struct logdir *ld, const char *fn)
{
char buf[128];
unsigned now;
shell/hush.c+2 -2
@@ -2151,7 +2151,7 @@ static char *expand_pseudo_dquoted(const char *str)
* to be filled). This routine is extremely tricky: has to deal with
* variables/parameters with whitespace, $* and $@, and constructs like
* 'echo -$*-'. If you play here, you must run testsuite afterwards! */
-static int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask)
+static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask)
{
/* or_mask is either 0 (normal case) or 0x80 -
* expansion of right-hand side of assignment == 1-element expand.
@@ -3750,7 +3750,7 @@ static int checkjobs_and_fg_shell(struct pipe* fg_pipe)
* backgrounded: cmd & { list } &
* subshell: ( list ) [&]
*/
-static int run_pipe(struct pipe *pi)
+static NOINLINE int run_pipe(struct pipe *pi)
{
static const char *const null_ptr = NULL;
int i;
shell/math.c+1 -1
@@ -293,7 +293,7 @@ arith_lookup_val(v_n_t *t, a_e_h_t *math_hooks)
/* "applying" a token means performing it on the top elements on the integer
* stack. For a unary operator it will only change the top element, but a
* binary operator will pop two arguments and push a result */
-static int
+static NOINLINE int
arith_apply(operator op, v_n_t *numstack, v_n_t **numstackptr, a_e_h_t *math_hooks)
{
v_n_t *numptr_m1;
util-linux/ipcs.c+1 -1
@@ -115,7 +115,7 @@ static void print_perms(int id, struct ipc_perm *ipcp)
}
-static void do_shm(void)
+static NOINLINE void do_shm(void)
{
int maxid, shmid, id;
struct shmid_ds shmseg;