diff --git a/aarch64-suse-support.patch b/aarch64-suse-support.patch index ad00825..7591a51 100644 --- a/aarch64-suse-support.patch +++ b/aarch64-suse-support.patch @@ -1,16 +1,15 @@ -Index: llvm-3.3/tools/clang/lib/Driver/ToolChains.cpp +Index: llvm/tools/clang/lib/Driver/ToolChains.cpp =================================================================== ---- llvm-3.3.orig/tools/clang/lib/Driver/ToolChains.cpp -+++ llvm-3.3/tools/clang/lib/Driver/ToolChains.cpp -@@ -1073,9 +1073,10 @@ Generic_GCC::GCCInstallationDetector::GC +--- llvm.orig/tools/clang/lib/Driver/ToolChains.cpp ++++ llvm/tools/clang/lib/Driver/ToolChains.cpp +@@ -1110,8 +1110,9 @@ void Generic_GCC::GCCInstallationDetecto // Declare a bunch of static data sets that we'll select between below. These // are specifically designed to always refer to string literals to avoid any // lifetime or initialization issues. - static const char *const AArch64LibDirs[] = { "/lib" }; + static const char *const AArch64LibDirs[] = { "/lib64", "/lib" }; - static const char *const AArch64Triples[] = { - "aarch64-none-linux-gnu", -+ "aarch64-suse-linux", - "aarch64-linux-gnu" - }; + static const char *const AArch64Triples[] = { "aarch64-none-linux-gnu", ++ "aarch64-suse-linux", + "aarch64-linux-gnu" }; + static const char *const ARMLibDirs[] = { "/lib" }; diff --git a/arm_suse_support.diff b/arm_suse_support.diff index 98b3c4a..cb50d4c 100644 --- a/arm_suse_support.diff +++ b/arm_suse_support.diff @@ -1,16 +1,18 @@ ---- /tools/clang/lib/Driver/ToolChains.cpp.orig 2012-11-22 10:26:49.202107824 +0100 -+++ /tools/clang/lib/Driver/ToolChains.cpp 2012-11-22 12:20:33.662825882 +0100 -@@ -1082,11 +1082,13 @@ Generic_GCC::GCCInstallationDetector::GC +Index: llvm/tools/clang/lib/Driver/ToolChains.cpp +=================================================================== +--- llvm.orig/tools/clang/lib/Driver/ToolChains.cpp ++++ llvm/tools/clang/lib/Driver/ToolChains.cpp +@@ -1071,9 +1071,11 @@ Generic_GCC::GCCInstallationDetector::GC + static const char *const ARMLibDirs[] = { "/lib" }; - static const char *const ARMTriples[] = { - "arm-linux-gnueabi", -+ "armv5tel-suse-linux-gnueabi", - "arm-linux-androideabi" - }; - static const char *const ARMHFTriples[] = { - "arm-linux-gnueabihf", -+ "armv7hl-suse-linux-gnueabi", - "armv7hl-redhat-linux-gnueabi" - }; + static const char *const ARMTriples[] = { "arm-linux-gnueabi", +- "arm-linux-androideabi" }; ++ "arm-linux-androideabi", ++ "armv5tel-suse-linux-gnueabi"}; + static const char *const ARMHFTriples[] = { "arm-linux-gnueabihf", +- "armv7hl-redhat-linux-gnueabi" }; ++ "armv7hl-redhat-linux-gnueabi", ++ "armv7hl-suse-linux-gnueabi" }; static const char *const X86_64LibDirs[] = { "/lib64", "/lib" }; + static const char *const X86_64Triples[] = { diff --git a/assume-opensuse.patch b/assume-opensuse.patch index c86a2ed..3a1b91e 100644 --- a/assume-opensuse.patch +++ b/assume-opensuse.patch @@ -1,11 +1,78 @@ ---- a/tools/clang/lib/Driver/ToolChains.cpp (revision 178453) -+++ b/tools/clang/lib/Driver/ToolChains.cpp (working copy) -@@ -1878,7 +1878,7 @@ +Index: llvm/tools/clang/lib/Driver/ToolChains.cpp +=================================================================== +--- llvm.orig/tools/clang/lib/Driver/ToolChains.cpp ++++ llvm/tools/clang/lib/Driver/ToolChains.cpp +@@ -2185,73 +2185,7 @@ static bool IsUbuntu(enum Distro Distro) } - static bool IsOpenSuse(enum Distro Distro) { -- return Distro >= OpenSuse11_3 && Distro <= OpenSuse12_2; -+ return true; + static Distro DetectDistro(llvm::Triple::ArchType Arch) { +- OwningPtr File; +- if (!llvm::MemoryBuffer::getFile("/etc/lsb-release", File)) { +- StringRef Data = File.get()->getBuffer(); +- SmallVector Lines; +- Data.split(Lines, "\n"); +- Distro Version = UnknownDistro; +- for (unsigned i = 0, s = Lines.size(); i != s; ++i) +- if (Version == UnknownDistro && Lines[i].startswith("DISTRIB_CODENAME=")) +- Version = llvm::StringSwitch(Lines[i].substr(17)) +- .Case("hardy", UbuntuHardy) +- .Case("intrepid", UbuntuIntrepid) +- .Case("jaunty", UbuntuJaunty) +- .Case("karmic", UbuntuKarmic) +- .Case("lucid", UbuntuLucid) +- .Case("maverick", UbuntuMaverick) +- .Case("natty", UbuntuNatty) +- .Case("oneiric", UbuntuOneiric) +- .Case("precise", UbuntuPrecise) +- .Case("quantal", UbuntuQuantal) +- .Case("raring", UbuntuRaring) +- .Case("saucy", UbuntuSaucy) +- .Case("trusty", UbuntuTrusty) +- .Default(UnknownDistro); +- return Version; +- } +- +- if (!llvm::MemoryBuffer::getFile("/etc/redhat-release", File)) { +- StringRef Data = File.get()->getBuffer(); +- if (Data.startswith("Fedora release")) +- return Fedora; +- else if (Data.startswith("Red Hat Enterprise Linux") && +- Data.find("release 6") != StringRef::npos) +- return RHEL6; +- else if ((Data.startswith("Red Hat Enterprise Linux") || +- Data.startswith("CentOS")) && +- Data.find("release 5") != StringRef::npos) +- return RHEL5; +- else if ((Data.startswith("Red Hat Enterprise Linux") || +- Data.startswith("CentOS")) && +- Data.find("release 4") != StringRef::npos) +- return RHEL4; +- return UnknownDistro; +- } +- +- if (!llvm::MemoryBuffer::getFile("/etc/debian_version", File)) { +- StringRef Data = File.get()->getBuffer(); +- if (Data[0] == '5') +- return DebianLenny; +- else if (Data.startswith("squeeze/sid") || Data[0] == '6') +- return DebianSqueeze; +- else if (Data.startswith("wheezy/sid") || Data[0] == '7') +- return DebianWheezy; +- else if (Data.startswith("jessie/sid") || Data[0] == '8') +- return DebianJessie; +- return UnknownDistro; +- } +- +- if (llvm::sys::fs::exists("/etc/SuSE-release")) + return OpenSUSE; +- +- if (llvm::sys::fs::exists("/etc/exherbo-release")) +- return Exherbo; +- +- if (llvm::sys::fs::exists("/etc/arch-release")) +- return ArchLinux; +- +- return UnknownDistro; } - static bool IsDebian(enum Distro Distro) { + /// \brief Get our best guess at the multiarch triple for a target. diff --git a/default-to-i586.patch b/default-to-i586.patch index 3bbe80b..c80fcdc 100644 --- a/default-to-i586.patch +++ b/default-to-i586.patch @@ -1,20 +1,24 @@ -Index: llvm-3.3/tools/clang/lib/Driver/Tools.cpp +Index: llvm/tools/clang/lib/Driver/Tools.cpp =================================================================== ---- llvm-3.3.orig/tools/clang/lib/Driver/Tools.cpp -+++ llvm-3.3/tools/clang/lib/Driver/Tools.cpp -@@ -1243,12 +1243,12 @@ static const char *getX86TargetCPU(const - if (Triple.getOSName().startswith("netbsd")) - return "i486"; +--- llvm.orig/tools/clang/lib/Driver/Tools.cpp ++++ llvm/tools/clang/lib/Driver/Tools.cpp +@@ -1304,7 +1304,7 @@ static const char *getX86TargetCPU(const + } + // All x86 devices running Android have core2 as their common - // denominator. This makes a better choice than pentium4. + // denominator. This makes a better choice than i586. if (Triple.getEnvironment() == llvm::Triple::Android) return "core2"; -- // Fallback to p4. -- return "pentium4"; -+ // Fallback to i586. -+ return "i586"; +@@ -1322,8 +1322,8 @@ static const char *getX86TargetCPU(const + case llvm::Triple::Bitrig: + return "i686"; + default: +- // Fallback to p4. +- return "pentium4"; ++ // Fallback to i586. ++ return "i586"; + } } - void Clang::AddX86TargetArgs(const ArgList &Args, diff --git a/llvm-3.3.93.tar.bz2 b/llvm-3.3.93.tar.bz2 new file mode 100644 index 0000000..cd43da3 --- /dev/null +++ b/llvm-3.3.93.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3da2976b481c69f53f6dc4fcb15292577c6d0d48b836b0dddac6816bd7e8e1f +size 21986769 diff --git a/llvm-3.3.tar.bz2 b/llvm-3.3.tar.bz2 deleted file mode 100644 index fa9224a..0000000 --- a/llvm-3.3.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:489179223491c39fc0274cab6540338bb0a6c18e581396d8b75341586181ade2 -size 24912910 diff --git a/llvm-disable-pretty-stack-trace.patch b/llvm-disable-pretty-stack-trace.patch deleted file mode 100644 index 19f95d3..0000000 --- a/llvm-disable-pretty-stack-trace.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: llvm-3.3/lib/Support/PrettyStackTrace.cpp -=================================================================== ---- llvm-3.3.orig/lib/Support/PrettyStackTrace.cpp -+++ llvm-3.3/lib/Support/PrettyStackTrace.cpp -@@ -27,7 +27,7 @@ - using namespace llvm; - - namespace llvm { -- bool DisablePrettyStackTrace = false; -+ bool DisablePrettyStackTrace = true; - } - - // FIXME: This should be thread local when llvm supports threads. -Index: llvm-3.3/tools/clang/tools/driver/driver.cpp -=================================================================== ---- llvm-3.3.orig/tools/clang/tools/driver/driver.cpp -+++ llvm-3.3/tools/clang/tools/driver/driver.cpp -@@ -341,6 +341,7 @@ static void ParseProgName(SmallVectorImp - } - - int main(int argc_, const char **argv_) { -+ llvm::DisablePrettyStackTrace = false; - llvm::sys::PrintStackTraceOnErrorSignal(); - llvm::PrettyStackTraceProgram X(argc_, argv_); - diff --git a/llvm.changes b/llvm.changes index 927e948..783682a 100644 --- a/llvm.changes +++ b/llvm.changes @@ -1,3 +1,17 @@ +------------------------------------------------------------------- +Tue Nov 19 08:42:08 UTC 2013 - idonmez@suse.com + +- Update to r195116 from llvm 3.4 branch +- Refresh patches + * aarch64-suse-support.patch + * arm_suse_support.diff + * assume-opensuse.patch + * default-to-i586.patch +- Drop upstream patches + * llvm-disable-pretty-stack-trace.patch + * r189852.diff + * unreachable-code.patch + ------------------------------------------------------------------- Tue Oct 22 20:57:00 UTC 2013 - dmueller@suse.com diff --git a/llvm.spec b/llvm.spec index ccd3ed6..69bc1ab 100644 --- a/llvm.spec +++ b/llvm.spec @@ -16,31 +16,17 @@ # -%define _revision 183898 -%define _release_version 3.3 -%define _supported_archs "AArch64;ARM;PowerPC;X86" -%define _experimental_archs "R600" - -%ifarch %arm -%define _supported_archs "ARM" -%endif - -%ifarch ppc64 -%define _supported_archs "PowerPC" -%endif - -%ifarch s390x -%define _supported_archs "SystemZ" -%endif +%define _revision 195116 +%define _release_version 3.4 Name: llvm -Version: 3.3 +Version: 3.3.93 Release: 0 Summary: Low Level Virtual Machine License: NCSA Group: Development/Languages/Other Url: http://www.llvm.org -Source0: %{name}-%{_release_version}.tar.bz2 +Source0: %{name}-%{version}.tar.bz2 Source100: %{name}-rpmlintrc # PATCH-FIX-OPENSUSE set-revision.patch idoenmez@suse.de -- Allow us to set revision Patch1: set-revision.patch @@ -53,17 +39,12 @@ Patch4: default-to-i586.patch Patch5: llvm-config-lib64.patch # PATCH-FIX-OPENSUSE arm_suse_support.diff --Enable ARM suse toolchain support Patch6: arm_suse_support.diff -# PATCH-FIX-OPENSUSE unreachable-code.patch -- Unreachable code warning triggered on SLE -Patch7: unreachable-code.patch Patch8: cmake-host-triple.patch # PATCH-FIX-OPENSUSE aarch64-suse-support.patch -- Enable AArch64 suse toolchain support Patch9: aarch64-suse-support.patch # PATCH-FIX-OPENSUSE llvm-no-visibility.patch -- Disable visibility Patch10: llvm-no-visibility.patch -# PATCH-FIX-OPENSUSE llvm-disable-pretty-stack-trace.patch -- https://bugs.freedesktop.org/show_bug.cgi?id=60929 -Patch11: llvm-disable-pretty-stack-trace.patch Patch12: arm-remove-xfails.diff -Patch13: r189852.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: autoconf BuildRequires: automake @@ -160,7 +141,7 @@ Requires: vim This package contains vim plugins for LLVM like syntax highlighting. %prep -%setup -q -n %{name}-%{_release_version} +%setup -q -n %{name} %patch1 -p1 %patch2 -p1 %patch3 -p1 @@ -169,15 +150,12 @@ This package contains vim plugins for LLVM like syntax highlighting. %patch5 -p1 %endif %patch6 -p1 -%patch7 -p1 %patch8 -p1 %patch9 -p1 %ifarch s390 s390x %patch10 -p1 %endif -%patch11 -p1 %patch12 -%patch13 # We hardcode i586 rm tools/clang/test/Driver/x86_features.c @@ -251,7 +229,7 @@ cmake -G "Unix Makefiles" \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_ASSERTIONS=OFF \ - -DLLVM_TARGETS_TO_BUILD=%{_supported_archs} \ + -DLLVM_TARGETS_TO_BUILD=host \ -DCMAKE_C_FLAGS="-O0" \ -DCMAKE_CXX_FLAGS="-O0" \ -DLLVM_HOST_TRIPLE=%{host_triple} \ @@ -295,11 +273,11 @@ cmake -G "Unix Makefiles" \ %if 0%{?suse_version} >= 1220 -DLLVM_BINUTILS_INCDIR=/usr/include \ %endif - -DLLVM_TARGETS_TO_BUILD=%{_supported_archs} \ -%ifnarch %arm ppc64 s390x - -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=%{_experimental_archs} \ +%ifarch %{ix86} x86_64 + -DLLVM_TARGETS_TO_BUILD="host;R600" \ +%else + -DLLVM_TARGETS_TO_BUILD=host \ %endif - -DLLVM_BUILD_TESTS=OFF \ .. make %{?_smp_mflags} VERBOSE=1 diff --git a/r189852.diff b/r189852.diff deleted file mode 100644 index 40a26cc..0000000 --- a/r189852.diff +++ /dev/null @@ -1,188 +0,0 @@ - -Don't emit an available_externally vtable pointing to linkonce_odr funcs. - -This fixes pr13124. - -From the discussion at -http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-June/022606.html -we know that we cannot make funcions in a weak_odr vtable also weak_odr. They -should remain linkonce_odr. - -The side effect is that we cannot emit a available_externally vtable unless we -also emit a copy of the function. This also has an issue: If codegen is going -to output a function, sema has to mark it used. Given llvm.org/pr9114, it looks -like sema cannot be more aggressive at marking functions used because -of vtables. - -This leaves us with a few unpleasant options: - -* Marking functions in vtables used if possible. This sounds a bit sloppy, so - we should avoid it. -* Producing available_externally vtables only when all the functions in it are - already used or weak_odr. This would cover cases like - --------------------- -struct foo { - virtual ~foo(); -}; -struct bar : public foo { - virtual void zed(); -}; -void f() { - foo *x(new bar); - delete x; -} -void g(bar *x) { - x->~bar(); // force the destructor to be used -} --------------------------- - -and - ----------------------------------- -template -struct bar { - virtual ~bar(); -}; -template -bar::~bar() { -} - -// make the destructor weak_odr instead of linkonce_odr -extern template class bar; - -void f() { - bar *x(new bar); - delete x; -} ----------------------------- - -These look like corner cases, so it is unclear if it is worth it. - -* And finally: Just nuke this optimization. That is what this patch implements. - - ---- tools/clang/lib/CodeGen/CGVTables.cpp -+++ tools/clang/lib/CodeGen/CGVTables.cpp -@@ -734,12 +734,7 @@ - switch (keyFunction->getTemplateSpecializationKind()) { - case TSK_Undeclared: - case TSK_ExplicitSpecialization: -- // When compiling with optimizations turned on, we emit all vtables, -- // even if the key function is not defined in the current translation -- // unit. If this is the case, use available_externally linkage. -- if (!def && CodeGenOpts.OptimizationLevel) -- return llvm::GlobalVariable::AvailableExternallyLinkage; -- -+ assert(def && "Should not have been asked to emit this"); - if (keyFunction->isInlined()) - return !Context.getLangOpts().AppleKext ? - llvm::GlobalVariable::LinkOnceODRLinkage : -@@ -758,9 +753,7 @@ - llvm::Function::InternalLinkage; - - case TSK_ExplicitInstantiationDeclaration: -- return !Context.getLangOpts().AppleKext ? -- llvm::GlobalVariable::AvailableExternallyLinkage : -- llvm::Function::InternalLinkage; -+ llvm_unreachable("Should not have been asked to emit this"); - } - } - -@@ -776,7 +769,7 @@ - return llvm::GlobalVariable::LinkOnceODRLinkage; - - case TSK_ExplicitInstantiationDeclaration: -- return llvm::GlobalVariable::AvailableExternallyLinkage; -+ llvm_unreachable("Should not have been asked to emit this"); - - case TSK_ExplicitInstantiationDefinition: - return llvm::GlobalVariable::WeakODRLinkage; -@@ -875,16 +868,6 @@ - /// we define that v-table? - static bool shouldEmitVTableAtEndOfTranslationUnit(CodeGenModule &CGM, - const CXXRecordDecl *RD) { -- // If we're building with optimization, we always emit v-tables -- // since that allows for virtual function calls to be devirtualized. -- // If the v-table is defined strongly elsewhere, this definition -- // will be emitted available_externally. -- // -- // However, we don't want to do this in -fapple-kext mode, because -- // kext mode does not permit devirtualization. -- if (CGM.getCodeGenOpts().OptimizationLevel && !CGM.getLangOpts().AppleKext) -- return true; -- - return !CGM.getVTables().isVTableExternal(RD); - } - ---- tools/clang/test/CodeGenCXX/thunks-available-externally.cpp -+++ tools/clang/test/CodeGenCXX/thunks-available-externally.cpp -@@ -1,4 +1,4 @@ --// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s -+// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm-only -O3 - - // Check that we don't assert on this case. - namespace Test1 { -@@ -58,15 +58,6 @@ - b->f(); - } - --// CHECK: define void @_ZN5Test21fEv() --// CHECK: call void @_ZN5Test21C1fEv --// CHECK: ret void --// CHECK: define available_externally void @_ZThn16_N5Test21C1fEv --void f() { -- C c; -- f(&c); --} -- - } - - // Test that we don't assert. ---- tools/clang/test/CodeGenCXX/vtable-available-externally.cpp -+++ tools/clang/test/CodeGenCXX/vtable-available-externally.cpp -@@ -2,18 +2,10 @@ - // RUN: FileCheck --check-prefix=CHECK-TEST1 %s < %t - // RUN: FileCheck --check-prefix=CHECK-TEST2 %s < %t - // RUN: FileCheck --check-prefix=CHECK-TEST5 %s < %t --// RUN: FileCheck --check-prefix=CHECK-TEST7 %s < %t - - #include - --// Test1::A's key function (f) is not defined in this translation --// unit, but in order to devirtualize calls, we emit the v-table with --// available_externally linkage. --// --// There's no real reason to do this to the RTTI, though. -- --// CHECK-TEST1: @_ZTVN5Test11AE = available_externally --// CHECK-TEST1: @_ZTIN5Test11AE = external constant i8* -+// CHECK-TEST1: @_ZTVN5Test11AE = external unnamed_addr constant - namespace Test1 { - - struct A { -@@ -160,13 +152,4 @@ - void f6 (); - }; - --// CHECK-TEST7: define void @_ZN5Test79check_c28Ev --// CHECK-TEST7: call void @_ZN5Test73c282f6Ev --// CHECK-TEST7: ret void --void check_c28 () { -- c28 obj; -- c11 *ptr = &obj; -- ptr->f6 (); --} -- - } ---- tools/clang/test/CodeGenCXX/vtable-linkage.cpp -+++ tools/clang/test/CodeGenCXX/vtable-linkage.cpp -@@ -163,7 +163,7 @@ - // F is an explicit template instantiation declaration without a - // key function, so its vtable should have external linkage. - // CHECK-9: @_ZTV1FIiE = external unnamed_addr constant --// CHECK-9-OPT: @_ZTV1FIiE = available_externally unnamed_addr constant -+// CHECK-9-OPT: @_ZTV1FIiE = external unnamed_addr constant - - // E is an explicit template instantiation declaration. It has a - // key function that is not instantiated, so we should only reference diff --git a/unreachable-code.patch b/unreachable-code.patch deleted file mode 100644 index 04dd8d9..0000000 --- a/unreachable-code.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: llvm/utils/TableGen/CodeGenInstruction.cpp -=================================================================== ---- llvm.orig/utils/TableGen/CodeGenInstruction.cpp -+++ llvm/utils/TableGen/CodeGenInstruction.cpp -@@ -191,7 +191,7 @@ CGIOperandList::ParseOperandName(const s - return std::make_pair(OpIdx, i); - - // Otherwise, didn't find it! -- PrintFatalError(TheDef->getName() + ": unknown suboperand name in '" + Op + "'"); -+ llvm_unreachable(TheDef->getName() + ": unknown suboperand name in '" + Op + "'"); - } - - static void ParseConstraint(const std::string &CStr, CGIOperandList &Ops) {