CI updates

This commit is contained in:
Markus F.X.J. Oberhumer
2023-11-17 11:50:52 +01:00
parent 46029bb8a0
commit e79c790264
15 changed files with 87 additions and 45 deletions
+7 -1
View File
@@ -68,7 +68,9 @@ jobs:
matrix: matrix:
include: include:
- { os: ubuntu-22.04, use_m32: true } - { os: ubuntu-22.04, use_m32: true }
- { os: ubuntu-20.04, use_m32: false } # use_m32 also works here, but save some CI time - { os: ubuntu-20.04, use_m32: true } # use_m32 also works here, but save some CI time
env:
UPX_CONFIG_EXPECT_THREADS: 'ON'
steps: steps:
- name: 'Install extra 32-bit and Windows packages' - name: 'Install extra 32-bit and Windows packages'
if: ${{ matrix.use_m32 }} if: ${{ matrix.use_m32 }}
@@ -76,6 +78,10 @@ jobs:
sudo dpkg --add-architecture i386 sudo dpkg --add-architecture i386
sudo apt-get update sudo apt-get update
sudo apt-get install -y g++-multilib g++-mingw-w64-i686 g++-mingw-w64-x86-64 sudo apt-get install -y g++-multilib g++-mingw-w64-i686 g++-mingw-w64-x86-64
# make sure that we use posix-threads (pthreads) and NOT win32-threads
for f in i686-w64-mingw32-g++ i686-w64-mingw32-gcc x86_64-w64-mingw32-g++ x86_64-w64-mingw32-gcc; do
if test -f /usr/bin/$f-posix; then sudo update-alternatives --set $f /usr/bin/$f-posix; fi
done
- name: 'Check out code' - name: 'Check out code'
uses: actions/checkout@v4 uses: actions/checkout@v4
with: { submodules: true } with: { submodules: true }
@@ -68,14 +68,14 @@ jobs:
run: | run: |
export CC="i686-w64-mingw32-clang -static" CXX="i686-w64-mingw32-clang++ -static" export CC="i686-w64-mingw32-clang -static" CXX="i686-w64-mingw32-clang++ -static"
CC="$CC -D_WIN32_WINNT=0x0400"; CXX="$CXX -D_WIN32_WINNT=0x0400" CC="$CC -D_WIN32_WINNT=0x0400"; CXX="$CXX -D_WIN32_WINNT=0x0400"
export CMAKE_SYSTEM_NAME=Windows # CMAKE_CROSSCOMPILING_EMULATOR=wine export CMAKE_SYSTEM_NAME=Windows CMAKE_CROSSCOMPILING_EMULATOR=wine
make UPX_XTARGET=i686-w64-mingw32-clang xtarget/debug xtarget/release make UPX_XTARGET=i686-w64-mingw32-clang xtarget/debug xtarget/release
- name: 'Build clang x86_64' - name: 'Build clang x86_64'
if: success() || failure() # run this step even if the previous step failed if: success() || failure() # run this step even if the previous step failed
run: | run: |
export CC="x86_64-w64-mingw32-clang -static" CXX="x86_64-w64-mingw32-clang++ -static" export CC="x86_64-w64-mingw32-clang -static" CXX="x86_64-w64-mingw32-clang++ -static"
CC="$CC -D_WIN32_WINNT=0x0400"; CXX="$CXX -D_WIN32_WINNT=0x0400" CC="$CC -D_WIN32_WINNT=0x0400"; CXX="$CXX -D_WIN32_WINNT=0x0400"
export CMAKE_SYSTEM_NAME=Windows # CMAKE_CROSSCOMPILING_EMULATOR=wine64 export CMAKE_SYSTEM_NAME=Windows CMAKE_CROSSCOMPILING_EMULATOR=wine64
make UPX_XTARGET=x86_64-w64-mingw32-clang xtarget/debug xtarget/release make UPX_XTARGET=x86_64-w64-mingw32-clang xtarget/debug xtarget/release
- name: 'Make artifact' - name: 'Make artifact'
run: | run: |
+25 -1
View File
@@ -81,6 +81,15 @@ function(print_var)
endif() endif()
endforeach() endforeach()
endfunction() endfunction()
function(print_have_symbol)
foreach(symbol ${ARGV})
set(var_name "HAVE_symbol_${symbol}")
check_symbol_exists(${symbol} "stddef.h" ${var_name})
if(${var_name})
message(STATUS "HAVE ${symbol}")
endif()
endforeach()
endfunction()
# useful for CI jobs: allow settings via environment and cache result # useful for CI jobs: allow settings via environment and cache result
function(upx_cache_bool_vars) function(upx_cache_bool_vars)
@@ -403,6 +412,20 @@ function(upx_add_glob_files)
set(${var_name} "${result}" PARENT_SCOPE) # return value set(${var_name} "${result}" PARENT_SCOPE) # return value
endfunction() endfunction()
# examine MinGW/Cygwin compiler configuration
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.git")
if(WIN32 OR MINGW OR CYGWIN)
if(CMAKE_C_COMPILER_ID MATCHES "(Clang|GNU)")
# runtime library: msvcrt vs ucrt vs cygwin
print_have_symbol(__CRTDLL__ __CYGWIN__ __CYGWIN32__ __MINGW32__ __MINGW64_VERSION_MAJOR __MSVCRT__ _UCRT)
# exception handing: SJLJ (setjmp/longjmp) vs DWARF vs SEH
print_have_symbol(__GCC_HAVE_DWARF2_CFI_ASM __SEH__ __USING_SJLJ_EXCEPTIONS__)
# threads: win32 vs posix/pthread/winpthreads vs mcfgthread
print_have_symbol(_REENTRANT __USING_MCFGTHREAD__)
endif()
endif()
endif()
upx_cmake_include_hook(3_common_compilation_flags_end) upx_cmake_include_hook(3_common_compilation_flags_end)
#*********************************************************************** #***********************************************************************
@@ -419,7 +442,7 @@ upx_cmake_include_hook(4_targets_begin)
if(NOT UPX_CONFIG_DISABLE_THREADS) if(NOT UPX_CONFIG_DISABLE_THREADS)
find_package(Threads) find_package(Threads)
endif() endif()
# make sure that threads are indeed fully supported # make sure that threads are indeed fully supported in C++
if(Threads_FOUND) if(Threads_FOUND)
foreach(f std_lock_guard.cpp) foreach(f std_lock_guard.cpp)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "EXECUTABLE") set(CMAKE_TRY_COMPILE_TARGET_TYPE "EXECUTABLE")
@@ -427,6 +450,7 @@ if(Threads_FOUND)
"${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/try_compile/${f}" "${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/try_compile/${f}"
OUTPUT_VARIABLE output) OUTPUT_VARIABLE output)
if(NOT result) if(NOT result)
# failed; under MinGW be sure the use the posix-threads and NOT the win32-threads version
#message(STATUS "${output}") # debug output from try_compile #message(STATUS "${output}") # debug output from try_compile
set(Threads_FOUND OFF) set(Threads_FOUND OFF)
break() break()
+7 -3
View File
@@ -6,6 +6,10 @@
ifeq ($(UPX_MAKEFILE_EXTRA_MK_INCLUDED),) ifeq ($(UPX_MAKEFILE_EXTRA_MK_INCLUDED),)
UPX_MAKEFILE_EXTRA_MK_INCLUDED := 1 UPX_MAKEFILE_EXTRA_MK_INCLUDED := 1
override check_defined = $(foreach 1,$1,$(if $(filter undefined,$(origin $1)),$(error ERROR: variable '$1' is not defined),))
override check_undefined = $(foreach 1,$1,$(if $(filter undefined,$(origin $1)),,$(error ERROR: variable '$1' is already defined)))
$(call check_undefined,run_config_and_build)
#*********************************************************************** #***********************************************************************
# extra builds: some pre-defined build configurations # extra builds: some pre-defined build configurations
#*********************************************************************** #***********************************************************************
@@ -223,7 +227,7 @@ xtarget/all: xtarget/debug xtarget/release
xtarget/debug: build/xtarget/$(UPX_XTARGET)/debug xtarget/debug: build/xtarget/$(UPX_XTARGET)/debug
xtarget/release: build/xtarget/$(UPX_XTARGET)/release xtarget/release: build/xtarget/$(UPX_XTARGET)/release
# set new default # set new default
.DEFAULT_GOAL = build/xtarget/$(UPX_XTARGET)/release .DEFAULT_GOAL = build/xtarget/$(UPX_XTARGET)/release
endif endif
endif endif
@@ -265,7 +269,7 @@ endif # bug work-around
SUBMODULES = doctest lzma-sdk ucl valgrind zlib SUBMODULES = doctest lzma-sdk ucl valgrind zlib
dummy := $(foreach m,$(SUBMODULES),$(if $(wildcard vendor/$m/[CL]*),$m,\ $(foreach 1,$(SUBMODULES),$(if $(wildcard vendor/$1/[CL]*),,\
$(error ERROR: missing git submodule '$m'; run 'git submodule update --init'))) $(error ERROR: missing git submodule '$1'; run 'git submodule update --init')))
endif # UPX_MAKEFILE_EXTRA_MK_INCLUDED endif # UPX_MAKEFILE_EXTRA_MK_INCLUDED
@@ -9,7 +9,7 @@ argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
# NOTE: this image is based on rebuild-stubs/upx-stubtools-20221212-v6, # NOTE: this image is based on rebuild-stubs/upx-stubtools-20221212-v6,
# so you have to create that image first # so you have to create that image first
# WARNING: we install many packages, so the resulting image needs A LOT of disk space! # WARNING: we install many packages, so the resulting image needs A LOT of disk space!
image=upx-cross-compile-ubuntu2204-20230721-v1 image=upx-cross-compile-ubuntu2204-20230721-v2
[[ $1 == --print-image ]] && echo "$image" && exit 0 [[ $1 == --print-image ]] && echo "$image" && exit 0
podman build -t "$image" -f "$argv0dir/Dockerfile" "$argv0dir" podman build -t "$image" -f "$argv0dir/Dockerfile" "$argv0dir"
@@ -2,7 +2,7 @@
# so you have to create that image first # so you have to create that image first
# WARNING: we install many packages, so the resulting image needs A LOT of disk space! # WARNING: we install many packages, so the resulting image needs A LOT of disk space!
FROM localhost/upx-stubtools-20221212-v6 FROM localhost/upx-stubtools-20221212-v6
ENV UPX_CONTAINER_IMAGE_NAME=upx-cross-compile-ubuntu2204-20230721-v1 ENV UPX_CONTAINER_IMAGE_NAME=upx-cross-compile-ubuntu2204-20230721-v2
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive
USER root USER root
@@ -34,6 +34,8 @@ RUN apt-get update && apt-get upgrade -y \
# Windows cross compilers # Windows cross compilers
g++-mingw-w64-i686 \ g++-mingw-w64-i686 \
g++-mingw-w64-x86-64 \ g++-mingw-w64-x86-64 \
# make sure that we use posix-threads (pthreads) and NOT win32-threads
&& for f in i686-w64-mingw32-g++ i686-w64-mingw32-gcc x86_64-w64-mingw32-g++ x86_64-w64-mingw32-gcc; do update-alternatives --set $f /usr/bin/$f-posix; done \
&& true && true
RUN apt-get install -y \ RUN apt-get install -y \
# clang-14 and tools # clang-14 and tools
+9 -7
View File
@@ -7,7 +7,7 @@ ii adduser 3.118ubuntu5
ii adwaita-icon-theme 41.0-1ubuntu1 all default icon theme of GNOME (small subset) ii adwaita-icon-theme 41.0-1ubuntu1 all default icon theme of GNOME (small subset)
ii alsa-topology-conf 1.2.5.1-2 all ALSA topology configuration files ii alsa-topology-conf 1.2.5.1-2 all ALSA topology configuration files
ii alsa-ucm-conf 1.2.6.3-1ubuntu1.8 all ALSA Use Case Manager configuration files ii alsa-ucm-conf 1.2.6.3-1ubuntu1.8 all ALSA Use Case Manager configuration files
ii apt 2.4.10 amd64 commandline package manager ii apt 2.4.11 amd64 commandline package manager
ii aria2 1.36.0-1 amd64 High speed download utility ii aria2 1.36.0-1 amd64 High speed download utility
ii at-spi2-core 2.44.0-3 amd64 Assistive Technology Service Provider Interface (dbus core) ii at-spi2-core 2.44.0-3 amd64 Assistive Technology Service Provider Interface (dbus core)
ii base-files 12ubuntu4.4 amd64 Debian base system miscellaneous files ii base-files 12ubuntu4.4 amd64 Debian base system miscellaneous files
@@ -297,7 +297,7 @@ ii libacl1:amd64 2.3.1-1
ii libaio1:amd64 0.3.112-13build1 amd64 Linux kernel AIO access library - shared library ii libaio1:amd64 0.3.112-13build1 amd64 Linux kernel AIO access library - shared library
ii libapparmor1:amd64 3.0.4-2ubuntu2.2 amd64 changehat AppArmor library ii libapparmor1:amd64 3.0.4-2ubuntu2.2 amd64 changehat AppArmor library
ii libapparmor1:i386 3.0.4-2ubuntu2.2 i386 changehat AppArmor library ii libapparmor1:i386 3.0.4-2ubuntu2.2 i386 changehat AppArmor library
ii libapt-pkg6.0:amd64 2.4.10 amd64 package management runtime library ii libapt-pkg6.0:amd64 2.4.11 amd64 package management runtime library
ii libarchive13:amd64 3.6.0-1ubuntu1 amd64 Multi-format archive and compression library (shared library) ii libarchive13:amd64 3.6.0-1ubuntu1 amd64 Multi-format archive and compression library (shared library)
ii libargon2-1:amd64 0~20171227-0.3 amd64 memory-hard hashing function - runtime library ii libargon2-1:amd64 0~20171227-0.3 amd64 memory-hard hashing function - runtime library
ii libaria2-0:amd64 1.36.0-1 amd64 C++ library interface to aria2 ii libaria2-0:amd64 1.36.0-1 amd64 C++ library interface to aria2
@@ -792,7 +792,7 @@ ii libpmemobj1:amd64 1.11.1-3build1
ii libpng16-16:amd64 1.6.37-3build5 amd64 PNG library - runtime (version 1.6) ii libpng16-16:amd64 1.6.37-3build5 amd64 PNG library - runtime (version 1.6)
ii libpng16-16:i386 1.6.37-3build5 i386 PNG library - runtime (version 1.6) ii libpng16-16:i386 1.6.37-3build5 i386 PNG library - runtime (version 1.6)
ii libpopt0:amd64 1.18-3build1 amd64 lib for parsing cmdline parameters ii libpopt0:amd64 1.18-3build1 amd64 lib for parsing cmdline parameters
ii libprocps8:amd64 2:3.3.17-6ubuntu2 amd64 library for accessing process information from /proc ii libprocps8:amd64 2:3.3.17-6ubuntu2.1 amd64 library for accessing process information from /proc
ii libproxy1v5:amd64 0.4.17-2 amd64 automatic proxy configuration management library (shared) ii libproxy1v5:amd64 0.4.17-2 amd64 automatic proxy configuration management library (shared)
ii libproxy1v5:i386 0.4.17-2 i386 automatic proxy configuration management library (shared) ii libproxy1v5:i386 0.4.17-2 i386 automatic proxy configuration management library (shared)
ii libpsl5:amd64 0.21.0-1.2build2 amd64 Library for Public Suffix List (shared libraries) ii libpsl5:amd64 0.21.0-1.2build2 amd64 Library for Public Suffix List (shared libraries)
@@ -1138,12 +1138,13 @@ ii parallel 20210822+ds-2
ii passwd 1:4.8.1-2ubuntu2.1 amd64 change and administer password and group data ii passwd 1:4.8.1-2ubuntu2.1 amd64 change and administer password and group data
ii patch 2.7.6-7build2 amd64 Apply a diff file to an original ii patch 2.7.6-7build2 amd64 Apply a diff file to an original
ii patchelf 0.14.3-1 amd64 modify properties of ELF executables ii patchelf 0.14.3-1 amd64 modify properties of ELF executables
ii patchutils 0.4.2-1build2 amd64 Utilities to work with patches
ii pax-utils 1.2.9-1 amd64 Security-focused ELF files checking tool ii pax-utils 1.2.9-1 amd64 Security-focused ELF files checking tool
ii paxctl 0.9-1build1 amd64 new PaX control program for using the PT_PAX_FLAGS marking ii paxctl 0.9-1build1 amd64 new PaX control program for using the PT_PAX_FLAGS marking
ii perl 5.34.0-3ubuntu1.2 amd64 Larry Wall's Practical Extraction and Report Language ii perl 5.34.0-3ubuntu1.2 amd64 Larry Wall's Practical Extraction and Report Language
ii perl-base 5.34.0-3ubuntu1.2 amd64 minimal Perl system ii perl-base 5.34.0-3ubuntu1.2 amd64 minimal Perl system
ii perl-modules-5.34 5.34.0-3ubuntu1.2 all Core Perl modules ii perl-modules-5.34 5.34.0-3ubuntu1.2 all Core Perl modules
ii procps 2:3.3.17-6ubuntu2 amd64 /proc file system utilities ii procps 2:3.3.17-6ubuntu2.1 amd64 /proc file system utilities
ii publicsuffix 20211207.1025-1 all accurate, machine-readable list of domain name suffixes ii publicsuffix 20211207.1025-1 all accurate, machine-readable list of domain name suffixes
ii python2-minimal 2.7.18-3 amd64 minimal subset of the Python2 language ii python2-minimal 2.7.18-3 amd64 minimal subset of the Python2 language
ii python2.7-minimal 2.7.18-13ubuntu1.1 amd64 Minimal subset of the Python language (version 2.7) ii python2.7-minimal 2.7.18-13ubuntu1.1 amd64 Minimal subset of the Python language (version 2.7)
@@ -1230,7 +1231,7 @@ ii zstd 1.4.8+dfsg-3build1
||/ Name Version Architecture Description ||/ Name Version Architecture Description
Packages sorted by Installed-Size: Packages sorted by Installed-Size:
8373937 ===== TOTAL (1224 packages) 8374158 ===== TOTAL (1225 packages)
545062 libwine amd64 545062 libwine amd64
474522 libwine i386 474522 libwine i386
270995 llvm-14-dev amd64 270995 llvm-14-dev amd64
@@ -1485,8 +1486,8 @@ Packages sorted by Installed-Size:
4249 ncurses-term all 4249 ncurses-term all
4236 xkb-data all 4236 xkb-data all
4204 llvm-14-linker-tools amd64 4204 llvm-14-linker-tools amd64
4156 apt amd64
4147 ripgrep amd64 4147 ripgrep amd64
4141 apt amd64
4082 libglib2.0-0 amd64 4082 libglib2.0-0 amd64
4024 python3-pygments all 4024 python3-pygments all
3930 vim amd64 3930 vim amd64
@@ -1503,7 +1504,7 @@ Packages sorted by Installed-Size:
3333 libxml2-dev amd64 3333 libxml2-dev amd64
3261 liblsan0-ppc64-cross all 3261 liblsan0-ppc64-cross all
3247 libstdc++6-ppc64-cross all 3247 libstdc++6-ppc64-cross all
3181 libapt-pkg6.0 amd64 3198 libapt-pkg6.0 amd64
3147 libvpx7 i386 3147 libvpx7 i386
3139 libhwasan0-arm64-cross all 3139 libhwasan0-arm64-cross all
3135 liblsan0-ppc64el-cross all 3135 liblsan0-ppc64el-cross all
@@ -1973,6 +1974,7 @@ Packages sorted by Installed-Size:
221 libxcb1 i386 221 libxcb1 i386
221 bfs amd64 221 bfs amd64
220 libidn2-0 amd64 220 libidn2-0 amd64
219 patchutils amd64
219 libtirpc3 amd64 219 libtirpc3 amd64
219 librhash0 amd64 219 librhash0 amd64
217 libasound2-data all 217 libasound2-data all
+1 -1
View File
@@ -15,7 +15,7 @@ RUN dpkg --add-architecture i386 \
# the full UPX binary inside the container via CMake: # the full UPX binary inside the container via CMake:
7zip bfs busybox bzip2 cabextract ccache chrpath cmake cpio curl elfutils fd-find file fzf \ 7zip bfs busybox bzip2 cabextract ccache chrpath cmake cpio curl elfutils fd-find file fzf \
g++ gawk gdb gojq ht htop hyperfine jq libzstd-dev lsb-release lz4 lzip lzop \ g++ gawk gdb gojq ht htop hyperfine jq libzstd-dev lsb-release lz4 lzip lzop \
mksh moreutils ninja-build p7zip parallel patch patchelf pax-utils paxctl \ mksh moreutils ninja-build p7zip parallel patch patchelf patchutils pax-utils paxctl \
python3 python3-pyasn1 python3-pycryptodome python3-zstd \ python3 python3-pyasn1 python3-pycryptodome python3-zstd \
re2c ripgrep rsync screen universal-ctags unzip vim yash zip zlib1g-dev zsh zstd \ re2c ripgrep rsync screen universal-ctags unzip vim yash zip zlib1g-dev zsh zstd \
# extra packages for compiling with "gcc -m32" and and "gcc -mx32": # extra packages for compiling with "gcc -m32" and and "gcc -mx32":
+9 -7
View File
@@ -3,7 +3,7 @@ Packages:
Desired=Unknown/Install/Remove/Purge/Hold Desired=Unknown/Install/Remove/Purge/Hold
ii 7zip 21.07+dfsg-4 amd64 7-Zip file archiver with a high compression ratio ii 7zip 21.07+dfsg-4 amd64 7-Zip file archiver with a high compression ratio
ii adduser 3.118ubuntu5 all add and remove users and groups ii adduser 3.118ubuntu5 all add and remove users and groups
ii apt 2.4.10 amd64 commandline package manager ii apt 2.4.11 amd64 commandline package manager
ii aria2 1.36.0-1 amd64 High speed download utility ii aria2 1.36.0-1 amd64 High speed download utility
ii base-files 12ubuntu4.4 amd64 Debian base system miscellaneous files ii base-files 12ubuntu4.4 amd64 Debian base system miscellaneous files
ii base-passwd 3.5.52build1 amd64 Debian base system master password and group files ii base-passwd 3.5.52build1 amd64 Debian base system master password and group files
@@ -78,7 +78,7 @@ ii lib32stdc++-11-dev 11.4.0-1ubuntu1~22.04 amd64
ii lib32stdc++6 12.3.0-1ubuntu1~22.04 amd64 GNU Standard C++ Library v3 (32 bit Version) ii lib32stdc++6 12.3.0-1ubuntu1~22.04 amd64 GNU Standard C++ Library v3 (32 bit Version)
ii lib32ubsan1 12.3.0-1ubuntu1~22.04 amd64 UBSan -- undefined behaviour sanitizer (32bit) ii lib32ubsan1 12.3.0-1ubuntu1~22.04 amd64 UBSan -- undefined behaviour sanitizer (32bit)
ii libacl1:amd64 2.3.1-1 amd64 access control list - shared library ii libacl1:amd64 2.3.1-1 amd64 access control list - shared library
ii libapt-pkg6.0:amd64 2.4.10 amd64 package management runtime library ii libapt-pkg6.0:amd64 2.4.11 amd64 package management runtime library
ii libarchive13:amd64 3.6.0-1ubuntu1 amd64 Multi-format archive and compression library (shared library) ii libarchive13:amd64 3.6.0-1ubuntu1 amd64 Multi-format archive and compression library (shared library)
ii libaria2-0:amd64 1.36.0-1 amd64 C++ library interface to aria2 ii libaria2-0:amd64 1.36.0-1 amd64 C++ library interface to aria2
ii libasan6:amd64 11.4.0-1ubuntu1~22.04 amd64 AddressSanitizer -- a fast memory error detector ii libasan6:amd64 11.4.0-1ubuntu1~22.04 amd64 AddressSanitizer -- a fast memory error detector
@@ -186,7 +186,7 @@ ii libpcre2-8-0:amd64 10.39-3ubuntu0.1 amd64
ii libpcre3:amd64 2:8.39-13ubuntu0.22.04.1 amd64 Old Perl 5 Compatible Regular Expression Library - runtime files ii libpcre3:amd64 2:8.39-13ubuntu0.22.04.1 amd64 Old Perl 5 Compatible Regular Expression Library - runtime files
ii libperl5.34:amd64 5.34.0-3ubuntu1.2 amd64 shared Perl library ii libperl5.34:amd64 5.34.0-3ubuntu1.2 amd64 shared Perl library
ii libpopt0:amd64 1.18-3build1 amd64 lib for parsing cmdline parameters ii libpopt0:amd64 1.18-3build1 amd64 lib for parsing cmdline parameters
ii libprocps8:amd64 2:3.3.17-6ubuntu2 amd64 library for accessing process information from /proc ii libprocps8:amd64 2:3.3.17-6ubuntu2.1 amd64 library for accessing process information from /proc
ii libpsl5:amd64 0.21.0-1.2build2 amd64 Library for Public Suffix List (shared libraries) ii libpsl5:amd64 0.21.0-1.2build2 amd64 Library for Public Suffix List (shared libraries)
ii libpython2.7-minimal:amd64 2.7.18-13ubuntu1.1 amd64 Minimal subset of the Python language (version 2.7) ii libpython2.7-minimal:amd64 2.7.18-13ubuntu1.1 amd64 Minimal subset of the Python language (version 2.7)
ii libpython3-stdlib:amd64 3.10.6-1~22.04 amd64 interactive high-level object-oriented language (default python3 version) ii libpython3-stdlib:amd64 3.10.6-1~22.04 amd64 interactive high-level object-oriented language (default python3 version)
@@ -278,12 +278,13 @@ ii parallel 20210822+ds-2 all
ii passwd 1:4.8.1-2ubuntu2.1 amd64 change and administer password and group data ii passwd 1:4.8.1-2ubuntu2.1 amd64 change and administer password and group data
ii patch 2.7.6-7build2 amd64 Apply a diff file to an original ii patch 2.7.6-7build2 amd64 Apply a diff file to an original
ii patchelf 0.14.3-1 amd64 modify properties of ELF executables ii patchelf 0.14.3-1 amd64 modify properties of ELF executables
ii patchutils 0.4.2-1build2 amd64 Utilities to work with patches
ii pax-utils 1.2.9-1 amd64 Security-focused ELF files checking tool ii pax-utils 1.2.9-1 amd64 Security-focused ELF files checking tool
ii paxctl 0.9-1build1 amd64 new PaX control program for using the PT_PAX_FLAGS marking ii paxctl 0.9-1build1 amd64 new PaX control program for using the PT_PAX_FLAGS marking
ii perl 5.34.0-3ubuntu1.2 amd64 Larry Wall's Practical Extraction and Report Language ii perl 5.34.0-3ubuntu1.2 amd64 Larry Wall's Practical Extraction and Report Language
ii perl-base 5.34.0-3ubuntu1.2 amd64 minimal Perl system ii perl-base 5.34.0-3ubuntu1.2 amd64 minimal Perl system
ii perl-modules-5.34 5.34.0-3ubuntu1.2 all Core Perl modules ii perl-modules-5.34 5.34.0-3ubuntu1.2 all Core Perl modules
ii procps 2:3.3.17-6ubuntu2 amd64 /proc file system utilities ii procps 2:3.3.17-6ubuntu2.1 amd64 /proc file system utilities
ii python2-minimal 2.7.18-3 amd64 minimal subset of the Python2 language ii python2-minimal 2.7.18-3 amd64 minimal subset of the Python2 language
ii python2.7-minimal 2.7.18-13ubuntu1.1 amd64 Minimal subset of the Python language (version 2.7) ii python2.7-minimal 2.7.18-13ubuntu1.1 amd64 Minimal subset of the Python language (version 2.7)
ii python3 3.10.6-1~22.04 amd64 interactive high-level object-oriented language (default python3 version) ii python3 3.10.6-1~22.04 amd64 interactive high-level object-oriented language (default python3 version)
@@ -330,7 +331,7 @@ ii zstd 1.4.8+dfsg-3build1 amd64
||/ Name Version Architecture Description ||/ Name Version Architecture Description
Packages sorted by Installed-Size: Packages sorted by Installed-Size:
754091 ===== TOTAL (324 packages) 754312 ===== TOTAL (325 packages)
52747 gcc-11 amd64 52747 gcc-11 amd64
34444 libicu70 amd64 34444 libicu70 amd64
32782 vim-runtime all 32782 vim-runtime all
@@ -372,8 +373,8 @@ Packages sorted by Installed-Size:
5768 libpython3.10 amd64 5768 libpython3.10 amd64
5103 libpython3.10-minimal amd64 5103 libpython3.10-minimal amd64
4249 ncurses-term all 4249 ncurses-term all
4156 apt amd64
4147 ripgrep amd64 4147 ripgrep amd64
4141 apt amd64
4082 libglib2.0-0 amd64 4082 libglib2.0-0 amd64
3930 vim amd64 3930 vim amd64
3643 python2.7-minimal amd64 3643 python2.7-minimal amd64
@@ -383,7 +384,7 @@ Packages sorted by Installed-Size:
3405 libmpfr6 amd64 3405 libmpfr6 amd64
3399 util-linux amd64 3399 util-linux amd64
3347 libaria2-0 amd64 3347 libaria2-0 amd64
3181 libapt-pkg6.0 amd64 3198 libapt-pkg6.0 amd64
3013 libboost-regex1.74.0 amd64 3013 libboost-regex1.74.0 amd64
2961 liblsan0 amd64 2961 liblsan0 amd64
2943 parallel all 2943 parallel all
@@ -542,6 +543,7 @@ Packages sorted by Installed-Size:
225 libcrypt1 amd64 225 libcrypt1 amd64
221 bfs amd64 221 bfs amd64
220 libidn2-0 amd64 220 libidn2-0 amd64
219 patchutils amd64
219 libtirpc3 amd64 219 libtirpc3 amd64
219 librhash0 amd64 219 librhash0 amd64
214 dash amd64 214 dash amd64
+8 -7
View File
@@ -20,8 +20,8 @@ endif
# NOTE that top-level Makefile .DEFAULT_GOAL is build/release # NOTE that top-level Makefile .DEFAULT_GOAL is build/release
.DEFAULT_GOAL = build/debug .DEFAULT_GOAL = build/debug
build/debug: $(top_srcdir)/build/debug/upx build/debug: $(top_srcdir)/build/debug
build/release: $(top_srcdir)/build/release/upx build/release: $(top_srcdir)/build/release
.NOTPARALLEL: # because the actual builds use "cmake --parallel" .NOTPARALLEL: # because the actual builds use "cmake --parallel"
.PHONY: PHONY .PHONY: PHONY
@@ -33,14 +33,15 @@ debug: build/debug
release: build/release release: build/release
all build/all: build/debug build/release all build/all: build/debug build/release
$(top_srcdir)/build/debug/upx: PHONY $(top_srcdir)/build/debug: PHONY
$(MAKE) -C $(top_srcdir) build/debug $(MAKE) -C $(top_srcdir) build/debug
$(top_srcdir)/build/release/upx: PHONY $(top_srcdir)/build/release: PHONY
$(MAKE) -C $(top_srcdir) build/release $(MAKE) -C $(top_srcdir) build/release
# convenience # convenience
CTEST = ctest
test: $(top_srcdir)/$(.DEFAULT_GOAL) test: $(top_srcdir)/$(.DEFAULT_GOAL)
cd $(top_srcdir)/$(.DEFAULT_GOAL) && ctest cd $(top_srcdir)/$(.DEFAULT_GOAL) && $(CTEST)
# #
# "make run-testsuite" # "make run-testsuite"
@@ -69,10 +70,10 @@ run-testsuite: run-testsuite-release
run-testsuite-%: export upx_testsuite_SRCDIR := $(upx_testsuite_SRCDIR) run-testsuite-%: export upx_testsuite_SRCDIR := $(upx_testsuite_SRCDIR)
run-testsuite-%: export upx_testsuite_BUILDDIR := ./tmp-upx-testsuite run-testsuite-%: export upx_testsuite_BUILDDIR := ./tmp-upx-testsuite
run-testsuite-debug: export upx_exe := $(top_srcdir)/build/debug/upx run-testsuite-debug: export upx_exe := $(top_srcdir)/build/debug/upx
run-testsuite-debug: PHONY $(top_srcdir)/build/debug/upx run-testsuite-debug: PHONY $(top_srcdir)/build/debug
time -p bash $(top_srcdir)/misc/testsuite/upx_testsuite_1.sh time -p bash $(top_srcdir)/misc/testsuite/upx_testsuite_1.sh
run-testsuite-release: export upx_exe := $(top_srcdir)/build/release/upx run-testsuite-release: export upx_exe := $(top_srcdir)/build/release/upx
run-testsuite-release: PHONY $(top_srcdir)/build/release/upx run-testsuite-release: PHONY $(top_srcdir)/build/release
time -p bash $(top_srcdir)/misc/testsuite/upx_testsuite_1.sh time -p bash $(top_srcdir)/misc/testsuite/upx_testsuite_1.sh
endif endif
endif endif
+4 -4
View File
@@ -617,13 +617,13 @@ TEST_CASE("libc snprintf") {
intmax_t im = ll; intmax_t im = ll;
uintmax_t um = llu; uintmax_t um = llu;
snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%jd", -4, 0, 0, 0, 0, 0, 0, 0, 4, im); snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%jd", -4, 0, 0, 0, 0, 0, 0, 0, 4, im);
WARN_EQ(strcmp(buf, "-4.0.0.0.0.0.0.0.4.-1"), 0); CHECK_EQ(strcmp(buf, "-4.0.0.0.0.0.0.0.4.-1"), 0);
snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%ju", -5, 0, 0, 0, 0, 0, 0, 0, 5, um); snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%ju", -5, 0, 0, 0, 0, 0, 0, 0, 5, um);
WARN_EQ(strcmp(buf, "-5.0.0.0.0.0.0.0.5.18446744073709551615"), 0); CHECK_EQ(strcmp(buf, "-5.0.0.0.0.0.0.0.5.18446744073709551615"), 0);
snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%jx", -6, 0, 0, 0, 0, 0, 0, 0, 6, um); snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%jx", -6, 0, 0, 0, 0, 0, 0, 0, 6, um);
WARN_EQ(strcmp(buf, "-6.0.0.0.0.0.0.0.6.ffffffffffffffff"), 0); CHECK_EQ(strcmp(buf, "-6.0.0.0.0.0.0.0.6.ffffffffffffffff"), 0);
snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%#jx", -7, 0, 0, 0, 0, 0, 0, 0, 7, um); snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%#jx", -7, 0, 0, 0, 0, 0, 0, 0, 7, um);
WARN_EQ(strcmp(buf, "-7.0.0.0.0.0.0.0.7.0xffffffffffffffff"), 0); CHECK_EQ(strcmp(buf, "-7.0.0.0.0.0.0.0.7.0xffffffffffffffff"), 0);
} }
#if 0 #if 0
+1
View File
@@ -322,6 +322,7 @@ typedef upx_int64_t upx_off_t;
#define VALGRIND_MAKE_MEM_UNDEFINED(addr, len) 0 #define VALGRIND_MAKE_MEM_UNDEFINED(addr, len) 0
#endif #endif
// TODO later: check __MINGW_PRINTF_FORMAT
#if defined(_WIN32) && defined(__MINGW32__) && defined(__GNUC__) && !defined(__clang__) #if defined(_WIN32) && defined(__MINGW32__) && defined(__GNUC__) && !defined(__clang__)
#define attribute_format(a, b) __attribute__((__format__(__gnu_printf__, a, b))) #define attribute_format(a, b) __attribute__((__format__(__gnu_printf__, a, b)))
#elif (ACC_CC_CLANG || ACC_CC_GNUC) #elif (ACC_CC_CLANG || ACC_CC_GNUC)
+3 -3
View File
@@ -57,9 +57,9 @@ static_assert(sizeof(void *) == 8);
#if !defined(_FILE_OFFSET_BITS) #if !defined(_FILE_OFFSET_BITS)
#define _FILE_OFFSET_BITS 64 #define _FILE_OFFSET_BITS 64
#endif #endif
#if defined(_WIN32) && defined(__MINGW32__) && defined(__GNUC__) #if defined(_WIN32) && defined(__MINGW32__) && (defined(__clang__) || defined(__GNUC__))
#if !defined(_USE_MINGW_ANSI_STDIO) #if !defined(__USE_MINGW_ANSI_STDIO)
#define _USE_MINGW_ANSI_STDIO 1 #define __USE_MINGW_ANSI_STDIO 1
#endif #endif
#endif #endif
#if defined(_WIN32) #if defined(_WIN32)
+2 -2
View File
@@ -518,8 +518,8 @@ void show_sysinfo(const char *options_var) {
#if defined(__MSVCRT_VERSION__) #if defined(__MSVCRT_VERSION__)
cf_print("__MSVCRT_VERSION__", "0x%04llx", __MSVCRT_VERSION__ + 0); cf_print("__MSVCRT_VERSION__", "0x%04llx", __MSVCRT_VERSION__ + 0);
#endif #endif
#if defined(_USE_MINGW_ANSI_STDIO) #if defined(__MINGW64_VERSION_MAJOR)
cf_print("_USE_MINGW_ANSI_STDIO", "%lld", _USE_MINGW_ANSI_STDIO + 0, 3); cf_print("__MINGW64_VERSION_MAJOR", "%lld", __MINGW64_VERSION_MAJOR + 0);
#endif #endif
#if defined(__USE_MINGW_ANSI_STDIO) #if defined(__USE_MINGW_ANSI_STDIO)
cf_print("__USE_MINGW_ANSI_STDIO", "%lld", __USE_MINGW_ANSI_STDIO + 0, 3); cf_print("__USE_MINGW_ANSI_STDIO", "%lld", __USE_MINGW_ANSI_STDIO + 0, 3);
+5 -5
View File
@@ -296,8 +296,8 @@ struct FixDeleter final { // helper so we don't leak memory on exceptions
} // namespace } // namespace
void PeFile::Reloc::RelocationBlock::reset() noexcept { void PeFile::Reloc::RelocationBlock::reset() noexcept {
rel = nullptr; rel = nullptr; // SPAN_0
rel1 = nullptr; rel1 = nullptr; // SPAN_0
count = 0; count = 0;
} }
@@ -335,13 +335,13 @@ void PeFile::Reloc::initSpans() {
rb.reset(); rb.reset();
} }
// check values for better error messages (instead of getting a cryptic SPAN failure) // check values so that we have better error messages (instead of getting a cryptic SPAN failure)
bool PeFile::Reloc::readFromRelocationBlock(byte *next_rb) { // set rb bool PeFile::Reloc::readFromRelocationBlock(byte *next_rb) { // set rb
assert(!start_did_alloc); assert(!start_did_alloc);
const unsigned off = ptr_udiff_bytes(next_rb, start); const unsigned off = ptr_udiff_bytes(next_rb, start);
assert((off & 1) == 0); assert((off & 1) == 0);
rb.reset(); rb.reset();
if (off >= start_size_in_bytes) // use ">=" instead of strict "==" if (off >= start_size_in_bytes) // permissive: use ">=" instead of strict "=="
return false; // EOF return false; // EOF
if (start_size_in_bytes - off < 8) if (start_size_in_bytes - off < 8)
throwCantPack("relocs overflow"); throwCantPack("relocs overflow");
@@ -418,7 +418,7 @@ void PeFile::Reloc::finish(byte *(&result_ptr), unsigned &result_size) {
for (unsigned ic = 0; ic < counts[0]; ic++) { for (unsigned ic = 0; ic < counts[0]; ic++) {
const auto pos_ptr = start_buf + (RELOC_INPLACE_OFFSET + 4 * ic); const auto pos_ptr = start_buf + (RELOC_INPLACE_OFFSET + 4 * ic);
const unsigned pos = get_le32(pos_ptr); const unsigned pos = get_le32(pos_ptr);
if (ic > 0 && get_le32(pos_ptr - 4) == pos) // XXX: should we check for duplicates? if (ic > 0 && get_le32(pos_ptr - 4) == pos)
if (!opt->force) if (!opt->force)
throwCantPack("duplicate relocs (try --force)"); throwCantPack("duplicate relocs (try --force)");
if (ic == 0 || (pos ^ prev) >= 0x10000) { if (ic == 0 || (pos ^ prev) >= 0x10000) {