Busybox 1.10.1 ARM/uCLinux patch. Daniel Beer 13 Nov 2008 After applying this patch, you'll be able to compile busybox with the SnapGear arm-elf toolchain available from here: http://ftp.snapgear.org/pub/snapgear/tools/arm-elf/gcc-2.95.3.tar.gz make && make defconfig will produce a BFLT binary. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f2d04eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# +# NOTE! Don't add files that are generated in specific +# subdirectories here. Add them in the ".gitignore" file +# in that subdirectory instead. +# +# Normal rules +# +.* +*.o +*.o.* +*.a +*.s +*.ko +*.so +*.so.dbg +*.mod.c +*.i +*.lst +*.symtypes + +applets/applet_tables +applets/usage +busybox_unstripped +busybox_unstripped.gdb +busybox_unstripped.map +busybox_unstripped.out +include/applet_tables.h +include/autoconf.h +include/bbconfigopts.h +include/config +include/usage_compressed.h +scripts/basic/docproc +scripts/basic/fixdep +scripts/basic/split-include +scripts/kconfig/conf +scripts/kconfig/lex.zconf.c +scripts/kconfig/zconf.hash.c +scripts/kconfig/zconf.tab.c + +_install +busybox +busybox.links diff --git a/Makefile b/Makefile index e18726f..bb706ae 100644 --- a/Makefile +++ b/Makefile @@ -489,7 +489,7 @@ endif # command line. # This allow a user to issue only 'make' to build a kernel including modules # Defaults busybox but it is usually overridden in the arch makefile -all: busybox +all: busybox_unstripped -include $(srctree)/arch/$(ARCH)/Makefile @@ -683,12 +683,7 @@ busybox_unstripped: $(busybox-all) FORCE $(Q)rm -f .old_version busybox: busybox_unstripped -ifeq ($(SKIP_STRIP),y) $(Q)cp $< $@ -else - $(Q)$(STRIP) -s --remove-section=.note --remove-section=.comment \ - busybox_unstripped -o $@ -endif # The actual objects are generated when descending, # make sure no implicit rule kicks in diff --git a/Makefile.flags b/Makefile.flags index 61bff4f..647047a 100644 --- a/Makefile.flags +++ b/Makefile.flags @@ -28,6 +28,8 @@ CFLAGS += $(call cc-option,-Wunused -Wunused-parameter,) # But still, warning-free compile is a must, or else we will drown # in warnings pretty soon. +CFLAGS += $(call cc-option,-O1,) + ifeq ($(CONFIG_WERROR),y) CFLAGS += $(call cc-option,-Werror,) else @@ -46,7 +48,7 @@ CFLAGS += $(call cc-option,-Os -fno-builtin-strlen -finline-limit=0 -fomit-frame # -fno-guess-branch-probability: prohibit pseudo-random guessing # of branch probabilities (hopefully makes bloatcheck more stable): CFLAGS += $(call cc-option,-fno-guess-branch-probability,) -CFLAGS += $(call cc-option,-funsigned-char -static-libgcc,) +CFLAGS += $(call cc-option,-funsigned-char,) CFLAGS += $(call cc-option,-falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1,) # FIXME: These warnings are at least partially to be concerned about and should @@ -70,6 +72,8 @@ ifeq ($(CONFIG_STATIC),y) LDFLAGS += -static endif +LDFLAGS += -elf2flt + LDLIBS += m crypt ifeq ($(CONFIG_PAM),y) diff --git a/include/libbb.h b/include/libbb.h index 9f208b3..4c4f843 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -731,7 +731,7 @@ enum { # define bb_daemonize_or_rexec(flags, argv) bb_daemonize_or_rexec(flags) # define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus) #else - void re_exec(char **argv) ATTRIBUTE_NORETURN; + void re_execute(char **argv) ATTRIBUTE_NORETURN; void forkexit_or_rexec(char **argv); extern bool re_execed; int BUG_fork_is_unavailable_on_nommu(void); diff --git a/include/xatonum.h b/include/xatonum.h index 49ddced..a004b78 100644 --- a/include/xatonum.h +++ b/include/xatonum.h @@ -7,6 +7,21 @@ * Licensed under GPLv2, see file LICENSE in this tarball for details. */ +/* These need to be defined for the SnapGear ARM toolchain. + * -- dlbeer + */ +#ifndef LLONG_MAX +#define LLONG_MAX 9223372036854775807LL +#endif + +#ifndef LLONG_MIN +#define LLONG_MIN (-LLONG_MAX - 1LL) +#endif + +#ifndef ULLONG_MAX +#define ULLONG_MAX 18446744073709551615ULL +#endif + /* Provides extern declarations of functions */ #define DECLARE_STR_CONV(type, T, UT) \ \ diff --git a/libbb/error_msg_and_die.c b/libbb/error_msg_and_die.c index 0e99a03..18ab6e1 100644 --- a/libbb/error_msg_and_die.c +++ b/libbb/error_msg_and_die.c @@ -29,7 +29,9 @@ void xfunc_die(void) */ /* -2222 means "zero" (longjmp can't pass 0) * run_nofork_applet() catches -2222. */ - longjmp(die_jmp, xfunc_error_retval ? xfunc_error_retval : -2222); + fprintf(stderr, "FIXME: die_jmp is unimplemented\n"); + exit(-1); + /* longjmp(die_jmp, xfunc_error_retval ? xfunc_error_retval : -2222); */ } sleep(die_sleep); } diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 1567d89..4f0a4b0 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c @@ -201,7 +201,7 @@ int spawn_and_wait(char **argv) } #if !BB_MMU -void re_exec(char **argv) +void re_execute(char **argv) { /* high-order bit of first char in argv[0] is a hidden * "we have (already) re-execed, don't do it again" flag */ @@ -223,7 +223,7 @@ void forkexit_or_rexec(char **argv) if (pid) /* parent */ exit(0); /* child - re-exec ourself */ - re_exec(argv); + re_execute(argv); } #else /* Dance around (void)...*/ diff --git a/libbb/xatonum.c b/libbb/xatonum.c index a410ae9..011fa98 100644 --- a/libbb/xatonum.c +++ b/libbb/xatonum.c @@ -68,3 +68,37 @@ uint16_t xatou16(const char *numstr) { return xatou_range(numstr, 0, 0xffff); } + +/* gcc 2.95.3 doesn't deal with these macros in xatonum_template.c + * properly, so they're manually expanded below. + * - dlbeer + */ +long xatol(const char *numstr) +{ + return xstrtol_range_sfx(numstr, 10, LONG_MIN, LONG_MAX, NULL); +} + +long long xatoll(const char *numstr) +{ + return xstrtoll_range_sfx(numstr, 10, LLONG_MIN, LLONG_MAX, NULL); +} + +unsigned long xstrtoul(const char *numstr, int base) +{ + return xstrtoul_range_sfx(numstr, base, 0, ULONG_MAX, NULL); +} + +unsigned long long xstrtoull(const char *numstr, int base) +{ + return xstrtoull_range_sfx(numstr, base, 0, ULLONG_MAX, NULL); +} + +unsigned long xatoul(const char *numstr) +{ + return xatoul_sfx(numstr, NULL); +} + +unsigned long long xatoull(const char *numstr) +{ + return xatoull_sfx(numstr, NULL); +} diff --git a/libbb/xatonum_template.c b/libbb/xatonum_template.c index 9f9dc11..b39ccef 100644 --- a/libbb/xatonum_template.c +++ b/libbb/xatonum_template.c @@ -84,11 +84,6 @@ unsigned type xstrtou(_sfx)(const char *numstr, int base, return xstrtou(_range_sfx)(numstr, base, 0, XSTR_UTYPE_MAX, suffixes); } -unsigned type xstrtou()(const char *numstr, int base) -{ - return xstrtou(_range_sfx)(numstr, base, 0, XSTR_UTYPE_MAX, NULL); -} - unsigned type xatou(_range_sfx)(const char *numstr, unsigned type lower, unsigned type upper, @@ -110,11 +105,6 @@ unsigned type xatou(_sfx)(const char *numstr, return xstrtou(_range_sfx)(numstr, 10, 0, XSTR_UTYPE_MAX, suffixes); } -unsigned type xatou()(const char *numstr) -{ - return xatou(_sfx)(numstr, NULL); -} - /* Signed ones */ type xstrto(_range_sfx)(const char *numstr, int base, @@ -171,11 +161,6 @@ type xato(_sfx)(const char *numstr, const struct suffix_mult *suffixes) return xstrto(_range_sfx)(numstr, 10, XSTR_TYPE_MIN, XSTR_TYPE_MAX, suffixes); } -type xato()(const char *numstr) -{ - return xstrto(_range_sfx)(numstr, 10, XSTR_TYPE_MIN, XSTR_TYPE_MAX, NULL); -} - #undef type #undef xstrtou #undef xstrto diff --git a/networking/httpd.c b/networking/httpd.c index 5e6037c..3a5e666 100644 --- a/networking/httpd.c +++ b/networking/httpd.c @@ -2225,7 +2225,7 @@ static void mini_httpd_nommu(int server_socket, int argc, char **argv) xdup2(0, 1); /* Run a copy of ourself in inetd mode */ - re_exec(argv_copy); + re_execute(argv_copy); } /* parent, or vfork failed */ close(n); diff --git a/scripts/defconfig b/scripts/defconfig index 0ca4e72..09578ed 100644 --- a/scripts/defconfig +++ b/scripts/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Busybox version: 1.10.0.svn -# Fri Mar 21 21:33:40 2008 +# Busybox version: 1.10.1 +# Sun Oct 5 23:12:50 2008 # CONFIG_HAVE_DOT_CONFIG=y @@ -21,7 +21,7 @@ CONFIG_SHOW_USAGE=y CONFIG_FEATURE_VERBOSE_USAGE=y CONFIG_FEATURE_COMPRESS_USAGE=y CONFIG_FEATURE_INSTALLER=y -CONFIG_LOCALE_SUPPORT=y +# CONFIG_LOCALE_SUPPORT is not set CONFIG_GETOPT_LONG=y CONFIG_FEATURE_DEVPTS=y # CONFIG_FEATURE_CLEAN_UP is not set @@ -38,8 +38,8 @@ CONFIG_FEATURE_HAVE_RPC=y # # Build Options # -# CONFIG_STATIC is not set -# CONFIG_NOMMU is not set +CONFIG_STATIC=y +CONFIG_NOMMU=y # CONFIG_BUILD_LIBBUSYBOX is not set # CONFIG_FEATURE_INDIVIDUAL is not set # CONFIG_FEATURE_SHARED_BUSYBOX is not set @@ -427,7 +427,7 @@ CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y CONFIG_FEATURE_INSMOD_LOADINKMEM=y CONFIG_FEATURE_INSMOD_LOAD_MAP=y CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y -CONFIG_RMMOD=y +# CONFIG_RMMOD is not set CONFIG_LSMOD=y CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y CONFIG_MODPROBE=y @@ -452,23 +452,19 @@ CONFIG_FEATURE_FBSET_FANCY=y CONFIG_FEATURE_FBSET_READMODE=y CONFIG_FDFLUSH=y CONFIG_FDFORMAT=y -CONFIG_FDISK=y +# CONFIG_FDISK is not set CONFIG_FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_FDISK_WRITABLE is not set # CONFIG_FEATURE_AIX_LABEL is not set # CONFIG_FEATURE_SGI_LABEL is not set # CONFIG_FEATURE_SUN_LABEL is not set # CONFIG_FEATURE_OSF_LABEL is not set -CONFIG_FEATURE_FDISK_ADVANCED=y +# CONFIG_FEATURE_FDISK_ADVANCED is not set # CONFIG_FINDFS is not set CONFIG_FREERAMDISK=y -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y +# CONFIG_FSCK_MINIX is not set +# CONFIG_MKFS_MINIX is not set +# CONFIG_FEATURE_MINIX2 is not set CONFIG_GETOPT=y CONFIG_HEXDUMP=y # CONFIG_FEATURE_HEXDUMP_REVERSE is not set @@ -510,7 +506,7 @@ CONFIG_FEATURE_MOUNT_FAKE=y CONFIG_FEATURE_MOUNT_VERBOSE=y # CONFIG_FEATURE_MOUNT_HELPERS is not set # CONFIG_FEATURE_MOUNT_LABEL is not set -CONFIG_FEATURE_MOUNT_NFS=y +# CONFIG_FEATURE_MOUNT_NFS is not set CONFIG_FEATURE_MOUNT_CIFS=y CONFIG_FEATURE_MOUNT_FLAGS=y CONFIG_FEATURE_MOUNT_FSTAB=y @@ -518,7 +514,7 @@ CONFIG_PIVOT_ROOT=y CONFIG_RDATE=y CONFIG_READPROFILE=y # CONFIG_RTCWAKE is not set -CONFIG_SETARCH=y +# CONFIG_SETARCH is not set CONFIG_SWAPONOFF=y CONFIG_SWITCH_ROOT=y CONFIG_UMOUNT=y @@ -554,8 +550,8 @@ CONFIG_DC=y # CONFIG_DEVFSD_FG_NP is not set # CONFIG_DEVFSD_VERBOSE is not set # CONFIG_FEATURE_DEVFS is not set -CONFIG_EJECT=y -CONFIG_FEATURE_EJECT_SCSI=y +# CONFIG_EJECT is not set +# CONFIG_FEATURE_EJECT_SCSI is not set CONFIG_LAST=y CONFIG_LESS=y CONFIG_FEATURE_LESS_MAXLINES=9999999 @@ -564,13 +560,13 @@ CONFIG_FEATURE_LESS_FLAGS=y CONFIG_FEATURE_LESS_FLAGCS=y CONFIG_FEATURE_LESS_MARKS=y CONFIG_FEATURE_LESS_REGEXP=y -CONFIG_HDPARM=y -CONFIG_FEATURE_HDPARM_GET_IDENTITY=y -CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y -CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y -CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y -CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y -CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set CONFIG_MAKEDEVS=y # CONFIG_FEATURE_MAKEDEVS_LEAF is not set CONFIG_FEATURE_MAKEDEVS_TABLE=y @@ -578,14 +574,14 @@ CONFIG_MICROCOM=y CONFIG_MOUNTPOINT=y CONFIG_MT=y CONFIG_RAIDAUTORUN=y -CONFIG_READAHEAD=y +# CONFIG_READAHEAD is not set CONFIG_RUNLEVEL=y CONFIG_RX=y CONFIG_SCRIPT=y CONFIG_STRINGS=y CONFIG_SETSID=y -CONFIG_TASKSET=y -CONFIG_FEATURE_TASKSET_FANCY=y +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set CONFIG_TIME=y CONFIG_TTYSIZE=y CONFIG_WATCHDOG=y @@ -598,8 +594,8 @@ CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y # CONFIG_VERBOSE_RESOLUTION_ERRORS is not set CONFIG_ARP=y CONFIG_ARPING=y -CONFIG_BRCTL=y -CONFIG_FEATURE_BRCTL_FANCY=y +# CONFIG_BRCTL is not set +# CONFIG_FEATURE_BRCTL_FANCY is not set CONFIG_DNSD=y CONFIG_ETHER_WAKE=y CONFIG_FAKEIDENTD=y @@ -627,7 +623,7 @@ CONFIG_FEATURE_IFCONFIG_SLIP=y CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y CONFIG_FEATURE_IFCONFIG_HW=y CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFENSLAVE=y +# CONFIG_IFENSLAVE is not set CONFIG_IFUPDOWN=y CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" CONFIG_FEATURE_IFUPDOWN_IP=y @@ -673,8 +669,8 @@ CONFIG_PING6=y CONFIG_FEATURE_FANCY_PING=y CONFIG_PSCAN=y CONFIG_ROUTE=y -CONFIG_SENDMAIL=y -CONFIG_FETCHMAIL=y +# CONFIG_SENDMAIL is not set +# CONFIG_FETCHMAIL is not set CONFIG_SLATTACH=y CONFIG_TELNET=y CONFIG_FEATURE_TELNET_TTYPE=y @@ -743,28 +739,24 @@ CONFIG_WATCH=y # # Shells # -CONFIG_FEATURE_SH_IS_ASH=y +# CONFIG_FEATURE_SH_IS_ASH is not set # CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set +CONFIG_FEATURE_SH_IS_MSH=y # CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_READ_NCHARS=y -CONFIG_ASH_READ_TIMEOUT=y +# CONFIG_ASH is not set +# CONFIG_ASH_JOB_CONTROL is not set +# CONFIG_ASH_READ_NCHARS is not set +# CONFIG_ASH_READ_TIMEOUT is not set # CONFIG_ASH_ALIAS is not set -CONFIG_ASH_MATH_SUPPORT=y -CONFIG_ASH_MATH_SUPPORT_64=y +# CONFIG_ASH_MATH_SUPPORT is not set +# CONFIG_ASH_MATH_SUPPORT_64 is not set # CONFIG_ASH_GETOPTS is not set -CONFIG_ASH_BUILTIN_ECHO=y -CONFIG_ASH_BUILTIN_TEST=y -CONFIG_ASH_CMDCMD=y +# CONFIG_ASH_BUILTIN_ECHO is not set +# CONFIG_ASH_BUILTIN_TEST is not set +# CONFIG_ASH_CMDCMD is not set # CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -CONFIG_ASH_RANDOM_SUPPORT=y +# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set +# CONFIG_ASH_RANDOM_SUPPORT is not set # CONFIG_ASH_EXPAND_PRMT is not set # CONFIG_HUSH is not set # CONFIG_HUSH_HELP is not set @@ -774,7 +766,7 @@ CONFIG_ASH_RANDOM_SUPPORT=y # CONFIG_HUSH_IF is not set # CONFIG_HUSH_LOOPS is not set # CONFIG_LASH is not set -# CONFIG_MSH is not set +CONFIG_MSH=y # # Bourne Shell Options