From 3b660f0b40e0bf024a9ace0d1e3e22a13ca7f2e1 Mon Sep 17 00:00:00 2001 From: Artur Sinila Date: Tue, 29 Jun 2021 03:30:50 +0300 Subject: [PATCH 1/2] New package: mimalloc-1.7.2 --- common/shlibs | 1 + srcpkgs/mimalloc-devel | 1 + .../mimalloc/patches/00-fix-cmakelists.patch | 20 ++++ srcpkgs/mimalloc/patches/01-fix-test.patch | 11 ++ srcpkgs/mimalloc/patches/03-libatomic.patch | 112 ++++++++++++++++++ ...4-remove-secure-suffix-from-basename.patch | 15 +++ srcpkgs/mimalloc/template | 32 +++++ 7 files changed, 192 insertions(+) create mode 120000 srcpkgs/mimalloc-devel create mode 100644 srcpkgs/mimalloc/patches/00-fix-cmakelists.patch create mode 100644 srcpkgs/mimalloc/patches/01-fix-test.patch create mode 100644 srcpkgs/mimalloc/patches/03-libatomic.patch create mode 100644 srcpkgs/mimalloc/patches/04-remove-secure-suffix-from-basename.patch create mode 100644 srcpkgs/mimalloc/template diff --git a/common/shlibs b/common/shlibs index 9df122c0edfe..b748cc44be6f 100644 --- a/common/shlibs +++ b/common/shlibs @@ -416,6 +416,7 @@ libMAC.so.6 libMAC-5.28_1 libmad.so.0 libmad-0.15.1b_1 libmatroska.so.7 libmatroska-1.6.0_1 libmatrix_client.so.0.5.1 mtxclient-0.5.1_1 +libmimalloc.so.1.7 mimalloc-1.7.2_1 libebml.so.5 libebml-1.4.0_1 libdvdread.so.8 libdvdread-6.1.1_1 libdvdnav.so.4 libdvdnav-4.1.3_1 diff --git a/srcpkgs/mimalloc-devel b/srcpkgs/mimalloc-devel new file mode 120000 index 000000000000..9af584a917a5 --- /dev/null +++ b/srcpkgs/mimalloc-devel @@ -0,0 +1 @@ +mimalloc \ No newline at end of file diff --git a/srcpkgs/mimalloc/patches/00-fix-cmakelists.patch b/srcpkgs/mimalloc/patches/00-fix-cmakelists.patch new file mode 100644 index 000000000000..1d18ccd7d859 --- /dev/null +++ b/srcpkgs/mimalloc/patches/00-fix-cmakelists.patch @@ -0,0 +1,20 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -210,7 +210,7 @@ endif() + if (MI_INSTALL_TOPLEVEL) + set(mi_install_libdir "lib") + set(mi_install_incdir "include") +- set(mi_install_cmakedir "cmake") ++ set(mi_install_cmakedir "share/cmake") + else() + set(mi_install_libdir "lib/mimalloc-${mi_version}") + set(mi_install_incdir "include/mimalloc-${mi_version}") +@@ -224,7 +224,7 @@ else() + endif() + + string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LC) +-if(NOT(CMAKE_BUILD_TYPE_LC MATCHES "^(release|relwithdebinfo|minsizerel)$")) ++if(NOT(CMAKE_BUILD_TYPE_LC MATCHES "^(release|relwithdebinfo|minsizerel|none)$")) + set(mi_basename "${mi_basename}-${CMAKE_BUILD_TYPE_LC}") #append build type (e.g. -debug) if not a release version + endif() + if(MI_BUILD_SHARED) diff --git a/srcpkgs/mimalloc/patches/01-fix-test.patch b/srcpkgs/mimalloc/patches/01-fix-test.patch new file mode 100644 index 000000000000..f1c35c37ea28 --- /dev/null +++ b/srcpkgs/mimalloc/patches/01-fix-test.patch @@ -0,0 +1,11 @@ +--- a/test/test-api.c ++++ b/test/test-api.c +@@ -83,7 +83,7 @@ int main() { + void* p = mi_malloc(0); mi_free(p); + }); + CHECK_BODY("malloc-nomem1",{ +- result = (mi_malloc(SIZE_MAX/2) == NULL); ++ result = (mi_malloc((size_t)PTRDIFF_MAX + (size_t)1) == NULL); + }); + CHECK_BODY("malloc-null",{ + mi_free(NULL); diff --git a/srcpkgs/mimalloc/patches/03-libatomic.patch b/srcpkgs/mimalloc/patches/03-libatomic.patch new file mode 100644 index 000000000000..ca9af8ddfb1a --- /dev/null +++ b/srcpkgs/mimalloc/patches/03-libatomic.patch @@ -0,0 +1,112 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -203,6 +203,9 @@ else() + endif() + endif() + ++include("cmake/atomic.cmake") ++list(APPEND mi_libraries ${CMAKE_REQUIRED_LIBRARIES}) ++ + # ----------------------------------------------------------------------------- + # Install and output names + # ----------------------------------------------------------------------------- +--- /dev/null ++++ b/cmake/atomic.cmake +@@ -0,0 +1,97 @@ ++# Based on: ++# https://github.com/llvm/llvm-project/blob/d4dcb55c7050fd908af2378fa551078d859d994f/llvm/cmake/modules/DetermineGCCCompatible.cmake ++# https://github.com/llvm/llvm-project/blob/d4dcb55c7050fd908af2378fa551078d859d994f/llvm/cmake/modules/CheckAtomic.cmake ++ ++INCLUDE(CheckCXXSourceCompiles) ++INCLUDE(CheckLibraryExists) ++ ++# Determine if the compiler has GCC-compatible command-line syntax. ++ ++if(CMAKE_COMPILER_IS_GNUCXX) ++ set(COMPILER_IS_GCC_COMPATIBLE ON) ++elseif( MSVC ) ++ set(COMPILER_IS_GCC_COMPATIBLE OFF) ++elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) ++ set(COMPILER_IS_GCC_COMPATIBLE ON) ++elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel" ) ++ set(COMPILER_IS_GCC_COMPATIBLE ON) ++endif() ++ ++# Sometimes linking against libatomic is required for atomic ops, if ++# the platform doesn't support lock-free atomics. ++ ++function(check_working_cxx_atomics varname) ++ set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) ++ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11") ++ CHECK_CXX_SOURCE_COMPILES(" ++#include ++std::atomic x; ++std::atomic y; ++std::atomic z; ++int main() { ++ ++z; ++ ++y; ++ return ++x; ++} ++" ${varname}) ++ set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) ++endfunction(check_working_cxx_atomics) ++ ++function(check_working_cxx_atomics64 varname) ++ set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) ++ set(CMAKE_REQUIRED_FLAGS "-std=c++11 ${CMAKE_REQUIRED_FLAGS}") ++ CHECK_CXX_SOURCE_COMPILES(" ++#include ++#include ++std::atomic x (0); ++int main() { ++ uint64_t i = x.load(std::memory_order_relaxed); ++ (void)i; ++ return 0; ++} ++" ${varname}) ++ set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) ++endfunction(check_working_cxx_atomics64) ++ ++ ++# Check for (non-64-bit) atomic operations. ++if(MSVC) ++ set(HAVE_CXX_ATOMICS_WITHOUT_LIB True) ++elseif(COMPILER_IS_GCC_COMPATIBLE) ++ # First check if atomics work without the library. ++ check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB) ++ # If not, check if the library exists, and atomics work with it. ++ if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB) ++ check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC) ++ if(HAVE_LIBATOMIC) ++ list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") ++ check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB) ++ if (NOT HAVE_CXX_ATOMICS_WITH_LIB) ++ message(FATAL_ERROR "Host compiler must support std::atomic!") ++ endif() ++ else() ++ message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.") ++ endif() ++ endif() ++endif() ++ ++# Check for 64 bit atomic operations. ++if(MSVC) ++ set(HAVE_CXX_ATOMICS64_WITHOUT_LIB True) ++elseif(COMPILER_IS_GCC_COMPATIBLE) ++ # First check if atomics work without the library. ++ check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB) ++ # If not, check if the library exists, and atomics work with it. ++ if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) ++ check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64) ++ if(HAVE_CXX_LIBATOMICS64) ++ list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") ++ check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) ++ if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) ++ message(FATAL_ERROR "Host compiler must support 64-bit std::atomic!") ++ endif() ++ else() ++ message(FATAL_ERROR "Host compiler appears to require libatomic for 64-bit operations, but cannot find it.") ++ endif() ++ endif() ++endif() diff --git a/srcpkgs/mimalloc/patches/04-remove-secure-suffix-from-basename.patch b/srcpkgs/mimalloc/patches/04-remove-secure-suffix-from-basename.patch new file mode 100644 index 000000000000..604df22d38ce --- /dev/null +++ b/srcpkgs/mimalloc/patches/04-remove-secure-suffix-from-basename.patch @@ -0,0 +1,15 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -220,11 +220,7 @@ else() + set(mi_install_cmakedir "share/mimalloc-${mi_version}/cmake") + endif() + +-if(MI_SECURE) +- set(mi_basename "mimalloc-secure") +-else() +- set(mi_basename "mimalloc") +-endif() ++set(mi_basename "mimalloc") + + string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LC) + if(NOT(CMAKE_BUILD_TYPE_LC MATCHES "^(release|relwithdebinfo|minsizerel|none)$")) diff --git a/srcpkgs/mimalloc/template b/srcpkgs/mimalloc/template new file mode 100644 index 000000000000..fa14ba485b6c --- /dev/null +++ b/srcpkgs/mimalloc/template @@ -0,0 +1,32 @@ +# Template file for 'mimalloc' +pkgname=mimalloc +version=1.7.2 +revision=1 +build_style=cmake +configure_args="-DMI_INSTALL_TOPLEVEL=ON -DMI_SECURE=ON" +short_desc="MIcrosoft's malloc" +maintainer="Artur Sinila " +license="MIT" +homepage="https://github.com/microsoft/mimalloc" +distfiles="https://github.com/microsoft/mimalloc/archive/refs/tags/v${version}.tar.gz" +checksum=b1912e354565a4b698410f7583c0f83934a6dbb3ade54ab7ddcb1569320936bd + +if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then + makedepends+=" libatomic-devel" +fi + +post_install() { + vlicense LICENSE +} + +mimalloc-devel_package() { + depends="${pkgname}>=${version}_${revision}" + short_desc+=" - development files" + pkg_install() { + vmove usr/include + vmove usr/share/cmake + vmove usr/lib/*.a + vmove usr/lib/*.o + vmove usr/lib/*.so + } +} From 705ab28e157cd9fd442c625610c49c455a213b02 Mon Sep 17 00:00:00 2001 From: Artur Sinila Date: Tue, 29 Jun 2021 03:31:54 +0300 Subject: [PATCH 2/2] New package: mold-0.9.2 --- srcpkgs/mold/patches/00-grep.patch | 279 ++++++++++++++++++ srcpkgs/mold/patches/01-undef-page-size.patch | 15 + srcpkgs/mold/template | 39 +++ 3 files changed, 333 insertions(+) create mode 100644 srcpkgs/mold/patches/00-grep.patch create mode 100644 srcpkgs/mold/patches/01-undef-page-size.patch create mode 100644 srcpkgs/mold/template diff --git a/srcpkgs/mold/patches/00-grep.patch b/srcpkgs/mold/patches/00-grep.patch new file mode 100644 index 000000000000..fa939d96a22a --- /dev/null +++ b/srcpkgs/mold/patches/00-grep.patch @@ -0,0 +1,279 @@ +--- a/test/build-id.sh ++++ b/test/build-id.sh +@@ -12,7 +12,7 @@ readelf -n $t/exe | grep -qv 'GNU.*0x00000010.*NT_GNU_BUILD_ID' + + clang -o $t/exe $t/a.c -fuse-ld=`pwd`/../mold -Wl,-build-id=uuid + readelf -nW $t/exe | +- grep -Pq 'GNU.*0x00000010.*NT_GNU_BUILD_ID.*Build ID: ............4...[89abcdef]' ++ rg -Pq 'GNU.*0x00000010.*NT_GNU_BUILD_ID.*Build ID: ............4...[89abcdef]' + + clang -o $t/exe $t/a.c -fuse-ld=`pwd`/../mold -Wl,-build-id=md5 + readelf -n $t/exe | grep -q 'GNU.*0x00000010.*NT_GNU_BUILD_ID' +--- a/test/copyrel-relro.sh ++++ b/test/copyrel-relro.sh +@@ -22,7 +22,7 @@ EOF + clang -fuse-ld=`pwd`/../mold $t/a.o $t/b.so -o $t/exe + readelf -a $t/exe > $t/log + +-grep -Pqz '(?s)\[(\d+)\] .dynbss.rel.ro .* \1 readonly' $t/log +-grep -Pqz '(?s)\[(\d+)\] .dynbss .* \1 readwrite' $t/log ++rg -PUq '(?s)\[(\d+)\] .dynbss.rel.ro .* \1 readonly' $t/log ++rg -PUq '(?s)\[(\d+)\] .dynbss .* \1 readwrite' $t/log + + echo OK +--- a/test/demangle.sh ++++ b/test/demangle.sh +@@ -16,10 +16,10 @@ EOF + grep -q 'undefined symbol: .*: _Z3fooii' $t/log + + ! clang -fuse-ld=`pwd`/../mold -o $t/exe $t/a.o -Wl,-demangle 2> $t/log || false +-grep -Pq 'undefined symbol: .*: foo\(int, int\)' $t/log ++rg -Pq 'undefined symbol: .*: foo\(int, int\)' $t/log + + ! clang -fuse-ld=`pwd`/../mold -o $t/exe $t/a.o 2> $t/log || false +-grep -Pq 'undefined symbol: .*: foo\(int, int\)' $t/log ++rg -Pq 'undefined symbol: .*: foo\(int, int\)' $t/log + + cat < $t/log + +-grep -Pqz '(?s)\(INIT\)\s+0x([0-9a-f]+)\b.*\1\s+0 FUNC GLOBAL HIDDEN\s+\d+ _init\b' $t/log ++rg -PUq '(?s)\(INIT\)\s+0x([0-9a-f]+)\b.*\1\s+0 FUNC GLOBAL HIDDEN\s+\d+ _init\b' $t/log + +-grep -Pqz '(?s)\(FINI\)\s+0x([0-9a-f]+)\b.*\1\s+0 FUNC GLOBAL HIDDEN\s+\d+ _fini\b' $t/log ++rg -PUq '(?s)\(FINI\)\s+0x([0-9a-f]+)\b.*\1\s+0 FUNC GLOBAL HIDDEN\s+\d+ _fini\b' $t/log + + clang -fuse-ld=`pwd`/../mold -o $t/exe $t/a.o -Wl,-init,init -Wl,-fini,fini + readelf -a $t/exe > $t/log + +-grep -Pqz '(?s)\(INIT\)\s+0x([0-9a-f]+)\b.*\1\s+0 NOTYPE GLOBAL DEFAULT\s+\d+ init\b' $t/log ++rg -PUq '(?s)\(INIT\)\s+0x([0-9a-f]+)\b.*\1\s+0 NOTYPE GLOBAL DEFAULT\s+\d+ init\b' $t/log + +-grep -Pqz '(?s)\(FINI\)\s+0x([0-9a-f]+)\b.*\1\s+0 NOTYPE GLOBAL DEFAULT\s+\d+ fini\b' $t/log ++rg -PUq '(?s)\(FINI\)\s+0x([0-9a-f]+)\b.*\1\s+0 NOTYPE GLOBAL DEFAULT\s+\d+ fini\b' $t/log + + echo OK +--- a/test/dt_needed.sh ++++ b/test/dt_needed.sh +@@ -23,7 +23,7 @@ clang -fuse-ld=`pwd`/../mold -o $t/exe $t/b.o -L $t -lfoo + readelf --dynamic $t/exe | fgrep -q 'Shared library: [libfoo]' + + clang -fuse-ld=`pwd`/../mold -o $t/exe $t/b.o $t/libbar.so +-readelf --dynamic $t/exe | grep -Pq 'Shared library: \[.*dt_needed/libbar\.so\]' ++readelf --dynamic $t/exe | rg -Pq 'Shared library: \[.*dt_needed/libbar\.so\]' + + clang -fuse-ld=`pwd`/../mold -o $t/exe $t/b.o -L$t -lbar + readelf --dynamic $t/exe | fgrep -q 'Shared library: [libbar.so]' +--- a/test/dynamic.sh ++++ b/test/dynamic.sh +@@ -14,7 +14,7 @@ fgrep -q 'Shared library: [libc.so.6]' $t/log + fgrep -q 'Shared library: [ld-linux-x86-64.so.2]' $t/log + + readelf -W --symbols --use-dynamic $t/exe > $t/log2 +-grep -Pq 'FUNC\s+GLOBAL\s+DEFAULT\s+UND\s+__libc_start_main' $t/log2 ++rg -Pq 'FUNC\s+GLOBAL\s+DEFAULT\s+UND\s+__libc_start_main' $t/log2 + + cat < +--- a/test/ifunc-export.sh ++++ b/test/ifunc-export.sh +@@ -32,6 +32,6 @@ resolve_foobar: + EOF + + clang -fuse-ld=`pwd`/../mold -shared -o $t/b.so $t/a.o +-readelf --dyn-syms $t/b.so | grep -Pq '0 (IFUNC|: 10)\s+GLOBAL DEFAULT \d+ foobar' ++readelf --dyn-syms $t/b.so | rg -Pq '0 (IFUNC|: 10)\s+GLOBAL DEFAULT \d+ foobar' + + echo OK +--- a/test/image-base.sh ++++ b/test/image-base.sh +@@ -16,6 +16,6 @@ EOF + + clang -fuse-ld=`pwd`/../mold -o $t/exe $t/a.o -Wl,--image-base=0x8000000 + $t/exe | grep -q 'Hello world' +-readelf -W --sections $t/exe | grep -Pq '.interp\s+PROGBITS\s+0000000008000...\b' ++readelf -W --sections $t/exe | rg -Pq '.interp\s+PROGBITS\s+0000000008000...\b' + + echo OK +--- a/test/note.sh ++++ b/test/note.sh +@@ -31,9 +31,9 @@ EOF + ../mold -static -o $t/exe $t/a.o + readelf -W --sections $t/exe > $t/log + +-grep -Pq '.note.bar\s+NOTE.+000008 00 A 0 0 4' $t/log +-grep -Pq '.note.baz\s+NOTE.+000008 00 A 0 0 8' $t/log +-grep -Pq '.note.nonalloc\s+NOTE.+000008 00 0 0 1' $t/log ++rg -Pq '.note.bar\s+NOTE.+000008 00 A 0 0 4' $t/log ++rg -Pq '.note.baz\s+NOTE.+000008 00 A 0 0 8' $t/log ++rg -Pq '.note.nonalloc\s+NOTE.+000008 00 0 0 1' $t/log + + readelf --segments $t/exe > $t/log + fgrep -q '01 .note.bar' $t/log +--- a/test/pltgot.sh ++++ b/test/pltgot.sh +@@ -26,6 +26,6 @@ EOF + + objdump -d -j .plt.got $t/exe > $t/log + +-grep -Pq '201020:\s+ff 25 da 0f 00 00\s+jmpq \*0xfda\(%rip\)\s+# 202000 ' $t/log ++rg -Pq '201020:\s+ff 25 da 0f 00 00\s+jmpq \*0xfda\(%rip\)\s+# 202000 ' $t/log + + echo OK +--- a/test/relax.sh ++++ b/test/relax.sh +@@ -39,43 +39,43 @@ EOF + clang -fuse-ld=`pwd`/../mold -o $t/exe $t/a.o $t/b.o + objdump -d $t/exe | grep -A20 ':' > $t/log + +-grep -Pq 'lea \s*0x.+\(%rip\),%rax .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%rcx .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%rdx .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%rbx .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%rbp .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%rsi .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%rdi .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r8 .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r9 .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r10 .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r11 .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r12 .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r13 .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r14 .*' $t/log +-grep -Pq 'lea \s*0x.+\(%rip\),%r15 .*' $t/log +-grep -Pq 'callq.*' $t/log +-grep -Pq 'jmpq.*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%rax .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%rcx .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%rdx .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%rbx .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%rbp .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%rsi .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%rdi .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r8 .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r9 .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r10 .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r11 .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r12 .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r13 .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r14 .*' $t/log ++rg -Pq 'lea \s*0x.+\(%rip\),%r15 .*' $t/log ++rg -Pq 'callq.*' $t/log ++rg -Pq 'jmpq.*' $t/log + + clang -fuse-ld=`pwd`/../mold -o $t/exe $t/a.o $t/b.o -Wl,-no-relax + objdump -d $t/exe | grep -A20 ':' > $t/log + +-grep -Pq 'mov \s*0x.+\(%rip\),%rax' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%rcx' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%rdx' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%rbx' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%rbp' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%rsi' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%rdi' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r8 ' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r9 ' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r10' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r11' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r12' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r13' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r14' $t/log +-grep -Pq 'mov \s*0x.+\(%rip\),%r15' $t/log +-grep -Pq 'callq.*\(%rip\)' $t/log +-grep -Pq 'jmpq.*\(%rip\)' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%rax' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%rcx' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%rdx' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%rbx' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%rbp' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%rsi' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%rdi' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r8 ' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r9 ' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r10' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r11' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r12' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r13' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r14' $t/log ++rg -Pq 'mov \s*0x.+\(%rip\),%r15' $t/log ++rg -Pq 'callq.*\(%rip\)' $t/log ++rg -Pq 'jmpq.*\(%rip\)' $t/log + + echo OK +--- a/test/shared.sh ++++ b/test/shared.sh +@@ -19,7 +19,7 @@ clang -shared -fuse-ld=`pwd`/../mold -o $t/b.so $t/a.o + readelf --dyn-syms $t/b.so > $t/log + + grep -q '0000000000000000 0 NOTYPE GLOBAL DEFAULT UND fn2' $t/log +-grep -Pq '0 NOTYPE GLOBAL DEFAULT \d+ fn1' $t/log ++rg -Pq '0 NOTYPE GLOBAL DEFAULT \d+ fn1' $t/log + + cat < +--- a/test/symtab.sh ++++ b/test/symtab.sh +@@ -28,11 +28,11 @@ echo '{ local: module_local; };' > $t/c.map + + readelf --symbols $t/exe > $t/log + +-grep -Pq '0 NOTYPE LOCAL DEFAULT \d+ local1' $t/log +-grep -Pq '0 NOTYPE LOCAL DEFAULT \d+ local2' $t/log +-grep -Pq '0 NOTYPE GLOBAL DEFAULT \d+ foo' $t/log +-grep -Pq '0 NOTYPE GLOBAL DEFAULT \d+ bar' $t/log +-grep -Pq '0 NOTYPE GLOBAL DEFAULT \d+ this_is_global' $t/log +-grep -Pq '0 NOTYPE GLOBAL DEFAULT \d+ module_local' $t/log ++rg -Pq '0 NOTYPE LOCAL DEFAULT \d+ local1' $t/log ++rg -Pq '0 NOTYPE LOCAL DEFAULT \d+ local2' $t/log ++rg -Pq '0 NOTYPE GLOBAL DEFAULT \d+ foo' $t/log ++rg -Pq '0 NOTYPE GLOBAL DEFAULT \d+ bar' $t/log ++rg -Pq '0 NOTYPE GLOBAL DEFAULT \d+ this_is_global' $t/log ++rg -Pq '0 NOTYPE GLOBAL DEFAULT \d+ module_local' $t/log + + echo OK +--- a/test/thin-archive.sh ++++ b/test/thin-archive.sh +@@ -34,9 +34,9 @@ rm -f $t/d.a + + clang -fuse-ld=`pwd`/../mold -Wl,--trace -o $t/exe $t/d.o $t/d.a > $t/log + +-grep -Pq 'thin-archive/d.a\(.*long-long-long-filename.o\)' $t/log +-grep -Pq 'thin-archive/d.a\(.*b.o\)' $t/log +-grep -Pq 'thin-archive/d.a\(/.*/b.o\)' $t/log ++rg -Pq 'thin-archive/d.a\(.*long-long-long-filename.o\)' $t/log ++rg -Pq 'thin-archive/d.a\(.*b.o\)' $t/log ++rg -Pq 'thin-archive/d.a\(/.*/b.o\)' $t/log + fgrep -q thin-archive/d.o $t/log + + $t/exe | grep -q 15 +--- a/test/z_nodump.sh ++++ b/test/z_nodump.sh +@@ -10,9 +10,9 @@ void foo() {} + EOF + + clang -fuse-ld=`pwd`/../mold -shared -o $t/b.so $t/a.o +-! readelf --dynamic $t/b.so | grep -Pq 'Flags: NODUMP' || false ++! readelf --dynamic $t/b.so | rg -Pq 'Flags: NODUMP' || false + + clang -fuse-ld=`pwd`/../mold -shared -o $t/b.so $t/a.o -Wl,-z,nodump +-readelf --dynamic $t/b.so | grep -Pq 'Flags: NODUMP' ++readelf --dynamic $t/b.so | rg -Pq 'Flags: NODUMP' + + echo OK +--- a/test/z_origin.sh ++++ b/test/z_origin.sh +@@ -15,7 +15,7 @@ EOF + + clang -fuse-ld=`pwd`/../mold -o $t/exe $t/a.o -Wl,-z,origin + +-readelf --dynamic $t/exe | grep -Pq '\(FLAGS\)\s+ORIGIN' +-readelf --dynamic $t/exe | grep -Pq 'Flags: ORIGIN' ++readelf --dynamic $t/exe | rg -Pq '\(FLAGS\)\s+ORIGIN' ++readelf --dynamic $t/exe | rg -Pq 'Flags: ORIGIN' + + echo OK diff --git a/srcpkgs/mold/patches/01-undef-page-size.patch b/srcpkgs/mold/patches/01-undef-page-size.patch new file mode 100644 index 000000000000..1aec3860105c --- /dev/null +++ b/srcpkgs/mold/patches/01-undef-page-size.patch @@ -0,0 +1,15 @@ +diff --git a/mold.h b/mold.h +index 49fd7fd..9da6a9d 100644 +--- a/mold.h ++++ b/mold.h +@@ -29,6 +29,10 @@ + #include + #include + ++#ifdef PAGE_SIZE ++#undef PAGE_SIZE ++#endif ++ + typedef uint8_t u8; + typedef uint16_t u16; + typedef uint32_t u32; diff --git a/srcpkgs/mold/template b/srcpkgs/mold/template new file mode 100644 index 000000000000..f1305c7e8a69 --- /dev/null +++ b/srcpkgs/mold/template @@ -0,0 +1,39 @@ +# Template file for 'mold' +pkgname=mold +_commit_hash=6695c49379d6d053ea37ba716bf94acb5c4767aa +version=0.9.2 +revision=1 +archs=x86_64* +build_style=gnu-makefile +makedepends="mimalloc-devel openssl-devel xxHash-devel tbb-devel zlib-devel" +checkdepends="ripgrep libdwarf clang tar" +short_desc="High performance drop-in replacement for existing Unix linkers" +maintainer="Artur Sinila " +license="AGPL-3.0-or-later" +homepage="https://github.com/rui314/mold" +changelog="https://github.com/rui314/mold/releases" +distfiles="https://github.com/rui314/mold/archive/refs/tags/v${version}.tar.gz" +checksum=09b624e6bf5240a59aac5eb961b7dde2ea9b439d3e017a1e393034a10fe75b27 + +# use system-wide installed mimalloc instead of the vendored one +export SYSTEM_MIMALLOC=1 +export GIT_HASH=$_commit_hash + +# skip 32-bit tests on 64-bit musl, because musl doesn't support multilib +if [ "$XBPS_TARGET_LIBC" = "glibc" ]; then + if [ "$XBPS_TARGET_WORDSIZE" -eq 64 ]; then + checkdepends+=" glibc-devel-32bit libgcc-devel-32bit" + else + checkdepends+=" glibc-devel libgcc-devel" + fi +else + rm ${wrksrc}/test/i386*.sh +fi + +pre_install() { + vmkdir usr/bin +} + +post_install() { + vlicense LICENSE +}