Skip to content

Commit

Permalink
Add tests for uclibc support.
Browse files Browse the repository at this point in the history
  • Loading branch information
kubo committed Mar 10, 2020
1 parent 2905e24 commit 0a4c2a1
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 10 deletions.
7 changes: 6 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
language: c
matrix:
include:
- name: Linux x86_64 and i686 with and without valgrind
- name: Linux x86_64 and i686 (valgrind and uclibc also)
os: linux
sudo: required
addons:
apt:
sources:
Expand All @@ -18,10 +19,14 @@ matrix:
- make relro_pie_tests CC=gcc-8
- make relro_pie_m32_tests CC=gcc-8
- make relro_pie_tests_on_valgrind CC=gcc-8
- ./uclibc-test.sh x86_64
- ./uclibc-test.sh i686
- export OPT_CFLAGS=-O3
- make relro_pie_tests CC=gcc-8
- make relro_pie_m32_tests CC=gcc-8
- make relro_pie_tests_on_valgrind CC=gcc-8
- ./uclibc-test.sh x86_64
- ./uclibc-test.sh i686
- name: arm, armhf, arm64, ppc and ppc64le on QEMU 2.8
os: linux
dist: xenial
Expand Down
18 changes: 9 additions & 9 deletions test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ SOEXT = so
LIBS = -ldl -lm
PLTHOOK_C = plthook_elf.c
TESTS = run_tests
QEMU_CMD =
KICK_CMD =

ifeq ($(UNAME_S),Linux)
# Linux
TESTS = relro_pie_tests
ifneq ($(TARGET_PLATFORM),)
CC = $(TARGET_PLATFORM)-gcc
QEMU_CMD = qemu-$(or $(QEMU_ARCH),$(shell echo $(TARGET_PLATFORM) | sed -e 's/-.*//')) -L /usr/$(TARGET_PLATFORM)
KICK_CMD = qemu-$(or $(QEMU_ARCH),$(shell echo $(TARGET_PLATFORM) | sed -e 's/-.*//')) -L /usr/$(TARGET_PLATFORM)
endif
endif

Expand Down Expand Up @@ -64,9 +64,9 @@ testprog$(EXEEXT): testprog.c ../$(PLTHOOK_C) libtest.h
$(CC) $(CFLAGS_EXE) $(CFLAGS) -o testprog$(EXEEXT) -I.. testprog.c ../$(PLTHOOK_C) -L. -ltest $(LIBS)

run_tests: clean libtest.$(SOEXT) testprog$(EXEEXT)
LD_LIBRARY_PATH=. $(QEMU_CMD) ./testprog$(EXEEXT) open
LD_LIBRARY_PATH=. $(QEMU_CMD) ./testprog$(EXEEXT) open_by_handle
test "$(SKIP_OPEN_BY_ADDRESS_TEST)" || env LD_LIBRARY_PATH=. $(QEMU_CMD) ./testprog$(EXEEXT) open_by_address
LD_LIBRARY_PATH=. $(KICK_CMD) ./testprog$(EXEEXT) open
LD_LIBRARY_PATH=. $(KICK_CMD) ./testprog$(EXEEXT) open_by_handle
test "$(SKIP_OPEN_BY_ADDRESS_TEST)" || env LD_LIBRARY_PATH=. $(KICK_CMD) ./testprog$(EXEEXT) open_by_address

check: $(TESTS)

Expand Down Expand Up @@ -103,13 +103,13 @@ relro_pie_m32_tests:

relro_pie_tests_on_valgrind:
@echo ------------ check on valgrind ------------
$(MAKE) run_tests "EXTRA_CFLAGS=" QEMU_CMD=valgrind
$(MAKE) run_tests "EXTRA_CFLAGS=" KICK_CMD=valgrind
@echo ------------ check Full RELRO on valgrind ------------
$(MAKE) run_tests "EXTRA_CFLAGS=-Wl,-z,relro,-z,now" QEMU_CMD=valgrind
$(MAKE) run_tests "EXTRA_CFLAGS=-Wl,-z,relro,-z,now" KICK_CMD=valgrind
@echo ------------ check 32-bit on valgrind ------------
$(MAKE) run_tests "EXTRA_CFLAGS=-m32" QEMU_CMD=valgrind
$(MAKE) run_tests "EXTRA_CFLAGS=-m32" KICK_CMD=valgrind
@echo ------------ check 32-bit Full RELRO on valgrind ------------
$(MAKE) run_tests "EXTRA_CFLAGS=-m32 -Wl,-z,relro,-z,now" QEMU_CMD=valgrind
$(MAKE) run_tests "EXTRA_CFLAGS=-m32 -Wl,-z,relro,-z,now" KICK_CMD=valgrind

clean:
$(RM) libtest.$(SOEXT) testprog$(EXEEXT)
60 changes: 60 additions & 0 deletions test/uclibc-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/bin/bash

case "$1" in
x86_64)
ARCH=x86-64-core-i7
LIBC=uclibc
TOOLCHAIN_VER=stable-2018.11-1
TARGET_PLATFORM=x86_64-buildroot-linux-uclibc
;;
i686)
ARCH=x86-core2
LIBC=uclibc
TOOLCHAIN_VER=stable-2018.11-1
TARGET_PLATFORM=i686-buildroot-linux-uclibc
;;
esac

set -e

THIS_COMMAND=$0

run_make() {
BASE_NAME=$ARCH--$LIBC--$TOOLCHAIN_VER
export SYSROOT=$BASE_NAME/$TARGET_PLATFORM/sysroot
if test -f $BASE_NAME.tar.bz2; then
echo Found $BASE_NAME.tar.bz2
else
echo Download $BASE_NAME.tar.bz2
wget https://toolchains.bootlin.com/downloads/releases/toolchains/$ARCH/tarballs/$BASE_NAME.tar.bz2
fi
if test -d $BASE_NAME; then
echo Found $BASE_NAME
else
echo Extract $BASE_NAME.tar.bz2
tar xfj $BASE_NAME.tar.bz2
fi
if test -h $SYSROOT/proc/self; then
echo Found $SYSROOT/proc/self
else
echo Mount $SYSROOT/proc
sudo mount -t proc none $SYSROOT/proc
fi
export RUN_AS_KICK_CMD=1
export PATH="$BASE_NAME/bin:$PATH"
make relro_pie_tests TARGET_PLATFORM=$TARGET_PLATFORM KICK_CMD=$THIS_COMMAND
}

kick_cmd() {
cp testprog $SYSROOT/usr/bin
cp libtest.so $SYSROOT/usr/lib
cd $SYSROOT
shift
sudo chroot . ./usr/bin/testprog "$@"
}

if test "$RUN_AS_KICK_CMD"; then
kick_cmd "$@"
else
run_make "$@"
fi

0 comments on commit 0a4c2a1

Please sign in to comment.