run.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/bin/sh
  2. # Copyright 2017-2022 Yury Gribov
  3. #
  4. # The MIT License (MIT)
  5. #
  6. # Use of this source code is governed by MIT license that can be
  7. # found in the LICENSE.txt file.
  8. # This is a simple test for Implib.so functionality.
  9. # Run it like
  10. # ./run.sh ARCH
  11. # where ARCH stands for any supported arch (arm, x86_64, etc., see `implib-gen -h' for full list).
  12. # Note that you may need to install qemu-user for respective platform
  13. # (i386 also needs gcc-multilib).
  14. set -eu
  15. cd $(dirname $0)
  16. if test -n "${1:-}"; then
  17. ARCH="$1"
  18. fi
  19. . ../common.sh
  20. CFLAGS="-g -O2 $CFLAGS"
  21. # Build shlib to test against
  22. $CC $CFLAGS -shared -fPIC interposed.c -o libinterposed.so
  23. # Standalone executables
  24. for ADD_CFLAGS in '-no-pie' '-fPIE'; do
  25. # Check for older compilers
  26. case "$ADD_CFLAGS" in
  27. -no-pie)
  28. (strings $(which $CC) | grep -q no-pie) || continue
  29. ;;
  30. esac
  31. for ADD_GFLAGS in '' '--no-lazy-load'; do
  32. echo "Standalone executable: GFLAGS += '$ADD_GFLAGS', CFLAGS += '$ADD_CFLAGS'"
  33. # Prepare implib
  34. ${PYTHON:-} ../../implib-gen.py -q --target $TARGET $ADD_GFLAGS libinterposed.so
  35. # Build app
  36. $CC $CFLAGS $ADD_CFLAGS main.c test.c libinterposed.so.tramp.S libinterposed.so.init.c $LIBS
  37. LD_LIBRARY_PATH=.:${LD_LIBRARY_PATH:-} $INTERP ./a.out > a.out.log
  38. diff test.ref a.out.log
  39. done
  40. done
  41. # Shlibs
  42. for ADD_GFLAGS in '' '--no-lazy-load'; do
  43. echo "Shared library: GFLAGS += '$ADD_GFLAGS'"
  44. # Prepare implib
  45. ${PYTHON:-} ../../implib-gen.py -q --target $TARGET $ADD_GFLAGS libinterposed.so
  46. # Build shlib
  47. $CC $CFLAGS -shared -fPIC shlib.c test.c libinterposed.so.tramp.S libinterposed.so.init.c $LIBS -o shlib.so
  48. # Build app
  49. $CC $CFLAGS $ADD_CFLAGS main.c shlib.so
  50. LD_LIBRARY_PATH=.:${LD_LIBRARY_PATH:-} $INTERP ./a.out > a.out.log
  51. diff test.ref a.out.log
  52. done
  53. echo SUCCESS