From 17cf73001c991b40d868f46a42470f47fa45fbb9 Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Fri, 21 Jun 2024 18:19:59 +0200 Subject: [PATCH] CI updates --- .github/workflows/ci.yml | 6 ++++++ src/check/dt_check.cpp | 6 +++--- src/help.cpp | 10 ++++++++++ src/util/system_headers.h | 22 +++++++++++++++++++++- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 26ceef7c..d6958b90 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,6 +110,8 @@ jobs: with: { submodules: true } - name: Check out test suite run: git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite + - run: set -x; clang --version; clang++ --version + - run: set -x; gcc --version; g++ --version - run: clang -E -x c -dM /dev/null # list predefined macros for C - run: clang++ -E -x c++ -dM /dev/null # list predefined macros for C++ - run: gcc -E -x c -dM /dev/null # list predefined macros for C @@ -235,8 +237,11 @@ jobs: - name: Check out test suite if: ${{ matrix.testsuite }} run: git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite + - run: set -x; clang --version; clang++ --version - run: clang -E -x c -dM /dev/null # list predefined macros for C - run: clang++ -E -x c++ -dM /dev/null # list predefined macros for C++ + - run: set -x; ${{ matrix.gcc }} --version; ${{ matrix.gxx }} --version + if: ${{ matrix.gcc }} - run: ${{ matrix.gcc }} -E -x c -dM /dev/null # list predefined macros for C if: ${{ matrix.gcc }} - run: ${{ matrix.gxx }} -E -x c++ -dM /dev/null # list predefined macros for C++ @@ -546,6 +551,7 @@ jobs: if test "X$ZIG_PIC" = "X-fPIE"; then true; echo "ZIG_FLAGS=$ZIG_FLAGS --start-no-unused-arguments -pie --end-no-unused-arguments" >> $GITHUB_ENV fi + - run: set -x; zig version; zig-cc --version; zig-cxx --version - run: zig-cc -E -x c -dM /dev/null # list predefined macros for C - run: zig-cxx -E -x c++ -dM /dev/null # list predefined macros for C++ - name: ${{ format('Build Release with zig-cc -target {0} {1}', env.ZIG_TARGET, env.ZIG_PIC) }} diff --git a/src/check/dt_check.cpp b/src/check/dt_check.cpp index 6657a6c2..6df6f729 100644 --- a/src/check/dt_check.cpp +++ b/src/check/dt_check.cpp @@ -491,7 +491,7 @@ struct CheckSignedness { }; template -struct TestNoAliasingStruct { +struct TestNoAliasingStruct { // check working -fno-strict-aliasing static noinline bool test(A *a, B *b) noexcept { *a = 0; *b = 0; @@ -504,10 +504,10 @@ static forceinline bool testNoAliasing(A *a, B *b) noexcept { return TestNoAliasingStruct::test(a, b); } template -struct TestIntegerWrap { +struct TestIntegerWrap { // check working -fno-strict-overflow static inline bool inc_gt(const T x) noexcept { return x + 1 > x; } static inline bool dec_lt(const T x) noexcept { return x - 1 < x; } - static inline bool neg_eq(const T x) noexcept { return T(0) - x == x; } + static inline bool neg_eq(const T x) noexcept { return T(T(0) - x) == x; } }; // diff --git a/src/help.cpp b/src/help.cpp index e6aecce5..5b184db2 100644 --- a/src/help.cpp +++ b/src/help.cpp @@ -618,6 +618,16 @@ void show_sysinfo(const char *options_var) { #endif // misc compilation options +#if defined(__PIC__) + cf_print("__PIC__", "%lld", __PIC__ + 0, 3); +#elif defined(__pic__) + cf_print("__pic__", "%lld", __pic__ + 0, 3); +#endif +#if defined(__PIE__) + cf_print("__PIE__", "%lld", __PIE__ + 0, 3); +#elif defined(__pie__) + cf_print("__pie__", "%lld", __pie__ + 0, 3); +#endif #if defined(UPX_CONFIG_DISABLE_WSTRICT) cf_print("UPX_CONFIG_DISABLE_WSTRICT", "%lld", UPX_CONFIG_DISABLE_WSTRICT + 0, 3); #endif diff --git a/src/util/system_headers.h b/src/util/system_headers.h index e1a25c93..4b7f1d30 100644 --- a/src/util/system_headers.h +++ b/src/util/system_headers.h @@ -27,6 +27,7 @@ #pragma once #include "system_defs.h" +#include "system_features.h" #if !(__cplusplus + 0 >= 201703L) #error "FATAL ERROR: C++17 is required" @@ -40,7 +41,7 @@ #error "missing __CYGWIN__" #endif #if defined(__clang__) || defined(__GNUC__) -// these are pre-defined since gcc-4.6 (2011) and clang-3.2 (2012) +// byte order - these are pre-defined since gcc-4.6 (2011) and clang-3.2 (2012) #if !defined(__ORDER_BIG_ENDIAN__) || (__ORDER_BIG_ENDIAN__ + 0 == 0) #error "missing __ORDER_BIG_ENDIAN__" #endif @@ -60,6 +61,25 @@ #error "unexpected __BYTE_ORDER__" #endif #endif +// pic and pie +#if defined(__PIC__) && defined(__pic__) +static_assert((__PIC__) == (__pic__)); +#endif +#if defined(__PIC__) +static_assert(__PIC__ == 1 || __PIC__ == 2); +#endif +#if defined(__pic__) +static_assert(__pic__ == 1 || __pic__ == 2); +#endif +#if defined(__PIE__) && defined(__pie__) +static_assert((__PIE__) == (__pie__)); +#endif +#if defined(__PIE__) +static_assert(__PIE__ == 1 || __PIE__ == 2); +#endif +#if defined(__pie__) +static_assert(__pie__ == 1 || __pie__ == 2); +#endif // sanity checks #if defined(_ILP32) || defined(__ILP32) || defined(__ILP32__)