Date: Thursday, October 27, 2016 @ 05:42:10 Author: lcarlier Revision: 193772
archrelease: copy trunk to multilib-staging-x86_64 Added: lib32-llvm/repos/multilib-staging-x86_64/ lib32-llvm/repos/multilib-staging-x86_64/PKGBUILD (from rev 193771, lib32-llvm/trunk/PKGBUILD) lib32-llvm/repos/multilib-staging-x86_64/msan-prevent-initialization-failure-with-newer-glibc.patch (from rev 193771, lib32-llvm/trunk/msan-prevent-initialization-failure-with-newer-glibc.patch) ------------------------------------------------------------+ PKGBUILD | 153 +++++++++++ msan-prevent-initialization-failure-with-newer-glibc.patch | 103 +++++++ 2 files changed, 256 insertions(+) Copied: lib32-llvm/repos/multilib-staging-x86_64/PKGBUILD (from rev 193771, lib32-llvm/trunk/PKGBUILD) =================================================================== --- multilib-staging-x86_64/PKGBUILD (rev 0) +++ multilib-staging-x86_64/PKGBUILD 2016-10-27 05:42:10 UTC (rev 193772) @@ -0,0 +1,153 @@ +# $Id$ +# Maintainer: Evangelos Foutras <foutre...@gmail.com> +# Contributor: Jan "heftig" Steffens <jan.steff...@gmail.com> +# Contributor: Sebastian Nowicki <seb...@gmail.com> +# Contributor: Devin Cofer <ranguvar{AT]archlinux[DOT}us> +# Contributor: Tobias Kieslich <tob...@justdreams.de> +# Contributor: Geoffroy Carrier <geoffroy.carr...@aur.archlinux.org> +# Contributor: Tomas Lindquist Olsen <to...@famolsen.dk> +# Contributor: Roberto Alsina <rals...@kde.org> +# Contributor: Gerardo Exequiel Pozzi <vmlinuz...@yahoo.com.ar> + +pkgname=('lib32-llvm' 'lib32-llvm-libs' 'lib32-clang') +pkgver=3.9.0 +pkgrel=1 +arch=('x86_64') +url="http://llvm.org/" +license=('custom:University of Illinois/NCSA Open Source License') +makedepends=('cmake' 'lib32-libffi' 'lib32-zlib' 'python2' 'gcc-multilib' + 'lib32-libxml2') +options=('staticlibs') +source=(http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz{,.sig} + http://llvm.org/releases/$pkgver/cfe-$pkgver.src.tar.xz{,.sig} + http://llvm.org/releases/$pkgver/compiler-rt-$pkgver.src.tar.xz{,.sig} + msan-prevent-initialization-failure-with-newer-glibc.patch) +sha256sums=('66c73179da42cee1386371641241f79ded250e117a79f571bbd69e56daa48948' + 'SKIP' + '7596a7c7d9376d0c89e60028fe1ceb4d3e535e8ea8b89e0eb094e0dcb3183d28' + 'SKIP' + 'e0e5224fcd5740b61e416c549dd3dcda92f10c524216c1edb5e979e42078a59a' + 'SKIP' + '8e4f194c2283b91644a7fff43bc4e58c36b5507f2a4d90b72f275c0bd7511c20') +validpgpkeys=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D' + '11E521D646982372EB577A1F8F0871F202119294') + +prepare() { + cd "$srcdir/llvm-$pkgver.src" + + # At the present, clang must reside inside the LLVM source code tree to build + # See http://llvm.org/bugs/show_bug.cgi?id=4840 + mv "$srcdir/cfe-$pkgver.src" tools/clang + + mv "$srcdir/compiler-rt-$pkgver.src" projects/compiler-rt + + # https://reviews.llvm.org/D24736 + patch -Np0 -d projects/compiler-rt <../msan-prevent-initialization-failure-with-newer-glibc.patch + + # Somehow CMake finds the 64-bit library in /lib first, + # so let's preseed CMAKE_LIBRARY_PATH with /lib32. + sed -i '/^[[:blank:]]*find_library(FFI_LIBRARY_PATH/i\ + list(INSERT CMAKE_LIBRARY_PATH 0 /usr/lib32)' cmake/config-ix.cmake + + mkdir build +} + +build() { + cd "$srcdir/llvm-$pkgver.src/build" + + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_LIBDIR_SUFFIX=32 \ + -DCMAKE_C_FLAGS:STRING=-m32 \ + -DCMAKE_CXX_FLAGS:STRING=-m32 \ + -DLLVM_TARGET_ARCH:STRING=i686 \ + -DLLVM_DEFAULT_TARGET_TRIPLE="i686-pc-linux-gnu" \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_FFI=ON \ + -DLLVM_BUILD_DOCS=OFF \ + -DLLVM_ENABLE_SPHINX=OFF \ + -DLLVM_ENABLE_DOXYGEN=OFF \ + -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \ + -DLLVM_BINUTILS_INCDIR=/usr/include \ + .. + + make + + # Disable automatic installation of components that go into subpackages + sed -i '/\(clang\|lldb\)\/cmake_install.cmake/d' tools/cmake_install.cmake + sed -i '/extra\/cmake_install.cmake/d' tools/clang/tools/cmake_install.cmake + sed -i '/compiler-rt\/cmake_install.cmake/d' projects/cmake_install.cmake +} + +package_lib32-llvm() { + pkgdesc="Low Level Virtual Machine (32-bit)" + depends=('lib32-llvm-libs' 'llvm') + + cd "$srcdir/llvm-$pkgver.src" + + make -C build DESTDIR="$pkgdir" install + + # The runtime library goes into lib32-llvm-libs + mv "$pkgdir"/usr/lib32/lib{LLVM,LTO}*.so* "$srcdir" + mv -f "$pkgdir"/usr/lib32/{LLVMgold,BugpointPasses}.so "$srcdir" + + # Fix permissions of static libs + chmod -x "$pkgdir"/usr/lib32/*.a + + mv "$pkgdir/usr/bin/llvm-config" "$pkgdir/usr/lib32/llvm-config" + mv "$pkgdir/usr/include/llvm/Config/llvm-config.h" \ + "$pkgdir/usr/lib32/llvm-config-32.h" + + # Get rid of example Hello transformation + rm "$pkgdir"/usr/lib32/*LLVMHello.* + + rm -rf "$pkgdir"/usr/{bin,include,share/{doc,man,llvm}} + + # Needed for multilib (https://bugs.archlinux.org/task/29951) + # Header stub is taken from Fedora + install -d "$pkgdir/usr/include/llvm/Config" + mv "$pkgdir/usr/lib32/llvm-config-32.h" "$pkgdir/usr/include/llvm/Config/" + + mkdir "$pkgdir"/usr/bin + mv "$pkgdir/usr/lib32/llvm-config" "$pkgdir/usr/bin/llvm-config32" + + install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_lib32-llvm-libs() { + pkgdesc="Low Level Virtual Machine (runtime library)(32-bit) " + depends=('lib32-libffi' 'lib32-zlib' 'lib32-ncurses' 'lib32-gcc-libs') + + install -d "$pkgdir/usr/lib32" + + cp -P \ + "$srcdir"/lib{LLVM,LTO}*.so* \ + "$srcdir"/{LLVMgold,BugpointPasses}.so \ + "$pkgdir/usr/lib32/" + + # Symlink LLVMgold.so from /usr/lib/bfd-plugins + # https://bugs.archlinux.org/task/28479 + install -d "$pkgdir/usr/lib32/bfd-plugins" + ln -s ../LLVMgold.so "$pkgdir/usr/lib32/bfd-plugins/LLVMgold.so" + + install -Dm644 llvm-$pkgver.src/LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_lib32-clang() { + pkgdesc="C language family frontend for LLVM" + url="http://clang.llvm.org/" + depends=("lib32-llvm=$pkgver-$pkgrel" 'clang' 'gcc-multilib') + + cd "$srcdir/llvm-$pkgver.src" + + make -C build/tools/clang DESTDIR="$pkgdir" install + + rm -r "$pkgdir"/usr/{bin,include,share,libexec} + + install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} Copied: lib32-llvm/repos/multilib-staging-x86_64/msan-prevent-initialization-failure-with-newer-glibc.patch (from rev 193771, lib32-llvm/trunk/msan-prevent-initialization-failure-with-newer-glibc.patch) =================================================================== --- multilib-staging-x86_64/msan-prevent-initialization-failure-with-newer-glibc.patch (rev 0) +++ multilib-staging-x86_64/msan-prevent-initialization-failure-with-newer-glibc.patch 2016-10-27 05:42:10 UTC (rev 193772) @@ -0,0 +1,103 @@ +Index: lib/msan/msan_interceptors.cc +=================================================================== +--- lib/msan/msan_interceptors.cc (revision 282231) ++++ lib/msan/msan_interceptors.cc (revision 282232) +@@ -64,6 +64,23 @@ + return in_interceptor_scope; + } + ++static uptr allocated_for_dlsym; ++static const uptr kDlsymAllocPoolSize = 1024; ++static uptr alloc_memory_for_dlsym[kDlsymAllocPoolSize]; ++ ++static bool IsInDlsymAllocPool(const void *ptr) { ++ uptr off = (uptr)ptr - (uptr)alloc_memory_for_dlsym; ++ return off < sizeof(alloc_memory_for_dlsym); ++} ++ ++static void *AllocateFromLocalPool(uptr size_in_bytes) { ++ uptr size_in_words = RoundUpTo(size_in_bytes, kWordSize) / kWordSize; ++ void *mem = (void *)&alloc_memory_for_dlsym[allocated_for_dlsym]; ++ allocated_for_dlsym += size_in_words; ++ CHECK_LT(allocated_for_dlsym, kDlsymAllocPoolSize); ++ return mem; ++} ++ + #define ENSURE_MSAN_INITED() do { \ + CHECK(!msan_init_is_running); \ + if (!msan_inited) { \ +@@ -227,7 +244,7 @@ + + INTERCEPTOR(void, free, void *ptr) { + GET_MALLOC_STACK_TRACE; +- if (!ptr) return; ++ if (!ptr || UNLIKELY(IsInDlsymAllocPool(ptr))) return; + MsanDeallocate(&stack, ptr); + } + +@@ -234,7 +251,7 @@ + #if !SANITIZER_FREEBSD + INTERCEPTOR(void, cfree, void *ptr) { + GET_MALLOC_STACK_TRACE; +- if (!ptr) return; ++ if (!ptr || UNLIKELY(IsInDlsymAllocPool(ptr))) return; + MsanDeallocate(&stack, ptr); + } + #define MSAN_MAYBE_INTERCEPT_CFREE INTERCEPT_FUNCTION(cfree) +@@ -907,27 +924,29 @@ + + INTERCEPTOR(void *, calloc, SIZE_T nmemb, SIZE_T size) { + GET_MALLOC_STACK_TRACE; +- if (UNLIKELY(!msan_inited)) { ++ if (UNLIKELY(!msan_inited)) + // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym. +- const SIZE_T kCallocPoolSize = 1024; +- static uptr calloc_memory_for_dlsym[kCallocPoolSize]; +- static SIZE_T allocated; +- SIZE_T size_in_words = ((nmemb * size) + kWordSize - 1) / kWordSize; +- void *mem = (void*)&calloc_memory_for_dlsym[allocated]; +- allocated += size_in_words; +- CHECK(allocated < kCallocPoolSize); +- return mem; +- } ++ return AllocateFromLocalPool(nmemb * size); + return MsanCalloc(&stack, nmemb, size); + } + + INTERCEPTOR(void *, realloc, void *ptr, SIZE_T size) { + GET_MALLOC_STACK_TRACE; ++ if (UNLIKELY(IsInDlsymAllocPool(ptr))) { ++ uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym; ++ uptr copy_size = Min(size, kDlsymAllocPoolSize - offset); ++ void *new_ptr = AllocateFromLocalPool(size); ++ internal_memcpy(new_ptr, ptr, copy_size); ++ return new_ptr; ++ } + return MsanReallocate(&stack, ptr, size, sizeof(u64), false); + } + + INTERCEPTOR(void *, malloc, SIZE_T size) { + GET_MALLOC_STACK_TRACE; ++ if (UNLIKELY(!msan_inited)) ++ // Hack: dlsym calls malloc before REAL(malloc) is retrieved from dlsym. ++ return AllocateFromLocalPool(size); + return MsanReallocate(&stack, nullptr, size, sizeof(u64), false); + } + +Index: lib/asan/asan_malloc_linux.cc +=================================================================== +--- lib/asan/asan_malloc_linux.cc (revision 282231) ++++ lib/asan/asan_malloc_linux.cc (revision 282232) +@@ -78,7 +78,11 @@ + if (UNLIKELY(IsInDlsymAllocPool(ptr))) { + uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym; + uptr copy_size = Min(size, kDlsymAllocPoolSize - offset); +- void *new_ptr = asan_malloc(size, &stack); ++ void *new_ptr; ++ if (UNLIKELY(!asan_inited)) ++ new_ptr = AllocateFromLocalPool(size); ++ else ++ new_ptr = asan_malloc(size, &stack); + internal_memcpy(new_ptr, ptr, copy_size); + return new_ptr; + }