Use intra-DSO calls when we build libbusybox. No-op for normal build.
This was Bernhard Fischer' idea.

   text    data     bss     dec     hex filename
 773549    7781    9740  791070   c121e busybox.t7/0_lib/libbusybox.so.1.11.0.svn_unstripped
 769683    7397    9740  786820   c0184 busybox.t9t/0_lib/libbusybox.so.1.11.0.svn_unstripped

diff --git a/networking/isrv.h b/networking/isrv.h
index 370ed90..c0158a3 100644
--- a/networking/isrv.h
+++ b/networking/isrv.h
@@ -8,6 +8,10 @@
  * Licensed under GPL version 2, see file LICENSE in this tarball for details.
  */
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 /* opaque structure */
 struct isrv_state_t;
 typedef struct isrv_state_t isrv_state_t;
@@ -31,3 +35,7 @@
 	int timeout,
 	int linger_timeout
 );
+
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
diff --git a/networking/libiproute/ip_common.h b/networking/libiproute/ip_common.h
index c047356..346d0b9 100644
--- a/networking/libiproute/ip_common.h
+++ b/networking/libiproute/ip_common.h
@@ -13,6 +13,10 @@
 #include <linux/if_link.h>
 #endif
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 extern char **ip_parse_common_args(char **argv);
 extern int print_neigh(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg);
 extern int ipaddr_list_or_flush(char **argv, int flush);
@@ -29,4 +33,9 @@
 extern int do_ipmonitor(char **argv);
 extern int do_multiaddr(char **argv);
 extern int do_multiroute(char **argv);
+
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif /* ip_common.h */
diff --git a/networking/libiproute/libnetlink.h b/networking/libiproute/libnetlink.h
index e149f52..7507c52 100644
--- a/networking/libiproute/libnetlink.h
+++ b/networking/libiproute/libnetlink.h
@@ -8,6 +8,11 @@
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
 
+
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 struct rtnl_handle
 {
 	int			fd;
@@ -43,4 +48,8 @@
 
 extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len);
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif /* __LIBNETLINK_H__ */
diff --git a/networking/libiproute/ll_map.h b/networking/libiproute/ll_map.h
index 55e2cf3..c425789 100644
--- a/networking/libiproute/ll_map.h
+++ b/networking/libiproute/ll_map.h
@@ -2,6 +2,10 @@
 #ifndef __LL_MAP_H__
 #define __LL_MAP_H__ 1
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 int ll_remember_index(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg);
 int ll_init_map(struct rtnl_handle *rth);
 int xll_name_to_index(const char *const name);
@@ -10,4 +14,8 @@
 /* int ll_index_to_type(int idx); */
 unsigned ll_index_to_flags(int idx);
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif /* __LL_MAP_H__ */
diff --git a/networking/libiproute/rt_names.h b/networking/libiproute/rt_names.h
index f560f24..60baa3f 100644
--- a/networking/libiproute/rt_names.h
+++ b/networking/libiproute/rt_names.h
@@ -2,7 +2,9 @@
 #ifndef RT_NAMES_H_
 #define RT_NAMES_H_ 1
 
-#include <stdint.h>
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
 
 extern const char* rtnl_rtprot_n2a(int id, char *buf, int len);
 extern const char* rtnl_rtscope_n2a(int id, char *buf, int len);
@@ -27,4 +29,8 @@
 extern int ll_proto_a2n(unsigned short *id, char *buf);
 #endif
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif
diff --git a/networking/libiproute/rtm_map.h b/networking/libiproute/rtm_map.h
index cbbcc21..02fa77e 100644
--- a/networking/libiproute/rtm_map.h
+++ b/networking/libiproute/rtm_map.h
@@ -2,10 +2,17 @@
 #ifndef __RTM_MAP_H__
 #define __RTM_MAP_H__ 1
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 const char *rtnl_rtntype_n2a(int id, char *buf, int len);
 int rtnl_rtntype_a2n(int *id, char *arg);
 
 int get_rt_realms(uint32_t *realms, char *arg);
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
 
 #endif /* __RTM_MAP_H__ */
diff --git a/networking/libiproute/utils.h b/networking/libiproute/utils.h
index 50a6c20..b67619d 100644
--- a/networking/libiproute/utils.h
+++ b/networking/libiproute/utils.h
@@ -6,6 +6,10 @@
 #include "ll_map.h"
 #include "rtm_map.h"
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 extern family_t preferred_family;
 extern smallint show_stats;    /* UNUSED */
 extern smallint show_details;  /* UNUSED */
@@ -84,4 +88,8 @@
 const char *ipx_ntop(int af, const void *addr, char *str, size_t len);
 int ipx_pton(int af, const char *src, void *addr);
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif /* __UTILS_H__ */
diff --git a/networking/tcpudp_perhost.h b/networking/tcpudp_perhost.h
index 9fc8cee..2e093c1 100644
--- a/networking/tcpudp_perhost.h
+++ b/networking/tcpudp_perhost.h
@@ -7,6 +7,10 @@
  * Licensed under GPLv2, see file LICENSE in this tarball for details.
  */
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 struct hcc {
 	char *ip;
 	int pid;
@@ -27,3 +31,7 @@
 
 //unsigned ipsvd_perhost_setpid(int pid);
 //void ipsvd_perhost_free(void);
+
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
index d44bca4..1131bae 100644
--- a/networking/udhcp/common.h
+++ b/networking/udhcp/common.h
@@ -11,6 +11,12 @@
 #define _COMMON_H
 
 #include "libbb.h"
+#include <netinet/udp.h>
+#include <netinet/ip.h>
+
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
 
 #define DEFAULT_SCRIPT   CONFIG_DHCPC_DEFAULT_SCRIPT
 
@@ -18,9 +24,6 @@
 
 /*** packet.h ***/
 
-#include <netinet/udp.h>
-#include <netinet/ip.h>
-
 #define DHCP_OPTIONS_BUFSIZE  308
 
 struct dhcpMessage {
@@ -98,4 +101,8 @@
 # define DEBUG(str, args...) do {;} while (0)
 #endif
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif
diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h
index c8acd49..452afcf 100644
--- a/networking/udhcp/dhcpc.h
+++ b/networking/udhcp/dhcpc.h
@@ -4,6 +4,10 @@
 #ifndef _DHCPC_H
 #define _DHCPC_H
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 #define INIT_SELECTING	0
 #define REQUESTING	1
 #define BOUND		2
@@ -60,5 +64,8 @@
 int send_release(uint32_t server, uint32_t ciaddr);
 int get_raw_packet(struct dhcpMessage *payload, int fd);
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
 
 #endif
diff --git a/networking/udhcp/dhcpd.h b/networking/udhcp/dhcpd.h
index 4ce442b..8a206ea 100644
--- a/networking/udhcp/dhcpd.h
+++ b/networking/udhcp/dhcpd.h
@@ -4,6 +4,10 @@
 #ifndef _DHCPD_H
 #define _DHCPD_H
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 /************************************/
 /* Defaults _you_ may want to tweak */
 /************************************/
@@ -114,4 +118,8 @@
 struct option_set *find_option(struct option_set *opt_list, uint8_t code);
 
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif
diff --git a/networking/udhcp/options.h b/networking/udhcp/options.h
index e9eeefb..cf3fe3b 100644
--- a/networking/udhcp/options.h
+++ b/networking/udhcp/options.h
@@ -3,6 +3,10 @@
 #ifndef _OPTIONS_H
 #define _OPTIONS_H
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility push(hidden)
+#endif
+
 #define TYPE_MASK	0x0F
 
 enum {
@@ -112,4 +116,8 @@
 uint8_t *dname_enc(const uint8_t *cstr, int clen, const char *src, int *retlen);
 #endif
 
+#if __GNUC_PREREQ(4,1)
+# pragma GCC visibility pop
+#endif
+
 #endif