Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
libbb.h: use inlined sigfillset, sigemptyset, sigisemptyset on uclibc
Browse files Browse the repository at this point in the history
   text    data     bss     dec     hex filename
 875879     493    7584  883956   d7cf4 busybox_old
 875879     493    7584  883956   d7cf4 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
  • Loading branch information
Denys Vlasenko committed May 12, 2011
1 parent 279a7ac commit 89f5bfd
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 75 deletions.
6 changes: 6 additions & 0 deletions include/libbb.h
Expand Up @@ -20,6 +20,12 @@
#include <netdb.h>
#include <setjmp.h>
#include <signal.h>
#if defined __UCLIBC__ /* TODO: and glibc? */
/* use inlined versions of these: */
# define sigfillset(s) __sigfillset(s)
# define sigemptyset(s) __sigemptyset(s)
# define sigisemptyset(s) __sigisemptyset(s)
#endif
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down
157 changes: 82 additions & 75 deletions include/platform.h
Expand Up @@ -7,23 +7,6 @@
#ifndef BB_PLATFORM_H
#define BB_PLATFORM_H 1

/* Assume all these functions exist by default. Platforms where it is not
* true will #undef them below.
*/
#define HAVE_CLEARENV 1
#define HAVE_FDATASYNC 1
#define HAVE_DPRINTF 1
#define HAVE_MEMRCHR 1
#define HAVE_MKDTEMP 1
#define HAVE_PTSNAME_R 1
#define HAVE_SETBIT 1
#define HAVE_SIGHANDLER_T 1
#define HAVE_STPCPY 1
#define HAVE_STRCASESTR 1
#define HAVE_STRCHRNUL 1
#define HAVE_STRSEP 1
#define HAVE_STRSIGNAL 1
#define HAVE_VASPRINTF 1

/* Convenience macros to test the version of gcc. */
#undef __GNUC_PREREQ
Expand All @@ -41,10 +24,6 @@
# endif
#endif

/* Define macros for some gcc attributes. This permits us to use the
macros freely, and know that they will come into play for the
version of gcc in which they are supported. */

#if !__GNUC_PREREQ(2,7)
# ifndef __attribute__
# define __attribute__(x)
Expand Down Expand Up @@ -98,7 +77,7 @@
#endif

/* -fwhole-program makes all symbols local. The attribute externally_visible
forces a symbol global. */
* forces a symbol global. */
#if __GNUC_PREREQ(4,1)
# define EXTERNALLY_VISIBLE __attribute__(( visibility("default") ))
//__attribute__ ((__externally_visible__))
Expand All @@ -114,22 +93,14 @@
#endif

/* We use __extension__ in some places to suppress -pedantic warnings
about GCC extensions. This feature didn't work properly before
gcc 2.8. */
* about GCC extensions. This feature didn't work properly before
* gcc 2.8. */
#if !__GNUC_PREREQ(2,8)
# ifndef __extension__
# define __extension__
# endif
#endif

/* gcc-2.95 had no va_copy but only __va_copy. */
#if !__GNUC_PREREQ(3,0)
# include <stdarg.h>
# if !defined va_copy && defined __va_copy
# define va_copy(d,s) __va_copy((d),(s))
# endif
#endif

/* FAST_FUNC is a qualifier which (possibly) makes function call faster
* and/or smaller by using modified ABI. It is usually only needed
* on non-static, busybox internal functions. Recent versions of gcc
Expand All @@ -153,6 +124,15 @@
# define POP_SAVED_FUNCTION_VISIBILITY
#endif

/* gcc-2.95 had no va_copy but only __va_copy. */
#if !__GNUC_PREREQ(3,0)
# include <stdarg.h>
# if !defined va_copy && defined __va_copy
# define va_copy(d,s) __va_copy((d),(s))
# endif
#endif


/* ---- Endian Detection ------------------------------------ */

#include <limits.h>
Expand Down Expand Up @@ -220,6 +200,7 @@
# define IF_LITTLE_ENDIAN(...) __VA_ARGS__
#endif


/* ---- Unaligned access ------------------------------------ */

#include <stdint.h>
Expand Down Expand Up @@ -252,37 +233,9 @@ typedef uint32_t bb__aliased_uint32_t FIX_ALIASING;
} while (0)
#endif

/* ---- Compiler dependent settings ------------------------- */

#if (defined __digital__ && defined __unix__) \
|| defined __APPLE__ \
|| defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__
# undef HAVE_CLEARENV
# undef HAVE_FDATASYNC
# undef HAVE_MNTENT_H
# undef HAVE_PTSNAME_R
# undef HAVE_SYS_STATFS_H
# undef HAVE_SIGHANDLER_T
# undef HAVE_XTABS
# undef HAVE_DPRINTF
#else
# define HAVE_MNTENT_H 1
# define HAVE_SYS_STATFS_H 1
# define HAVE_XTABS 1
#endif

/*----- Kernel versioning ------------------------------------*/

#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

/* ---- Miscellaneous --------------------------------------- */
/* ---- Size-saving "small" ints (arch-dependent) ----------- */

#if defined __GLIBC__ || defined __UCLIBC__ \
|| defined __dietlibc__ || defined _NEWLIB_VERSION
# include <features.h>
#endif

/* Size-saving "small" ints (arch-dependent) */
#if defined(i386) || defined(__x86_64__) || defined(__mips__) || defined(__cris__)
/* add other arches which benefit from this... */
typedef signed char smallint;
Expand All @@ -302,7 +255,34 @@ typedef unsigned smalluint;
# include <stdbool.h>
#endif

/* Try to defeat gcc's alignment of "char message[]"-like data */

/*----- Kernel versioning ------------------------------------*/

#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))


/* ---- Miscellaneous --------------------------------------- */

#if defined __GLIBC__ \
|| defined __UCLIBC__ \
|| defined __dietlibc__ \
|| defined _NEWLIB_VERSION
# include <features.h>
#endif

/* Define bb_setpgrp */
#if defined(__digital__) && defined(__unix__)
/* use legacy setpgrp(pid_t, pid_t) for now. move to platform.c */
# define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me, __me); } while (0)
#else
# define bb_setpgrp() setpgrp()
#endif

/* fdprintf is more readable, we used it before dprintf was standardized */
#include <unistd.h>
#define fdprintf dprintf

/* Useful for defeating gcc's alignment of "char message[]"-like data */
#if 1 /* if needed: !defined(arch1) && !defined(arch2) */
# define ALIGN1 __attribute__((aligned(1)))
# define ALIGN2 __attribute__((aligned(2)))
Expand All @@ -314,8 +294,7 @@ typedef unsigned smalluint;
# define ALIGN4
#endif


/* uclibc does not implement daemon() for no-mmu systems.
/*
* For 0.9.29 and svn, __ARCH_USE_MMU__ indicates no-mmu reliably.
* For earlier versions there is no reliable way to check if we are building
* for a mmu-less system.
Expand All @@ -333,12 +312,9 @@ typedef unsigned smalluint;
#endif

#if defined(__digital__) && defined(__unix__)

# include <standards.h>
# include <inttypes.h>
# define PRIu32 "u"
/* use legacy setpgrp(pid_t,pid_t) for now. move to platform.c */
# define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me, __me); } while (0)
# if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET
# define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET)
# endif
Expand All @@ -351,17 +327,31 @@ typedef unsigned smalluint;
# if !defined ADJ_TICK && defined MOD_CLKB
# define ADJ_TICK MOD_CLKB
# endif
#endif

# undef HAVE_STPCPY

#else

# define bb_setpgrp() setpgrp()
/* ---- Who misses what? ------------------------------------ */

#endif

#include <unistd.h>
#define fdprintf dprintf
/* Assume all these functions exist by default. Platforms where it is not
* true will #undef them below.
*/
#define HAVE_CLEARENV 1
#define HAVE_FDATASYNC 1
#define HAVE_DPRINTF 1
#define HAVE_MEMRCHR 1
#define HAVE_MKDTEMP 1
#define HAVE_PTSNAME_R 1
#define HAVE_SETBIT 1
#define HAVE_SIGHANDLER_T 1
#define HAVE_STPCPY 1
#define HAVE_STRCASESTR 1
#define HAVE_STRCHRNUL 1
#define HAVE_STRSEP 1
#define HAVE_STRSIGNAL 1
#define HAVE_VASPRINTF 1
#define HAVE_MNTENT_H 1
#define HAVE_SYS_STATFS_H 1
#define HAVE_XTABS 1

#if defined(__dietlibc__)
# undef HAVE_STRCHRNUL
Expand All @@ -384,6 +374,23 @@ typedef unsigned smalluint;
# undef HAVE_STRCHRNUL
#endif

#if (defined __digital__ && defined __unix__) \
|| defined __APPLE__ \
|| defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__
# undef HAVE_CLEARENV
# undef HAVE_FDATASYNC
# undef HAVE_MNTENT_H
# undef HAVE_PTSNAME_R
# undef HAVE_SYS_STATFS_H
# undef HAVE_SIGHANDLER_T
# undef HAVE_XTABS
# undef HAVE_DPRINTF
#endif

#if defined(__digital__) && defined(__unix__)
# undef HAVE_STPCPY
#endif

/*
* Now, define prototypes for all the functions defined in platform.c
* These must come after all the HAVE_* macros are defined (or not)
Expand Down

0 comments on commit 89f5bfd

Please sign in to comment.