path: root/tools/testing/selftests/rcutorture
diff options
authorWilly Tarreau <w@1wt.eu>2018-09-09 13:33:02 +0200
committerPaul E. McKenney <paulmck@linux.ibm.com>2018-11-08 21:52:55 -0800
commitb94ec36896dafc0a12106b1536fe87f99e9a0c5d (patch)
tree0e82bbcda7fd468e819c3b4c0cce649b5a660dd8 /tools/testing/selftests/rcutorture
parentrcutorture: Import a copy of nolibc (diff)
rcutorture: Make use of nolibc when available
This reduces the size of the init executable from ~800 kB to ~800 bytes on x86_64. This is only implemented for x86_64, i386, arm and arm64. Others not tested. Signed-off-by: Willy Tarreau <w@1wt.eu> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'tools/testing/selftests/rcutorture')
1 files changed, 17 insertions, 1 deletions
diff --git a/tools/testing/selftests/rcutorture/bin/mkinitrd.sh b/tools/testing/selftests/rcutorture/bin/mkinitrd.sh
index 56a56ea06983..da298394daa2 100755
--- a/tools/testing/selftests/rcutorture/bin/mkinitrd.sh
+++ b/tools/testing/selftests/rcutorture/bin/mkinitrd.sh
@@ -82,8 +82,10 @@ cd $D
mkdir -p initrd
cd initrd
cat > init.c << '___EOF___'
+#ifndef NOLIBC
#include <unistd.h>
#include <sys/time.h>
volatile unsigned long delaycount;
@@ -113,7 +115,21 @@ int main(int argc, int argv[])
return 0;
-${CROSS_COMPILE}gcc -s -static -Os -o init init.c
+# build using nolibc on supported archs (smaller executable) and fall
+# back to regular glibc on other ones.
+if echo -e "#if __x86_64__||__i386__||__i486__||__i586__||__i686__" \
+ "||__ARM_EABI__||__aarch64__\nyes\n#endif" \
+ | ${CROSS_COMPILE}gcc -E -nostdlib -xc - \
+ | grep -q '^yes'; then
+ # architecture supported by nolibc
+ ${CROSS_COMPILE}gcc -fno-asynchronous-unwind-tables -fno-ident \
+ -nostdlib -include ../bin/nolibc.h -lgcc -s -static -Os \
+ -o init init.c
+ ${CROSS_COMPILE}gcc -s -static -Os -o init init.c
rm init.c
echo "Done creating a statically linked C-language initrd"