forked from pool/llvm14
- Add minor version to Python shebangs. (boo#1212476)
- Remove shebang and executable bit where not needed. OBS-URL: https://build.opensuse.org/package/show/devel:tools:compiler/llvm14?expand=0&rev=67
This commit is contained in:
commit
85311f54d1
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
## Default LFS
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.osc
|
132
CMake-Look-up-target-subcomponents-in-LLVM_AVAILABLE_LIBS.patch
Normal file
132
CMake-Look-up-target-subcomponents-in-LLVM_AVAILABLE_LIBS.patch
Normal file
@ -0,0 +1,132 @@
|
||||
From b49307ef82196729e1ab2508b73fc7fc80192668 Mon Sep 17 00:00:00 2001
|
||||
From: Aaron Puchert <aaronpuchert@alice-dsl.net>
|
||||
Date: Sun, 14 Feb 2021 22:54:07 +0100
|
||||
Subject: [PATCH] [CMake] Look up target subcomponents in LLVM_AVAILABLE_LIBS
|
||||
|
||||
In an installation using the all-contained libLLVM.so, individual
|
||||
components are not available as targets, so we have to look them up in
|
||||
LLVM_AVAILABLE_LIBS just like llvm_map_components_to_libnames does it.
|
||||
Here I don't think we need the capitalized names though because we know
|
||||
the right capitalization. But I might be wrong.
|
||||
|
||||
This is required by dragonffi, who call llvm_map_components_to_libnames
|
||||
on a list containing ${LLVM_NATIVE_ARCH}. Downstream bug report:
|
||||
https://bugzilla.opensuse.org/show_bug.cgi?id=1180748.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D96670
|
||||
---
|
||||
llvm/cmake/modules/LLVM-Config.cmake | 61 +++++++++++++---------------
|
||||
1 file changed, 28 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/llvm/cmake/modules/LLVM-Config.cmake b/llvm/cmake/modules/LLVM-Config.cmake
|
||||
index 5d9ec79c7c56..1cd10993b903 100644
|
||||
--- a/llvm/cmake/modules/LLVM-Config.cmake
|
||||
+++ b/llvm/cmake/modules/LLVM-Config.cmake
|
||||
@@ -125,47 +125,38 @@ endfunction(llvm_map_components_to_libraries)
|
||||
# available and not a list of the components.
|
||||
function(llvm_expand_pseudo_components out_components)
|
||||
set( link_components ${ARGN} )
|
||||
+ if(NOT LLVM_AVAILABLE_LIBS)
|
||||
+ # Inside LLVM itself available libs are in a global property.
|
||||
+ get_property(LLVM_AVAILABLE_LIBS GLOBAL PROPERTY LLVM_LIBS)
|
||||
+ endif()
|
||||
foreach(c ${link_components})
|
||||
# add codegen, asmprinter, asmparser, disassembler
|
||||
list(FIND LLVM_TARGETS_TO_BUILD ${c} idx)
|
||||
if( NOT idx LESS 0 )
|
||||
- if( TARGET LLVM${c}CodeGen )
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${c}CodeGen lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
list(APPEND expanded_components "${c}CodeGen")
|
||||
else()
|
||||
- if( TARGET LLVM${c} )
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${c} lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
list(APPEND expanded_components "${c}")
|
||||
else()
|
||||
message(FATAL_ERROR "Target ${c} is not in the set of libraries.")
|
||||
endif()
|
||||
endif()
|
||||
- if( TARGET LLVM${c}AsmPrinter )
|
||||
- list(APPEND expanded_components "${c}AsmPrinter")
|
||||
- endif()
|
||||
- if( TARGET LLVM${c}AsmParser )
|
||||
- list(APPEND expanded_components "${c}AsmParser")
|
||||
- endif()
|
||||
- if( TARGET LLVM${c}Desc )
|
||||
- list(APPEND expanded_components "${c}Desc")
|
||||
- endif()
|
||||
- if( TARGET LLVM${c}Disassembler )
|
||||
- list(APPEND expanded_components "${c}Disassembler")
|
||||
- endif()
|
||||
- if( TARGET LLVM${c}Info )
|
||||
- list(APPEND expanded_components "${c}Info")
|
||||
- endif()
|
||||
- if( TARGET LLVM${c}Utils )
|
||||
- list(APPEND expanded_components "${c}Utils")
|
||||
- endif()
|
||||
+ foreach(subcomponent IN ITEMS AsmPrinter AsmParser Desc Disassembler Info Utils)
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${c}${subcomponent} lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
+ list(APPEND expanded_components "${c}${subcomponent}")
|
||||
+ endif()
|
||||
+ endforeach()
|
||||
elseif( c STREQUAL "nativecodegen" )
|
||||
- if( TARGET LLVM${LLVM_NATIVE_ARCH}CodeGen )
|
||||
- list(APPEND expanded_components "${LLVM_NATIVE_ARCH}CodeGen")
|
||||
- endif()
|
||||
- if( TARGET LLVM${LLVM_NATIVE_ARCH}Desc )
|
||||
- list(APPEND expanded_components "${LLVM_NATIVE_ARCH}Desc")
|
||||
- endif()
|
||||
- if( TARGET LLVM${LLVM_NATIVE_ARCH}Info )
|
||||
- list(APPEND expanded_components "${LLVM_NATIVE_ARCH}Info")
|
||||
- endif()
|
||||
+ foreach(subcomponent IN ITEMS CodeGen Desc Info)
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${LLVM_NATIVE_ARCH}${subcomponent} lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
+ list(APPEND expanded_components "${LLVM_NATIVE_ARCH}${subcomponent}")
|
||||
+ endif()
|
||||
+ endforeach()
|
||||
elseif( c STREQUAL "AllTargetsCodeGens" )
|
||||
# Link all the codegens from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
@@ -176,28 +167,32 @@ function(llvm_expand_pseudo_components out_components)
|
||||
elseif( c STREQUAL "AllTargetsAsmParsers" )
|
||||
# Link all the asm parsers from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
- if( TARGET LLVM${t}AsmParser )
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${t}AsmParser lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
list(APPEND expanded_components "${t}AsmParser")
|
||||
endif()
|
||||
endforeach(t)
|
||||
elseif( c STREQUAL "AllTargetsDescs" )
|
||||
# Link all the descs from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
- if( TARGET LLVM${t}Desc )
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${t}Desc lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
list(APPEND expanded_components "${t}Desc")
|
||||
endif()
|
||||
endforeach(t)
|
||||
elseif( c STREQUAL "AllTargetsDisassemblers" )
|
||||
# Link all the disassemblers from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
- if( TARGET LLVM${t}Disassembler )
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${t}Disassembler lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
list(APPEND expanded_components "${t}Disassembler")
|
||||
endif()
|
||||
endforeach(t)
|
||||
elseif( c STREQUAL "AllTargetsInfos" )
|
||||
# Link all the infos from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
- if( TARGET LLVM${t}Info )
|
||||
+ list(FIND LLVM_AVAILABLE_LIBS LLVM${t}Info lib_idx)
|
||||
+ if( lib_idx GREATER_EQUAL 0 )
|
||||
list(APPEND expanded_components "${t}Info")
|
||||
endif()
|
||||
endforeach(t)
|
||||
--
|
||||
2.30.0
|
||||
|
42
_constraints
Normal file
42
_constraints
Normal file
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0"?>
|
||||
<constraints>
|
||||
<hardware>
|
||||
<disk>
|
||||
<size unit="G">35</size>
|
||||
</disk>
|
||||
<memory>
|
||||
<size unit="M">4096</size>
|
||||
</memory>
|
||||
</hardware>
|
||||
<overwrite>
|
||||
<!--
|
||||
We have disabled debuginfo on 32 bit architecture because they simply can no address enough memory to link llvm libraries with it.
|
||||
Without debuginfo the disk and memory requirements are much lower.
|
||||
-->
|
||||
<conditions>
|
||||
<arch>armv6l</arch>
|
||||
<arch>armv7l</arch>
|
||||
<arch>i586</arch>
|
||||
<arch>ppc</arch>
|
||||
<arch>s390</arch>
|
||||
</conditions>
|
||||
<hardware>
|
||||
<disk>
|
||||
<size unit="G">10</size>
|
||||
</disk>
|
||||
<memory>
|
||||
<size unit="M">2048</size>
|
||||
</memory>
|
||||
</hardware>
|
||||
</overwrite>
|
||||
<overwrite>
|
||||
<conditions>
|
||||
<arch>riscv64</arch>
|
||||
</conditions>
|
||||
<hardware>
|
||||
<memory>
|
||||
<size unit="M">14000</size>
|
||||
</memory>
|
||||
</hardware>
|
||||
</overwrite>
|
||||
</constraints>
|
34
assume-opensuse.patch
Normal file
34
assume-opensuse.patch
Normal file
@ -0,0 +1,34 @@
|
||||
Index: clang-12.0.0rc1.src/lib/Driver/Distro.cpp
|
||||
===================================================================
|
||||
--- clang-12.0.0rc1.src.orig/lib/Driver/Distro.cpp
|
||||
+++ clang-12.0.0rc1.src/lib/Driver/Distro.cpp
|
||||
@@ -93,6 +93,8 @@ static Distro::DistroType DetectLsbRelease...
|
||||
}
|
||||
|
||||
static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
|
||||
+ return Distro::OpenSUSE;
|
||||
+/*
|
||||
Distro::DistroType Version = Distro::UnknownDistro;
|
||||
|
||||
// Newer freedesktop.org's compilant systemd-based systems
|
||||
@@ -200,7 +202,7 @@ static Distro::DistroType DetectDistro(l
|
||||
if (VFS.exists("/etc/gentoo-release"))
|
||||
return Distro::Gentoo;
|
||||
|
||||
- return Distro::UnknownDistro;
|
||||
+ return Distro::UnknownDistro;*/
|
||||
}
|
||||
|
||||
static Distro::DistroType GetDistro(llvm::vfs::FileSystem &VFS,
|
||||
Index: clang-12.0.0rc1.src/unittests/Driver/CMakeLists.txt
|
||||
===================================================================
|
||||
--- clang-12.0.0rc1.src.orig/unittests/Driver/CMakeLists.txt
|
||||
+++ clang-12.0.0rc1.src/unittests/Driver/CMakeLists.txt
|
||||
@@ -5,7 +5,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
)
|
||||
|
||||
add_clang_unittest(ClangDriverTests
|
||||
- DistroTest.cpp
|
||||
ToolChainTest.cpp
|
||||
ModuleCacheTest.cpp
|
||||
MultilibTest.cpp
|
2
baselibs.conf
Normal file
2
baselibs.conf
Normal file
@ -0,0 +1,2 @@
|
||||
libLLVM14
|
||||
libclang-cpp14
|
16
check-no-llvm-exegesis.patch
Normal file
16
check-no-llvm-exegesis.patch
Normal file
@ -0,0 +1,16 @@
|
||||
--- a/llvm/test/CMakeLists.txt
|
||||
+++ b/llvm/test/CMakeLists.txt
|
||||
@@ -81,7 +81,6 @@ set(LLVM_TEST_DEPENDS
|
||||
dsymutil
|
||||
llvm-dwarfdump
|
||||
llvm-dwp
|
||||
- llvm-exegesis
|
||||
llvm-extract
|
||||
llvm-gsymutil
|
||||
llvm-isel-fuzzer
|
||||
--- a/llvm/test/tools/llvm-exegesis/lit.local.cfg
|
||||
+++ b/llvm/test/tools/llvm-exegesis/lit.local.cfg
|
||||
@@ -1,2 +1 @@
|
||||
-if 'native' not in config.available_features:
|
||||
- config.unsupported = True
|
||||
+config.unsupported = True
|
BIN
clang-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
clang-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
clang-docs-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
clang-docs-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
33
clang-repl-private-deps.patch
Normal file
33
clang-repl-private-deps.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From 3abb807f6773a980f4150b22336a9a4a8a19c1d5 Mon Sep 17 00:00:00 2001
|
||||
From: Aaron Puchert <aaronpuchert@alice-dsl.net>
|
||||
Date: Sun, 27 Mar 2022 20:56:02 +0200
|
||||
Subject: [PATCH] Let clang-repl link privately against Clang components
|
||||
|
||||
First of all, this is the convention: all other tools have their
|
||||
dependencies private. While it does not have an effect on linking
|
||||
(there is no linking against executables), it does have an effect
|
||||
on exporting: having the targets private allows installing the tools
|
||||
without the libraries in a statically linked build, or a build against
|
||||
libclang-cpp.so.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D122546
|
||||
---
|
||||
clang/tools/clang-repl/CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/clang/tools/clang-repl/CMakeLists.txt b/clang/tools/clang-repl/CMakeLists.txt
|
||||
index 30e3b2be9ed3..b51a18c10cdc 100644
|
||||
--- a/clang/tools/clang-repl/CMakeLists.txt
|
||||
+++ b/clang/tools/clang-repl/CMakeLists.txt
|
||||
@@ -11,7 +11,7 @@ add_clang_tool(clang-repl
|
||||
ClangRepl.cpp
|
||||
)
|
||||
|
||||
-clang_target_link_libraries(clang-repl PUBLIC
|
||||
+clang_target_link_libraries(clang-repl PRIVATE
|
||||
clangBasic
|
||||
clangFrontend
|
||||
clangInterpreter
|
||||
--
|
||||
2.35.1
|
||||
|
13
clang-resourcedirs.patch
Normal file
13
clang-resourcedirs.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: cfe-6.0.0rc1.src/lib/Driver/Driver.cpp
|
||||
===================================================================
|
||||
--- cfe-6.0.0rc1.src.orig/lib/Driver/Driver.cpp
|
||||
+++ cfe-6.0.0rc1.src/lib/Driver/Driver.cpp
|
||||
@@ -115,7 +115,7 @@ Driver::Driver(StringRef ClangExecutable
|
||||
// Dir is bin/ or lib/, depending on where BinaryPath is.
|
||||
std::string Dir = std::string(llvm::sys::path::parent_path(BinaryPath));
|
||||
|
||||
- SmallString<128> P(Dir);
|
||||
+ SmallString<128> P((Dir != "") ? Dir : "/usr/bin/");
|
||||
if (CustomResourceDir != "") {
|
||||
llvm::sys::path::append(P, CustomResourceDir);
|
||||
} else {
|
10
clang-test-xfail-gnuless-triple.patch
Normal file
10
clang-test-xfail-gnuless-triple.patch
Normal file
@ -0,0 +1,10 @@
|
||||
diff --git a/clang/test/Driver/XRay/xray-instrument-os.c b/clang/test/Driver/XRay/xray-instrument-os.c
|
||||
index 3a0397208326..5cf7e35fdbf3 100644
|
||||
--- a/clang/test/Driver/XRay/xray-instrument-os.c
|
||||
+++ b/clang/test/Driver/XRay/xray-instrument-os.c
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: not %clang -o /dev/null -v -fxray-instrument -c %s
|
||||
-// XFAIL: -linux-, -freebsd, x86_64-apple-darwin, x86_64-apple-macos
|
||||
+// XFAIL: linux, freebsd, x86_64-apple-darwin, x86_64-apple-macos
|
||||
// REQUIRES: amd64 || x86_64 || x86_64h || arm || aarch64 || arm64
|
||||
typedef int a;
|
BIN
clang-tools-extra-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
clang-tools-extra-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
477
compact_unwind_encoding.h
Normal file
477
compact_unwind_encoding.h
Normal file
@ -0,0 +1,477 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//
|
||||
// Darwin's alternative to DWARF based unwind encodings.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
|
||||
#ifndef __COMPACT_UNWIND_ENCODING__
|
||||
#define __COMPACT_UNWIND_ENCODING__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
//
|
||||
// Compilers can emit standard DWARF FDEs in the __TEXT,__eh_frame section
|
||||
// of object files. Or compilers can emit compact unwind information in
|
||||
// the __LD,__compact_unwind section.
|
||||
//
|
||||
// When the linker creates a final linked image, it will create a
|
||||
// __TEXT,__unwind_info section. This section is a small and fast way for the
|
||||
// runtime to access unwind info for any given function. If the compiler
|
||||
// emitted compact unwind info for the function, that compact unwind info will
|
||||
// be encoded in the __TEXT,__unwind_info section. If the compiler emitted
|
||||
// DWARF unwind info, the __TEXT,__unwind_info section will contain the offset
|
||||
// of the FDE in the __TEXT,__eh_frame section in the final linked image.
|
||||
//
|
||||
// Note: Previously, the linker would transform some DWARF unwind infos into
|
||||
// compact unwind info. But that is fragile and no longer done.
|
||||
|
||||
|
||||
//
|
||||
// The compact unwind endoding is a 32-bit value which encoded in an
|
||||
// architecture specific way, which registers to restore from where, and how
|
||||
// to unwind out of the function.
|
||||
//
|
||||
typedef uint32_t compact_unwind_encoding_t;
|
||||
|
||||
|
||||
// architecture independent bits
|
||||
enum {
|
||||
UNWIND_IS_NOT_FUNCTION_START = 0x80000000,
|
||||
UNWIND_HAS_LSDA = 0x40000000,
|
||||
UNWIND_PERSONALITY_MASK = 0x30000000,
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// x86
|
||||
//
|
||||
// 1-bit: start
|
||||
// 1-bit: has lsda
|
||||
// 2-bit: personality index
|
||||
//
|
||||
// 4-bits: 0=old, 1=ebp based, 2=stack-imm, 3=stack-ind, 4=DWARF
|
||||
// ebp based:
|
||||
// 15-bits (5*3-bits per reg) register permutation
|
||||
// 8-bits for stack offset
|
||||
// frameless:
|
||||
// 8-bits stack size
|
||||
// 3-bits stack adjust
|
||||
// 3-bits register count
|
||||
// 10-bits register permutation
|
||||
//
|
||||
enum {
|
||||
UNWIND_X86_MODE_MASK = 0x0F000000,
|
||||
UNWIND_X86_MODE_EBP_FRAME = 0x01000000,
|
||||
UNWIND_X86_MODE_STACK_IMMD = 0x02000000,
|
||||
UNWIND_X86_MODE_STACK_IND = 0x03000000,
|
||||
UNWIND_X86_MODE_DWARF = 0x04000000,
|
||||
|
||||
UNWIND_X86_EBP_FRAME_REGISTERS = 0x00007FFF,
|
||||
UNWIND_X86_EBP_FRAME_OFFSET = 0x00FF0000,
|
||||
|
||||
UNWIND_X86_FRAMELESS_STACK_SIZE = 0x00FF0000,
|
||||
UNWIND_X86_FRAMELESS_STACK_ADJUST = 0x0000E000,
|
||||
UNWIND_X86_FRAMELESS_STACK_REG_COUNT = 0x00001C00,
|
||||
UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION = 0x000003FF,
|
||||
|
||||
UNWIND_X86_DWARF_SECTION_OFFSET = 0x00FFFFFF,
|
||||
};
|
||||
|
||||
enum {
|
||||
UNWIND_X86_REG_NONE = 0,
|
||||
UNWIND_X86_REG_EBX = 1,
|
||||
UNWIND_X86_REG_ECX = 2,
|
||||
UNWIND_X86_REG_EDX = 3,
|
||||
UNWIND_X86_REG_EDI = 4,
|
||||
UNWIND_X86_REG_ESI = 5,
|
||||
UNWIND_X86_REG_EBP = 6,
|
||||
};
|
||||
|
||||
//
|
||||
// For x86 there are four modes for the compact unwind encoding:
|
||||
// UNWIND_X86_MODE_EBP_FRAME:
|
||||
// EBP based frame where EBP is push on stack immediately after return address,
|
||||
// then ESP is moved to EBP. Thus, to unwind ESP is restored with the current
|
||||
// EPB value, then EBP is restored by popping off the stack, and the return
|
||||
// is done by popping the stack once more into the pc.
|
||||
// All non-volatile registers that need to be restored must have been saved
|
||||
// in a small range in the stack that starts EBP-4 to EBP-1020. The offset/4
|
||||
// is encoded in the UNWIND_X86_EBP_FRAME_OFFSET bits. The registers saved
|
||||
// are encoded in the UNWIND_X86_EBP_FRAME_REGISTERS bits as five 3-bit entries.
|
||||
// Each entry contains which register to restore.
|
||||
// UNWIND_X86_MODE_STACK_IMMD:
|
||||
// A "frameless" (EBP not used as frame pointer) function with a small
|
||||
// constant stack size. To return, a constant (encoded in the compact
|
||||
// unwind encoding) is added to the ESP. Then the return is done by
|
||||
// popping the stack into the pc.
|
||||
// All non-volatile registers that need to be restored must have been saved
|
||||
// on the stack immediately after the return address. The stack_size/4 is
|
||||
// encoded in the UNWIND_X86_FRAMELESS_STACK_SIZE (max stack size is 1024).
|
||||
// The number of registers saved is encoded in UNWIND_X86_FRAMELESS_STACK_REG_COUNT.
|
||||
// UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION constains which registers were
|
||||
// saved and their order.
|
||||
// UNWIND_X86_MODE_STACK_IND:
|
||||
// A "frameless" (EBP not used as frame pointer) function large constant
|
||||
// stack size. This case is like the previous, except the stack size is too
|
||||
// large to encode in the compact unwind encoding. Instead it requires that
|
||||
// the function contains "subl $nnnnnnnn,ESP" in its prolog. The compact
|
||||
// encoding contains the offset to the nnnnnnnn value in the function in
|
||||
// UNWIND_X86_FRAMELESS_STACK_SIZE.
|
||||
// UNWIND_X86_MODE_DWARF:
|
||||
// No compact unwind encoding is available. Instead the low 24-bits of the
|
||||
// compact encoding is the offset of the DWARF FDE in the __eh_frame section.
|
||||
// This mode is never used in object files. It is only generated by the
|
||||
// linker in final linked images which have only DWARF unwind info for a
|
||||
// function.
|
||||
//
|
||||
// The permutation encoding is a Lehmer code sequence encoded into a
|
||||
// single variable-base number so we can encode the ordering of up to
|
||||
// six registers in a 10-bit space.
|
||||
//
|
||||
// The following is the algorithm used to create the permutation encoding used
|
||||
// with frameless stacks. It is passed the number of registers to be saved and
|
||||
// an array of the register numbers saved.
|
||||
//
|
||||
//uint32_t permute_encode(uint32_t registerCount, const uint32_t registers[6])
|
||||
//{
|
||||
// uint32_t renumregs[6];
|
||||
// for (int i=6-registerCount; i < 6; ++i) {
|
||||
// int countless = 0;
|
||||
// for (int j=6-registerCount; j < i; ++j) {
|
||||
// if ( registers[j] < registers[i] )
|
||||
// ++countless;
|
||||
// }
|
||||
// renumregs[i] = registers[i] - countless -1;
|
||||
// }
|
||||
// uint32_t permutationEncoding = 0;
|
||||
// switch ( registerCount ) {
|
||||
// case 6:
|
||||
// permutationEncoding |= (120*renumregs[0] + 24*renumregs[1]
|
||||
// + 6*renumregs[2] + 2*renumregs[3]
|
||||
// + renumregs[4]);
|
||||
// break;
|
||||
// case 5:
|
||||
// permutationEncoding |= (120*renumregs[1] + 24*renumregs[2]
|
||||
// + 6*renumregs[3] + 2*renumregs[4]
|
||||
// + renumregs[5]);
|
||||
// break;
|
||||
// case 4:
|
||||
// permutationEncoding |= (60*renumregs[2] + 12*renumregs[3]
|
||||
// + 3*renumregs[4] + renumregs[5]);
|
||||
// break;
|
||||
// case 3:
|
||||
// permutationEncoding |= (20*renumregs[3] + 4*renumregs[4]
|
||||
// + renumregs[5]);
|
||||
// break;
|
||||
// case 2:
|
||||
// permutationEncoding |= (5*renumregs[4] + renumregs[5]);
|
||||
// break;
|
||||
// case 1:
|
||||
// permutationEncoding |= (renumregs[5]);
|
||||
// break;
|
||||
// }
|
||||
// return permutationEncoding;
|
||||
//}
|
||||
//
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// x86_64
|
||||
//
|
||||
// 1-bit: start
|
||||
// 1-bit: has lsda
|
||||
// 2-bit: personality index
|
||||
//
|
||||
// 4-bits: 0=old, 1=rbp based, 2=stack-imm, 3=stack-ind, 4=DWARF
|
||||
// rbp based:
|
||||
// 15-bits (5*3-bits per reg) register permutation
|
||||
// 8-bits for stack offset
|
||||
// frameless:
|
||||
// 8-bits stack size
|
||||
// 3-bits stack adjust
|
||||
// 3-bits register count
|
||||
// 10-bits register permutation
|
||||
//
|
||||
enum {
|
||||
UNWIND_X86_64_MODE_MASK = 0x0F000000,
|
||||
UNWIND_X86_64_MODE_RBP_FRAME = 0x01000000,
|
||||
UNWIND_X86_64_MODE_STACK_IMMD = 0x02000000,
|
||||
UNWIND_X86_64_MODE_STACK_IND = 0x03000000,
|
||||
UNWIND_X86_64_MODE_DWARF = 0x04000000,
|
||||
|
||||
UNWIND_X86_64_RBP_FRAME_REGISTERS = 0x00007FFF,
|
||||
UNWIND_X86_64_RBP_FRAME_OFFSET = 0x00FF0000,
|
||||
|
||||
UNWIND_X86_64_FRAMELESS_STACK_SIZE = 0x00FF0000,
|
||||
UNWIND_X86_64_FRAMELESS_STACK_ADJUST = 0x0000E000,
|
||||
UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT = 0x00001C00,
|
||||
UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION = 0x000003FF,
|
||||
|
||||
UNWIND_X86_64_DWARF_SECTION_OFFSET = 0x00FFFFFF,
|
||||
};
|
||||
|
||||
enum {
|
||||
UNWIND_X86_64_REG_NONE = 0,
|
||||
UNWIND_X86_64_REG_RBX = 1,
|
||||
UNWIND_X86_64_REG_R12 = 2,
|
||||
UNWIND_X86_64_REG_R13 = 3,
|
||||
UNWIND_X86_64_REG_R14 = 4,
|
||||
UNWIND_X86_64_REG_R15 = 5,
|
||||
UNWIND_X86_64_REG_RBP = 6,
|
||||
};
|
||||
//
|
||||
// For x86_64 there are four modes for the compact unwind encoding:
|
||||
// UNWIND_X86_64_MODE_RBP_FRAME:
|
||||
// RBP based frame where RBP is push on stack immediately after return address,
|
||||
// then RSP is moved to RBP. Thus, to unwind RSP is restored with the current
|
||||
// EPB value, then RBP is restored by popping off the stack, and the return
|
||||
// is done by popping the stack once more into the pc.
|
||||
// All non-volatile registers that need to be restored must have been saved
|
||||
// in a small range in the stack that starts RBP-8 to RBP-2040. The offset/8
|
||||
// is encoded in the UNWIND_X86_64_RBP_FRAME_OFFSET bits. The registers saved
|
||||
// are encoded in the UNWIND_X86_64_RBP_FRAME_REGISTERS bits as five 3-bit entries.
|
||||
// Each entry contains which register to restore.
|
||||
// UNWIND_X86_64_MODE_STACK_IMMD:
|
||||
// A "frameless" (RBP not used as frame pointer) function with a small
|
||||
// constant stack size. To return, a constant (encoded in the compact
|
||||
// unwind encoding) is added to the RSP. Then the return is done by
|
||||
// popping the stack into the pc.
|
||||
// All non-volatile registers that need to be restored must have been saved
|
||||
// on the stack immediately after the return address. The stack_size/8 is
|
||||
// encoded in the UNWIND_X86_64_FRAMELESS_STACK_SIZE (max stack size is 2048).
|
||||
// The number of registers saved is encoded in UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT.
|
||||
// UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION constains which registers were
|
||||
// saved and their order.
|
||||
// UNWIND_X86_64_MODE_STACK_IND:
|
||||
// A "frameless" (RBP not used as frame pointer) function large constant
|
||||
// stack size. This case is like the previous, except the stack size is too
|
||||
// large to encode in the compact unwind encoding. Instead it requires that
|
||||
// the function contains "subq $nnnnnnnn,RSP" in its prolog. The compact
|
||||
// encoding contains the offset to the nnnnnnnn value in the function in
|
||||
// UNWIND_X86_64_FRAMELESS_STACK_SIZE.
|
||||
// UNWIND_X86_64_MODE_DWARF:
|
||||
// No compact unwind encoding is available. Instead the low 24-bits of the
|
||||
// compact encoding is the offset of the DWARF FDE in the __eh_frame section.
|
||||
// This mode is never used in object files. It is only generated by the
|
||||
// linker in final linked images which have only DWARF unwind info for a
|
||||
// function.
|
||||
//
|
||||
|
||||
|
||||
// ARM64
|
||||
//
|
||||
// 1-bit: start
|
||||
// 1-bit: has lsda
|
||||
// 2-bit: personality index
|
||||
//
|
||||
// 4-bits: 4=frame-based, 3=DWARF, 2=frameless
|
||||
// frameless:
|
||||
// 12-bits of stack size
|
||||
// frame-based:
|
||||
// 4-bits D reg pairs saved
|
||||
// 5-bits X reg pairs saved
|
||||
// DWARF:
|
||||
// 24-bits offset of DWARF FDE in __eh_frame section
|
||||
//
|
||||
enum {
|
||||
UNWIND_ARM64_MODE_MASK = 0x0F000000,
|
||||
UNWIND_ARM64_MODE_FRAMELESS = 0x02000000,
|
||||
UNWIND_ARM64_MODE_DWARF = 0x03000000,
|
||||
UNWIND_ARM64_MODE_FRAME = 0x04000000,
|
||||
|
||||
UNWIND_ARM64_FRAME_X19_X20_PAIR = 0x00000001,
|
||||
UNWIND_ARM64_FRAME_X21_X22_PAIR = 0x00000002,
|
||||
UNWIND_ARM64_FRAME_X23_X24_PAIR = 0x00000004,
|
||||
UNWIND_ARM64_FRAME_X25_X26_PAIR = 0x00000008,
|
||||
UNWIND_ARM64_FRAME_X27_X28_PAIR = 0x00000010,
|
||||
UNWIND_ARM64_FRAME_D8_D9_PAIR = 0x00000100,
|
||||
UNWIND_ARM64_FRAME_D10_D11_PAIR = 0x00000200,
|
||||
UNWIND_ARM64_FRAME_D12_D13_PAIR = 0x00000400,
|
||||
UNWIND_ARM64_FRAME_D14_D15_PAIR = 0x00000800,
|
||||
|
||||
UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK = 0x00FFF000,
|
||||
UNWIND_ARM64_DWARF_SECTION_OFFSET = 0x00FFFFFF,
|
||||
};
|
||||
// For arm64 there are three modes for the compact unwind encoding:
|
||||
// UNWIND_ARM64_MODE_FRAME:
|
||||
// This is a standard arm64 prolog where FP/LR are immediately pushed on the
|
||||
// stack, then SP is copied to FP. If there are any non-volatile registers
|
||||
// saved, then are copied into the stack frame in pairs in a contiguous
|
||||
// range right below the saved FP/LR pair. Any subset of the five X pairs
|
||||
// and four D pairs can be saved, but the memory layout must be in register
|
||||
// number order.
|
||||
// UNWIND_ARM64_MODE_FRAMELESS:
|
||||
// A "frameless" leaf function, where FP/LR are not saved. The return address
|
||||
// remains in LR throughout the function. If any non-volatile registers
|
||||
// are saved, they must be pushed onto the stack before any stack space is
|
||||
// allocated for local variables. The stack sized (including any saved
|
||||
// non-volatile registers) divided by 16 is encoded in the bits
|
||||
// UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK.
|
||||
// UNWIND_ARM64_MODE_DWARF:
|
||||
// No compact unwind encoding is available. Instead the low 24-bits of the
|
||||
// compact encoding is the offset of the DWARF FDE in the __eh_frame section.
|
||||
// This mode is never used in object files. It is only generated by the
|
||||
// linker in final linked images which have only DWARF unwind info for a
|
||||
// function.
|
||||
//
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Relocatable Object Files: __LD,__compact_unwind
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
// A compiler can generated compact unwind information for a function by adding
|
||||
// a "row" to the __LD,__compact_unwind section. This section has the
|
||||
// S_ATTR_DEBUG bit set, so the section will be ignored by older linkers.
|
||||
// It is removed by the new linker, so never ends up in final executables.
|
||||
// This section is a table, initially with one row per function (that needs
|
||||
// unwind info). The table columns and some conceptual entries are:
|
||||
//
|
||||
// range-start pointer to start of function/range
|
||||
// range-length
|
||||
// compact-unwind-encoding 32-bit encoding
|
||||
// personality-function or zero if no personality function
|
||||
// lsda or zero if no LSDA data
|
||||
//
|
||||
// The length and encoding fields are 32-bits. The other are all pointer sized.
|
||||
//
|
||||
// In x86_64 assembly, these entry would look like:
|
||||
//
|
||||
// .section __LD,__compact_unwind,regular,debug
|
||||
//
|
||||
// #compact unwind for _foo
|
||||
// .quad _foo
|
||||
// .set L1,LfooEnd-_foo
|
||||
// .long L1
|
||||
// .long 0x01010001
|
||||
// .quad 0
|
||||
// .quad 0
|
||||
//
|
||||
// #compact unwind for _bar
|
||||
// .quad _bar
|
||||
// .set L2,LbarEnd-_bar
|
||||
// .long L2
|
||||
// .long 0x01020011
|
||||
// .quad __gxx_personality
|
||||
// .quad except_tab1
|
||||
//
|
||||
//
|
||||
// Notes: There is no need for any labels in the the __compact_unwind section.
|
||||
// The use of the .set directive is to force the evaluation of the
|
||||
// range-length at assembly time, instead of generating relocations.
|
||||
//
|
||||
// To support future compiler optimizations where which non-volatile registers
|
||||
// are saved changes within a function (e.g. delay saving non-volatiles until
|
||||
// necessary), there can by multiple lines in the __compact_unwind table for one
|
||||
// function, each with a different (non-overlapping) range and each with
|
||||
// different compact unwind encodings that correspond to the non-volatiles
|
||||
// saved at that range of the function.
|
||||
//
|
||||
// If a particular function is so wacky that there is no compact unwind way
|
||||
// to encode it, then the compiler can emit traditional DWARF unwind info.
|
||||
// The runtime will use which ever is available.
|
||||
//
|
||||
// Runtime support for compact unwind encodings are only available on 10.6
|
||||
// and later. So, the compiler should not generate it when targeting pre-10.6.
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Final Linked Images: __TEXT,__unwind_info
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
// The __TEXT,__unwind_info section is laid out for an efficient two level lookup.
|
||||
// The header of the section contains a coarse index that maps function address
|
||||
// to the page (4096 byte block) containing the unwind info for that function.
|
||||
//
|
||||
|
||||
#define UNWIND_SECTION_VERSION 1
|
||||
struct unwind_info_section_header
|
||||
{
|
||||
uint32_t version; // UNWIND_SECTION_VERSION
|
||||
uint32_t commonEncodingsArraySectionOffset;
|
||||
uint32_t commonEncodingsArrayCount;
|
||||
uint32_t personalityArraySectionOffset;
|
||||
uint32_t personalityArrayCount;
|
||||
uint32_t indexSectionOffset;
|
||||
uint32_t indexCount;
|
||||
// compact_unwind_encoding_t[]
|
||||
// uint32_t personalities[]
|
||||
// unwind_info_section_header_index_entry[]
|
||||
// unwind_info_section_header_lsda_index_entry[]
|
||||
};
|
||||
|
||||
struct unwind_info_section_header_index_entry
|
||||
{
|
||||
uint32_t functionOffset;
|
||||
uint32_t secondLevelPagesSectionOffset; // section offset to start of regular or compress page
|
||||
uint32_t lsdaIndexArraySectionOffset; // section offset to start of lsda_index array for this range
|
||||
};
|
||||
|
||||
struct unwind_info_section_header_lsda_index_entry
|
||||
{
|
||||
uint32_t functionOffset;
|
||||
uint32_t lsdaOffset;
|
||||
};
|
||||
|
||||
//
|
||||
// There are two kinds of second level index pages: regular and compressed.
|
||||
// A compressed page can hold up to 1021 entries, but it cannot be used
|
||||
// if too many different encoding types are used. The regular page holds
|
||||
// 511 entries.
|
||||
//
|
||||
|
||||
struct unwind_info_regular_second_level_entry
|
||||
{
|
||||
uint32_t functionOffset;
|
||||
compact_unwind_encoding_t encoding;
|
||||
};
|
||||
|
||||
#define UNWIND_SECOND_LEVEL_REGULAR 2
|
||||
struct unwind_info_regular_second_level_page_header
|
||||
{
|
||||
uint32_t kind; // UNWIND_SECOND_LEVEL_REGULAR
|
||||
uint16_t entryPageOffset;
|
||||
uint16_t entryCount;
|
||||
// entry array
|
||||
};
|
||||
|
||||
#define UNWIND_SECOND_LEVEL_COMPRESSED 3
|
||||
struct unwind_info_compressed_second_level_page_header
|
||||
{
|
||||
uint32_t kind; // UNWIND_SECOND_LEVEL_COMPRESSED
|
||||
uint16_t entryPageOffset;
|
||||
uint16_t entryCount;
|
||||
uint16_t encodingsPageOffset;
|
||||
uint16_t encodingsCount;
|
||||
// 32-bit entry array
|
||||
// encodings array
|
||||
};
|
||||
|
||||
#define UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entry) (entry & 0x00FFFFFF)
|
||||
#define UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(entry) ((entry >> 24) & 0xFF)
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
BIN
compiler-rt-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
compiler-rt-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
15
default-to-i586.patch
Normal file
15
default-to-i586.patch
Normal file
@ -0,0 +1,15 @@
|
||||
Index: cfe-6.0.0rc1.src/lib/Driver/ToolChains/Arch/X86.cpp
|
||||
===================================================================
|
||||
--- cfe-6.0.0rc1.src.orig/lib/Driver/ToolChains/Arch/X86.cpp
|
||||
+++ cfe-6.0.0rc1.src/lib/Driver/ToolChains/Arch/X86.cpp
|
||||
@@ -102,8 +102,8 @@ const char *x86::getX86TargetCPU(const A
|
||||
case llvm::Triple::FreeBSD:
|
||||
return "i686";
|
||||
default:
|
||||
- // Fallback to p4.
|
||||
- return "pentium4";
|
||||
+ // Fallback to i586.
|
||||
+ return "i586";
|
||||
}
|
||||
}
|
||||
|
BIN
libcxx-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
libcxx-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
libcxxabi-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
libcxxabi-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
58
link-clang-shared.patch
Normal file
58
link-clang-shared.patch
Normal file
@ -0,0 +1,58 @@
|
||||
diff --git a/clang/tools/c-index-test/CMakeLists.txt b/clang/tools/c-index-test/CMakeLists.txt
|
||||
index ceef4b08637..606149ad74f 100644
|
||||
--- a/clang/tools/c-index-test/CMakeLists.txt
|
||||
+++ b/clang/tools/c-index-test/CMakeLists.txt
|
||||
@@ -18,6 +18,9 @@ if (LLVM_BUILD_STATIC)
|
||||
target_link_libraries(c-index-test
|
||||
PRIVATE
|
||||
libclang_static
|
||||
+ )
|
||||
+ clang_target_link_libraries(c-index-test
|
||||
+ PRIVATE
|
||||
clangCodeGen
|
||||
clangIndex
|
||||
)
|
||||
@@ -25,6 +28,9 @@ else()
|
||||
target_link_libraries(c-index-test
|
||||
PRIVATE
|
||||
libclang
|
||||
+ )
|
||||
+ clang_target_link_libraries(c-index-test
|
||||
+ PRIVATE
|
||||
clangAST
|
||||
clangBasic
|
||||
clangCodeGen
|
||||
diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt
|
||||
index 613ead1a36b..f86be77b8e7 100644
|
||||
--- a/clang/tools/libclang/CMakeLists.txt
|
||||
+++ b/clang/tools/libclang/CMakeLists.txt
|
||||
@@ -33,7 +33,7 @@ set(SOURCES
|
||||
../../include/clang-c/Index.h
|
||||
)
|
||||
|
||||
-set(LIBS
|
||||
+set(CLANG_LIB_DEPS
|
||||
clangAST
|
||||
clangBasic
|
||||
clangDriver
|
||||
@@ -46,7 +46,7 @@ set(LIBS
|
||||
)
|
||||
|
||||
if (CLANG_ENABLE_ARCMT)
|
||||
- list(APPEND LIBS clangARCMigrate)
|
||||
+ list(APPEND CLANG_LIB_DEPS clangARCMigrate)
|
||||
endif ()
|
||||
|
||||
if (HAVE_LIBDL)
|
||||
@@ -108,6 +108,11 @@ add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} INSTALL_WITH_TOOLCH
|
||||
Support
|
||||
)
|
||||
|
||||
+clang_target_link_libraries(libclang
|
||||
+ PRIVATE
|
||||
+ ${CLANG_LIB_DEPS}
|
||||
+ )
|
||||
+
|
||||
if(ENABLE_STATIC)
|
||||
foreach(name libclang obj.libclang libclang_static)
|
||||
if (TARGET ${name})
|
48
link-clang-tools-extra-shared.patch
Normal file
48
link-clang-tools-extra-shared.patch
Normal file
@ -0,0 +1,48 @@
|
||||
diff --git a/clang-tools-extra/clang-include-fixer/plugin/CMakeLists.txt b/clang-tools-extra/clang-include-fixer/plugin/CMakeLists.txt
|
||||
index 6d0328ed831..d531e44743a 100644
|
||||
--- a/clang-tools-extra/clang-include-fixer/plugin/CMakeLists.txt
|
||||
+++ b/clang-tools-extra/clang-include-fixer/plugin/CMakeLists.txt
|
||||
@@ -2,15 +2,18 @@ add_clang_library(clangIncludeFixerPlugin
|
||||
IncludeFixerPlugin.cpp
|
||||
|
||||
LINK_LIBS
|
||||
+ clangIncludeFixer
|
||||
+ ${LLVM_PTHREAD_LIB}
|
||||
+
|
||||
+ DEPENDS
|
||||
+ omp_gen
|
||||
+ )
|
||||
+clang_target_link_libraries(clangIncludeFixerPlugin
|
||||
+ PRIVATE
|
||||
clangAST
|
||||
clangBasic
|
||||
clangFrontend
|
||||
- clangIncludeFixer
|
||||
clangParse
|
||||
clangSema
|
||||
clangTooling
|
||||
- ${LLVM_PTHREAD_LIB}
|
||||
-
|
||||
- DEPENDS
|
||||
- omp_gen
|
||||
)
|
||||
diff --git a/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt b/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
|
||||
index 8f708cacfdf..b08e9cee954 100644
|
||||
--- a/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
|
||||
+++ b/clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
|
||||
@@ -27,10 +27,13 @@ add_clang_library(clangDaemonTweaks OBJECT
|
||||
SwapIfBranches.cpp
|
||||
|
||||
LINK_LIBS
|
||||
- clangAST
|
||||
- clangBasic
|
||||
clangDaemon
|
||||
clangdSupport
|
||||
+ )
|
||||
+
|
||||
+clang_target_link_libraries(clangDaemonTweaks INTERFACE
|
||||
+ clangAST
|
||||
+ clangBasic
|
||||
clangFormat
|
||||
clangLex
|
||||
clangToolingCore
|
BIN
lld-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
lld-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
13
lld-default-sha1.patch
Normal file
13
lld-default-sha1.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: lld-10.0.0.src/ELF/Driver.cpp
|
||||
===================================================================
|
||||
--- lld-10.0.0.src.orig/ELF/Driver.cpp
|
||||
+++ lld-10.0.0.src/ELF/Driver.cpp
|
||||
@@ -693,7 +693,7 @@ getBuildId(opt::InputArgList &args) {
|
||||
return {BuildIdKind::None, {}};
|
||||
|
||||
if (arg->getOption().getID() == OPT_build_id)
|
||||
- return {BuildIdKind::Fast, {}};
|
||||
+ return {BuildIdKind::Sha1, {}};
|
||||
|
||||
StringRef s = arg->getValue();
|
||||
if (s == "fast")
|
BIN
lldb-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
lldb-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
13
lldb-cmake.patch
Normal file
13
lldb-cmake.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: lldb-10.0.0rc1.src/source/Host/CMakeLists.txt
|
||||
===================================================================
|
||||
--- lldb-10.0.0rc1.src.orig/source/Host/CMakeLists.txt
|
||||
+++ lldb-10.0.0rc1.src/source/Host/CMakeLists.txt
|
||||
@@ -143,6 +143,8 @@ endif()
|
||||
set(EXTRA_LIBS)
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
||||
list(APPEND EXTRA_LIBS kvm)
|
||||
+elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
+ list(APPEND EXTRA_LIBS dl pthread)
|
||||
endif()
|
||||
if (LLDB_ENABLE_LIBXML2)
|
||||
list(APPEND EXTRA_LIBS LibXml2::LibXml2)
|
68
lldb-swig-4.1.0-build-fix.patch
Normal file
68
lldb-swig-4.1.0-build-fix.patch
Normal file
@ -0,0 +1,68 @@
|
||||
From 81fc5f7909a4ef5a8d4b5da2a10f77f7cb01ba63 Mon Sep 17 00:00:00 2001
|
||||
From: serge-sans-paille <sguelton@redhat.com>
|
||||
Date: Thu, 29 Sep 2022 21:48:38 +0200
|
||||
Subject: [PATCH] [lldb] Get rid of __STDC_LIMIT_MACROS and
|
||||
__STDC_CONSTANT_MACROS
|
||||
|
||||
C++11 made the use of these macro obsolete, see https://sourceware.org/bugzilla/show_bug.cgi?id=15366
|
||||
|
||||
As a side effect this prevents https://github.com/swig/swig/issues/2193.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D134877
|
||||
---
|
||||
lldb/bindings/CMakeLists.txt | 2 --
|
||||
lldb/bindings/interfaces.swig | 3 ---
|
||||
2 files changed, 5 deletions(-)
|
||||
|
||||
diff --git a/lldb/bindings/CMakeLists.txt b/lldb/bindings/CMakeLists.txt
|
||||
index c8aa0bcf96817..9eed2f1e62999 100644
|
||||
--- a/lldb/bindings/CMakeLists.txt
|
||||
+++ b/lldb/bindings/CMakeLists.txt
|
||||
@@ -26,8 +26,6 @@ set(SWIG_COMMON_FLAGS
|
||||
-features autodoc
|
||||
-I${LLDB_SOURCE_DIR}/include
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}
|
||||
- -D__STDC_LIMIT_MACROS
|
||||
- -D__STDC_CONSTANT_MACROS
|
||||
${DARWIN_EXTRAS}
|
||||
)
|
||||
|
||||
diff --git a/lldb/bindings/interfaces.swig b/lldb/bindings/interfaces.swig
|
||||
index fb75513a0df1b..d984711bbd8a2 100644
|
||||
--- a/lldb/bindings/interfaces.swig
|
||||
+++ b/lldb/bindings/interfaces.swig
|
||||
@@ -1,8 +1,5 @@
|
||||
/* Various liblldb typedefs that SWIG needs to know about. */
|
||||
#define __extension__ /* Undefine GCC keyword to make Swig happy when processing glibc's stdint.h. */
|
||||
-/* The ISO C99 standard specifies that in C++ implementations limit macros such
|
||||
- as INT32_MAX should only be defined if __STDC_LIMIT_MACROS is. */
|
||||
-#define __STDC_LIMIT_MACROS
|
||||
%include "stdint.i"
|
||||
|
||||
%include "lldb/lldb-defines.h"
|
||||
From f0a25fe0b746f56295d5c02116ba28d2f965c175 Mon Sep 17 00:00:00 2001
|
||||
From: Jitka Plesnikova <jplesnik@redhat.com>
|
||||
Date: Wed, 21 Sep 2022 11:42:46 +0200
|
||||
Subject: [PATCH] [lldb] Fix 'error: non-const lvalue...' caused by SWIG 4.1.0
|
||||
|
||||
Fix the failure caused by change in SwigValueWraper for C++11 and later
|
||||
for improved move semantics in SWIG commit.
|
||||
|
||||
https://github.com/swig/swig/commit/d1055f4b3d51cb8060893f8036846ac743302dab
|
||||
---
|
||||
lldb/bindings/python/python-typemaps.swig | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lldb/bindings/python/python-typemaps.swig b/lldb/bindings/python/python-typemaps.swig
|
||||
index 203be803d2ebd..11f68d59ae7be 100644
|
||||
--- a/lldb/bindings/python/python-typemaps.swig
|
||||
+++ b/lldb/bindings/python/python-typemaps.swig
|
||||
@@ -435,7 +435,7 @@ template <> bool SetNumberFromPyObject<double>(double &number, PyObject *obj) {
|
||||
|
||||
%typemap(out) lldb::FileSP {
|
||||
$result = nullptr;
|
||||
- lldb::FileSP &sp = $1;
|
||||
+ const lldb::FileSP &sp = $1;
|
||||
if (sp) {
|
||||
PythonFile pyfile = unwrapOrSetPythonException(PythonFile::FromFile(*sp));
|
||||
if (!pyfile.IsValid())
|
BIN
llvm-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
llvm-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
22
llvm-better-detect-64bit-atomics-support.patch
Normal file
22
llvm-better-detect-64bit-atomics-support.patch
Normal file
@ -0,0 +1,22 @@
|
||||
Better detect 64bit atomics support.
|
||||
|
||||
It appears that on i586 std::atomic<uint64_t>::load is compiled into
|
||||
instruction, but std::atomic<double>::load uses __atomic_load_8. This must
|
||||
be detected so the build system links it to libatomic.
|
||||
Index: llvm-12.0.0.src/cmake/modules/CheckAtomic.cmake
|
||||
===================================================================
|
||||
--- llvm-12.0.0.src.orig/cmake/modules/CheckAtomic.cmake
|
||||
+++ llvm-12.0.0.src/cmake/modules/CheckAtomic.cmake
|
||||
@@ -30,9 +30,12 @@ function(check_working_cxx_atomics64 var
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
std::atomic<uint64_t> x (0);
|
||||
+std::atomic<double> y (0);
|
||||
int main() {
|
||||
uint64_t i = x.load(std::memory_order_relaxed);
|
||||
+ double j = y.load(std::memory_order_relaxed);
|
||||
(void)i;
|
||||
+ (void)j;
|
||||
return 0;
|
||||
}
|
||||
" ${varname})
|
134
llvm-do-not-install-static-libraries.patch
Normal file
134
llvm-do-not-install-static-libraries.patch
Normal file
@ -0,0 +1,134 @@
|
||||
This has similar effect as simply deleting the static libraries which we don't
|
||||
want after installation. By not copying them in the first place we reduce the
|
||||
disk usage during installation.
|
||||
|
||||
Index: clang-14.0.6.src/cmake/modules/AddClang.cmake
|
||||
===================================================================
|
||||
--- a/clang-14.0.6.src/cmake/modules/AddClang.cmake
|
||||
+++ b/clang-14.0.6.src/cmake/modules/AddClang.cmake
|
||||
@@ -106,12 +106,15 @@ macro(add_clang_library name)
|
||||
|
||||
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
|
||||
get_target_export_arg(${name} Clang export_to_clangtargets UMBRELLA clang-libraries)
|
||||
- install(TARGETS ${lib}
|
||||
- COMPONENT ${lib}
|
||||
- ${export_to_clangtargets}
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
+ if (ARG_SHARED OR ARG_MODULE)
|
||||
+ install(TARGETS ${lib}
|
||||
+ COMPONENT ${lib}
|
||||
+ ${export_to_clangtargets}
|
||||
+ LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
+ ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
+ set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
|
||||
+ endif()
|
||||
|
||||
if (NOT LLVM_ENABLE_IDE)
|
||||
add_llvm_install_targets(install-${lib}
|
||||
@@ -121,7 +124,6 @@ macro(add_clang_library name)
|
||||
|
||||
set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
|
||||
endif()
|
||||
- set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
|
||||
else()
|
||||
# Add empty "phony" target
|
||||
add_custom_target(${lib})
|
||||
Index: cmake/modules/AddLLVM.cmake
|
||||
===================================================================
|
||||
--- a/cmake/modules/AddLLVM.cmake
|
||||
+++ b/cmake/modules/AddLLVM.cmake
|
||||
@@ -730,11 +730,14 @@ macro(add_llvm_library name)
|
||||
endif()
|
||||
|
||||
get_target_export_arg(${name} LLVM export_to_llvmexports ${umbrella})
|
||||
- install(TARGETS ${name}
|
||||
- ${export_to_llvmexports}
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
|
||||
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${name})
|
||||
+ if(ARG_SHARED OR ARG_MODULE OR NOT LLVM_BUILD_LLVM_DYLIB)
|
||||
+ install(TARGETS ${name}
|
||||
+ ${export_to_llvmexports}
|
||||
+ LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
|
||||
+ ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
|
||||
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${name})
|
||||
+ set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
|
||||
+ endif()
|
||||
|
||||
if (NOT LLVM_ENABLE_IDE)
|
||||
add_llvm_install_targets(install-${name}
|
||||
@@ -742,7 +745,6 @@ macro(add_llvm_library name)
|
||||
COMPONENT ${name})
|
||||
endif()
|
||||
endif()
|
||||
- set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
|
||||
endif()
|
||||
if (ARG_MODULE)
|
||||
set_target_properties(${name} PROPERTIES FOLDER "Loadable modules")
|
||||
Index: lld-14.0.6.src/cmake/modules/AddLLD.cmake
|
||||
===================================================================
|
||||
--- a/lld-14.0.6.src/cmake/modules/AddLLD.cmake
|
||||
+++ b/lld-14.0.6.src/cmake/modules/AddLLD.cmake
|
||||
@@ -17,13 +17,6 @@ macro(add_lld_library name)
|
||||
|
||||
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
|
||||
get_target_export_arg(${name} LLD export_to_lldtargets)
|
||||
- install(TARGETS ${name}
|
||||
- COMPONENT ${name}
|
||||
- ${export_to_lldtargets}
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
-
|
||||
if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
add_llvm_install_targets(install-${name}
|
||||
DEPENDS ${name}
|
||||
Index: polly-14.0.6.src/cmake/polly_macros.cmake
|
||||
===================================================================
|
||||
--- a/polly-14.0.6.src/cmake/polly_macros.cmake
|
||||
+++ b/polly-14.0.6.src/cmake/polly_macros.cmake
|
||||
@@ -42,12 +42,14 @@ macro(add_polly_library name)
|
||||
llvm_config(${name} ${LLVM_LINK_COMPONENTS})
|
||||
endif( LLVM_LINK_COMPONENTS )
|
||||
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LLVMPolly")
|
||||
- install(TARGETS ${name}
|
||||
- EXPORT LLVMExports
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
|
||||
+ if (MODULE OR SHARED_LIBRARY OR NOT LLVM_BUILD_LLVM_DYLIB)
|
||||
+ install(TARGETS ${name}
|
||||
+ EXPORT LLVMExports
|
||||
+ LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
+ ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
|
||||
+ set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
|
||||
+ endif()
|
||||
endif()
|
||||
- set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
|
||||
endmacro(add_polly_library)
|
||||
|
||||
macro(add_polly_loadable_module name)
|
||||
Index: polly-14.0.6.src/lib/CMakeLists.txt
|
||||
===================================================================
|
||||
--- a/polly-14.0.6.src/lib/CMakeLists.txt
|
||||
+++ b/polly-14.0.6.src/lib/CMakeLists.txt
|
||||
@@ -74,7 +74,7 @@ set_target_properties(PollyCore PROPERTI
|
||||
# It depends on all library it needs, such that with
|
||||
# LLVM_POLLY_LINK_INTO_TOOLS=ON, its dependencies like PollyISL are linked as
|
||||
# well.
|
||||
-target_link_libraries(Polly PUBLIC
|
||||
+target_link_libraries(Polly PRIVATE
|
||||
${ISL_TARGET}
|
||||
)
|
||||
|
||||
@@ -143,7 +143,7 @@ else ()
|
||||
# hosts. This is not the case for bugpoint. Use LLVM_POLLY_LINK_INTO_TOOLS=ON
|
||||
# instead which will automatically resolve the additional dependencies by
|
||||
# Polly.
|
||||
- target_link_libraries(LLVMPolly PUBLIC ${ISL_TARGET})
|
||||
+ target_link_libraries(LLVMPolly PRIVATE ${ISL_TARGET})
|
||||
if (GPU_CODEGEN)
|
||||
target_link_libraries(LLVMPolly PUBLIC PollyPPCG)
|
||||
endif ()
|
BIN
llvm-docs-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
llvm-docs-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
14
llvm-fix-find-gcc5-install.patch
Normal file
14
llvm-fix-find-gcc5-install.patch
Normal file
@ -0,0 +1,14 @@
|
||||
Index: cfe-7.0.0rc1.src/lib/Driver/ToolChains/Gnu.cpp
|
||||
===================================================================
|
||||
--- cfe-7.0.0rc1.src.orig/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ cfe-7.0.0rc1.src/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -1596,7 +1596,8 @@ Generic_GCC::GCCVersion Generic_GCC::GCC
|
||||
MinorStr = MinorStr.slice(0, EndNumber);
|
||||
}
|
||||
}
|
||||
- if (MinorStr.getAsInteger(10, GoodVersion.Minor) || GoodVersion.Minor < 0)
|
||||
+ if (!MinorStr.str().empty() &&
|
||||
+ (MinorStr.getAsInteger(10, GoodVersion.Minor) || GoodVersion.Minor < 0))
|
||||
return BadVersion;
|
||||
GoodVersion.MinorStr = MinorStr.str();
|
||||
|
59
llvm-glibc-2-36.patch
Normal file
59
llvm-glibc-2-36.patch
Normal file
@ -0,0 +1,59 @@
|
||||
From 9cf13067cb5088626ba7ee1ec4c42ec59c7995a0 Mon Sep 17 00:00:00 2001
|
||||
From: Fangrui Song <i@maskray.me>
|
||||
Date: Mon, 11 Jul 2022 12:53:34 -0700
|
||||
Subject: [PATCH] [sanitizer] Remove #include <linux/fs.h> to resolve
|
||||
fsconfig_command/mount_attr conflict with glibc 2.36
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It is generally not a good idea to mix usage of glibc headers and Linux UAPI
|
||||
headers (https://sourceware.org/glibc/wiki/Synchronizing_Headers). In glibc
|
||||
since 7eae6a91e9b1670330c9f15730082c91c0b1d570 (milestone: 2.36), sys/mount.h
|
||||
defines `fsconfig_command` which conflicts with linux/mount.h:
|
||||
|
||||
.../usr/include/linux/mount.h:95:6: error: redeclaration of ‘enum fsconfig_command’
|
||||
|
||||
Remove #include <linux/fs.h> which pulls in linux/mount.h. Expand its 4 macros manually.
|
||||
Android sys/mount.h doesn't define BLKBSZGET and it still needs linux/fs.h.
|
||||
In the long term we should move Linux specific definitions to sanitizer_platform_limits_linux.cpp
|
||||
but this commit is easy to cherry pick into older compiler-rt releases.
|
||||
|
||||
Fix https://github.com/llvm/llvm-project/issues/56421
|
||||
|
||||
Reviewed By: #sanitizers, vitalybuka, zatrazz
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D129471
|
||||
---
|
||||
.../sanitizer_platform_limits_posix.cpp | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
|
||||
index 4bd425435d56d..3a94b260686f1 100644
|
||||
--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
|
||||
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
|
||||
@@ -73,7 +73,9 @@
|
||||
#include <sys/vt.h>
|
||||
#include <linux/cdrom.h>
|
||||
#include <linux/fd.h>
|
||||
+#if SANITIZER_ANDROID
|
||||
#include <linux/fs.h>
|
||||
+#endif
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/ioctl.h>
|
||||
@@ -876,10 +878,10 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
||||
unsigned IOCTL_EVIOCGPROP = IOCTL_NOT_PRESENT;
|
||||
unsigned IOCTL_EVIOCSKEYCODE_V2 = IOCTL_NOT_PRESENT;
|
||||
#endif
|
||||
- unsigned IOCTL_FS_IOC_GETFLAGS = FS_IOC_GETFLAGS;
|
||||
- unsigned IOCTL_FS_IOC_GETVERSION = FS_IOC_GETVERSION;
|
||||
- unsigned IOCTL_FS_IOC_SETFLAGS = FS_IOC_SETFLAGS;
|
||||
- unsigned IOCTL_FS_IOC_SETVERSION = FS_IOC_SETVERSION;
|
||||
+ unsigned IOCTL_FS_IOC_GETFLAGS = _IOR('f', 1, long);
|
||||
+ unsigned IOCTL_FS_IOC_GETVERSION = _IOR('v', 1, long);
|
||||
+ unsigned IOCTL_FS_IOC_SETFLAGS = _IOW('f', 2, long);
|
||||
+ unsigned IOCTL_FS_IOC_SETVERSION = _IOW('v', 2, long);
|
||||
unsigned IOCTL_GIO_CMAP = GIO_CMAP;
|
||||
unsigned IOCTL_GIO_FONT = GIO_FONT;
|
||||
unsigned IOCTL_GIO_UNIMAP = GIO_UNIMAP;
|
125
llvm-lifetime-for-rust.patch
Normal file
125
llvm-lifetime-for-rust.patch
Normal file
@ -0,0 +1,125 @@
|
||||
From 59b1d748157ddce5f701dfcaa4fae9a553fc9775 Mon Sep 17 00:00:00 2001
|
||||
From: Simonas Kazlauskas <git@kazlauskas.me>
|
||||
Date: Sat, 3 Jun 2017 18:55:08 +0300
|
||||
Subject: [PATCH] [rust] Add knowledge of __rust_{alloc,realloc,dealloc}
|
||||
|
||||
---
|
||||
.../llvm/Analysis/TargetLibraryInfo.def | 13 ++++++++++++
|
||||
llvm/lib/Analysis/MemoryBuiltins.cpp | 6 +++++-
|
||||
llvm/lib/Analysis/TargetLibraryInfo.cpp | 20 +++++++++++++++++++
|
||||
3 files changed, 38 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.def b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
|
||||
index 9c1abef33b288..70a79112ded85 100644
|
||||
--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.def
|
||||
+++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
|
||||
@@ -391,6 +391,19 @@ TLI_DEFINE_STRING_INTERNAL("__powf_finite")
|
||||
/// long double __powl_finite(long double x, long double y);
|
||||
TLI_DEFINE_ENUM_INTERNAL(powl_finite)
|
||||
TLI_DEFINE_STRING_INTERNAL("__powl_finite")
|
||||
+
|
||||
+TLI_DEFINE_ENUM_INTERNAL(rust_alloc)
|
||||
+TLI_DEFINE_STRING_INTERNAL("__rust_alloc")
|
||||
+
|
||||
+TLI_DEFINE_ENUM_INTERNAL(rust_alloc_zeroed)
|
||||
+TLI_DEFINE_STRING_INTERNAL("__rust_alloc_zeroed")
|
||||
+
|
||||
+TLI_DEFINE_ENUM_INTERNAL(rust_dealloc)
|
||||
+TLI_DEFINE_STRING_INTERNAL("__rust_dealloc")
|
||||
+
|
||||
+TLI_DEFINE_ENUM_INTERNAL(rust_realloc)
|
||||
+TLI_DEFINE_STRING_INTERNAL("__rust_realloc")
|
||||
+
|
||||
/// double __sincospi_stret(double x);
|
||||
TLI_DEFINE_ENUM_INTERNAL(sincospi_stret)
|
||||
TLI_DEFINE_STRING_INTERNAL("__sincospi_stret")
|
||||
diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp
|
||||
index 9e26f292b789a..4b08e6417ebf6 100644
|
||||
--- a/llvm/lib/Analysis/MemoryBuiltins.cpp
|
||||
+++ b/llvm/lib/Analysis/MemoryBuiltins.cpp
|
||||
@@ -111,6 +111,9 @@ static const std::pair<LibFunc, AllocFnsTy> AllocationFnData[] = {
|
||||
{LibFunc_strdup, {StrDupLike, 1, -1, -1, -1}},
|
||||
{LibFunc_strndup, {StrDupLike, 2, 1, -1, -1}},
|
||||
{LibFunc___kmpc_alloc_shared, {MallocLike, 1, 0, -1, -1}},
|
||||
+ {LibFunc_rust_alloc, {MallocLike, 2, 0, -1, 1}},
|
||||
+ {LibFunc_rust_alloc_zeroed, {CallocLike, 2, 0, -1, 1}},
|
||||
+ {LibFunc_rust_realloc, {ReallocLike, 4, 3, -1, 2}},
|
||||
// TODO: Handle "int posix_memalign(void **, size_t, size_t)"
|
||||
};
|
||||
|
||||
@@ -429,7 +432,8 @@ bool llvm::isLibFreeFunction(const Function *F, const LibFunc TLIFn) {
|
||||
TLIFn == LibFunc_ZdlPvjSt11align_val_t || // delete(void*, unsigned long, align_val_t)
|
||||
TLIFn == LibFunc_ZdlPvmSt11align_val_t || // delete(void*, unsigned long, align_val_t)
|
||||
TLIFn == LibFunc_ZdaPvjSt11align_val_t || // delete[](void*, unsigned int, align_val_t)
|
||||
- TLIFn == LibFunc_ZdaPvmSt11align_val_t) // delete[](void*, unsigned long, align_val_t)
|
||||
+ TLIFn == LibFunc_ZdaPvmSt11align_val_t || // delete[](void*, unsigned long, align_val_t)
|
||||
+ TLIFn == LibFunc_rust_dealloc)
|
||||
ExpectedNumParams = 3;
|
||||
else
|
||||
return false;
|
||||
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp
|
||||
index 02923c2c7eb14..22d6a5f04152a 100644
|
||||
--- a/llvm/lib/Analysis/TargetLibraryInfo.cpp
|
||||
+++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp
|
||||
@@ -1793,6 +1793,26 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
|
||||
else
|
||||
return false;
|
||||
}
|
||||
+
|
||||
+ case LibFunc_rust_alloc:
|
||||
+ case LibFunc_rust_alloc_zeroed:
|
||||
+ return (NumParams == 2 && FTy.getReturnType()->isPointerTy() &&
|
||||
+ FTy.getParamType(0)->isIntegerTy() &&
|
||||
+ FTy.getParamType(1)->isIntegerTy());
|
||||
+
|
||||
+ case LibFunc_rust_dealloc:
|
||||
+ return (NumParams == 3 && FTy.getReturnType()->isVoidTy() &&
|
||||
+ FTy.getParamType(0)->isPointerTy() &&
|
||||
+ FTy.getParamType(1)->isIntegerTy() &&
|
||||
+ FTy.getParamType(2)->isIntegerTy());
|
||||
+
|
||||
+ case LibFunc_rust_realloc:
|
||||
+ return (NumParams == 4 && FTy.getReturnType()->isPointerTy() &&
|
||||
+ FTy.getParamType(0)->isPointerTy() &&
|
||||
+ FTy.getParamType(1)->isIntegerTy() &&
|
||||
+ FTy.getParamType(2)->isIntegerTy() &&
|
||||
+ FTy.getParamType(3)->isIntegerTy());
|
||||
+
|
||||
case LibFunc::NumLibFuncs:
|
||||
case LibFunc::NotLibFunc:
|
||||
break;
|
||||
diff --git a/llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml b/llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
|
||||
index d21c2c05ff29..807f746b4460 100644
|
||||
--- a/llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
|
||||
+++ b/llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
|
||||
@@ -32,13 +32,17 @@
|
||||
# RUN: FileCheck %s --check-prefix=AVAIL --input-file %t3.txt
|
||||
# RUN: FileCheck %s --check-prefix=UNAVAIL --input-file %t3.txt
|
||||
#
|
||||
-# CHECK: << Total TLI yes SDK no: 0
|
||||
+# CHECK: << Total TLI yes SDK no: 4
|
||||
# CHECK: >> Total TLI no SDK yes: 0
|
||||
# CHECK: == Total TLI yes SDK yes: 235
|
||||
#
|
||||
# WRONG_DETAIL: << TLI yes SDK no : '_ZdaPv' aka operator delete[](void*)
|
||||
# WRONG_DETAIL: >> TLI no SDK yes: '_ZdaPvj' aka operator delete[](void*, unsigned int)
|
||||
-# WRONG_SUMMARY: << Total TLI yes SDK no: 1{{$}}
|
||||
+# WRONG_DETAIL: << TLI yes SDK no : '__rust_alloc'
|
||||
+# WRONG_DETAIL: << TLI yes SDK no : '__rust_alloc_zeroed'
|
||||
+# WRONG_DETAIL: << TLI yes SDK no : '__rust_dealloc'
|
||||
+# WRONG_DETAIL: << TLI yes SDK no : '__rust_realloc'
|
||||
+# WRONG_SUMMARY: << Total TLI yes SDK no: 5{{$}}
|
||||
# WRONG_SUMMARY: >> Total TLI no SDK yes: 1{{$}}
|
||||
# WRONG_SUMMARY: == Total TLI yes SDK yes: 234
|
||||
#
|
||||
@@ -46,8 +50,8 @@
|
||||
## the exact count first; the two directives should add up to that.
|
||||
## Yes, this means additions to TLI will fail this test, but the argument
|
||||
## to -COUNT can't be an expression.
|
||||
-# AVAIL: TLI knows 468 symbols, 235 available
|
||||
-# AVAIL-COUNT-235: {{^}} available
|
||||
+# AVAIL: TLI knows 472 symbols, 239 available
|
||||
+# AVAIL-COUNT-239: {{^}} available
|
||||
# AVAIL-NOT: {{^}} available
|
||||
# UNAVAIL-COUNT-233: not available
|
||||
# UNAVAIL-NOT: not available
|
78
llvm-normally-versioned-libllvm.patch
Normal file
78
llvm-normally-versioned-libllvm.patch
Normal file
@ -0,0 +1,78 @@
|
||||
Before llvm4, both major and minor version updates of llvm were regularly
|
||||
breaking API. Because of that, the libLLVM library was named in following
|
||||
format: libLLVM-${major}-${minor}.so
|
||||
|
||||
(https://bugs.llvm.org/show_bug.cgi?id=25059)
|
||||
(https://reviews.llvm.org/D13841)
|
||||
|
||||
The package containing this library was called libLLVM${major}_${minor} which
|
||||
follows our guidelines.
|
||||
|
||||
Since llvm4, llvm decided to follow semantic versioning and only break API if
|
||||
the major version was increased. In addition they do not intend to ever have
|
||||
minor version other than 0.
|
||||
(http://blog.llvm.org/2016/12/llvms-new-versioning-scheme.html)
|
||||
|
||||
The package was renamed to libLLVM${major}, which no longer follows the naming
|
||||
guidelines, but since the package contained multiple libraries, it was not
|
||||
detected.
|
||||
|
||||
Since bnc#1049703 the libLLVM${major} package contains only the
|
||||
libLLVM-${major}-${minor}.so library and no others. This triggers the
|
||||
shlib-policy-name-error check in our packaging system.
|
||||
|
||||
Because the reasons for using the libLLVM-${major}-${minor}.so format are no
|
||||
longer valid, lets revert back to libLLVM.so.${major}.${minor}.${version}
|
||||
format. That way the package name matches our guidelines.
|
||||
|
||||
Index: llvm-8.0.0rc3.src/tools/llvm-config/llvm-config.cpp
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/tools/llvm-config/llvm-config.cpp
|
||||
+++ llvm-8.0.0rc3.src/tools/llvm-config/llvm-config.cpp
|
||||
@@ -380,7 +380,6 @@ int main(int argc, char **argv) {
|
||||
} else {
|
||||
// default to the unix values:
|
||||
SharedExt = "so";
|
||||
- SharedVersionedExt = LLVM_DYLIB_VERSION ".so";
|
||||
StaticExt = "a";
|
||||
StaticDir = SharedDir = ActiveLibDir;
|
||||
StaticPrefix = SharedPrefix = "lib";
|
||||
@@ -393,7 +392,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
bool DyLibExists = false;
|
||||
const std::string DyLibName =
|
||||
- (SharedPrefix + "LLVM-" + SharedVersionedExt).str();
|
||||
+ (SharedPrefix + "LLVM." + SharedExt).str();
|
||||
|
||||
// If LLVM_LINK_DYLIB is ON, the single shared library will be returned
|
||||
// for "--libs", etc, if they exist. This behaviour can be overridden with
|
||||
Index: llvm-8.0.0rc3.src/tools/llvm-shlib/CMakeLists.txt
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/tools/llvm-shlib/CMakeLists.txt
|
||||
+++ llvm-8.0.0rc3.src/tools/llvm-shlib/CMakeLists.txt
|
||||
@@ -42,7 +42,7 @@ if(LLVM_BUILD_LLVM_DYLIB)
|
||||
if (LLVM_LINK_LLVM_DYLIB)
|
||||
set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN)
|
||||
endif()
|
||||
- add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${INSTALL_WITH_TOOLCHAIN} ${SOURCES})
|
||||
+ add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB ${INSTALL_WITH_TOOLCHAIN} ${SOURCES})
|
||||
|
||||
list(REMOVE_DUPLICATES LIB_NAMES)
|
||||
if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU)
|
||||
Index: llvm-14.0.0rc2.src/test/lit.cfg.py
|
||||
===================================================================
|
||||
--- llvm-14.0.0rc2.src.orig/test/lit.cfg.py
|
||||
+++ llvm-14.0.0rc2.src/test/lit.cfg.py
|
||||
@@ -244,9 +244,9 @@ if config.link_llvm_dylib:
|
||||
config.available_features.add('llvm-dylib')
|
||||
config.substitutions.append(
|
||||
('%llvmdylib',
|
||||
- '{}/libLLVM-{}{}'.format(config.llvm_shlib_dir,
|
||||
- config.llvm_dylib_version,
|
||||
- config.llvm_shlib_ext)))
|
||||
+ '{}/libLLVM{}.{}'.format(config.llvm_shlib_dir,
|
||||
+ config.llvm_shlib_ext,
|
||||
+ config.llvm_dylib_version)))
|
||||
|
||||
if config.have_tf_aot:
|
||||
config.available_features.add("have_tf_aot")
|
123
llvm-preserve-symbols-used.patch
Normal file
123
llvm-preserve-symbols-used.patch
Normal file
@ -0,0 +1,123 @@
|
||||
From 2cdf8f7c0bdc4d36f236e4cbb45bd9f996f15d14 Mon Sep 17 00:00:00 2001
|
||||
From: Amanieu d'Antras <amanieu@gmail.com>
|
||||
Date: Thu, 16 Jun 2022 21:31:33 +0100
|
||||
Subject: [PATCH 1/8] [MergeFunctions] Preserve symbols used
|
||||
llvm.used/llvm.compiler.used
|
||||
|
||||
llvm.used and llvm.compiler.used are often used with inline assembly
|
||||
that refers to a specific symbol so that the symbol is kept through to
|
||||
the linker even though there are no references to it from LLVM IR.
|
||||
|
||||
This fixes the MergeFunctions pass to preserve references to these
|
||||
symbols in llvm.used/llvm.compiler.used so they are not deleted from the
|
||||
IR. This doesn't prevent these functions from being merged, but
|
||||
guarantees that an alias or thunk with the expected symbol name is kept
|
||||
in the IR.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D127751
|
||||
|
||||
(cherry picked from commit caa2a829cdf905a5e8664d96a464d414b2adb42e)
|
||||
---
|
||||
llvm/lib/Transforms/IPO/MergeFunctions.cpp | 15 ++++++++-
|
||||
llvm/test/Transforms/MergeFunc/merge-used.ll | 35 ++++++++++++++++++++
|
||||
2 files changed, 49 insertions(+), 1 deletion(-)
|
||||
create mode 100644 llvm/test/Transforms/MergeFunc/merge-used.ll
|
||||
|
||||
diff --git a/llvm/lib/Transforms/IPO/MergeFunctions.cpp b/llvm/lib/Transforms/IPO/MergeFunctions.cpp
|
||||
index 97ef872c5499..b51e0a5d4dce 100644
|
||||
--- a/llvm/lib/Transforms/IPO/MergeFunctions.cpp
|
||||
+++ b/llvm/lib/Transforms/IPO/MergeFunctions.cpp
|
||||
@@ -123,6 +123,7 @@
|
||||
#include "llvm/Transforms/IPO.h"
|
||||
#include "llvm/Transforms/IPO/MergeFunctions.h"
|
||||
#include "llvm/Transforms/Utils/FunctionComparator.h"
|
||||
+#include "llvm/Transforms/Utils/ModuleUtils.h"
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <iterator>
|
||||
@@ -228,6 +229,9 @@ private:
|
||||
/// analyzed again.
|
||||
std::vector<WeakTrackingVH> Deferred;
|
||||
|
||||
+ /// Set of values marked as used in llvm.used and llvm.compiler.used.
|
||||
+ SmallPtrSet<GlobalValue *, 4> Used;
|
||||
+
|
||||
#ifndef NDEBUG
|
||||
/// Checks the rules of order relation introduced among functions set.
|
||||
/// Returns true, if sanity check has been passed, and false if failed.
|
||||
@@ -410,6 +414,11 @@ static bool isEligibleForMerging(Function &F) {
|
||||
bool MergeFunctions::runOnModule(Module &M) {
|
||||
bool Changed = false;
|
||||
|
||||
+ SmallVector<GlobalValue *, 4> UsedV;
|
||||
+ collectUsedGlobalVariables(M, UsedV, /*CompilerUsed=*/false);
|
||||
+ collectUsedGlobalVariables(M, UsedV, /*CompilerUsed=*/true);
|
||||
+ Used.insert(UsedV.begin(), UsedV.end());
|
||||
+
|
||||
// All functions in the module, ordered by hash. Functions with a unique
|
||||
// hash value are easily eliminated.
|
||||
std::vector<std::pair<FunctionComparator::FunctionHash, Function *>>
|
||||
@@ -456,6 +465,7 @@ bool MergeFunctions::runOnModule(Module &M) {
|
||||
FnTree.clear();
|
||||
FNodesInTree.clear();
|
||||
GlobalNumbers.clear();
|
||||
+ Used.clear();
|
||||
|
||||
return Changed;
|
||||
}
|
||||
@@ -828,7 +838,10 @@ void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) {
|
||||
// For better debugability, under MergeFunctionsPDI, we do not modify G's
|
||||
// call sites to point to F even when within the same translation unit.
|
||||
if (!G->isInterposable() && !MergeFunctionsPDI) {
|
||||
- if (G->hasGlobalUnnamedAddr()) {
|
||||
+ // Functions referred to by llvm.used/llvm.compiler.used are special:
|
||||
+ // there are uses of the symbol name that are not visible to LLVM,
|
||||
+ // usually from inline asm.
|
||||
+ if (G->hasGlobalUnnamedAddr() && !Used.contains(G)) {
|
||||
// G might have been a key in our GlobalNumberState, and it's illegal
|
||||
// to replace a key in ValueMap<GlobalValue *> with a non-global.
|
||||
GlobalNumbers.erase(G);
|
||||
diff --git a/llvm/test/Transforms/MergeFunc/merge-used.ll b/llvm/test/Transforms/MergeFunc/merge-used.ll
|
||||
new file mode 100644
|
||||
index 000000000000..a86e66eee3f9
|
||||
--- /dev/null
|
||||
+++ b/llvm/test/Transforms/MergeFunc/merge-used.ll
|
||||
@@ -0,0 +1,35 @@
|
||||
+; RUN: opt -S -mergefunc < %s | FileCheck %s
|
||||
+
|
||||
+@llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (i32 (i32)* @a to i8*)], section "llvm.metadata"
|
||||
+
|
||||
+define internal i32 @a(i32 %a) unnamed_addr {
|
||||
+ %b = xor i32 %a, 0
|
||||
+ %c = xor i32 %b, 0
|
||||
+ ret i32 %c
|
||||
+}
|
||||
+
|
||||
+define i32 @b(i32 %a) unnamed_addr {
|
||||
+ %b = xor i32 %a, 0
|
||||
+ %c = xor i32 %b, 0
|
||||
+ ret i32 %c
|
||||
+}
|
||||
+
|
||||
+define i32 @c(i32 %a) unnamed_addr {
|
||||
+ %b = tail call i32 @a(i32 %a)
|
||||
+ ret i32 %b
|
||||
+}
|
||||
+
|
||||
+; CHECK-LABEL: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (i32 (i32)* @a to i8*)], section "llvm.metadata"
|
||||
+
|
||||
+; CHECK-LABEL: define i32 @b(i32 %a) unnamed_addr
|
||||
+; CHECK-NEXT: xor
|
||||
+; CHECK-NEXT: xor
|
||||
+; CHECK-NEXT: ret
|
||||
+
|
||||
+; CHECK-LABEL: define i32 @c(i32 %a) unnamed_addr
|
||||
+; CHECK-NEXT: tail call i32 @b(i32 %a)
|
||||
+; CHECK-NEXT: ret
|
||||
+
|
||||
+; CHECK-LABEL: define internal i32 @a(i32 %0) unnamed_addr
|
||||
+; CHECK-NEXT: tail call i32 @b(i32 %0)
|
||||
+; CHECK-NEXT: ret
|
||||
--
|
||||
2.37.0 (Apple Git-136)
|
||||
|
21
llvm-remove-clang-only-flags.patch
Normal file
21
llvm-remove-clang-only-flags.patch
Normal file
@ -0,0 +1,21 @@
|
||||
Index: llvm-8.0.0rc3.src/cmake/modules/HandleLLVMOptions.cmake
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/cmake/modules/HandleLLVMOptions.cmake
|
||||
+++ llvm-8.0.0rc3.src/cmake/modules/HandleLLVMOptions.cmake
|
||||
@@ -413,8 +413,6 @@ if( MSVC )
|
||||
|
||||
# Specific default warnings-as-errors for compilers accepting GCC-compatible warning flags:
|
||||
if ( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" )
|
||||
- add_flag_if_supported("-Werror=date-time" WERROR_DATE_TIME)
|
||||
- add_flag_if_supported("-Werror=unguarded-availability-new" WERROR_UNGUARDED_AVAILABILITY_NEW)
|
||||
endif( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" )
|
||||
|
||||
# Modules enablement for GCC-compatible compilers:
|
||||
@@ -586,7 +584,6 @@ if (LLVM_ENABLE_WARNINGS AND (LLVM_COMPI
|
||||
endif()
|
||||
|
||||
add_flag_if_supported("-Wimplicit-fallthrough" IMPLICIT_FALLTHROUGH_FLAG)
|
||||
- add_flag_if_supported("-Wcovered-switch-default" COVERED_SWITCH_DEFAULT_FLAG)
|
||||
append_if(USE_NO_UNINITIALIZED "-Wno-uninitialized" CMAKE_CXX_FLAGS)
|
||||
append_if(USE_NO_MAYBE_UNINITIALIZED "-Wno-maybe-uninitialized" CMAKE_CXX_FLAGS)
|
||||
|
155
llvm-scev-fix-isImpliedViaMerge.patch
Normal file
155
llvm-scev-fix-isImpliedViaMerge.patch
Normal file
@ -0,0 +1,155 @@
|
||||
From cfb4c1a735e9648ead5bf60a1fab4f09b5ee6453 Mon Sep 17 00:00:00 2001
|
||||
From: Nikita Popov <npopov@redhat.com>
|
||||
Date: Mon, 27 Jun 2022 14:54:03 +0200
|
||||
Subject: [PATCH] [IndVars] Add test for PR56242 (NFC)
|
||||
|
||||
---
|
||||
.../test/Transforms/IndVarSimplify/pr56242.ll | 49 +++++++++++++++++++
|
||||
1 file changed, 49 insertions(+)
|
||||
create mode 100644 llvm/test/Transforms/IndVarSimplify/pr56242.ll
|
||||
|
||||
diff --git a/llvm/test/Transforms/IndVarSimplify/pr56242.ll b/llvm/test/Transforms/IndVarSimplify/pr56242.ll
|
||||
new file mode 100644
|
||||
index 0000000000000..82e1d2252e760
|
||||
--- /dev/null
|
||||
+++ b/llvm/test/Transforms/IndVarSimplify/pr56242.ll
|
||||
@@ -0,0 +1,49 @@
|
||||
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
+; RUN: opt -S -indvars < %s | FileCheck %s
|
||||
+
|
||||
+declare void @use(i1)
|
||||
+
|
||||
+define void @test(i32* %arr) {
|
||||
+; CHECK-LABEL: @test(
|
||||
+; CHECK-NEXT: entry:
|
||||
+; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
|
||||
+; CHECK: loop.header:
|
||||
+; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_INC:%.*]], [[LOOP_LATCH:%.*]] ], [ 0, [[ENTRY:%.*]] ]
|
||||
+; CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds i32, i32* [[ARR:%.*]], i64 [[IV]]
|
||||
+; CHECK-NEXT: [[V:%.*]] = load i32, i32* [[PTR]], align 4
|
||||
+; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[V]], 0
|
||||
+; CHECK-NEXT: br i1 [[CMP1]], label [[IF:%.*]], label [[LOOP_LATCH]]
|
||||
+; CHECK: if:
|
||||
+; CHECK-NEXT: call void @use(i1 false)
|
||||
+; CHECK-NEXT: br label [[LOOP_LATCH]]
|
||||
+; CHECK: loop.latch:
|
||||
+; CHECK-NEXT: [[IV_INC]] = add nuw nsw i64 [[IV]], 1
|
||||
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[IV_INC]], 16
|
||||
+; CHECK-NEXT: br i1 [[CMP]], label [[LOOP_HEADER]], label [[EXIT:%.*]]
|
||||
+; CHECK: exit:
|
||||
+; CHECK-NEXT: ret void
|
||||
+;
|
||||
+entry:
|
||||
+ br label %loop.header
|
||||
+
|
||||
+loop.header:
|
||||
+ %iv = phi i64 [ %iv.inc, %loop.latch ], [ 0, %entry ]
|
||||
+ %prev = phi i32 [ %v, %loop.latch ], [ 0, %entry ]
|
||||
+ %ptr = getelementptr inbounds i32, i32* %arr, i64 %iv
|
||||
+ %v = load i32, i32* %ptr
|
||||
+ %cmp1 = icmp sgt i32 %v, 0
|
||||
+ br i1 %cmp1, label %if, label %loop.latch
|
||||
+
|
||||
+if:
|
||||
+ %cmp2 = icmp slt i32 %prev, 0
|
||||
+ call void @use(i1 %cmp2)
|
||||
+ br label %loop.latch
|
||||
+
|
||||
+loop.latch:
|
||||
+ %iv.inc = add nuw nsw i64 %iv, 1
|
||||
+ %cmp = icmp ult i64 %iv.inc, 16
|
||||
+ br i1 %cmp, label %loop.header, label %exit
|
||||
+
|
||||
+exit:
|
||||
+ ret void
|
||||
+}
|
||||
|
||||
From e4d1d0cc2c9ca38f98bc9b70c3e3db3a18f1e06e Mon Sep 17 00:00:00 2001
|
||||
From: Nikita Popov <npopov@redhat.com>
|
||||
Date: Mon, 27 Jun 2022 15:09:24 +0200
|
||||
Subject: [PATCH] [SCEV] Fix isImpliedViaMerge() with values from previous
|
||||
iteration (PR56242)
|
||||
|
||||
When trying to prove an implied condition on a phi by proving it
|
||||
for all incoming values, we need to be careful about values coming
|
||||
from a backedge, as these may refer to a previous loop iteration.
|
||||
A variant of this issue was fixed in D101829, but the dominance
|
||||
condition used there isn't quite right: It checks that the value
|
||||
dominates the incoming block, which doesn't exclude backedges
|
||||
(values defined in a loop will usually dominate the loop latch,
|
||||
which is the incoming block of the backedge).
|
||||
|
||||
Instead, we should be checking for domination of the phi block.
|
||||
Any values defined inside the loop will not dominate the loop
|
||||
header phi.
|
||||
|
||||
Fixes https://github.com/llvm/llvm-project/issues/56242.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D128640
|
||||
---
|
||||
llvm/lib/Analysis/ScalarEvolution.cpp | 2 +-
|
||||
llvm/test/Transforms/IRCE/decrementing-loop.ll | 11 +++++------
|
||||
llvm/test/Transforms/IndVarSimplify/pr56242.ll | 6 ++++--
|
||||
3 files changed, 10 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
|
||||
index aa349f9435ce9..968665c4d3876 100644
|
||||
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
|
||||
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
|
||||
@@ -11812,7 +11812,7 @@ bool ScalarEvolution::isImpliedViaMerge(ICmpInst::Predicate Pred,
|
||||
const SCEV *L = getSCEV(LPhi->getIncomingValueForBlock(IncBB));
|
||||
// Make sure L does not refer to a value from a potentially previous
|
||||
// iteration of a loop.
|
||||
- if (!properlyDominates(L, IncBB))
|
||||
+ if (!properlyDominates(L, LBB))
|
||||
return false;
|
||||
if (!ProvedEasily(L, RHS))
|
||||
return false;
|
||||
diff --git a/llvm/test/Transforms/IRCE/decrementing-loop.ll b/llvm/test/Transforms/IRCE/decrementing-loop.ll
|
||||
index 5ae4412b34bd7..462607162bcbe 100644
|
||||
--- a/llvm/test/Transforms/IRCE/decrementing-loop.ll
|
||||
+++ b/llvm/test/Transforms/IRCE/decrementing-loop.ll
|
||||
@@ -210,17 +210,16 @@ exit:
|
||||
ret void
|
||||
}
|
||||
|
||||
-; TODO: we need to be more careful when trying to look through phi nodes in
|
||||
-; cycles, because the condition to prove may reference the previous value of
|
||||
-; the phi. So we currently fail to optimize this case.
|
||||
; Check that we can figure out that IV is non-negative via implication through
|
||||
; two Phi nodes, one being AddRec.
|
||||
define void @test_05(i32* %a, i32* %a_len_ptr, i1 %cond) {
|
||||
|
||||
; CHECK-LABEL: test_05
|
||||
-; CHECK: entry:
|
||||
-; CHECK: br label %merge
|
||||
-; CHECK-NOT: mainloop
|
||||
+; CHECK: mainloop:
|
||||
+; CHECK-NEXT: br label %loop
|
||||
+; CHECK: loop:
|
||||
+; CHECK: br i1 true, label %in.bounds, label %out.of.bounds
|
||||
+; CHECK: loop.preloop:
|
||||
|
||||
entry:
|
||||
%len.a = load i32, i32* %a_len_ptr, !range !0
|
||||
diff --git a/llvm/test/Transforms/IndVarSimplify/pr56242.ll b/llvm/test/Transforms/IndVarSimplify/pr56242.ll
|
||||
index 82e1d2252e760..6afed4177e1f7 100644
|
||||
--- a/llvm/test/Transforms/IndVarSimplify/pr56242.ll
|
||||
+++ b/llvm/test/Transforms/IndVarSimplify/pr56242.ll
|
||||
@@ -9,12 +9,14 @@ define void @test(i32* %arr) {
|
||||
; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
|
||||
; CHECK: loop.header:
|
||||
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_INC:%.*]], [[LOOP_LATCH:%.*]] ], [ 0, [[ENTRY:%.*]] ]
|
||||
+; CHECK-NEXT: [[PREV:%.*]] = phi i32 [ [[V:%.*]], [[LOOP_LATCH]] ], [ 0, [[ENTRY]] ]
|
||||
; CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds i32, i32* [[ARR:%.*]], i64 [[IV]]
|
||||
-; CHECK-NEXT: [[V:%.*]] = load i32, i32* [[PTR]], align 4
|
||||
+; CHECK-NEXT: [[V]] = load i32, i32* [[PTR]], align 4
|
||||
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[V]], 0
|
||||
; CHECK-NEXT: br i1 [[CMP1]], label [[IF:%.*]], label [[LOOP_LATCH]]
|
||||
; CHECK: if:
|
||||
-; CHECK-NEXT: call void @use(i1 false)
|
||||
+; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[PREV]], 0
|
||||
+; CHECK-NEXT: call void @use(i1 [[CMP2]])
|
||||
; CHECK-NEXT: br label [[LOOP_LATCH]]
|
||||
; CHECK: loop.latch:
|
||||
; CHECK-NEXT: [[IV_INC]] = add nuw nsw i64 [[IV]], 1
|
31
llvm14-fix-segfault-on-aarch64.patch
Normal file
31
llvm14-fix-segfault-on-aarch64.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From 2e1b838a889f9793d4bcd5dbfe10db9796b77143 Mon Sep 17 00:00:00 2001
|
||||
From: Graham Markall <gmarkall@nvidia.com>
|
||||
Date: Mon, 3 Apr 2023 11:15:36 -0700
|
||||
Subject: [PATCH] [RuntimeDyld] RuntimeDyldELF: Clear GOTOffsetMap when
|
||||
resetting GOT section.
|
||||
|
||||
When the GOT section ID is reset, the GOTOffsetMap must also be cleared,
|
||||
otherwise spurious matches can be located when handling GOT relocations
|
||||
in subsequently-linked objects.
|
||||
|
||||
Fixes Issue #61402 - see https://github.com/llvm/llvm-project/issues/61402.
|
||||
|
||||
Reviewed By: lhames
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D146938
|
||||
---
|
||||
llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
|
||||
index 3c7f4ec47eb84..282c357f2de2c 100644
|
||||
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
|
||||
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
|
||||
@@ -2406,6 +2406,7 @@ Error RuntimeDyldELF::finalizeLoad(const ObjectFile &Obj,
|
||||
}
|
||||
}
|
||||
|
||||
+ GOTOffsetMap.clear();
|
||||
GOTSectionID = 0;
|
||||
CurrentGOTIndex = 0;
|
||||
|
19
llvm14-rpmlintrc
Normal file
19
llvm14-rpmlintrc
Normal file
@ -0,0 +1,19 @@
|
||||
# This line is mandatory to access the configuration functions
|
||||
from Config import *
|
||||
|
||||
addFilter("devel-file-in-non-devel-package .*/clang/.*/include/.*")
|
||||
addFilter("devel-file-in-non-devel-package .*/clang/.*/lib/.*")
|
||||
addFilter("devel-file-in-non-devel-package .*/usr/include/.*")
|
||||
|
||||
addFilter("devel-file-in-non-devel-package .*/lib.*/*.a")
|
||||
addFilter("devel-file-in-non-devel-package .*/lib.*/*.so")
|
||||
|
||||
# We're deliberately conflicting with SLE. (https://code.opensuse.org/leap/features/issue/55)
|
||||
addFilter("SUSE_Backports_policy-SLE_conflict")
|
||||
|
||||
# Archive seems to be deliberately empty on some architectures.
|
||||
addFilter("lto-no-text-in-archive .*/lib.*/clang/.*/lib/linux/libclang_rt.asan_static-.*.a")
|
||||
|
||||
# Different versions of LLVM can produce the same SONAME, so we'll have to use
|
||||
# non-standard names sometimes. (Leap's rpmlint complains, Tumbleweed's doesn't.)
|
||||
addFilter("shlib-policy-name-error")
|
2711
llvm14.changes
Normal file
2711
llvm14.changes
Normal file
File diff suppressed because it is too large
Load Diff
1759
llvm14.spec
Normal file
1759
llvm14.spec
Normal file
File diff suppressed because it is too large
Load Diff
70
llvm_build_tablegen_component_as_shared_library.patch
Normal file
70
llvm_build_tablegen_component_as_shared_library.patch
Normal file
@ -0,0 +1,70 @@
|
||||
The LLVMTableGen component is a special case that is excluded from libLLVM and
|
||||
normally is only built as static library and linked into llvm-tblgen.
|
||||
|
||||
We need to have it as a shared library to be available for other projects such
|
||||
as ldc.
|
||||
|
||||
This patch makes it even more special and forces it to be build and installed
|
||||
as separate shared library.
|
||||
|
||||
Index: llvm-8.0.0rc3.src/cmake/modules/AddLLVM.cmake
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/cmake/modules/AddLLVM.cmake
|
||||
+++ llvm-8.0.0rc3.src/cmake/modules/AddLLVM.cmake
|
||||
@@ -541,7 +541,7 @@ function(llvm_add_library name)
|
||||
if(ARG_MODULE AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS AND ARG_PLUGIN_TOOL AND (WIN32 OR CYGWIN))
|
||||
# On DLL platforms symbols are imported from the tool by linking against it.
|
||||
set(llvm_libs ${ARG_PLUGIN_TOOL})
|
||||
- elseif (NOT ARG_COMPONENT_LIB)
|
||||
+ elseif (NOT ARG_COMPONENT_LIB OR (${name} STREQUAL "LLVMTableGen" AND LLVM_BUILD_LLVM_DYLIB))
|
||||
if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB)
|
||||
set(llvm_libs LLVM)
|
||||
else()
|
||||
Index: llvm-8.0.0rc3.src/cmake/modules/TableGen.cmake
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/cmake/modules/TableGen.cmake
|
||||
+++ llvm-8.0.0rc3.src/cmake/modules/TableGen.cmake
|
||||
@@ -115,7 +115,8 @@ macro(add_tablegen target project)
|
||||
set(LLVM_ENABLE_OBJLIB ON)
|
||||
endif()
|
||||
|
||||
- add_llvm_executable(${target} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN})
|
||||
+ add_llvm_executable(${target} ${ARGN})
|
||||
+ target_link_libraries(${target} PRIVATE LLVMTableGen)
|
||||
set(LLVM_LINK_COMPONENTS ${${target}_OLD_LLVM_LINK_COMPONENTS})
|
||||
|
||||
set(${project}_TABLEGEN "${target}" CACHE
|
||||
Index: llvm-8.0.0rc3.src/lib/TableGen/CMakeLists.txt
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/lib/TableGen/CMakeLists.txt
|
||||
+++ llvm-8.0.0rc3.src/lib/TableGen/CMakeLists.txt
|
||||
@@ -1,3 +1,7 @@
|
||||
+if (LLVM_BUILD_LLVM_DYLIB)
|
||||
+ set(MAYBE_SHARED SHARED)
|
||||
+endif()
|
||||
+
|
||||
add_llvm_component_library(LLVMTableGen
|
||||
DetailedRecordsBackend.cpp
|
||||
Error.cpp
|
||||
@@ -9,6 +13,8 @@ add_llvm_library(LLVMTableGen
|
||||
TGLexer.cpp
|
||||
TGParser.cpp
|
||||
|
||||
+ ${MAYBE_SHARED}
|
||||
+
|
||||
ADDITIONAL_HEADER_DIRS
|
||||
${LLVM_MAIN_INCLUDE_DIR}/llvm/TableGen
|
||||
|
||||
Index: llvm-14.0.3.src/utils/TableGen/GlobalISel/CMakeLists.txt
|
||||
===================================================================
|
||||
--- llvm-14.0.3.src.orig/utils/TableGen/GlobalISel/CMakeLists.txt
|
||||
+++ llvm-14.0.3.src/utils/TableGen/GlobalISel/CMakeLists.txt
|
||||
@@ -3,7 +3,7 @@ set(LLVM_LINK_COMPONENTS
|
||||
TableGen
|
||||
)
|
||||
|
||||
-add_llvm_library(LLVMTableGenGlobalISel STATIC DISABLE_LLVM_LINK_LLVM_DYLIB
|
||||
+add_llvm_library(LLVMTableGenGlobalISel STATIC
|
||||
CodeExpander.cpp
|
||||
GIMatchDag.cpp
|
||||
GIMatchDagEdge.cpp
|
28
lto-disable-cache.patch
Normal file
28
lto-disable-cache.patch
Normal file
@ -0,0 +1,28 @@
|
||||
diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
|
||||
index 5e57a3b8234..23f9ed5fb56 100644
|
||||
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
|
||||
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
|
||||
@@ -889,23 +889,6 @@ if(uppercase_LLVM_ENABLE_LTO STREQUAL "THIN")
|
||||
if(NOT LINKER_IS_LLD_LINK)
|
||||
append("-flto=thin" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
|
||||
endif()
|
||||
- # If the linker supports it, enable the lto cache. This improves initial build
|
||||
- # time a little since we re-link a lot of the same objects, and significantly
|
||||
- # improves incremental build time.
|
||||
- # FIXME: We should move all this logic into the clang driver.
|
||||
- if(APPLE)
|
||||
- append("-Wl,-cache_path_lto,${PROJECT_BINARY_DIR}/lto.cache"
|
||||
- CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
|
||||
- elseif((UNIX OR MINGW) AND LLVM_USE_LINKER STREQUAL "lld")
|
||||
- append("-Wl,--thinlto-cache-dir=${PROJECT_BINARY_DIR}/lto.cache"
|
||||
- CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
|
||||
- elseif(LLVM_USE_LINKER STREQUAL "gold")
|
||||
- append("-Wl,--plugin-opt,cache-dir=${PROJECT_BINARY_DIR}/lto.cache"
|
||||
- CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
|
||||
- elseif(LINKER_IS_LLD_LINK)
|
||||
- append("/lldltocache:${PROJECT_BINARY_DIR}/lto.cache"
|
||||
- CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
|
||||
- endif()
|
||||
elseif(uppercase_LLVM_ENABLE_LTO STREQUAL "FULL")
|
||||
append("-flto=full" CMAKE_CXX_FLAGS CMAKE_C_FLAGS)
|
||||
if(NOT LINKER_IS_LLD_LINK)
|
BIN
openmp-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
openmp-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
14
opt-viewer-Find-style-css-in-usr-share.patch
Normal file
14
opt-viewer-Find-style-css-in-usr-share.patch
Normal file
@ -0,0 +1,14 @@
|
||||
Index: llvm-7.0.0.src/tools/opt-viewer/opt-viewer.py
|
||||
===================================================================
|
||||
--- llvm-7.0.0.src.orig/tools/opt-viewer/opt-viewer.py
|
||||
+++ llvm-7.0.0.src/tools/opt-viewer/opt-viewer.py
|
||||
@@ -252,8 +252,7 @@ def generate_report(all_remarks,
|
||||
sorted_remarks = sorted(optrecord.itervalues(all_remarks), key=lambda r: (r.File, r.Line, r.Column, r.PassWithDiffPrefix, r.yaml_tag, r.Function))
|
||||
IndexRenderer(output_dir, should_display_hotness, max_hottest_remarks_on_index).render(sorted_remarks)
|
||||
|
||||
- shutil.copy(os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
||||
- "style.css"), output_dir)
|
||||
+ shutil.copy("/usr/share/opt-viewer/style.css", output_dir)
|
||||
|
||||
_render_file_bound = functools.partial(_render_file, source_dir, output_dir, context, no_highlight)
|
||||
if should_print_progress:
|
BIN
polly-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
BIN
polly-14.0.6.src.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
30
tests-use-python3.patch
Normal file
30
tests-use-python3.patch
Normal file
@ -0,0 +1,30 @@
|
||||
Index: llvm-8.0.0rc3.src/test/BugPoint/compile-custom.ll.py
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/test/BugPoint/compile-custom.ll.py
|
||||
+++ llvm-8.0.0rc3.src/test/BugPoint/compile-custom.ll.py
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/usr/bin/env python
|
||||
+#!/usr/bin/python3
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
Index: llvm-8.0.0rc3.src/test/Other/opt-bisect-helper.py
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/test/Other/opt-bisect-helper.py
|
||||
+++ llvm-8.0.0rc3.src/test/Other/opt-bisect-helper.py
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/usr/bin/env python
|
||||
+#!/usr/bin/python3
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
Index: llvm-8.0.0rc3.src/test/TableGen/JSON-check.py
|
||||
===================================================================
|
||||
--- llvm-8.0.0rc3.src.orig/test/TableGen/JSON-check.py
|
||||
+++ llvm-8.0.0rc3.src/test/TableGen/JSON-check.py
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/usr/bin/env python
|
||||
+#!/usr/bin/python3
|
||||
|
||||
import sys
|
||||
import subprocess
|
Loading…
Reference in New Issue
Block a user