From e397696f39d9406f4fb8d650261e34d7f2032da2 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 26 Jun 2020 16:36:00 +0200 Subject: llvm*: compiler-rt: fix build w/glibc-2.31 https://hydra.nixos.org/build/122885657 and more. Original upstream fix (available in llvm_10): https://github.com/llvm/llvm-project/commit/947f9692440836dcb8d88b74b69dd379d85974ce (cherry picked from commit 2c60e7c2d090a0b5934b50316660bd9d463789a7) --- .../development/compilers/llvm/5/compiler-rt.nix | 1 + .../development/compilers/llvm/6/compiler-rt.nix | 1 + .../compilers/llvm/7/compiler-rt-glibc.patch | 48 ++++++++++++++++++++++ .../development/compilers/llvm/7/compiler-rt.nix | 3 ++ .../development/compilers/llvm/8/compiler-rt.nix | 1 + .../development/compilers/llvm/9/compiler-rt.nix | 1 + 6 files changed, 55 insertions(+) create mode 100644 nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt-glibc.patch (limited to 'nixpkgs/pkgs/development/compilers') diff --git a/nixpkgs/pkgs/development/compilers/llvm/5/compiler-rt.nix b/nixpkgs/pkgs/development/compilers/llvm/5/compiler-rt.nix index 624034b52286..32d6dd3d4795 100644 --- a/nixpkgs/pkgs/development/compilers/llvm/5/compiler-rt.nix +++ b/nixpkgs/pkgs/development/compilers/llvm/5/compiler-rt.nix @@ -47,6 +47,7 @@ stdenv.mkDerivation { patches = [ ./compiler-rt-codesign.patch # Revert compiler-rt commit that makes codesign mandatory + ../7/compiler-rt-glibc.patch ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch ++ stdenv.lib.optional (stdenv.hostPlatform.libc == "glibc") ./compiler-rt-sys-ustat.patch ++ stdenv.lib.optional stdenv.hostPlatform.isAarch32 ./compiler-rt-armv7l.patch; diff --git a/nixpkgs/pkgs/development/compilers/llvm/6/compiler-rt.nix b/nixpkgs/pkgs/development/compilers/llvm/6/compiler-rt.nix index 13abf6d95611..89f25cad2c54 100644 --- a/nixpkgs/pkgs/development/compilers/llvm/6/compiler-rt.nix +++ b/nixpkgs/pkgs/development/compilers/llvm/6/compiler-rt.nix @@ -47,6 +47,7 @@ stdenv.mkDerivation { patches = [ ./compiler-rt-codesign.patch # Revert compiler-rt commit that makes codesign mandatory + ../7/compiler-rt-glibc.patch ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch ++ stdenv.lib.optional stdenv.hostPlatform.isAarch32 ./compiler-rt-armv7l.patch; diff --git a/nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt-glibc.patch b/nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt-glibc.patch new file mode 100644 index 000000000000..2d211795fc80 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt-glibc.patch @@ -0,0 +1,48 @@ +diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +index 54da635..c5dc1cd 100644 +--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +@@ -1158,8 +1158,9 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid); + CHECK_SIZE_AND_OFFSET(ipc_perm, gid); + CHECK_SIZE_AND_OFFSET(ipc_perm, cuid); + CHECK_SIZE_AND_OFFSET(ipc_perm, cgid); +-#if !defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21) +-/* On aarch64 glibc 2.20 and earlier provided incorrect mode field. */ ++#if !SANITIZER_LINUX || __GLIBC_PREREQ (2, 31) ++/* glibc 2.30 and earlier provided 16-bit mode field instead of 32-bit ++ on many architectures. */ + CHECK_SIZE_AND_OFFSET(ipc_perm, mode); + #endif + +diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/lib/sanitizer_common/sanitizer_platform_limits_posix.h +index f89a113..f6f986f 100644 +--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.h ++++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.h +@@ -213,26 +213,13 @@ namespace __sanitizer { + u64 __unused1; + u64 __unused2; + #elif defined(__sparc__) +-#if defined(__arch64__) + unsigned mode; +- unsigned short __pad1; +-#else +- unsigned short __pad1; +- unsigned short mode; + unsigned short __pad2; +-#endif + unsigned short __seq; + unsigned long long __unused1; + unsigned long long __unused2; +-#elif defined(__mips__) || defined(__aarch64__) || defined(__s390x__) +- unsigned int mode; +- unsigned short __seq; +- unsigned short __pad1; +- unsigned long __unused1; +- unsigned long __unused2; + #else +- unsigned short mode; +- unsigned short __pad1; ++ unsigned int mode; + unsigned short __seq; + unsigned short __pad2; + #if defined(__x86_64__) && !defined(_LP64) diff --git a/nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt.nix b/nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt.nix index 84ca6af3b36d..97a5d73f3041 100644 --- a/nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt.nix +++ b/nixpkgs/pkgs/development/compilers/llvm/7/compiler-rt.nix @@ -46,6 +46,9 @@ stdenv.mkDerivation { outputs = [ "out" "dev" ]; patches = [ + # https://github.com/llvm/llvm-project/commit/947f9692440836dcb8d88b74b69dd379d85974ce + ./compiler-rt-glibc.patch + ./compiler-rt-codesign.patch # Revert compiler-rt commit that makes codesign mandatory ] ++ stdenv.lib.optional (useLLVM) ./crtbegin-and-end.patch ++ stdenv.lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch diff --git a/nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt.nix b/nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt.nix index 15e55800dc8e..a907d4086550 100644 --- a/nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt.nix +++ b/nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt.nix @@ -46,6 +46,7 @@ stdenv.mkDerivation { outputs = [ "out" "dev" ]; patches = [ + ../7/compiler-rt-glibc.patch ./compiler-rt-codesign.patch # Revert compiler-rt commit that makes codesign mandatory ]# ++ stdenv.lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch ++ stdenv.lib.optional (useLLVM) ./crtbegin-and-end.patch diff --git a/nixpkgs/pkgs/development/compilers/llvm/9/compiler-rt.nix b/nixpkgs/pkgs/development/compilers/llvm/9/compiler-rt.nix index 0183754a2fd4..394f66ff7f1a 100644 --- a/nixpkgs/pkgs/development/compilers/llvm/9/compiler-rt.nix +++ b/nixpkgs/pkgs/development/compilers/llvm/9/compiler-rt.nix @@ -46,6 +46,7 @@ stdenv.mkDerivation rec { outputs = [ "out" "dev" ]; patches = [ + ../7/compiler-rt-glibc.patch ./compiler-rt-codesign.patch # Revert compiler-rt commit that makes codesign mandatory ]# ++ stdenv.lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch ++ stdenv.lib.optional stdenv.hostPlatform.isAarch32 ./compiler-rt-armv7l.patch; -- cgit 1.4.1