add -fvisibility=hidden to CC flags, mark XXX_main functions
EXTERNALLY_VISIBLE. 5% size reduction of libbusybox.so

diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c
index 3aa99e5..1adb0fc 100644
--- a/util-linux/dmesg.c
+++ b/util-linux/dmesg.c
@@ -12,7 +12,7 @@
 #include <sys/klog.h>
 #include "libbb.h"
 
-int dmesg_main(int argc, char **argv);
+int dmesg_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int dmesg_main(int argc, char **argv)
 {
 	char *size, *level;
diff --git a/util-linux/fbset.c b/util-linux/fbset.c
index a2b8b38..f67a283 100644
--- a/util-linux/fbset.c
+++ b/util-linux/fbset.c
@@ -309,7 +309,7 @@
 #ifdef STANDALONE
 int main(int argc, char **argv)
 #else
-int fbset_main(int argc, char **argv);
+int fbset_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int fbset_main(int argc, char **argv)
 #endif
 {
diff --git a/util-linux/fdformat.c b/util-linux/fdformat.c
index dc45e23..c4f97ae 100644
--- a/util-linux/fdformat.c
+++ b/util-linux/fdformat.c
@@ -1,12 +1,7 @@
 /* vi: set sw=4 ts=4: */
 /* fdformat.c  -  Low-level formats a floppy disk - Werner Almesberger */
 
-/* 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
- * - added Native Language Support
- * 1999-03-20 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
- * - more i18n/nls translatable strings marked
- *
- * 5 July 2003 -- modified for Busybox by Erik Andersen
+/* 5 July 2003 -- modified for Busybox by Erik Andersen
  */
 
 #include "libbb.h"
@@ -45,8 +40,8 @@
 #define FDGETPRM _IOR(2, 0x04, struct floppy_struct)
 #define FD_FILL_BYTE 0xF6 /* format fill byte. */
 
-int fdformat_main(int argc,char **argv);
-int fdformat_main(int argc,char **argv)
+int fdformat_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int fdformat_main(int argc, char **argv)
 {
 	int fd, n, cyl, read_bytes, verify;
 	unsigned char *data;
@@ -116,7 +111,7 @@
 			/* Check backwards so we don't need a counter */
 			while (--read_bytes >= 0) {
 				if (data[read_bytes] != FD_FILL_BYTE) {
-					 printf("bad data in cyl %d\nContinuing... ",cyl);
+					 printf("bad data in cyl %d\nContinuing... ", cyl);
 				}
 			}
 		}
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c
index 9f30571..01c01bd 100644
--- a/util-linux/fdisk.c
+++ b/util-linux/fdisk.c
@@ -2735,7 +2735,7 @@
 }
 #endif
 
-int fdisk_main(int argc, char **argv);
+int fdisk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int fdisk_main(int argc, char **argv)
 {
 	char *str_b, *str_C, *str_H, *str_S;
diff --git a/util-linux/freeramdisk.c b/util-linux/freeramdisk.c
index 4bd9378..bde6afc 100644
--- a/util-linux/freeramdisk.c
+++ b/util-linux/freeramdisk.c
@@ -14,7 +14,7 @@
 /* From <linux/fd.h> */
 #define FDFLUSH  _IO(2,0x4b)
 
-int freeramdisk_main(int argc, char **argv);
+int freeramdisk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int freeramdisk_main(int argc, char **argv)
 {
 	int fd;
diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c
index 5f92f35..deb82f7 100644
--- a/util-linux/fsck_minix.c
+++ b/util-linux/fsck_minix.c
@@ -1249,7 +1249,7 @@
 void check2(void);
 #endif
 
-int fsck_minix_main(int argc, char **argv);
+int fsck_minix_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int fsck_minix_main(int argc, char **argv)
 {
 	struct termios tmp;
diff --git a/util-linux/getopt.c b/util-linux/getopt.c
index 4767d58..061750e 100644
--- a/util-linux/getopt.c
+++ b/util-linux/getopt.c
@@ -279,8 +279,8 @@
 	;
 #endif
 
-int getopt_main(int argc, char *argv[]);
-int getopt_main(int argc, char *argv[])
+int getopt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int getopt_main(int argc, char **argv)
 {
 	char *optstr = NULL;
 	char *name = NULL;
diff --git a/util-linux/hexdump.c b/util-linux/hexdump.c
index e294f19..e6820ae 100644
--- a/util-linux/hexdump.c
+++ b/util-linux/hexdump.c
@@ -54,7 +54,7 @@
 	{ }
 };
 
-int hexdump_main(int argc, char **argv);
+int hexdump_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int hexdump_main(int argc, char **argv)
 {
 	const char *p;
diff --git a/util-linux/hwclock.c b/util-linux/hwclock.c
index 09b09eb..f91379b 100644
--- a/util-linux/hwclock.c
+++ b/util-linux/hwclock.c
@@ -171,7 +171,7 @@
 #define HWCLOCK_OPT_SYSTOHC     0x10
 #define HWCLOCK_OPT_RTCFILE     0x20
 
-int hwclock_main(int argc, char **argv);
+int hwclock_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int hwclock_main(int argc, char **argv)
 {
 	unsigned opt;
diff --git a/util-linux/ipcrm.c b/util-linux/ipcrm.c
index f49d28e..a9400d1 100644
--- a/util-linux/ipcrm.c
+++ b/util-linux/ipcrm.c
@@ -76,7 +76,7 @@
 #endif /* IPCRM_LEGACY */
 
 
-int ipcrm_main(int argc, char **argv);
+int ipcrm_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int ipcrm_main(int argc, char **argv)
 {
 	int c;
diff --git a/util-linux/ipcs.c b/util-linux/ipcs.c
index d532590..c7b46f5 100644
--- a/util-linux/ipcs.c
+++ b/util-linux/ipcs.c
@@ -558,7 +558,7 @@
 	bb_putchar('\n');
 }
 
-int ipcs_main(int argc, char **argv);
+int ipcs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int ipcs_main(int argc, char **argv)
 {
 	int id = 0;
diff --git a/util-linux/losetup.c b/util-linux/losetup.c
index c61af3d..a9ecfd5 100644
--- a/util-linux/losetup.c
+++ b/util-linux/losetup.c
@@ -11,7 +11,7 @@
 
 #include "libbb.h"
 
-int losetup_main(int argc, char **argv);
+int losetup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int losetup_main(int argc, char **argv)
 {
 	char dev[] = LOOP_NAME"0";
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index 33dc5d3..a9c1469 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -287,7 +287,7 @@
 	}
 }
 
-int mdev_main(int argc, char **argv);
+int mdev_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int mdev_main(int argc, char **argv)
 {
 	char *action;
diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c
index 2b0697a..de9dde3 100644
--- a/util-linux/mkfs_minix.c
+++ b/util-linux/mkfs_minix.c
@@ -603,7 +603,7 @@
 	printf("Maxsize=%ld\n", (long)SB_MAXSIZE);
 }
 
-int mkfs_minix_main(int argc, char **argv);
+int mkfs_minix_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int mkfs_minix_main(int argc, char **argv)
 {
 	struct mntent *mp;
diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c
index 88f1fbb..af4cc10 100644
--- a/util-linux/mkswap.c
+++ b/util-linux/mkswap.c
@@ -8,7 +8,7 @@
 
 #include "libbb.h"
 
-int mkswap_main(int argc, char **argv);
+int mkswap_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int mkswap_main(int argc, char **argv)
 {
 	int fd, pagesize;
diff --git a/util-linux/more.c b/util-linux/more.c
index 0a21a9a..ee559b1 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -52,7 +52,7 @@
 
 #define CONVERTED_TAB_SIZE 8
 
-int more_main(int argc, char **argv);
+int more_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int more_main(int argc, char **argv)
 {
 	int c = c; /* for gcc */
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 10ada54..7c58aef 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -1559,7 +1559,7 @@
 
 static const char must_be_root[] ALIGN1 = "you must be root";
 
-int mount_main(int argc, char **argv);
+int mount_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int mount_main(int argc, char **argv)
 {
 	enum { OPT_ALL = 0x10 };
diff --git a/util-linux/pivot_root.c b/util-linux/pivot_root.c
index 929ed30..28af00c 100644
--- a/util-linux/pivot_root.c
+++ b/util-linux/pivot_root.c
@@ -12,7 +12,7 @@
 
 extern int pivot_root(const char * new_root,const char * put_old);
 
-int pivot_root_main(int argc, char **argv);
+int pivot_root_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int pivot_root_main(int argc, char **argv)
 {
 	if (argc != 3)
diff --git a/util-linux/rdate.c b/util-linux/rdate.c
index 4387f04..150efbe 100644
--- a/util-linux/rdate.c
+++ b/util-linux/rdate.c
@@ -42,7 +42,7 @@
 	return ntohl(nett) - RFC_868_BIAS;
 }
 
-int rdate_main(int argc, char **argv);
+int rdate_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int rdate_main(int argc, char **argv)
 {
 	time_t remote_time;
diff --git a/util-linux/readprofile.c b/util-linux/readprofile.c
index 1521376..dbe7c71 100644
--- a/util-linux/readprofile.c
+++ b/util-linux/readprofile.c
@@ -41,7 +41,7 @@
 static const char defaultmap[] ALIGN1 = "/boot/System.map";
 static const char defaultpro[] ALIGN1 = "/proc/profile";
 
-int readprofile_main(int argc, char **argv);
+int readprofile_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int readprofile_main(int argc, char **argv)
 {
 	FILE *map;
diff --git a/util-linux/setarch.c b/util-linux/setarch.c
index 08294e5..dbc02de 100644
--- a/util-linux/setarch.c
+++ b/util-linux/setarch.c
@@ -11,7 +11,7 @@
 
 #include "libbb.h"
 
-int setarch_main(int ATTRIBUTE_UNUSED argc, char **argv);
+int setarch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int setarch_main(int ATTRIBUTE_UNUSED argc, char **argv)
 {
 	int pers = -1;
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c
index db43aa5..6858d26 100644
--- a/util-linux/swaponoff.c
+++ b/util-linux/swaponoff.c
@@ -58,7 +58,7 @@
 	return err;
 }
 
-int swap_on_off_main(int argc, char **argv);
+int swap_on_off_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int swap_on_off_main(int argc, char **argv)
 {
 	int ret;
diff --git a/util-linux/switch_root.c b/util-linux/switch_root.c
index e4e9e21..700f799 100644
--- a/util-linux/switch_root.c
+++ b/util-linux/switch_root.c
@@ -64,7 +64,7 @@
 	} else unlink(directory);
 }
 
-int switch_root_main(int argc, char **argv);
+int switch_root_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int switch_root_main(int argc, char **argv)
 {
 	char *newroot, *console = NULL;
diff --git a/util-linux/umount.c b/util-linux/umount.c
index c57a49e..17d88b3 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -21,7 +21,7 @@
 #define OPT_REMOUNT             (1 << 4)
 #define OPT_ALL                 (ENABLE_FEATURE_UMOUNT_ALL ? (1 << 5) : 0)
 
-int umount_main(int argc, char **argv);
+int umount_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int umount_main(int argc, char **argv)
 {
 	int doForce;