From 73f77d24cd944dee6a1838345921286d70cf14f7 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 16 Jan 2019 20:01:04 -0800 Subject: clang: Switch to upcoming 8.0 release branch Clang 8.0 is going to be released in Feb-March 2019 so here we switch to release/8.x branch a bit early so we can provide some feedback for release to be good on OE If one needs to use stable 7.0.1 release please use thud branch clang 8.0 does have RISC-V backend, enable it clang: Add building experimental targets e.g. riscv Signed-off-by: Khem Raj --- recipes-devtools/clang/clang.inc | 6 +- .../0000-clang-Enable-SSP-and-PIE-by-default.patch | 63 ++++ .../0001-clang-driver-Use-lib-for-ldso-on-OE.patch | 22 +- ...er-rt-support-a-new-embedded-linux-target.patch | 326 --------------------- ...ind-libunwind-headers-when-LIBCXXABI_LIBU.patch | 68 ----- ...-Include-limits.h-for-PATH_MAX-definition.patch | 28 -- ...LibraryInfo-Undefine-libc-functions-if-th.patch | 91 ------ ...iver-tools.cpp-Add-lssp_nonshared-on-musl.patch | 18 +- ...-Simplify-cross-compilation.-Don-t-use-na.patch | 46 --- ...d-lxml2-to-linker-cmdline-of-xml-is-found.patch | 40 --- .../0002-llvm-allow-env-override-of-exe-path.patch | 37 --- ...-ppc-does-not-support-128-bit-long-double.patch | 22 +- ...0003-compiler-rt-Disable-tsan-on-OE-glibc.patch | 42 --- ...e-calls-to-_finite-and-other-glibc-only-f.patch | 65 ---- .../0004-clang-Prepend-trailing-to-sysroot.patch | 20 +- ...-cmake-mips-Do-not-specify-target-with-OE.patch | 44 --- ...inside-the-target-sysroot-for-compiler-ru.patch | 20 +- ...ang-Define-releative-gcc-installation-dir.patch | 18 +- ...dso-for-musl-on-x86-and-x32-architectures.patch | 20 +- .../0008-clang-scan-view-needs-python-2.x.patch | 20 +- .../0009-clang-Enable-SSP-and-PIE-by-default.patch | 284 ------------------ ...LibraryInfo-Undefine-libc-functions-if-th.patch | 91 ++++++ .../0010-llvm-allow-env-override-of-exe-path.patch | 37 +++ ...d-lxml2-to-linker-cmdline-of-xml-is-found.patch | 40 +++ ...ind-libunwind-headers-when-LIBCXXABI_LIBU.patch | 68 +++++ ...er-rt-support-a-new-embedded-linux-target.patch | 326 +++++++++++++++++++++ ...-Simplify-cross-compilation.-Don-t-use-na.patch | 46 +++ ...0015-compiler-rt-Disable-tsan-on-OE-glibc.patch | 42 +++ recipes-devtools/clang/clang_git.bb | 27 +- recipes-devtools/clang/common.inc | 64 +--- 30 files changed, 835 insertions(+), 1206 deletions(-) create mode 100644 recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch delete mode 100644 recipes-devtools/clang/clang/0001-compiler-rt-support-a-new-embedded-linux-target.patch delete mode 100644 recipes-devtools/clang/clang/0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch delete mode 100644 recipes-devtools/clang/clang/0001-lldb-Include-limits.h-for-PATH_MAX-definition.patch delete mode 100644 recipes-devtools/clang/clang/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch delete mode 100644 recipes-devtools/clang/clang/0002-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch delete mode 100644 recipes-devtools/clang/clang/0002-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch delete mode 100644 recipes-devtools/clang/clang/0002-llvm-allow-env-override-of-exe-path.patch delete mode 100644 recipes-devtools/clang/clang/0003-compiler-rt-Disable-tsan-on-OE-glibc.patch delete mode 100644 recipes-devtools/clang/clang/0003-llvm-Disable-calls-to-_finite-and-other-glibc-only-f.patch delete mode 100644 recipes-devtools/clang/clang/0004-compiler-rt-cmake-mips-Do-not-specify-target-with-OE.patch delete mode 100644 recipes-devtools/clang/clang/0009-clang-Enable-SSP-and-PIE-by-default.patch create mode 100644 recipes-devtools/clang/clang/0009-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch create mode 100644 recipes-devtools/clang/clang/0010-llvm-allow-env-override-of-exe-path.patch create mode 100644 recipes-devtools/clang/clang/0011-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch create mode 100644 recipes-devtools/clang/clang/0012-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch create mode 100644 recipes-devtools/clang/clang/0013-compiler-rt-support-a-new-embedded-linux-target.patch create mode 100644 recipes-devtools/clang/clang/0014-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch create mode 100644 recipes-devtools/clang/clang/0015-compiler-rt-Disable-tsan-on-OE-glibc.patch diff --git a/recipes-devtools/clang/clang.inc b/recipes-devtools/clang/clang.inc index 63c702c..8e29301 100644 --- a/recipes-devtools/clang/clang.inc +++ b/recipes-devtools/clang/clang.inc @@ -4,11 +4,11 @@ LLVM_DIR = "llvm${LLVM_RELEASE}" LLVM_GIT ?= "git://github.com/llvm" LLVM_GIT_PROTOCOL ?= "https" -MAJOR_VER = "7" +MAJOR_VER = "8" MINOR_VER = "0" -PATCH_VER = "1" +PATCH_VER = "0" -SRCREV ?= "d0d8eb2e5415b8be29343e3c17a18e49e67b5551" +SRCREV ?= "e264daec97935db606c312b10e43f4e35ac39b58" PV = "${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}" BRANCH = "release/${MAJOR_VER}.x" diff --git a/recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch b/recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch new file mode 100644 index 0000000..d7b76b1 --- /dev/null +++ b/recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch @@ -0,0 +1,63 @@ +From 76718d7d905029a2304c1ad275cd528b404dc7d4 Mon Sep 17 00:00:00 2001 +From: Evangelos Foutras +Date: Thu, 20 Sep 2018 06:20:28 +0300 +Subject: [PATCH] clang: Enable SSP and PIE by default + +This is a minimal set of changes needed to make clang use SSP and PIE by +default on Arch Linux. Tests that were easy to adjust have been changed +accordingly; only test/Driver/linux-ld.c has been marked as "expected +failure" due to the number of changes it would require (mostly replacing +crtbegin.o with crtbeginS.o). + +Doing so is needed in order to align clang with the new default GCC +behavior in Arch which generates PIE executables by default and also +defaults to -fstack-protector-strong. It is not meant to be a long term +solution, but a simple temporary fix. + +Hopefully these changes will be obsoleted by the introduction upstream +of a compile-time option (https://bugs.llvm.org/show_bug.cgi?id=13410) +--- + clang/lib/Driver/ToolChains/Linux.cpp | 14 ++++++++++++-- + clang/lib/Driver/ToolChains/Linux.h | 1 + + 2 files changed, 13 insertions(+), 2 deletions(-) + +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index 5dc7b506d6f..4dfef25aa63 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -976,8 +976,18 @@ void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs, + } + + bool Linux::isPIEDefault() const { +- return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || +- getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ const bool IsMips = getTriple().isMIPS(); ++ const bool IsAndroid = getTriple().isAndroid(); ++ ++ if (IsMips || IsAndroid) ++ return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || ++ getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ ++ return true; ++} ++ ++unsigned Linux::GetDefaultStackProtectorLevel(bool KernelOrKext) const { ++ return 2; + } + + bool Linux::IsMathErrnoDefault() const { +diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h +index 4a662cb4b42..2ddd4056573 100644 +--- a/clang/lib/Driver/ToolChains/Linux.h ++++ b/clang/lib/Driver/ToolChains/Linux.h +@@ -39,6 +39,7 @@ public: + llvm::opt::ArgStringList &CC1Args) const override; + CXXStdlibType GetDefaultCXXStdlibType() const override; + bool isPIEDefault() const override; ++ unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override; + bool IsMathErrnoDefault() const override; + SanitizerMask getSupportedSanitizers() const override; + void addProfileRTLibs(const llvm::opt::ArgList &Args, +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang/0001-clang-driver-Use-lib-for-ldso-on-OE.patch b/recipes-devtools/clang/clang/0001-clang-driver-Use-lib-for-ldso-on-OE.patch index 2b06da2..42e920a 100644 --- a/recipes-devtools/clang/clang/0001-clang-driver-Use-lib-for-ldso-on-OE.patch +++ b/recipes-devtools/clang/clang/0001-clang-driver-Use-lib-for-ldso-on-OE.patch @@ -1,7 +1,7 @@ -From 06033c7fa2d575a9a68b377f5ce9324433c23806 Mon Sep 17 00:00:00 2001 +From 4fe687292a2b2952a360eecdd6954db11750c903 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 21 May 2016 21:52:36 -0700 -Subject: [PATCH 1/8] clang: driver: Use /lib for ldso on OE +Subject: [PATCH 01/15] clang: driver: Use /lib for ldso on OE OE does not follow the default base_libdir that clang has, therefore adjust it for OE @@ -11,14 +11,14 @@ for 64bit to /lib64 instead of /lib Signed-off-by: Khem Raj --- - lib/Driver/ToolChains/Linux.cpp | 8 ++++---- + clang/lib/Driver/ToolChains/Linux.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) -diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp -index f8f3623918..e662b6b262 100644 ---- a/lib/Driver/ToolChains/Linux.cpp -+++ b/lib/Driver/ToolChains/Linux.cpp -@@ -566,12 +566,12 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index 65ab9b2daf5..33e2fcec299 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -590,12 +590,12 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { Loader = "ld.so.1"; break; case llvm::Triple::ppc64: @@ -33,7 +33,7 @@ index f8f3623918..e662b6b262 100644 Loader = (tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2"; break; -@@ -593,7 +593,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { +@@ -617,7 +617,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { Loader = "ld-linux.so.2"; break; case llvm::Triple::sparcv9: @@ -42,7 +42,7 @@ index f8f3623918..e662b6b262 100644 Loader = "ld-linux.so.2"; break; case llvm::Triple::systemz: -@@ -607,7 +607,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { +@@ -631,7 +631,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { case llvm::Triple::x86_64: { bool X32 = Triple.getEnvironment() == llvm::Triple::GNUX32; @@ -52,5 +52,5 @@ index f8f3623918..e662b6b262 100644 break; } -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0001-compiler-rt-support-a-new-embedded-linux-target.patch b/recipes-devtools/clang/clang/0001-compiler-rt-support-a-new-embedded-linux-target.patch deleted file mode 100644 index 8b0c9fe..0000000 --- a/recipes-devtools/clang/clang/0001-compiler-rt-support-a-new-embedded-linux-target.patch +++ /dev/null @@ -1,326 +0,0 @@ -From 8b0d5d19e8ebec9b6508b51701cb0c64069091cb Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sun, 19 Apr 2015 15:16:23 -0700 -Subject: [PATCH 1/4] compiler-rt: support a new embedded linux target - -Signed-off-by: Khem Raj ---- - lib/builtins/int_util.c | 3 +- - make/platform/clang_linux_embedded.mk | 286 ++++++++++++++++++ - .../clang_linux_embedded_test_input.c | 0 - 3 files changed, 287 insertions(+), 2 deletions(-) - create mode 100644 make/platform/clang_linux_embedded.mk - create mode 100644 make/platform/clang_linux_embedded_test_input.c - -diff --git a/lib/builtins/int_util.c b/lib/builtins/int_util.c -index de87410db..0d5b56fe1 100644 ---- a/lib/builtins/int_util.c -+++ b/lib/builtins/int_util.c -@@ -58,8 +58,7 @@ void compilerrt_abort_impl(const char *file, int line, const char *function) { - #else - - /* Get the system definition of abort() */ --#include -- -+extern void abort (void) __attribute__ ((__noreturn__)); - #ifndef _WIN32 - __attribute__((weak)) - __attribute__((visibility("hidden"))) -diff --git a/make/platform/clang_linux_embedded.mk b/make/platform/clang_linux_embedded.mk -new file mode 100644 -index 000000000..d0a890075 ---- /dev/null -+++ b/make/platform/clang_linux_embedded.mk -@@ -0,0 +1,286 @@ -+# These are the functions which clang needs when it is targeting a previous -+# version of the OS. The issue is that the backend may use functions which were -+# not present in the libgcc that shipped on the platform. In such cases, we link -+# with a version of the library which contains private_extern definitions of all -+# the extra functions which might be referenced. -+ -+Description := Static runtime libraries for embedded clang/Linux -+ -+# A function that ensures we don't try to build for architectures that we -+# don't have working toolchains for. -+CheckArches = \ -+ $(shell \ -+ result=""; \ -+ for arch in $(1); do \ -+ if $(CC) -arch $$arch -c \ -+ -integrated-as \ -+ $(ProjSrcRoot)/make/platform/clang_linux_embedded_test_input.c \ -+ -o /dev/null > /dev/null 2> /dev/null; then \ -+ result="$$result$$arch "; \ -+ else \ -+ printf 1>&2 \ -+ "warning: clang_linux_embedded.mk: dropping arch '$$arch' from lib '$(2)'\n"; \ -+ fi; \ -+ done; \ -+ echo $$result) -+ -+XCRun = \ -+ $(shell \ -+ result=`xcrun -find $(1) 2> /dev/null`; \ -+ if [ "$$?" != "0" ]; then result=$(1); fi; \ -+ echo $$result) -+ -+### -+ -+CC := $(call XCRun,clang) -+AR := $(call XCRun,ar) -+RANLIB := $(call XCRun,ranlib) -+STRIP := $(call XCRun,strip) -+LIPO := $(call XCRun,lipo) -+DSYMUTIL := $(call XCRun,dsymutil) -+Configs := -+UniversalArchs := -+ -+# Soft-float version of the runtime. No floating-point instructions will be used -+# and the ABI (out of necessity) passes floating values in normal registers: -+# non-VFP variant of the AAPCS. -+UniversalArchs.soft_static := $(call CheckArches,arm armv7m armv7em armv7,soft_static) -+Configs += $(if $(UniversalArchs.soft_static),soft_static) -+ -+# Hard-float version of the runtime. On ARM VFP instructions and registers are -+# allowed, and floating point values get passed in them. VFP variant of the -+# AAPCS. -+UniversalArchs.hard_static := $(call CheckArches,armv7em armv7 i386 x86_64,hard_static) -+Configs += $(if $(UniversalArchs.hard_static),hard_static) -+ -+UniversalArchs.soft_pic := $(call CheckArches,armv6m armv7m armv7em armv7,soft_pic) -+Configs += $(if $(UniversalArchs.soft_pic),soft_pic) -+ -+UniversalArchs.hard_pic := $(call CheckArches,armv7em armv7 i386 x86_64,hard_pic) -+Configs += $(if $(UniversalArchs.hard_pic),hard_pic) -+ -+CFLAGS := -Wall -Werror -Oz -fomit-frame-pointer -ffreestanding -+ -+PIC_CFLAGS := -fPIC -+STATIC_CFLAGS := -static -+ -+CFLAGS_SOFT := -mfloat-abi=soft -+CFLAGS_HARD := -mfloat-abi=hard -+ -+CFLAGS_I386 := -march=pentium -+ -+CFLAGS.soft_static := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_SOFT) -+CFLAGS.hard_static := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_HARD) -+CFLAGS.soft_pic := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_SOFT) -+CFLAGS.hard_pic := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_HARD) -+ -+CFLAGS.soft_static.armv7 := $(CFLAGS.soft_static) $(CFLAGS_ARMV7) -+CFLAGS.hard_static.armv7 := $(CFLAGS.hard_static) $(CFLAGS_ARMV7) -+CFLAGS.soft_pic.armv7 := $(CFLAGS.soft_pic) $(CFLAGS_ARMV7) -+CFLAGS.hard_pic.armv7 := $(CFLAGS.hard_pic) $(CFLAGS_ARMV7) -+ -+# x86 platforms ignore -mfloat-abi options and complain about doing so. Despite -+# this they're hard-float. -+CFLAGS.hard_static.i386 := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_I386) -+CFLAGS.hard_pic.i386 := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_I386) -+CFLAGS.hard_static.x86_64 := $(CFLAGS) $(STATIC_CFLAGS) -+CFLAGS.hard_pic.x86_64 := $(CFLAGS) $(PIC_CFLAGS) -+ -+# Functions not wanted: -+# + eprintf is obsolete anyway -+# + *vfp: designed for Thumb1 CPUs with VFPv2 -+ -+COMMON_FUNCTIONS := \ -+ absvdi2 \ -+ absvsi2 \ -+ addvdi3 \ -+ addvsi3 \ -+ ashldi3 \ -+ ashrdi3 \ -+ bswapdi2 \ -+ bswapsi2 \ -+ clzdi2 \ -+ clzsi2 \ -+ cmpdi2 \ -+ ctzdi2 \ -+ ctzsi2 \ -+ divdc3 \ -+ divdi3 \ -+ divsc3 \ -+ divmodsi4 \ -+ udivmodsi4 \ -+ do_global_dtors \ -+ ffsdi2 \ -+ fixdfdi \ -+ fixsfdi \ -+ fixunsdfdi \ -+ fixunsdfsi \ -+ fixunssfdi \ -+ fixunssfsi \ -+ floatdidf \ -+ floatdisf \ -+ floatundidf \ -+ floatundisf \ -+ gcc_bcmp \ -+ lshrdi3 \ -+ moddi3 \ -+ muldc3 \ -+ muldi3 \ -+ mulsc3 \ -+ mulvdi3 \ -+ mulvsi3 \ -+ negdi2 \ -+ negvdi2 \ -+ negvsi2 \ -+ paritydi2 \ -+ paritysi2 \ -+ popcountdi2 \ -+ popcountsi2 \ -+ powidf2 \ -+ powisf2 \ -+ subvdi3 \ -+ subvsi3 \ -+ ucmpdi2 \ -+ udiv_w_sdiv \ -+ udivdi3 \ -+ udivmoddi4 \ -+ umoddi3 \ -+ adddf3 \ -+ addsf3 \ -+ cmpdf2 \ -+ cmpsf2 \ -+ div0 \ -+ divdf3 \ -+ divsf3 \ -+ divsi3 \ -+ extendsfdf2 \ -+ ffssi2 \ -+ fixdfsi \ -+ fixsfsi \ -+ floatsidf \ -+ floatsisf \ -+ floatunsidf \ -+ floatunsisf \ -+ comparedf2 \ -+ comparesf2 \ -+ modsi3 \ -+ muldf3 \ -+ mulsf3 \ -+ negdf2 \ -+ negsf2 \ -+ subdf3 \ -+ subsf3 \ -+ truncdfsf2 \ -+ udivsi3 \ -+ umodsi3 \ -+ unorddf2 \ -+ unordsf2 -+ -+ARM_FUNCTIONS := \ -+ aeabi_cdcmpeq \ -+ aeabi_cdrcmple \ -+ aeabi_cfcmpeq \ -+ aeabi_cfrcmple \ -+ aeabi_dcmpeq \ -+ aeabi_dcmpge \ -+ aeabi_dcmpgt \ -+ aeabi_dcmple \ -+ aeabi_dcmplt \ -+ aeabi_drsub \ -+ aeabi_fcmpeq \ -+ aeabi_fcmpge \ -+ aeabi_fcmpgt \ -+ aeabi_fcmple \ -+ aeabi_fcmplt \ -+ aeabi_frsub \ -+ aeabi_idivmod \ -+ aeabi_uidivmod \ -+ -+# ARM Assembly implementation which requires Thumb2 (i.e. won't work on v6M). -+THUMB2_FUNCTIONS := \ -+ switch16 \ -+ switch32 \ -+ switch8 \ -+ switchu8 \ -+ sync_fetch_and_add_4 \ -+ sync_fetch_and_sub_4 \ -+ sync_fetch_and_and_4 \ -+ sync_fetch_and_or_4 \ -+ sync_fetch_and_xor_4 \ -+ sync_fetch_and_nand_4 \ -+ sync_fetch_and_max_4 \ -+ sync_fetch_and_umax_4 \ -+ sync_fetch_and_min_4 \ -+ sync_fetch_and_umin_4 \ -+ sync_fetch_and_add_8 \ -+ sync_fetch_and_sub_8 \ -+ sync_fetch_and_and_8 \ -+ sync_fetch_and_or_8 \ -+ sync_fetch_and_xor_8 \ -+ sync_fetch_and_nand_8 \ -+ sync_fetch_and_max_8 \ -+ sync_fetch_and_umax_8 \ -+ sync_fetch_and_min_8 \ -+ sync_fetch_and_umin_8 -+ -+I386_FUNCTIONS := \ -+ i686.get_pc_thunk.eax \ -+ i686.get_pc_thunk.ebp \ -+ i686.get_pc_thunk.ebx \ -+ i686.get_pc_thunk.ecx \ -+ i686.get_pc_thunk.edi \ -+ i686.get_pc_thunk.edx \ -+ i686.get_pc_thunk.esi -+ -+# FIXME: Currently, compiler-rt is missing implementations for a number of the -+# functions. Filter them out for now. -+MISSING_FUNCTIONS := \ -+ cmpdf2 cmpsf2 div0 \ -+ ffssi2 \ -+ udiv_w_sdiv unorddf2 unordsf2 bswapdi2 \ -+ bswapsi2 \ -+ gcc_bcmp \ -+ do_global_dtors \ -+ i686.get_pc_thunk.eax i686.get_pc_thunk.ebp i686.get_pc_thunk.ebx \ -+ i686.get_pc_thunk.ecx i686.get_pc_thunk.edi i686.get_pc_thunk.edx \ -+ i686.get_pc_thunk.esi \ -+ aeabi_cdcmpeq aeabi_cdrcmple aeabi_cfcmpeq aeabi_cfrcmple aeabi_dcmpeq \ -+ aeabi_dcmpge aeabi_dcmpgt aeabi_dcmple aeabi_dcmplt aeabi_drsub \ -+ aeabi_fcmpeq \ aeabi_fcmpge aeabi_fcmpgt aeabi_fcmple aeabi_fcmplt \ -+ aeabi_frsub aeabi_idivmod aeabi_uidivmod -+ -+FUNCTIONS_ARMV6M := $(COMMON_FUNCTIONS) $(ARM_FUNCTIONS) -+FUNCTIONS_ARM_ALL := $(COMMON_FUNCTIONS) $(ARM_FUNCTIONS) $(THUMB2_FUNCTIONS) -+FUNCTIONS_I386 := $(COMMON_FUNCTIONS) $(I386_FUNCTIONS) -+FUNCTIONS_X86_64 := $(COMMON_FUNCTIONS) -+ -+FUNCTIONS_ARMV6M := \ -+ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_ARMV6M)) -+FUNCTIONS_ARM_ALL := \ -+ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_ARM_ALL)) -+FUNCTIONS_I386 := \ -+ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_I386)) -+FUNCTIONS_X86_64 := \ -+ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_X86_64)) -+ -+FUNCTIONS.soft_static.armv6m := $(FUNCTIONS_ARMV6M) -+FUNCTIONS.soft_pic.armv6m := $(FUNCTIONS_ARMV6M) -+ -+FUNCTIONS.soft_static.armv7m := $(FUNCTIONS_ARM_ALL) -+FUNCTIONS.soft_pic.armv7m := $(FUNCTIONS_ARM_ALL) -+ -+FUNCTIONS.soft_static.armv7em := $(FUNCTIONS_ARM_ALL) -+FUNCTIONS.hard_static.armv7em := $(FUNCTIONS_ARM_ALL) -+FUNCTIONS.soft_pic.armv7em := $(FUNCTIONS_ARM_ALL) -+FUNCTIONS.hard_pic.armv7em := $(FUNCTIONS_ARM_ALL) -+ -+FUNCTIONS.soft_static.armv7 := $(FUNCTIONS_ARM_ALL) -+FUNCTIONS.hard_static.armv7 := $(FUNCTIONS_ARM_ALL) -+FUNCTIONS.soft_pic.armv7 := $(FUNCTIONS_ARM_ALL) -+FUNCTIONS.hard_pic.armv7 := $(FUNCTIONS_ARM_ALL) -+ -+FUNCTIONS.hard_static.i386 := $(FUNCTIONS_I386) -+FUNCTIONS.hard_pic.i386 := $(FUNCTIONS_I386) -+ -+FUNCTIONS.hard_static.x86_64 := $(FUNCTIONS_X86_64) -+FUNCTIONS.hard_pic.x86_64 := $(FUNCTIONS_X86_64) -diff --git a/make/platform/clang_linux_embedded_test_input.c b/make/platform/clang_linux_embedded_test_input.c -new file mode 100644 -index 000000000..e69de29bb --- -2.20.1 - diff --git a/recipes-devtools/clang/clang/0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch b/recipes-devtools/clang/clang/0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch deleted file mode 100644 index 297b56d..0000000 --- a/recipes-devtools/clang/clang/0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch +++ /dev/null @@ -1,68 +0,0 @@ -From a122717a9bc31e0ab44197e743aa466711c4bf79 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sun, 27 Aug 2017 10:37:49 -0700 -Subject: [PATCH] libcxxabi: Find libunwind headers when - LIBCXXABI_LIBUNWIND_INCLUDES is set - -Currently, when LIBCXXABI_LIBUNWIND_INCLUDES is set via CMake arguments -then it ends up not searching the specified dir and unwind.h is not found -especially for ARM targets - -This patch makes the searching synthesized directories and then set -LIBCXXABI_LIBUNWIND_INCLUDES if its there in environment - -Signed-off-by: Khem Raj ---- - CMakeLists.txt | 21 +++++++++++---------- - 1 file changed, 11 insertions(+), 10 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index d6648ed..12c02f2 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -434,15 +434,10 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBCXXABI_C_FLAGS}") - # Setup Source Code - #=============================================================================== - --set(LIBCXXABI_LIBUNWIND_INCLUDES "${LIBCXXABI_LIBUNWIND_INCLUDES}" CACHE PATH -- "Specify path to libunwind includes." FORCE) --set(LIBCXXABI_LIBUNWIND_PATH "${LIBCXXABI_LIBUNWIND_PATH}" CACHE PATH -- "Specify path to libunwind source." FORCE) -- - include_directories(include) - if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM) - find_path( -- LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL -+ LIBCXXABI_LIBUNWIND_INCLUDES - libunwind.h - PATHS ${LIBCXXABI_LIBUNWIND_INCLUDES} - ${LIBCXXABI_LIBUNWIND_PATH}/include -@@ -454,15 +449,21 @@ if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM) - NO_CMAKE_FIND_ROOT_PATH - ) - -- if (LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL STREQUAL "LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL-NOTFOUND") -- set(LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL "") -+ if (LIBCXXABI_LIBUNWIND_INCLUDES STREQUAL "LIBCXXABI_LIBUNWIND_INCLUDES-NOTFOUND") -+ set(LIBCXXABI_LIBUNWIND_INCLUDES "") - endif() - -- if (NOT LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL STREQUAL "") -- include_directories("${LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL}") -+ if (NOT LIBCXXABI_LIBUNWIND_INCLUDES STREQUAL "") -+ include_directories("${LIBCXXABI_LIBUNWIND_INCLUDES}") - endif() - endif() - -+set(LIBCXXABI_LIBUNWIND_INCLUDES "${LIBCXXABI_LIBUNWIND_INCLUDES}" CACHE PATH -+ "Specify path to libunwind includes." FORCE) -+set(LIBCXXABI_LIBUNWIND_PATH "${LIBCXXABI_LIBUNWIND_PATH}" CACHE PATH -+ "Specify path to libunwind source." FORCE) -+ -+ - # Add source code. This also contains all of the logic for deciding linker flags - # soname, etc... - add_subdirectory(src) --- -2.18.0 - diff --git a/recipes-devtools/clang/clang/0001-lldb-Include-limits.h-for-PATH_MAX-definition.patch b/recipes-devtools/clang/clang/0001-lldb-Include-limits.h-for-PATH_MAX-definition.patch deleted file mode 100644 index 1c42931..0000000 --- a/recipes-devtools/clang/clang/0001-lldb-Include-limits.h-for-PATH_MAX-definition.patch +++ /dev/null @@ -1,28 +0,0 @@ -From ff8d7137ed4d62e9db6d31581822a2ce06d5cbc6 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Thu, 18 May 2017 23:12:34 -0700 -Subject: [PATCH 1/2] lldb: Include limits.h for PATH_MAX definition - -Helps compiling on musl targets - -Signed-off-by: Khem Raj ---- - source/Utility/FileSpec.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/source/Utility/FileSpec.cpp b/source/Utility/FileSpec.cpp -index b6952f7e3..2cedf5d90 100644 ---- a/source/Utility/FileSpec.cpp -+++ b/source/Utility/FileSpec.cpp -@@ -29,7 +29,7 @@ - #include // for assert - #include // for size_t, NULL, snpr... - #include // for strcmp -- -+#include // for PATH_MAX - using namespace lldb; - using namespace lldb_private; - --- -2.20.1 - diff --git a/recipes-devtools/clang/clang/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch b/recipes-devtools/clang/clang/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch deleted file mode 100644 index de8da74..0000000 --- a/recipes-devtools/clang/clang/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch +++ /dev/null @@ -1,91 +0,0 @@ -From fc9904be5d4ee1d1e92a1ff86b01218fbf91b12f Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sat, 21 May 2016 00:33:20 +0000 -Subject: [PATCH 1/3] llvm: TargetLibraryInfo: Undefine libc functions if they - are macros - -musl defines some functions as macros and not inline functions -if this is the case then make sure to undefine them - -Signed-off-by: Khem Raj ---- - include/llvm/Analysis/TargetLibraryInfo.def | 21 +++++++++++++++++++++ - 1 file changed, 21 insertions(+) - -diff --git a/include/llvm/Analysis/TargetLibraryInfo.def b/include/llvm/Analysis/TargetLibraryInfo.def -index f94debba9c5..e92dbc98c55 100644 ---- a/include/llvm/Analysis/TargetLibraryInfo.def -+++ b/include/llvm/Analysis/TargetLibraryInfo.def -@@ -707,6 +707,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl") - TLI_DEFINE_ENUM_INTERNAL(fopen) - TLI_DEFINE_STRING_INTERNAL("fopen") - /// FILE *fopen64(const char *filename, const char *opentype) -+#ifdef fopen64 -+#undef fopen64 -+#endif - TLI_DEFINE_ENUM_INTERNAL(fopen64) - TLI_DEFINE_STRING_INTERNAL("fopen64") - /// int fprintf(FILE *stream, const char *format, ...); -@@ -751,6 +754,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek") - /// int fseeko(FILE *stream, off_t offset, int whence); - TLI_DEFINE_ENUM_INTERNAL(fseeko) - TLI_DEFINE_STRING_INTERNAL("fseeko") -+#ifdef fseeko64 -+#undef fseeko64 -+#endif - /// int fseeko64(FILE *stream, off64_t offset, int whence) - TLI_DEFINE_ENUM_INTERNAL(fseeko64) - TLI_DEFINE_STRING_INTERNAL("fseeko64") -@@ -761,6 +767,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos") - TLI_DEFINE_ENUM_INTERNAL(fstat) - TLI_DEFINE_STRING_INTERNAL("fstat") - /// int fstat64(int filedes, struct stat64 *buf) -+#ifdef fstat64 -+#undef fstat64 -+#endif - TLI_DEFINE_ENUM_INTERNAL(fstat64) - TLI_DEFINE_STRING_INTERNAL("fstat64") - /// int fstatvfs(int fildes, struct statvfs *buf); -@@ -776,6 +785,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell") - TLI_DEFINE_ENUM_INTERNAL(ftello) - TLI_DEFINE_STRING_INTERNAL("ftello") - /// off64_t ftello64(FILE *stream) -+#ifdef ftello64 -+#undef ftello64 -+#endif - TLI_DEFINE_ENUM_INTERNAL(ftello64) - TLI_DEFINE_STRING_INTERNAL("ftello64") - /// int ftrylockfile(FILE *file); -@@ -902,6 +914,9 @@ TLI_DEFINE_STRING_INTERNAL("logl") - TLI_DEFINE_ENUM_INTERNAL(lstat) - TLI_DEFINE_STRING_INTERNAL("lstat") - /// int lstat64(const char *path, struct stat64 *buf); -+#ifdef lstat64 -+#undef lstat64 -+#endif - TLI_DEFINE_ENUM_INTERNAL(lstat64) - TLI_DEFINE_STRING_INTERNAL("lstat64") - /// void *malloc(size_t size); -@@ -1127,6 +1142,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf") - TLI_DEFINE_ENUM_INTERNAL(stat) - TLI_DEFINE_STRING_INTERNAL("stat") - /// int stat64(const char *path, struct stat64 *buf); -+#ifdef stat64 -+#undef stat64 -+#endif - TLI_DEFINE_ENUM_INTERNAL(stat64) - TLI_DEFINE_STRING_INTERNAL("stat64") - /// int statvfs(const char *path, struct statvfs *buf); -@@ -1256,6 +1274,9 @@ TLI_DEFINE_STRING_INTERNAL("times") - TLI_DEFINE_ENUM_INTERNAL(tmpfile) - TLI_DEFINE_STRING_INTERNAL("tmpfile") - /// FILE *tmpfile64(void) -+#ifdef tmpfile64 -+#undef tmpfile64 -+#endif - TLI_DEFINE_ENUM_INTERNAL(tmpfile64) - TLI_DEFINE_STRING_INTERNAL("tmpfile64") - /// int toascii(int c); --- -2.18.0 - diff --git a/recipes-devtools/clang/clang/0002-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch b/recipes-devtools/clang/clang/0002-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch index f73b1c0..35b3d4f 100644 --- a/recipes-devtools/clang/clang/0002-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch +++ b/recipes-devtools/clang/clang/0002-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch @@ -1,7 +1,7 @@ -From fc628b03a5ac41a446fd2dfea0ecbe03331e54d8 Mon Sep 17 00:00:00 2001 +From 14a9ed6fa67f7e988d85408554f88a8d72c6a607 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Thu, 19 May 2016 21:11:06 -0700 -Subject: [PATCH 2/8] clang: Driver/tools.cpp: Add -lssp_nonshared on musl +Subject: [PATCH 02/15] clang: Driver/tools.cpp: Add -lssp_nonshared on musl musl driver will need to add ssp_nonshared for stack_check_local on the linker cmdline when using stack protector commands on @@ -9,14 +9,14 @@ compiler cmdline Signed-off-by: Khem Raj --- - lib/Driver/ToolChains/Gnu.cpp | 6 ++++++ + clang/lib/Driver/ToolChains/Gnu.cpp | 6 ++++++ 1 file changed, 6 insertions(+) -diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp -index 3755673250..766c650b3c 100644 ---- a/lib/Driver/ToolChains/Gnu.cpp -+++ b/lib/Driver/ToolChains/Gnu.cpp -@@ -503,6 +503,12 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, +diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp +index 2ad45097dce..c841399193e 100644 +--- a/clang/lib/Driver/ToolChains/Gnu.cpp ++++ b/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -525,6 +525,12 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (IsIAMCU) CmdArgs.push_back("-lgloss"); @@ -30,5 +30,5 @@ index 3755673250..766c650b3c 100644 CmdArgs.push_back("--end-group"); else -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0002-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch b/recipes-devtools/clang/clang/0002-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch deleted file mode 100644 index 2ff903b..0000000 --- a/recipes-devtools/clang/clang/0002-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 5ee148af76169aa327bfa0bfc1c2618a68e873fb Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Thu, 19 May 2016 23:11:45 -0700 -Subject: [PATCH 2/4] compiler-rt: Simplify cross-compilation. Don't use - native-compiled llvm-config. - - Note: AddLLVM.cmake does not expose the LLVM source directory. - So if you want to run the test suite, you need to either: - - 1) set LLVM_MAIN_SRC_DIR explicitly (to find lit.py) - 2) change AddLLVM.cmake to point to an installed 'lit'. - 3) add_subdirectory(compiler-rt/test) from clang instead of compiler-rt. - -https://us.codeaurora.org/patches/quic/llvm/50683/compiler-rt-cross-compilation.patch - -Signed-off-by: Greg Fitzgerald -Signed-off-by: Khem Raj ---- - CMakeLists.txt | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 86ca2b3ef..07d894c8a 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -63,7 +63,16 @@ set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOLEAN - "Build for a bare-metal target.") - - if (COMPILER_RT_STANDALONE_BUILD) -- load_llvm_config() -+ find_package(LLVM REQUIRED) -+ list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") -+ -+ # Variables that AddLLVM.cmake depends on (included by AddCompilerRT) -+ set(LLVM_TOOLS_BINARY_DIR "${LLVM_INSTALL_PREFIX}/bin") -+ set(LLVM_LIBRARY_DIR "${LLVM_INSTALL_PREFIX}/lib") -+ -+ set(LLVM_LIBRARY_OUTPUT_INTDIR -+ ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) -+ - if (TARGET intrinsics_gen) - # Loading the llvm config causes this target to be imported so place it - # under the appropriate folder in an IDE. --- -2.20.1 - diff --git a/recipes-devtools/clang/clang/0002-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch b/recipes-devtools/clang/clang/0002-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch deleted file mode 100644 index c331e7a..0000000 --- a/recipes-devtools/clang/clang/0002-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch +++ /dev/null @@ -1,40 +0,0 @@ -From fa140ec90e72da40d49301e674c84854fdac804b Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 22 May 2017 17:36:16 -0700 -Subject: [PATCH 2/2] lldb: Add -lxml2 to linker cmdline of xml is found - -When cross compiling for systems where static libs -for libxml are not available cmake's detection mechanism -resort to linking with libxml.so but doesnt use -lxml2 -liblldbHost.a however requires libxml on linker -cmdline _after_ itself so its use of symbols from libxml2 -can be resolved. Here check for libxml2 being detected and -add it if its found. - -Fixes - -| ../../../../lib/liblldbHost.a(XML.cpp.o): In function `lldb_private::XMLDocument::Clear()': -| /usr/src/debug/lldb/5.0.0+gitAUTOINC+69edad7913_08d6b47db9_cf6c5b3386-r0/git/tools/lldb/source/Host/common/XML.cpp:29: undefined reference to `xmlFreeDoc' -| /usr/src/debug/lldb/5.0.0+gitAUTOINC+69edad7913_08d6b47db9_cf6c5b3386-r0/git/tools/lldb/source/Host/common/XML.cpp:29: undefined reference to `xmlFreeDoc' - -Signed-off-by: Khem Raj ---- - source/Host/CMakeLists.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/source/Host/CMakeLists.txt b/source/Host/CMakeLists.txt -index 5a92447ed..22ce6eee4 100644 ---- a/source/Host/CMakeLists.txt -+++ b/source/Host/CMakeLists.txt -@@ -149,7 +149,7 @@ if (APPLE) - list(APPEND EXTRA_LIBS xml2) - else () - if (LIBXML2_FOUND) -- list(APPEND EXTRA_LIBS ${LIBXML2_LIBRARIES}) -+ list(APPEND EXTRA_LIBS xml2) - endif() - endif () - if (HAVE_LIBDL) --- -2.20.1 - diff --git a/recipes-devtools/clang/clang/0002-llvm-allow-env-override-of-exe-path.patch b/recipes-devtools/clang/clang/0002-llvm-allow-env-override-of-exe-path.patch deleted file mode 100644 index fa49e67..0000000 --- a/recipes-devtools/clang/clang/0002-llvm-allow-env-override-of-exe-path.patch +++ /dev/null @@ -1,37 +0,0 @@ -From c65c0af4a5721e3c0dfcc56c15ef3310a54e0008 Mon Sep 17 00:00:00 2001 -From: Martin Kelly -Date: Fri, 19 May 2017 00:22:57 -0700 -Subject: [PATCH 2/3] llvm: allow env override of exe path - -When using a native llvm-config from inside a sysroot, we need llvm-config to -return the libraries, include directories, etc. from inside the sysroot rather -than from the native sysroot. Thus provide an env override for calling -llvm-config from a target sysroot. - -Signed-off-by: Martin Kelly -Signed-off-by: Khem Raj ---- - tools/llvm-config/llvm-config.cpp | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp -index 892adc3b9dd..38f190ecbd1 100644 ---- a/tools/llvm-config/llvm-config.cpp -+++ b/tools/llvm-config/llvm-config.cpp -@@ -226,6 +226,13 @@ Typical components:\n\ - - /// Compute the path to the main executable. - std::string GetExecutablePath(const char *Argv0) { -+ // Hack for Yocto: we need to override the root path when we are using -+ // llvm-config from within a target sysroot. -+ const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH"); -+ if (Sysroot != nullptr) { -+ return Sysroot; -+ } -+ - // This just needs to be some symbol in the binary; C++ doesn't - // allow taking the address of ::main however. - void *P = (void *)(intptr_t)GetExecutablePath; --- -2.18.0 - diff --git a/recipes-devtools/clang/clang/0003-clang-musl-ppc-does-not-support-128-bit-long-double.patch b/recipes-devtools/clang/clang/0003-clang-musl-ppc-does-not-support-128-bit-long-double.patch index 868fc3b..80ec006 100644 --- a/recipes-devtools/clang/clang/0003-clang-musl-ppc-does-not-support-128-bit-long-double.patch +++ b/recipes-devtools/clang/clang/0003-clang-musl-ppc-does-not-support-128-bit-long-double.patch @@ -1,27 +1,27 @@ -From 48fa180df65f7ee63a85dd69fd2c1382609c5e95 Mon Sep 17 00:00:00 2001 +From 0f183864a6e89461143e082d4b7e5df4cd0f4480 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 10 May 2016 02:00:11 -0700 -Subject: [PATCH 3/8] clang: musl/ppc does not support 128-bit long double +Subject: [PATCH 03/15] clang: musl/ppc does not support 128-bit long double Signed-off-by: Khem Raj --- - lib/Basic/Targets/PPC.h | 3 ++- + clang/lib/Basic/Targets/PPC.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -diff --git a/lib/Basic/Targets/PPC.h b/lib/Basic/Targets/PPC.h -index 439c73a0e3..8da698ee21 100644 ---- a/lib/Basic/Targets/PPC.h -+++ b/lib/Basic/Targets/PPC.h -@@ -328,7 +328,8 @@ public: +diff --git a/clang/lib/Basic/Targets/PPC.h b/clang/lib/Basic/Targets/PPC.h +index 058970a0e09..ba5b941bc08 100644 +--- a/clang/lib/Basic/Targets/PPC.h ++++ b/clang/lib/Basic/Targets/PPC.h +@@ -331,7 +331,8 @@ public: break; } -- if (getTriple().getOS() == llvm::Triple::FreeBSD) { -+ if (getTriple().getOS() == llvm::Triple::FreeBSD +- if (getTriple().isOSFreeBSD()) { ++ if (getTriple().isOSFreeBSD() + || getTriple().isMusl()) { LongDoubleWidth = LongDoubleAlign = 64; LongDoubleFormat = &llvm::APFloat::IEEEdouble(); } -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0003-compiler-rt-Disable-tsan-on-OE-glibc.patch b/recipes-devtools/clang/clang/0003-compiler-rt-Disable-tsan-on-OE-glibc.patch deleted file mode 100644 index 8f45c2b..0000000 --- a/recipes-devtools/clang/clang/0003-compiler-rt-Disable-tsan-on-OE-glibc.patch +++ /dev/null @@ -1,42 +0,0 @@ -From c7d41a6e4dd61733530d2f44c377b91e13004b71 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 18 Jul 2016 08:05:02 +0000 -Subject: [PATCH 3/4] compiler-rt: Disable tsan on OE/glibc - -It does not build see -http://lists.llvm.org/pipermail/llvm-dev/2016-July/102235.html - -Signed-off-by: Khem Raj ---- - cmake/config-ix.cmake | 2 +- - test/sanitizer_common/CMakeLists.txt | 1 - - 2 files changed, 1 insertion(+), 2 deletions(-) - -diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake -index f3935ffd6..2c651b756 100644 ---- a/cmake/config-ix.cmake -+++ b/cmake/config-ix.cmake -@@ -564,7 +564,7 @@ else() - endif() - - if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND -- OS_NAME MATCHES "Darwin|Linux|FreeBSD|Android|NetBSD") -+ OS_NAME MATCHES "Darwin|FreeBSD|Android|NetBSD") - set(COMPILER_RT_HAS_TSAN TRUE) - else() - set(COMPILER_RT_HAS_TSAN FALSE) -diff --git a/test/sanitizer_common/CMakeLists.txt b/test/sanitizer_common/CMakeLists.txt -index 4e2c80390..990315f11 100644 ---- a/test/sanitizer_common/CMakeLists.txt -+++ b/test/sanitizer_common/CMakeLists.txt -@@ -8,7 +8,6 @@ if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|FreeBSD|NetBSD|SunOS") - list(APPEND SUPPORTED_TOOLS asan) - endif() - if(CMAKE_SYSTEM_NAME MATCHES "NetBSD" OR (CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT ANDROID)) -- list(APPEND SUPPORTED_TOOLS tsan) - list(APPEND SUPPORTED_TOOLS msan) - list(APPEND SUPPORTED_TOOLS ubsan) - endif() --- -2.20.1 - diff --git a/recipes-devtools/clang/clang/0003-llvm-Disable-calls-to-_finite-and-other-glibc-only-f.patch b/recipes-devtools/clang/clang/0003-llvm-Disable-calls-to-_finite-and-other-glibc-only-f.patch deleted file mode 100644 index 9f665e3..0000000 --- a/recipes-devtools/clang/clang/0003-llvm-Disable-calls-to-_finite-and-other-glibc-only-f.patch +++ /dev/null @@ -1,65 +0,0 @@ -From cb1b6f021d2ce82d7d0084758b7efaa3917640f5 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sun, 26 Aug 2018 22:43:19 -0700 -Subject: [PATCH 3/3] llvm: Disable calls to *_finite and other glibc-only - functions on Musl. - -glibc's finite lib calls are generated when possible. -However, they are not supported on Musl/linux. This change also -disables other functions not available on Musl. - -Signed-off-by: Khem Raj ---- - lib/Analysis/TargetLibraryInfo.cpp | 29 +++++++++++++++-------------- - 1 file changed, 15 insertions(+), 14 deletions(-) - -diff --git a/lib/Analysis/TargetLibraryInfo.cpp b/lib/Analysis/TargetLibraryInfo.cpp -index 102135fbf31..5bc4d2b47f5 100644 ---- a/lib/Analysis/TargetLibraryInfo.cpp -+++ b/lib/Analysis/TargetLibraryInfo.cpp -@@ -415,27 +415,28 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, - - // The following functions are available on Linux, - // but Android uses bionic instead of glibc. -- if (!T.isOSLinux() || T.isAndroid()) { -+ if (!T.isOSLinux() || T.isAndroid() || T.isMusl()) { - TLI.setUnavailable(LibFunc_dunder_strdup); - TLI.setUnavailable(LibFunc_dunder_strtok_r); - TLI.setUnavailable(LibFunc_dunder_isoc99_scanf); - TLI.setUnavailable(LibFunc_dunder_isoc99_sscanf); - TLI.setUnavailable(LibFunc_under_IO_getc); - TLI.setUnavailable(LibFunc_under_IO_putc); -- // But, Android has memalign. -- if (!T.isAndroid()) -+ // But, Android/Musl has memalign. -+ if (!T.isAndroid() || !T.isMusl() ) - TLI.setUnavailable(LibFunc_memalign); -- TLI.setUnavailable(LibFunc_fopen64); -- TLI.setUnavailable(LibFunc_fseeko64); -- TLI.setUnavailable(LibFunc_fstat64); -- TLI.setUnavailable(LibFunc_fstatvfs64); -- TLI.setUnavailable(LibFunc_ftello64); -- TLI.setUnavailable(LibFunc_lstat64); -- TLI.setUnavailable(LibFunc_open64); -- TLI.setUnavailable(LibFunc_stat64); -- TLI.setUnavailable(LibFunc_statvfs64); -- TLI.setUnavailable(LibFunc_tmpfile64); -- -+ if (!T.isMusl()) { -+ TLI.setUnavailable(LibFunc_fopen64); -+ TLI.setUnavailable(LibFunc_fseeko64); -+ TLI.setUnavailable(LibFunc_fstat64); -+ TLI.setUnavailable(LibFunc_fstatvfs64); -+ TLI.setUnavailable(LibFunc_ftello64); -+ TLI.setUnavailable(LibFunc_lstat64); -+ TLI.setUnavailable(LibFunc_open64); -+ TLI.setUnavailable(LibFunc_stat64); -+ TLI.setUnavailable(LibFunc_statvfs64); -+ TLI.setUnavailable(LibFunc_tmpfile64); -+ } - // Relaxed math functions are included in math-finite.h on Linux (GLIBC). - TLI.setUnavailable(LibFunc_acos_finite); - TLI.setUnavailable(LibFunc_acosf_finite); --- -2.18.0 - diff --git a/recipes-devtools/clang/clang/0004-clang-Prepend-trailing-to-sysroot.patch b/recipes-devtools/clang/clang/0004-clang-Prepend-trailing-to-sysroot.patch index 03c6bab..0cb81cd 100644 --- a/recipes-devtools/clang/clang/0004-clang-Prepend-trailing-to-sysroot.patch +++ b/recipes-devtools/clang/clang/0004-clang-Prepend-trailing-to-sysroot.patch @@ -1,7 +1,7 @@ -From 4764d8f8b613631de2e3c9a3614427d07c599017 Mon Sep 17 00:00:00 2001 +From 792786fb04bf505cdcd39a22744111cfd57a2ac5 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Thu, 16 Mar 2017 09:02:13 -0700 -Subject: [PATCH 4/8] clang: Prepend trailing '/' to sysroot +Subject: [PATCH 04/15] clang: Prepend trailing '/' to sysroot This is needed to handle a case where clang isntall and target sysroot are perilously same @@ -20,16 +20,16 @@ installation and not sysroot Signed-off-by: Khem Raj --- - lib/Driver/ToolChains/Linux.cpp | 2 +- + clang/lib/Driver/ToolChains/Linux.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp -index e662b6b262..5bca972cc2 100644 ---- a/lib/Driver/ToolChains/Linux.cpp -+++ b/lib/Driver/ToolChains/Linux.cpp -@@ -211,7 +211,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) - GCCInstallation.init(Triple, Args); +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index 33e2fcec299..4dfaf052f86 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -219,7 +219,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) Multilibs = GCCInstallation.getMultilibs(); + SelectedMultilib = GCCInstallation.getMultilib(); llvm::Triple::ArchType Arch = Triple.getArch(); - std::string SysRoot = computeSysRoot(); + std::string SysRoot = computeSysRoot() + "/"; @@ -37,5 +37,5 @@ index e662b6b262..5bca972cc2 100644 // Cross-compiling binutils and GCC installations (vanilla and openSUSE at // least) put various tools in a triple-prefixed directory off of the parent -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0004-compiler-rt-cmake-mips-Do-not-specify-target-with-OE.patch b/recipes-devtools/clang/clang/0004-compiler-rt-cmake-mips-Do-not-specify-target-with-OE.patch deleted file mode 100644 index 0356e2a..0000000 --- a/recipes-devtools/clang/clang/0004-compiler-rt-cmake-mips-Do-not-specify-target-with-OE.patch +++ /dev/null @@ -1,44 +0,0 @@ -From b29deaeb42a8f56bb5dd72b5a8c3e2c755a6bb9e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sat, 11 Feb 2017 17:54:33 +0000 -Subject: [PATCH 4/4] compiler-rt: cmake/mips: Do not specify --target with OE - -OE already specifies cross compiler correctly, adding this additional ---target confuses the clang driver and it resorts to invoke host assembler -when using -no-integrated-as - -Fixes errors e.g. -| Assembler messages: -| -| Fatal error: invalid -march= option: `mips32r2' -| -| clang-4.0: error: assembler command failed with exit code 1 - -Signed-off-by: Khem Raj ---- - cmake/base-config-ix.cmake | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/cmake/base-config-ix.cmake b/cmake/base-config-ix.cmake -index 91fe2494b..789b80628 100644 ---- a/cmake/base-config-ix.cmake -+++ b/cmake/base-config-ix.cmake -@@ -191,11 +191,11 @@ macro(test_targets) - # clang's default CPU's. In the 64-bit case, we must also specify the ABI - # since the default ABI differs between gcc and clang. - # FIXME: Ideally, we would build the N32 library too. -- test_target_arch(mipsel "" "-mips32r2" "--target=mipsel-linux-gnu") -- test_target_arch(mips64el "" "-mips64r2" "--target=mips64el-linux-gnu" "-mabi=64") -+ test_target_arch(mipsel "" "-mips32r2") -+ test_target_arch(mips64el "" "-mips64r2" "-mabi=64") - elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "mips") -- test_target_arch(mips "" "-mips32r2" "--target=mips-linux-gnu") -- test_target_arch(mips64 "" "-mips64r2" "--target=mips64-linux-gnu" "-mabi=64") -+ test_target_arch(mips "" "-mips32r2") -+ test_target_arch(mips64 "" "-mips64r2" "-mabi=64") - elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "arm") - if(WIN32) - test_target_arch(arm "" "" "") --- -2.20.1 - diff --git a/recipes-devtools/clang/clang/0005-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch b/recipes-devtools/clang/clang/0005-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch index 8425f8d..61caa3c 100644 --- a/recipes-devtools/clang/clang/0005-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch +++ b/recipes-devtools/clang/clang/0005-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch @@ -1,7 +1,7 @@ -From e02d9f3e1c724a4161709952a3ef59f81432fc06 Mon Sep 17 00:00:00 2001 +From 0327863d99125908e209e46e2687e9fb77ff25a7 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Thu, 16 Mar 2017 19:06:26 -0700 -Subject: [PATCH 5/8] clang: Look inside the target sysroot for compiler +Subject: [PATCH 05/15] clang: Look inside the target sysroot for compiler runtime In OE compiler-rt and libc++ are built and staged into target @@ -12,22 +12,22 @@ Specific to cross compiling the way yocto/OE works Signed-off-by: Khem Raj --- - lib/Driver/ToolChain.cpp | 6 +++++- + clang/lib/Driver/ToolChain.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) -diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp -index cf3db34688..dae3178380 100644 ---- a/lib/Driver/ToolChain.cpp -+++ b/lib/Driver/ToolChain.cpp +diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp +index 88a627eab6d..d56b5264b4d 100644 +--- a/clang/lib/Driver/ToolChain.cpp ++++ b/clang/lib/Driver/ToolChain.cpp @@ -13,6 +13,7 @@ #include "ToolChains/Clang.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Basic/Sanitizers.h" +#include "clang/Basic/Version.h" - #include "clang/Basic/VirtualFileSystem.h" #include "clang/Config/config.h" #include "clang/Driver/Action.h" -@@ -343,7 +344,10 @@ StringRef ToolChain::getOSLibName() const { + #include "clang/Driver/Driver.h" +@@ -353,7 +354,10 @@ StringRef ToolChain::getOSLibName() const { } std::string ToolChain::getCompilerRTPath() const { @@ -40,5 +40,5 @@ index cf3db34688..dae3178380 100644 llvm::sys::path::append(Path, "lib"); } else { -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0006-clang-Define-releative-gcc-installation-dir.patch b/recipes-devtools/clang/clang/0006-clang-Define-releative-gcc-installation-dir.patch index b611dd5..92e660c 100644 --- a/recipes-devtools/clang/clang/0006-clang-Define-releative-gcc-installation-dir.patch +++ b/recipes-devtools/clang/clang/0006-clang-Define-releative-gcc-installation-dir.patch @@ -1,7 +1,7 @@ -From e6232d22df73b80ced3784fd85166ebe24e6c31b Mon Sep 17 00:00:00 2001 +From 15fab22ab9478935b30d55de1d871553991bc3ad Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 21 May 2017 15:38:25 -0700 -Subject: [PATCH 6/8] clang: Define / releative gcc installation dir +Subject: [PATCH 06/15] clang: Define / releative gcc installation dir This is required for OE gcc installation to work. Without this its not able to find the paths for libgcc @@ -10,14 +10,14 @@ installation in OE Signed-off-by: Khem Raj --- - lib/Driver/ToolChains/Gnu.cpp | 3 +++ + clang/lib/Driver/ToolChains/Gnu.cpp | 3 +++ 1 file changed, 3 insertions(+) -diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp -index 766c650b3c..777526e063 100644 ---- a/lib/Driver/ToolChains/Gnu.cpp -+++ b/lib/Driver/ToolChains/Gnu.cpp -@@ -2190,6 +2190,9 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple( +diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp +index c841399193e..468ee821a57 100644 +--- a/clang/lib/Driver/ToolChains/Gnu.cpp ++++ b/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -2280,6 +2280,9 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple( {"gcc-cross/" + CandidateTriple.str(), "../..", TargetTriple.getOS() != llvm::Triple::Solaris}, @@ -28,5 +28,5 @@ index 766c650b3c..777526e063 100644 // /usr/lib//x.y.z so have a look there as well. Only do // this on Freescale triples, though, since some systems put a *lot* of -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0007-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch b/recipes-devtools/clang/clang/0007-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch index b456a59..7965fc6 100644 --- a/recipes-devtools/clang/clang/0007-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch +++ b/recipes-devtools/clang/clang/0007-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch @@ -1,7 +1,7 @@ -From 5840f5a6756f8f67dbba1b47015e75c8c3264b2b Mon Sep 17 00:00:00 2001 +From e2f49f7535aeb72592f8386cddb611f7bcdf2f32 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 16 Aug 2017 15:16:15 -0700 -Subject: [PATCH 7/8] clang: Fix ldso for musl on x86 and x32 architectures +Subject: [PATCH 07/15] clang: Fix ldso for musl on x86 and x32 architectures x32 linker is called ld-musl-x32.so.1 and x86 linker is called ld-musl-i386.so.1, Currently, linker for @@ -10,14 +10,14 @@ arch is i586, which is not the right thing Signed-off-by: Khem Raj --- - lib/Driver/ToolChains/Linux.cpp | 8 ++++++++ + clang/lib/Driver/ToolChains/Linux.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) -diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp -index 5bca972cc2..2ca285679c 100644 ---- a/lib/Driver/ToolChains/Linux.cpp -+++ b/lib/Driver/ToolChains/Linux.cpp -@@ -492,6 +492,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index 4dfaf052f86..5dc7b506d6f 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -516,6 +516,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { if (Triple.isMusl()) { std::string ArchName; bool IsArm = false; @@ -25,7 +25,7 @@ index 5bca972cc2..2ca285679c 100644 switch (Arch) { case llvm::Triple::arm: -@@ -504,6 +505,13 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { +@@ -528,6 +529,13 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { ArchName = "armeb"; IsArm = true; break; @@ -40,5 +40,5 @@ index 5bca972cc2..2ca285679c 100644 ArchName = Triple.getArchName().str(); } -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0008-clang-scan-view-needs-python-2.x.patch b/recipes-devtools/clang/clang/0008-clang-scan-view-needs-python-2.x.patch index c55b309..047c038 100644 --- a/recipes-devtools/clang/clang/0008-clang-scan-view-needs-python-2.x.patch +++ b/recipes-devtools/clang/clang/0008-clang-scan-view-needs-python-2.x.patch @@ -1,7 +1,7 @@ -From 846e59787ec12b6cd817640151d1f23d3b78d6b5 Mon Sep 17 00:00:00 2001 +From f86a9b4d0b8ee8818a0a86561c33c2dbb1c12535 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 15 May 2018 10:28:43 -0700 -Subject: [PATCH 8/8] clang: scan-view needs python 2.x +Subject: [PATCH 08/15] clang: scan-view needs python 2.x Some distributions e.g. archlinux have switched to pointing python to python3, therefore its better to be specific about @@ -9,19 +9,19 @@ python version needed. Signed-off-by: Khem Raj --- - tools/scan-view/bin/scan-view | 2 +- + clang/tools/scan-view/bin/scan-view | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/tools/scan-view/bin/scan-view b/tools/scan-view/bin/scan-view -index 1b6e8ba90d..7c5867d1be 100755 ---- a/tools/scan-view/bin/scan-view -+++ b/tools/scan-view/bin/scan-view +diff --git a/clang/tools/scan-view/bin/scan-view b/clang/tools/scan-view/bin/scan-view +index 6165432e7af..04ad518a60c 100755 +--- a/clang/tools/scan-view/bin/scan-view ++++ b/clang/tools/scan-view/bin/scan-view @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 - """The clang static analyzer results viewer. - """ + from __future__ import print_function + -- -2.18.0 +2.20.1 diff --git a/recipes-devtools/clang/clang/0009-clang-Enable-SSP-and-PIE-by-default.patch b/recipes-devtools/clang/clang/0009-clang-Enable-SSP-and-PIE-by-default.patch deleted file mode 100644 index d7b61bb..0000000 --- a/recipes-devtools/clang/clang/0009-clang-Enable-SSP-and-PIE-by-default.patch +++ /dev/null @@ -1,284 +0,0 @@ -From 594abc54ce652e0490860c96038513cfb576bb92 Mon Sep 17 00:00:00 2001 -From: Evangelos Foutras -Date: Thu, 20 Sep 2018 06:20:28 +0300 -Subject: [PATCH 9/9] clang: Enable SSP and PIE by default - -This is a minimal set of changes needed to make clang use SSP and PIE by -default on Arch Linux. Tests that were easy to adjust have been changed -accordingly; only test/Driver/linux-ld.c has been marked as "expected -failure" due to the number of changes it would require (mostly replacing -crtbegin.o with crtbeginS.o). - -Doing so is needed in order to align clang with the new default GCC -behavior in Arch which generates PIE executables by default and also -defaults to -fstack-protector-strong. It is not meant to be a long term -solution, but a simple temporary fix. - -Hopefully these changes will be obsoleted by the introduction upstream -of a compile-time option (https://bugs.llvm.org/show_bug.cgi?id=13410) ---- - lib/Driver/ToolChains/Linux.cpp | 14 ++++++++++++-- - lib/Driver/ToolChains/Linux.h | 1 + - test/Driver/clang-offload-bundler.c | 2 +- - test/Driver/cross-linux.c | 16 ++++++++-------- - test/Driver/env.c | 2 +- - test/Driver/fsanitize.c | 14 +++++++------- - test/Driver/gcc-toolchain.cpp | 2 +- - test/Driver/hexagon-toolchain-elf.c | 2 +- - test/Driver/linux-as.c | 4 ++-- - test/Driver/linux-ld.c | 2 ++ - test/Driver/riscv32-toolchain.c | 4 ++-- - test/Driver/stack-protector.c | 4 ++-- - 12 files changed, 40 insertions(+), 27 deletions(-) - -diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp -index 2ca285679c..22f1a1da6d 100644 ---- a/lib/Driver/ToolChains/Linux.cpp -+++ b/lib/Driver/ToolChains/Linux.cpp -@@ -911,8 +911,18 @@ void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs, - } - - bool Linux::isPIEDefault() const { -- return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || -- getTriple().isMusl() || getSanitizerArgs().requiresPIE(); -+ const bool IsMips = getTriple().isMIPS(); -+ const bool IsAndroid = getTriple().isAndroid(); -+ -+ if (IsMips || IsAndroid) -+ return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || -+ getTriple().isMusl() || getSanitizerArgs().requiresPIE(); -+ -+ return true; -+} -+ -+unsigned Linux::GetDefaultStackProtectorLevel(bool KernelOrKext) const { -+ return 2; - } - - SanitizerMask Linux::getSupportedSanitizers() const { -diff --git a/lib/Driver/ToolChains/Linux.h b/lib/Driver/ToolChains/Linux.h -index 22dbbecf6b..ba0d5587e0 100644 ---- a/lib/Driver/ToolChains/Linux.h -+++ b/lib/Driver/ToolChains/Linux.h -@@ -38,6 +38,7 @@ public: - void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; - bool isPIEDefault() const override; -+ unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override; - SanitizerMask getSupportedSanitizers() const override; - void addProfileRTLibs(const llvm::opt::ArgList &Args, - llvm::opt::ArgStringList &CmdArgs) const override; -diff --git a/test/Driver/clang-offload-bundler.c b/test/Driver/clang-offload-bundler.c -index adf13f59d4..fd2f6e5d8c 100644 ---- a/test/Driver/clang-offload-bundler.c -+++ b/test/Driver/clang-offload-bundler.c -@@ -115,7 +115,7 @@ - // CK-TEXTI: // __CLANG_OFFLOAD_BUNDLE____END__ openmp-x86_64-pc-linux-gnu - - // CK-TEXTLL: ; __CLANG_OFFLOAD_BUNDLE____START__ host-powerpc64le-ibm-linux-gnu --// CK-TEXTLL: @A = global i32 0 -+// CK-TEXTLL: @A = {{(dso_local )?}}global i32 0 - // CK-TEXTLL: define {{.*}}@test_func() - // CK-TEXTLL: ; __CLANG_OFFLOAD_BUNDLE____END__ host-powerpc64le-ibm-linux-gnu - // CK-TEXTLL: ; __CLANG_OFFLOAD_BUNDLE____START__ openmp-powerpc64le-ibm-linux-gnu -diff --git a/test/Driver/cross-linux.c b/test/Driver/cross-linux.c -index a5ea832e77..1949c05a60 100644 ---- a/test/Driver/cross-linux.c -+++ b/test/Driver/cross-linux.c -@@ -42,8 +42,8 @@ - // CHECK-MULTI32-I386: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" - // CHECK-MULTI32-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" - // CHECK-MULTI32-I386: "-m" "elf_i386" --// CHECK-MULTI32-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]{{/|\\\\}}crtbegin.o" --// CHECK-MULTI32-I386: "-L[[gcc_install]]" -+// CHECK-MULTI32-I386: "crti.o" "crtbeginS.o" -+// CHECK-MULTI32-I386: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]" - // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib32" - // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" - // CHECK-MULTI32-I386: "-L[[sysroot]]/lib" -@@ -59,8 +59,8 @@ - // CHECK-MULTI32-X86-64: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" - // CHECK-MULTI32-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" - // CHECK-MULTI32-X86-64: "-m" "elf_x86_64" --// CHECK-MULTI32-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]/64{{/|\\\\}}crtbegin.o" --// CHECK-MULTI32-X86-64: "-L[[gcc_install]]/64" -+// CHECK-MULTI32-X86-64: "crti.o" "crtbeginS.o" -+// CHECK-MULTI32-X86-64: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]/64" - // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib64" - // CHECK-MULTI32-X86-64: "-L[[gcc_install]]" - // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" -@@ -77,8 +77,8 @@ - // CHECK-MULTI64-I386: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" - // CHECK-MULTI64-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" - // CHECK-MULTI64-I386: "-m" "elf_i386" --// CHECK-MULTI64-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]/32{{/|\\\\}}crtbegin.o" --// CHECK-MULTI64-I386: "-L[[gcc_install]]/32" -+// CHECK-MULTI64-I386: "crti.o" "crtbeginS.o" -+// CHECK-MULTI64-I386: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]/32" - // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib32" - // CHECK-MULTI64-I386: "-L[[gcc_install]]" - // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" -@@ -95,8 +95,8 @@ - // CHECK-MULTI64-X86-64: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" - // CHECK-MULTI64-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" - // CHECK-MULTI64-X86-64: "-m" "elf_x86_64" --// CHECK-MULTI64-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]{{/|\\\\}}crtbegin.o" --// CHECK-MULTI64-X86-64: "-L[[gcc_install]]" -+// CHECK-MULTI64-X86-64: "crti.o" "crtbeginS.o" -+// CHECK-MULTI64-X86-64: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]" - // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib64" - // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" - // CHECK-MULTI64-X86-64: "-L[[sysroot]]/lib" -diff --git a/test/Driver/env.c b/test/Driver/env.c -index 0371bc91c4..ea89f52512 100644 ---- a/test/Driver/env.c -+++ b/test/Driver/env.c -@@ -20,7 +20,7 @@ - // - // CHECK-LD-32-NOT: warning: - // CHECK-LD-32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" --// CHECK-LD-32: "{{.*}}/usr/lib/gcc/i386-unknown-linux/4.6.0{{/|\\\\}}crtbegin.o" -+// CHECK-LD-32: "crtbeginS.o" - // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0" - // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/lib" - // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0/../../.." -diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c -index 304e759302..c157f9fc48 100644 ---- a/test/Driver/fsanitize.c -+++ b/test/Driver/fsanitize.c -@@ -238,15 +238,15 @@ - // RUN: %clang -target x86_64-linux-gnu -fsanitize=vptr -fno-sanitize=vptr -fsanitize=undefined,address %s -### 2>&1 - // OK - --// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE --// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE -+// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE -+// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE - // RUN: %clang -target x86_64-unknown-freebsd -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE - // RUN: %clang -target aarch64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE - // RUN: %clang -target arm-linux-androideabi -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIC-NO-PIE - // RUN: %clang -target arm-linux-androideabi24 -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE - // RUN: %clang -target aarch64-linux-android -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE --// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE --// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE -+// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE -+// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE - - // CHECK-NO-PIE-NOT: "-pie" - // CHECK-NO-PIE: "-mrelocation-model" "static" -@@ -585,12 +585,12 @@ - // RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP - // NOSP-NOT: "-fsanitize=safe-stack" - --// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP -+// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP - // RUN: %clang -target x86_64-linux-gnu -fsanitize=address,safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP-ASAN - // RUN: %clang -target x86_64-linux-gnu -fstack-protector -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP - // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SP --// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP --// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP -+// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP -+// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP - // RUN: %clang -target i386-contiki-unknown -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP - // NO-SP-NOT: stack-protector - // NO-SP: "-fsanitize=safe-stack" -diff --git a/test/Driver/gcc-toolchain.cpp b/test/Driver/gcc-toolchain.cpp -index ca96757a2b..ae1c25e989 100644 ---- a/test/Driver/gcc-toolchain.cpp -+++ b/test/Driver/gcc-toolchain.cpp -@@ -24,6 +24,6 @@ - // the same precise formatting of the path as the '-internal-system' flags - // above, so we just blanket wildcard match the 'crtbegin.o'. - // CHECK: "{{[^"]*}}ld{{(.exe)?}}" --// CHECK: "{{[^"]*}}/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5{{/|\\\\}}crtbegin.o" -+// CHECK: "crtbeginS.o" - // CHECK: "-L[[TOOLCHAIN]]/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5" - // CHECK: "-L[[TOOLCHAIN]]/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/../../../.." -diff --git a/test/Driver/hexagon-toolchain-elf.c b/test/Driver/hexagon-toolchain-elf.c -index 8f4c320ce4..a4d9ae502b 100644 ---- a/test/Driver/hexagon-toolchain-elf.c -+++ b/test/Driver/hexagon-toolchain-elf.c -@@ -457,7 +457,7 @@ - // RUN: %s 2>&1 \ - // RUN: | FileCheck -check-prefix=CHECK042 %s - // CHECK042: "-cc1" --// CHECK042: "-mrelocation-model" "static" -+// CHECK042: "-mrelocation-model" "pic" - // CHECK042: "-mllvm" "-hexagon-small-data-threshold=8" - // CHECK042-NEXT: llvm-mc - // CHECK042: "-gpsize=8" -diff --git a/test/Driver/linux-as.c b/test/Driver/linux-as.c -index 68cf403d97..92b556db73 100644 ---- a/test/Driver/linux-as.c -+++ b/test/Driver/linux-as.c -@@ -133,7 +133,7 @@ - // CHECK-PPC-NO-MCPU-NOT: as{{.*}} "-mcpu=invalid-cpu" - // - // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ --// RUN: -no-integrated-as -c %s 2>&1 \ -+// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \ - // RUN: | FileCheck -check-prefix=CHECK-SPARCV9 %s - // CHECK-SPARCV9: as - // CHECK-SPARCV9: -64 -@@ -142,7 +142,7 @@ - // CHECK-SPARCV9: -o - // - // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ --// RUN: -no-integrated-as -fpic -c %s 2>&1 \ -+// RUN: -no-integrated-as -c %s 2>&1 \ - // RUN: | FileCheck -check-prefix=CHECK-SPARCV9PIC %s - // CHECK-SPARCV9PIC: as - // CHECK-SPARCV9PIC: -64 -diff --git a/test/Driver/linux-ld.c b/test/Driver/linux-ld.c -index 787013931a..cba173b354 100644 ---- a/test/Driver/linux-ld.c -+++ b/test/Driver/linux-ld.c -@@ -1,3 +1,5 @@ -+// XFAIL: linux -+ - // General tests that ld invocations on Linux targets sane. Note that we use - // sysroot to make these tests independent of the host system. - // -diff --git a/test/Driver/riscv32-toolchain.c b/test/Driver/riscv32-toolchain.c -index 1e0c750a3f..563493a33b 100644 ---- a/test/Driver/riscv32-toolchain.c -+++ b/test/Driver/riscv32-toolchain.c -@@ -44,7 +44,7 @@ - // C-RV32-LINUX-MULTI-ILP32: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" - // C-RV32-LINUX-MULTI-ILP32: "-m" "elf32lriscv" - // C-RV32-LINUX-MULTI-ILP32: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32.so.1" --// C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32{{/|\\\\}}crtbegin.o" -+// C-RV32-LINUX-MULTI-ILP32: "crtbeginS.o" - // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32" - // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32" - // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32" -@@ -59,7 +59,7 @@ - // C-RV32-LINUX-MULTI-ILP32D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" - // C-RV32-LINUX-MULTI-ILP32D: "-m" "elf32lriscv" - // C-RV32-LINUX-MULTI-ILP32D: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32d.so.1" --// C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d{{/|\\\\}}crtbegin.o" -+// C-RV32-LINUX-MULTI-ILP32D: "crtbeginS.o" - // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d" - // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32d" - // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32d" -diff --git a/test/Driver/stack-protector.c b/test/Driver/stack-protector.c -index a3e40b50ee..dfffe0d6cf 100644 ---- a/test/Driver/stack-protector.c -+++ b/test/Driver/stack-protector.c -@@ -3,11 +3,11 @@ - // NOSSP-NOT: "-stack-protector-buffer-size" - - // RUN: %clang -target i386-unknown-linux -fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP --// SSP: "-stack-protector" "1" -+// SSP: "-stack-protector" "2" - // SSP-NOT: "-stack-protector-buffer-size" - - // RUN: %clang -target i386-unknown-linux -fstack-protector --param ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-BUF --// SSP-BUF: "-stack-protector" "1" -+// SSP-BUF: "-stack-protector" "2" - // SSP-BUF: "-stack-protector-buffer-size" "16" - - // RUN: %clang -target i386-pc-openbsd -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD --- -2.19.2 - diff --git a/recipes-devtools/clang/clang/0009-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch b/recipes-devtools/clang/clang/0009-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch new file mode 100644 index 0000000..793fbaf --- /dev/null +++ b/recipes-devtools/clang/clang/0009-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch @@ -0,0 +1,91 @@ +From da9fe6d6a6160b7eaeef22dff38bbb3f17f26822 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 21 May 2016 00:33:20 +0000 +Subject: [PATCH 09/15] llvm: TargetLibraryInfo: Undefine libc functions if + they are macros + +musl defines some functions as macros and not inline functions +if this is the case then make sure to undefine them + +Signed-off-by: Khem Raj +--- + .../llvm/Analysis/TargetLibraryInfo.def | 21 +++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.def b/llvm/include/llvm/Analysis/TargetLibraryInfo.def +index 518a85ee1a0..6b4ead4efc6 100644 +--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.def ++++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.def +@@ -731,6 +731,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl") + TLI_DEFINE_ENUM_INTERNAL(fopen) + TLI_DEFINE_STRING_INTERNAL("fopen") + /// FILE *fopen64(const char *filename, const char *opentype) ++#ifdef fopen64 ++#undef fopen64 ++#endif + TLI_DEFINE_ENUM_INTERNAL(fopen64) + TLI_DEFINE_STRING_INTERNAL("fopen64") + /// int fork(); +@@ -778,6 +781,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek") + /// int fseeko(FILE *stream, off_t offset, int whence); + TLI_DEFINE_ENUM_INTERNAL(fseeko) + TLI_DEFINE_STRING_INTERNAL("fseeko") ++#ifdef fseeko64 ++#undef fseeko64 ++#endif + /// int fseeko64(FILE *stream, off64_t offset, int whence) + TLI_DEFINE_ENUM_INTERNAL(fseeko64) + TLI_DEFINE_STRING_INTERNAL("fseeko64") +@@ -788,6 +794,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos") + TLI_DEFINE_ENUM_INTERNAL(fstat) + TLI_DEFINE_STRING_INTERNAL("fstat") + /// int fstat64(int filedes, struct stat64 *buf) ++#ifdef fstat64 ++#undef fstat64 ++#endif + TLI_DEFINE_ENUM_INTERNAL(fstat64) + TLI_DEFINE_STRING_INTERNAL("fstat64") + /// int fstatvfs(int fildes, struct statvfs *buf); +@@ -803,6 +812,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell") + TLI_DEFINE_ENUM_INTERNAL(ftello) + TLI_DEFINE_STRING_INTERNAL("ftello") + /// off64_t ftello64(FILE *stream) ++#ifdef ftello64 ++#undef ftello64 ++#endif + TLI_DEFINE_ENUM_INTERNAL(ftello64) + TLI_DEFINE_STRING_INTERNAL("ftello64") + /// int ftrylockfile(FILE *file); +@@ -929,6 +941,9 @@ TLI_DEFINE_STRING_INTERNAL("logl") + TLI_DEFINE_ENUM_INTERNAL(lstat) + TLI_DEFINE_STRING_INTERNAL("lstat") + /// int lstat64(const char *path, struct stat64 *buf); ++#ifdef lstat64 ++#undef lstat64 ++#endif + TLI_DEFINE_ENUM_INTERNAL(lstat64) + TLI_DEFINE_STRING_INTERNAL("lstat64") + /// void *malloc(size_t size); +@@ -1154,6 +1169,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf") + TLI_DEFINE_ENUM_INTERNAL(stat) + TLI_DEFINE_STRING_INTERNAL("stat") + /// int stat64(const char *path, struct stat64 *buf); ++#ifdef stat64 ++#undef stat64 ++#endif + TLI_DEFINE_ENUM_INTERNAL(stat64) + TLI_DEFINE_STRING_INTERNAL("stat64") + /// int statvfs(const char *path, struct statvfs *buf); +@@ -1283,6 +1301,9 @@ TLI_DEFINE_STRING_INTERNAL("times") + TLI_DEFINE_ENUM_INTERNAL(tmpfile) + TLI_DEFINE_STRING_INTERNAL("tmpfile") + /// FILE *tmpfile64(void) ++#ifdef tmpfile64 ++#undef tmpfile64 ++#endif + TLI_DEFINE_ENUM_INTERNAL(tmpfile64) + TLI_DEFINE_STRING_INTERNAL("tmpfile64") + /// int toascii(int c); +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang/0010-llvm-allow-env-override-of-exe-path.patch b/recipes-devtools/clang/clang/0010-llvm-allow-env-override-of-exe-path.patch new file mode 100644 index 0000000..c28da3c --- /dev/null +++ b/recipes-devtools/clang/clang/0010-llvm-allow-env-override-of-exe-path.patch @@ -0,0 +1,37 @@ +From 2af0752ca682d14984aac80e1b84a79b9fa69fb9 Mon Sep 17 00:00:00 2001 +From: Martin Kelly +Date: Fri, 19 May 2017 00:22:57 -0700 +Subject: [PATCH 10/15] llvm: allow env override of exe path + +When using a native llvm-config from inside a sysroot, we need llvm-config to +return the libraries, include directories, etc. from inside the sysroot rather +than from the native sysroot. Thus provide an env override for calling +llvm-config from a target sysroot. + +Signed-off-by: Martin Kelly +Signed-off-by: Khem Raj +--- + llvm/tools/llvm-config/llvm-config.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp +index bec89fef98c..f9a2862a55d 100644 +--- a/llvm/tools/llvm-config/llvm-config.cpp ++++ b/llvm/tools/llvm-config/llvm-config.cpp +@@ -226,6 +226,13 @@ Typical components:\n\ + + /// Compute the path to the main executable. + std::string GetExecutablePath(const char *Argv0) { ++ // Hack for Yocto: we need to override the root path when we are using ++ // llvm-config from within a target sysroot. ++ const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH"); ++ if (Sysroot != nullptr) { ++ return Sysroot; ++ } ++ + // This just needs to be some symbol in the binary; C++ doesn't + // allow taking the address of ::main however. + void *P = (void *)(intptr_t)GetExecutablePath; +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang/0011-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch b/recipes-devtools/clang/clang/0011-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch new file mode 100644 index 0000000..737a053 --- /dev/null +++ b/recipes-devtools/clang/clang/0011-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch @@ -0,0 +1,40 @@ +From 61d80370805142f531059d3ea58f363aadd1ff06 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Mon, 22 May 2017 17:36:16 -0700 +Subject: [PATCH 11/15] lldb: Add -lxml2 to linker cmdline of xml is found + +When cross compiling for systems where static libs +for libxml are not available cmake's detection mechanism +resort to linking with libxml.so but doesnt use -lxml2 +liblldbHost.a however requires libxml on linker +cmdline _after_ itself so its use of symbols from libxml2 +can be resolved. Here check for libxml2 being detected and +add it if its found. + +Fixes + +| ../../../../lib/liblldbHost.a(XML.cpp.o): In function `lldb_private::XMLDocument::Clear()': +| /usr/src/debug/lldb/5.0.0+gitAUTOINC+69edad7913_08d6b47db9_cf6c5b3386-r0/git/tools/lldb/source/Host/common/XML.cpp:29: undefined reference to `xmlFreeDoc' +| /usr/src/debug/lldb/5.0.0+gitAUTOINC+69edad7913_08d6b47db9_cf6c5b3386-r0/git/tools/lldb/source/Host/common/XML.cpp:29: undefined reference to `xmlFreeDoc' + +Signed-off-by: Khem Raj +--- + lldb/source/Host/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lldb/source/Host/CMakeLists.txt b/lldb/source/Host/CMakeLists.txt +index 333f109a9a2..a5237c4b779 100644 +--- a/lldb/source/Host/CMakeLists.txt ++++ b/lldb/source/Host/CMakeLists.txt +@@ -148,7 +148,7 @@ if (APPLE) + list(APPEND EXTRA_LIBS xml2) + else () + if (LIBXML2_FOUND) +- list(APPEND EXTRA_LIBS ${LIBXML2_LIBRARIES}) ++ list(APPEND EXTRA_LIBS xml2) + endif() + endif () + if (HAVE_LIBDL) +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang/0012-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch b/recipes-devtools/clang/clang/0012-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch new file mode 100644 index 0000000..92fe682 --- /dev/null +++ b/recipes-devtools/clang/clang/0012-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch @@ -0,0 +1,68 @@ +From 058935ad2f27735cedf838b82a8a2d7d1883ab5f Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 27 Aug 2017 10:37:49 -0700 +Subject: [PATCH 12/15] libcxxabi: Find libunwind headers when + LIBCXXABI_LIBUNWIND_INCLUDES is set + +Currently, when LIBCXXABI_LIBUNWIND_INCLUDES is set via CMake arguments +then it ends up not searching the specified dir and unwind.h is not found +especially for ARM targets + +This patch makes the searching synthesized directories and then set +LIBCXXABI_LIBUNWIND_INCLUDES if its there in environment + +Signed-off-by: Khem Raj +--- + libcxxabi/CMakeLists.txt | 21 +++++++++++---------- + 1 file changed, 11 insertions(+), 10 deletions(-) + +diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt +index 92c7dc5dc55..d67bb43aba3 100644 +--- a/libcxxabi/CMakeLists.txt ++++ b/libcxxabi/CMakeLists.txt +@@ -434,15 +434,10 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBCXXABI_C_FLAGS}") + # Setup Source Code + #=============================================================================== + +-set(LIBCXXABI_LIBUNWIND_INCLUDES "${LIBCXXABI_LIBUNWIND_INCLUDES}" CACHE PATH +- "Specify path to libunwind includes." FORCE) +-set(LIBCXXABI_LIBUNWIND_PATH "${LIBCXXABI_LIBUNWIND_PATH}" CACHE PATH +- "Specify path to libunwind source." FORCE) +- + include_directories(include) + if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM) + find_path( +- LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL ++ LIBCXXABI_LIBUNWIND_INCLUDES + libunwind.h + PATHS ${LIBCXXABI_LIBUNWIND_INCLUDES} + ${LIBCXXABI_LIBUNWIND_PATH}/include +@@ -454,15 +449,21 @@ if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM) + NO_CMAKE_FIND_ROOT_PATH + ) + +- if (LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL STREQUAL "LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL-NOTFOUND") +- set(LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL "") ++ if (LIBCXXABI_LIBUNWIND_INCLUDES STREQUAL "LIBCXXABI_LIBUNWIND_INCLUDES-NOTFOUND") ++ set(LIBCXXABI_LIBUNWIND_INCLUDES "") + endif() + +- if (NOT LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL STREQUAL "") +- include_directories("${LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL}") ++ if (NOT LIBCXXABI_LIBUNWIND_INCLUDES STREQUAL "") ++ include_directories("${LIBCXXABI_LIBUNWIND_INCLUDES}") + endif() + endif() + ++set(LIBCXXABI_LIBUNWIND_INCLUDES "${LIBCXXABI_LIBUNWIND_INCLUDES}" CACHE PATH ++ "Specify path to libunwind includes." FORCE) ++set(LIBCXXABI_LIBUNWIND_PATH "${LIBCXXABI_LIBUNWIND_PATH}" CACHE PATH ++ "Specify path to libunwind source." FORCE) ++ ++ + # Add source code. This also contains all of the logic for deciding linker flags + # soname, etc... + add_subdirectory(src) +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang/0013-compiler-rt-support-a-new-embedded-linux-target.patch b/recipes-devtools/clang/clang/0013-compiler-rt-support-a-new-embedded-linux-target.patch new file mode 100644 index 0000000..8951241 --- /dev/null +++ b/recipes-devtools/clang/clang/0013-compiler-rt-support-a-new-embedded-linux-target.patch @@ -0,0 +1,326 @@ +From b56bc6f9b522b0359cb09e73d719622990dd2c38 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 19 Apr 2015 15:16:23 -0700 +Subject: [PATCH 13/15] compiler-rt: support a new embedded linux target + +Signed-off-by: Khem Raj +--- + compiler-rt/lib/builtins/int_util.c | 3 +- + .../make/platform/clang_linux_embedded.mk | 286 ++++++++++++++++++ + .../clang_linux_embedded_test_input.c | 0 + 3 files changed, 287 insertions(+), 2 deletions(-) + create mode 100644 compiler-rt/make/platform/clang_linux_embedded.mk + create mode 100644 compiler-rt/make/platform/clang_linux_embedded_test_input.c + +diff --git a/compiler-rt/lib/builtins/int_util.c b/compiler-rt/lib/builtins/int_util.c +index 752f2015580..494c870b41d 100644 +--- a/compiler-rt/lib/builtins/int_util.c ++++ b/compiler-rt/lib/builtins/int_util.c +@@ -58,8 +58,7 @@ void __compilerrt_abort_impl(const char *file, int line, const char *function) { + #else + + /* Get the system definition of abort() */ +-#include +- ++extern void abort (void) __attribute__ ((__noreturn__)); + #ifndef _WIN32 + __attribute__((weak)) + __attribute__((visibility("hidden"))) +diff --git a/compiler-rt/make/platform/clang_linux_embedded.mk b/compiler-rt/make/platform/clang_linux_embedded.mk +new file mode 100644 +index 00000000000..d0a890075a1 +--- /dev/null ++++ b/compiler-rt/make/platform/clang_linux_embedded.mk +@@ -0,0 +1,286 @@ ++# These are the functions which clang needs when it is targeting a previous ++# version of the OS. The issue is that the backend may use functions which were ++# not present in the libgcc that shipped on the platform. In such cases, we link ++# with a version of the library which contains private_extern definitions of all ++# the extra functions which might be referenced. ++ ++Description := Static runtime libraries for embedded clang/Linux ++ ++# A function that ensures we don't try to build for architectures that we ++# don't have working toolchains for. ++CheckArches = \ ++ $(shell \ ++ result=""; \ ++ for arch in $(1); do \ ++ if $(CC) -arch $$arch -c \ ++ -integrated-as \ ++ $(ProjSrcRoot)/make/platform/clang_linux_embedded_test_input.c \ ++ -o /dev/null > /dev/null 2> /dev/null; then \ ++ result="$$result$$arch "; \ ++ else \ ++ printf 1>&2 \ ++ "warning: clang_linux_embedded.mk: dropping arch '$$arch' from lib '$(2)'\n"; \ ++ fi; \ ++ done; \ ++ echo $$result) ++ ++XCRun = \ ++ $(shell \ ++ result=`xcrun -find $(1) 2> /dev/null`; \ ++ if [ "$$?" != "0" ]; then result=$(1); fi; \ ++ echo $$result) ++ ++### ++ ++CC := $(call XCRun,clang) ++AR := $(call XCRun,ar) ++RANLIB := $(call XCRun,ranlib) ++STRIP := $(call XCRun,strip) ++LIPO := $(call XCRun,lipo) ++DSYMUTIL := $(call XCRun,dsymutil) ++Configs := ++UniversalArchs := ++ ++# Soft-float version of the runtime. No floating-point instructions will be used ++# and the ABI (out of necessity) passes floating values in normal registers: ++# non-VFP variant of the AAPCS. ++UniversalArchs.soft_static := $(call CheckArches,arm armv7m armv7em armv7,soft_static) ++Configs += $(if $(UniversalArchs.soft_static),soft_static) ++ ++# Hard-float version of the runtime. On ARM VFP instructions and registers are ++# allowed, and floating point values get passed in them. VFP variant of the ++# AAPCS. ++UniversalArchs.hard_static := $(call CheckArches,armv7em armv7 i386 x86_64,hard_static) ++Configs += $(if $(UniversalArchs.hard_static),hard_static) ++ ++UniversalArchs.soft_pic := $(call CheckArches,armv6m armv7m armv7em armv7,soft_pic) ++Configs += $(if $(UniversalArchs.soft_pic),soft_pic) ++ ++UniversalArchs.hard_pic := $(call CheckArches,armv7em armv7 i386 x86_64,hard_pic) ++Configs += $(if $(UniversalArchs.hard_pic),hard_pic) ++ ++CFLAGS := -Wall -Werror -Oz -fomit-frame-pointer -ffreestanding ++ ++PIC_CFLAGS := -fPIC ++STATIC_CFLAGS := -static ++ ++CFLAGS_SOFT := -mfloat-abi=soft ++CFLAGS_HARD := -mfloat-abi=hard ++ ++CFLAGS_I386 := -march=pentium ++ ++CFLAGS.soft_static := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_SOFT) ++CFLAGS.hard_static := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_HARD) ++CFLAGS.soft_pic := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_SOFT) ++CFLAGS.hard_pic := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_HARD) ++ ++CFLAGS.soft_static.armv7 := $(CFLAGS.soft_static) $(CFLAGS_ARMV7) ++CFLAGS.hard_static.armv7 := $(CFLAGS.hard_static) $(CFLAGS_ARMV7) ++CFLAGS.soft_pic.armv7 := $(CFLAGS.soft_pic) $(CFLAGS_ARMV7) ++CFLAGS.hard_pic.armv7 := $(CFLAGS.hard_pic) $(CFLAGS_ARMV7) ++ ++# x86 platforms ignore -mfloat-abi options and complain about doing so. Despite ++# this they're hard-float. ++CFLAGS.hard_static.i386 := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_I386) ++CFLAGS.hard_pic.i386 := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_I386) ++CFLAGS.hard_static.x86_64 := $(CFLAGS) $(STATIC_CFLAGS) ++CFLAGS.hard_pic.x86_64 := $(CFLAGS) $(PIC_CFLAGS) ++ ++# Functions not wanted: ++# + eprintf is obsolete anyway ++# + *vfp: designed for Thumb1 CPUs with VFPv2 ++ ++COMMON_FUNCTIONS := \ ++ absvdi2 \ ++ absvsi2 \ ++ addvdi3 \ ++ addvsi3 \ ++ ashldi3 \ ++ ashrdi3 \ ++ bswapdi2 \ ++ bswapsi2 \ ++ clzdi2 \ ++ clzsi2 \ ++ cmpdi2 \ ++ ctzdi2 \ ++ ctzsi2 \ ++ divdc3 \ ++ divdi3 \ ++ divsc3 \ ++ divmodsi4 \ ++ udivmodsi4 \ ++ do_global_dtors \ ++ ffsdi2 \ ++ fixdfdi \ ++ fixsfdi \ ++ fixunsdfdi \ ++ fixunsdfsi \ ++ fixunssfdi \ ++ fixunssfsi \ ++ floatdidf \ ++ floatdisf \ ++ floatundidf \ ++ floatundisf \ ++ gcc_bcmp \ ++ lshrdi3 \ ++ moddi3 \ ++ muldc3 \ ++ muldi3 \ ++ mulsc3 \ ++ mulvdi3 \ ++ mulvsi3 \ ++ negdi2 \ ++ negvdi2 \ ++ negvsi2 \ ++ paritydi2 \ ++ paritysi2 \ ++ popcountdi2 \ ++ popcountsi2 \ ++ powidf2 \ ++ powisf2 \ ++ subvdi3 \ ++ subvsi3 \ ++ ucmpdi2 \ ++ udiv_w_sdiv \ ++ udivdi3 \ ++ udivmoddi4 \ ++ umoddi3 \ ++ adddf3 \ ++ addsf3 \ ++ cmpdf2 \ ++ cmpsf2 \ ++ div0 \ ++ divdf3 \ ++ divsf3 \ ++ divsi3 \ ++ extendsfdf2 \ ++ ffssi2 \ ++ fixdfsi \ ++ fixsfsi \ ++ floatsidf \ ++ floatsisf \ ++ floatunsidf \ ++ floatunsisf \ ++ comparedf2 \ ++ comparesf2 \ ++ modsi3 \ ++ muldf3 \ ++ mulsf3 \ ++ negdf2 \ ++ negsf2 \ ++ subdf3 \ ++ subsf3 \ ++ truncdfsf2 \ ++ udivsi3 \ ++ umodsi3 \ ++ unorddf2 \ ++ unordsf2 ++ ++ARM_FUNCTIONS := \ ++ aeabi_cdcmpeq \ ++ aeabi_cdrcmple \ ++ aeabi_cfcmpeq \ ++ aeabi_cfrcmple \ ++ aeabi_dcmpeq \ ++ aeabi_dcmpge \ ++ aeabi_dcmpgt \ ++ aeabi_dcmple \ ++ aeabi_dcmplt \ ++ aeabi_drsub \ ++ aeabi_fcmpeq \ ++ aeabi_fcmpge \ ++ aeabi_fcmpgt \ ++ aeabi_fcmple \ ++ aeabi_fcmplt \ ++ aeabi_frsub \ ++ aeabi_idivmod \ ++ aeabi_uidivmod \ ++ ++# ARM Assembly implementation which requires Thumb2 (i.e. won't work on v6M). ++THUMB2_FUNCTIONS := \ ++ switch16 \ ++ switch32 \ ++ switch8 \ ++ switchu8 \ ++ sync_fetch_and_add_4 \ ++ sync_fetch_and_sub_4 \ ++ sync_fetch_and_and_4 \ ++ sync_fetch_and_or_4 \ ++ sync_fetch_and_xor_4 \ ++ sync_fetch_and_nand_4 \ ++ sync_fetch_and_max_4 \ ++ sync_fetch_and_umax_4 \ ++ sync_fetch_and_min_4 \ ++ sync_fetch_and_umin_4 \ ++ sync_fetch_and_add_8 \ ++ sync_fetch_and_sub_8 \ ++ sync_fetch_and_and_8 \ ++ sync_fetch_and_or_8 \ ++ sync_fetch_and_xor_8 \ ++ sync_fetch_and_nand_8 \ ++ sync_fetch_and_max_8 \ ++ sync_fetch_and_umax_8 \ ++ sync_fetch_and_min_8 \ ++ sync_fetch_and_umin_8 ++ ++I386_FUNCTIONS := \ ++ i686.get_pc_thunk.eax \ ++ i686.get_pc_thunk.ebp \ ++ i686.get_pc_thunk.ebx \ ++ i686.get_pc_thunk.ecx \ ++ i686.get_pc_thunk.edi \ ++ i686.get_pc_thunk.edx \ ++ i686.get_pc_thunk.esi ++ ++# FIXME: Currently, compiler-rt is missing implementations for a number of the ++# functions. Filter them out for now. ++MISSING_FUNCTIONS := \ ++ cmpdf2 cmpsf2 div0 \ ++ ffssi2 \ ++ udiv_w_sdiv unorddf2 unordsf2 bswapdi2 \ ++ bswapsi2 \ ++ gcc_bcmp \ ++ do_global_dtors \ ++ i686.get_pc_thunk.eax i686.get_pc_thunk.ebp i686.get_pc_thunk.ebx \ ++ i686.get_pc_thunk.ecx i686.get_pc_thunk.edi i686.get_pc_thunk.edx \ ++ i686.get_pc_thunk.esi \ ++ aeabi_cdcmpeq aeabi_cdrcmple aeabi_cfcmpeq aeabi_cfrcmple aeabi_dcmpeq \ ++ aeabi_dcmpge aeabi_dcmpgt aeabi_dcmple aeabi_dcmplt aeabi_drsub \ ++ aeabi_fcmpeq \ aeabi_fcmpge aeabi_fcmpgt aeabi_fcmple aeabi_fcmplt \ ++ aeabi_frsub aeabi_idivmod aeabi_uidivmod ++ ++FUNCTIONS_ARMV6M := $(COMMON_FUNCTIONS) $(ARM_FUNCTIONS) ++FUNCTIONS_ARM_ALL := $(COMMON_FUNCTIONS) $(ARM_FUNCTIONS) $(THUMB2_FUNCTIONS) ++FUNCTIONS_I386 := $(COMMON_FUNCTIONS) $(I386_FUNCTIONS) ++FUNCTIONS_X86_64 := $(COMMON_FUNCTIONS) ++ ++FUNCTIONS_ARMV6M := \ ++ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_ARMV6M)) ++FUNCTIONS_ARM_ALL := \ ++ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_ARM_ALL)) ++FUNCTIONS_I386 := \ ++ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_I386)) ++FUNCTIONS_X86_64 := \ ++ $(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_X86_64)) ++ ++FUNCTIONS.soft_static.armv6m := $(FUNCTIONS_ARMV6M) ++FUNCTIONS.soft_pic.armv6m := $(FUNCTIONS_ARMV6M) ++ ++FUNCTIONS.soft_static.armv7m := $(FUNCTIONS_ARM_ALL) ++FUNCTIONS.soft_pic.armv7m := $(FUNCTIONS_ARM_ALL) ++ ++FUNCTIONS.soft_static.armv7em := $(FUNCTIONS_ARM_ALL) ++FUNCTIONS.hard_static.armv7em := $(FUNCTIONS_ARM_ALL) ++FUNCTIONS.soft_pic.armv7em := $(FUNCTIONS_ARM_ALL) ++FUNCTIONS.hard_pic.armv7em := $(FUNCTIONS_ARM_ALL) ++ ++FUNCTIONS.soft_static.armv7 := $(FUNCTIONS_ARM_ALL) ++FUNCTIONS.hard_static.armv7 := $(FUNCTIONS_ARM_ALL) ++FUNCTIONS.soft_pic.armv7 := $(FUNCTIONS_ARM_ALL) ++FUNCTIONS.hard_pic.armv7 := $(FUNCTIONS_ARM_ALL) ++ ++FUNCTIONS.hard_static.i386 := $(FUNCTIONS_I386) ++FUNCTIONS.hard_pic.i386 := $(FUNCTIONS_I386) ++ ++FUNCTIONS.hard_static.x86_64 := $(FUNCTIONS_X86_64) ++FUNCTIONS.hard_pic.x86_64 := $(FUNCTIONS_X86_64) +diff --git a/compiler-rt/make/platform/clang_linux_embedded_test_input.c b/compiler-rt/make/platform/clang_linux_embedded_test_input.c +new file mode 100644 +index 00000000000..e69de29bb2d +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang/0014-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch b/recipes-devtools/clang/clang/0014-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch new file mode 100644 index 0000000..40168b0 --- /dev/null +++ b/recipes-devtools/clang/clang/0014-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch @@ -0,0 +1,46 @@ +From a010673fd33c7311763620cf62159993255bb559 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Thu, 19 May 2016 23:11:45 -0700 +Subject: [PATCH 14/15] compiler-rt: Simplify cross-compilation. Don't use + native-compiled llvm-config. + + Note: AddLLVM.cmake does not expose the LLVM source directory. + So if you want to run the test suite, you need to either: + + 1) set LLVM_MAIN_SRC_DIR explicitly (to find lit.py) + 2) change AddLLVM.cmake to point to an installed 'lit'. + 3) add_subdirectory(compiler-rt/test) from clang instead of compiler-rt. + +https://us.codeaurora.org/patches/quic/llvm/50683/compiler-rt-cross-compilation.patch + +Signed-off-by: Greg Fitzgerald +Signed-off-by: Khem Raj +--- + compiler-rt/CMakeLists.txt | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt +index aa360a3ef36..264d39c95c3 100644 +--- a/compiler-rt/CMakeLists.txt ++++ b/compiler-rt/CMakeLists.txt +@@ -66,7 +66,16 @@ set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOLEAN + "Build for a bare-metal target.") + + if (COMPILER_RT_STANDALONE_BUILD) +- load_llvm_config() ++ find_package(LLVM REQUIRED) ++ list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") ++ ++ # Variables that AddLLVM.cmake depends on (included by AddCompilerRT) ++ set(LLVM_TOOLS_BINARY_DIR "${LLVM_INSTALL_PREFIX}/bin") ++ set(LLVM_LIBRARY_DIR "${LLVM_INSTALL_PREFIX}/lib") ++ ++ set(LLVM_LIBRARY_OUTPUT_INTDIR ++ ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) ++ + if (TARGET intrinsics_gen) + # Loading the llvm config causes this target to be imported so place it + # under the appropriate folder in an IDE. +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang/0015-compiler-rt-Disable-tsan-on-OE-glibc.patch b/recipes-devtools/clang/clang/0015-compiler-rt-Disable-tsan-on-OE-glibc.patch new file mode 100644 index 0000000..f6a8743 --- /dev/null +++ b/recipes-devtools/clang/clang/0015-compiler-rt-Disable-tsan-on-OE-glibc.patch @@ -0,0 +1,42 @@ +From e166d4e3568de2718b687c046b1d8b89504d1451 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Mon, 18 Jul 2016 08:05:02 +0000 +Subject: [PATCH 15/15] compiler-rt: Disable tsan on OE/glibc + +It does not build see +http://lists.llvm.org/pipermail/llvm-dev/2016-July/102235.html + +Signed-off-by: Khem Raj +--- + compiler-rt/cmake/config-ix.cmake | 2 +- + compiler-rt/test/sanitizer_common/CMakeLists.txt | 1 - + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake +index db5c4645dc0..83ebc95fc98 100644 +--- a/compiler-rt/cmake/config-ix.cmake ++++ b/compiler-rt/cmake/config-ix.cmake +@@ -593,7 +593,7 @@ else() + endif() + + if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND +- OS_NAME MATCHES "Darwin|Linux|FreeBSD|Android|NetBSD") ++ OS_NAME MATCHES "Darwin|FreeBSD|Android|NetBSD") + set(COMPILER_RT_HAS_TSAN TRUE) + else() + set(COMPILER_RT_HAS_TSAN FALSE) +diff --git a/compiler-rt/test/sanitizer_common/CMakeLists.txt b/compiler-rt/test/sanitizer_common/CMakeLists.txt +index 23292e54820..cae7e010885 100644 +--- a/compiler-rt/test/sanitizer_common/CMakeLists.txt ++++ b/compiler-rt/test/sanitizer_common/CMakeLists.txt +@@ -8,7 +8,6 @@ if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|FreeBSD|NetBSD|SunOS") + list(APPEND SUPPORTED_TOOLS asan) + endif() + if(CMAKE_SYSTEM_NAME MATCHES "NetBSD" OR (CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT ANDROID)) +- list(APPEND SUPPORTED_TOOLS tsan) + list(APPEND SUPPORTED_TOOLS msan) + list(APPEND SUPPORTED_TOOLS ubsan) + endif() +-- +2.20.1 + diff --git a/recipes-devtools/clang/clang_git.bb b/recipes-devtools/clang/clang_git.bb index b3b8272..464f2f7 100644 --- a/recipes-devtools/clang/clang_git.bb +++ b/recipes-devtools/clang/clang_git.bb @@ -14,6 +14,12 @@ inherit cmake cmake-native OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH" +def get_clang_experimental_arch(bb, d, arch_var): + import re + a = d.getVar(arch_var, True) + if re.match('riscv(32|64)$', a): return 'RISCV' + return "" + def get_clang_arch(bb, d, arch_var): import re a = d.getVar(arch_var, True) @@ -24,9 +30,8 @@ def get_clang_arch(bb, d, arch_var): elif re.match('aarch64_be$', a): return 'AArch64' elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips' elif re.match('p(pc|owerpc)(|64)', a): return 'PowerPC' - elif re.match('riscv(32|64)$', a): return 'RISCV' else: - bb.error("cannot map '%s' to a supported llvm architecture" % a) + bb.note("'%s' is not a primary llvm architecture" % a) return "" def get_clang_host_arch(bb, d): @@ -35,6 +40,9 @@ def get_clang_host_arch(bb, d): def get_clang_target_arch(bb, d): return get_clang_arch(bb, d, 'TARGET_ARCH') +def get_clang_experimental_target_arch(bb, d): + return get_clang_experimental_arch(bb, d, 'TARGET_ARCH') + PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs" PACKAGECONFIG_class-native = "" PACKAGECONFIG_class-nativesdk = "compiler-rt libcplusplus" @@ -50,7 +58,11 @@ LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;X86" LLVM_TARGETS_TO_BUILD_append = ";${@get_clang_host_arch(bb, d)};${@get_clang_target_arch(bb, d)}" LLVM_TARGETS_TO_BUILD_TARGET ?= "" -LLVM_TARGETS_TO_BUILD_TARGET_append ?= ";${@get_clang_target_arch(bb, d)}" +LLVM_TARGETS_TO_BUILD_TARGET_append ?= "${@get_clang_target_arch(bb, d)}" + +LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= "RISCV" +LLVM_EXPERIMENTAL_TARGETS_TO_BUILD_append = ";${@get_clang_experimental_target_arch(bb, d)}" + EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \ -DLLVM_ENABLE_PIC=ON \ @@ -70,11 +82,13 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ EXTRA_OECMAKE_append_class-native = "\ -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ " EXTRA_OECMAKE_append_class-nativesdk = "\ -DCMAKE_CROSSCOMPILING:BOOL=ON \ -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \ " @@ -86,7 +100,12 @@ EXTRA_OECMAKE_append_class-target = "\ -DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \ -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS} \ " - +EXTRA_OECMAKE_append_class-target_riscv64 = "\ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ +" +EXTRA_OECMAKE_append_class-target_riscv32 = "\ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ +" DEPENDS = "zlib libffi libxml2 ninja-native" DEPENDS_append_class-nativesdk = " clang-native virtual/${TARGET_PREFIX}binutils-crosssdk virtual/${TARGET_PREFIX}gcc-crosssdk virtual/${TARGET_PREFIX}g++-crosssdk" DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TOOLCHAIN', 'gcc', 'virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++', '', d)}" diff --git a/recipes-devtools/clang/common.inc b/recipes-devtools/clang/common.inc index d582d34..ad1f435 100644 --- a/recipes-devtools/clang/common.inc +++ b/recipes-devtools/clang/common.inc @@ -8,59 +8,27 @@ LICENSE = "NCSA" BASEURI ??= "${LLVM_GIT}/llvm-project;protocol=${LLVM_GIT_PROTOCOL};branch=${BRANCH}" SRC_URI = "\ ${BASEURI} \ - ${LLVMPATCHES} \ - ${CLANGPATCHES} \ - ${COMPILERRTPATCHES} \ - ${LIBCXXABIPATCHES} \ - ${LIBCXXPATCHES} \ - ${LLDBPATCHES} \ + ${@'file://0000-clang-Enable-SSP-and-PIE-by-default.patch' if '${GCCPIE}' else ''} \ + file://0001-clang-driver-Use-lib-for-ldso-on-OE.patch \ + file://0002-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch \ + file://0003-clang-musl-ppc-does-not-support-128-bit-long-double.patch \ + file://0004-clang-Prepend-trailing-to-sysroot.patch \ + file://0005-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch \ + file://0006-clang-Define-releative-gcc-installation-dir.patch \ + file://0007-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch \ + file://0008-clang-scan-view-needs-python-2.x.patch \ + file://0009-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch \ + file://0010-llvm-allow-env-override-of-exe-path.patch \ + file://0011-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch \ + file://0012-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch \ + file://0013-compiler-rt-support-a-new-embedded-linux-target.patch \ + file://0014-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch \ + file://0015-compiler-rt-Disable-tsan-on-OE-glibc.patch \ " -# llvm patches -# -LLVMPATCHES = "\ - file://0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch;patchdir=llvm \ - file://0002-llvm-allow-env-override-of-exe-path.patch;patchdir=llvm \ - file://0003-llvm-Disable-calls-to-_finite-and-other-glibc-only-f.patch;patchdir=llvm \ -" # Fallback to no-PIE if not set GCCPIE ??= "" -# Clang patches -CLANGPATCHES = "\ - file://0001-clang-driver-Use-lib-for-ldso-on-OE.patch;patchdir=clang \ - file://0002-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch;patchdir=clang \ - file://0003-clang-musl-ppc-does-not-support-128-bit-long-double.patch;patchdir=clang \ - file://0004-clang-Prepend-trailing-to-sysroot.patch;patchdir=clang \ - file://0005-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch;patchdir=clang \ - file://0006-clang-Define-releative-gcc-installation-dir.patch;patchdir=clang \ - file://0007-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch;patchdir=clang \ - file://0008-clang-scan-view-needs-python-2.x.patch;patchdir=clang \ -" -CLANGPATCHES += "${@'file://0009-clang-Enable-SSP-and-PIE-by-default.patch;patchdir=clang' if '${GCCPIE}' else ''}" - -# compiler-rt patches -COMPILERRTPATCHES = "\ - file://0001-compiler-rt-support-a-new-embedded-linux-target.patch;patchdir=compiler-rt \ - file://0002-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch;patchdir=compiler-rt \ - file://0003-compiler-rt-Disable-tsan-on-OE-glibc.patch;patchdir=compiler-rt \ - file://0004-compiler-rt-cmake-mips-Do-not-specify-target-with-OE.patch;patchdir=compiler-rt \ -" -# libcxxabi patches -LIBCXXABIPATCHES ="\ - file://0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch;patchdir=libcxxabi \ -" - -# libc++ patches -LIBCXXPATCHES = "\ -" - -# lldb patches -LLDBPATCHES = "\ - file://0001-lldb-Include-limits.h-for-PATH_MAX-definition.patch;patchdir=lldb \ - file://0002-lldb-Add-lxml2-to-linker-cmdline-of-xml-is-found.patch;patchdir=lldb \ -" - S = "${TMPDIR}/work-shared/llvm-project-source-${PV}-${PR}/git" B = "${WORKDIR}/llvm-project-source-${PV}/build.${HOST_SYS}.${TARGET_SYS}" -- cgit v1.2.3-54-g00ecf