Skip to content

Commit a2723ac

Browse files
authored
Merge pull request #17 from Xilinx/max.bump_290323
Max.bump 290323
2 parents d191157 + b3b16ef commit a2723ac

File tree

4,256 files changed

+217268
-115845
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

4,256 files changed

+217268
-115845
lines changed

.github/workflows/llvm-bugs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ on:
1212
jobs:
1313
auto-subscribe:
1414
runs-on: ubuntu-latest
15+
if: github.repository == 'llvm/llvm-project'
1516
steps:
1617
- uses: actions/setup-node@v3
1718
with:

README.md

Lines changed: 14 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,16 @@
11
# The LLVM Compiler Infrastructure
22

3-
This directory and its sub-directories contain the source code for LLVM,
4-
a toolkit for the construction of highly optimized compilers,
5-
optimizers, and run-time environments.
6-
7-
The README briefly describes how to get started with building LLVM.
8-
For more information on how to contribute to the LLVM project, please
9-
take a look at the
10-
[Contributing to LLVM](https://llvm.org/docs/Contributing.html) guide.
11-
12-
## Getting Started with the LLVM System
13-
14-
Taken from [here](https://llvm.org/docs/GettingStarted.html).
15-
16-
### Overview
17-
183
Welcome to the LLVM project!
194

5+
This repository contains the source code for LLVM, a toolkit for the
6+
construction of highly optimized compilers, optimizers, and run-time
7+
environments.
8+
209
The LLVM project has multiple components. The core of the project is
2110
itself called "LLVM". This contains all of the tools, libraries, and header
2211
files needed to process intermediate representations and convert them into
2312
object files. Tools include an assembler, disassembler, bitcode analyzer, and
24-
bitcode optimizer. It also contains basic regression tests.
13+
bitcode optimizer.
2514

2615
C-like languages use the [Clang](http://clang.llvm.org/) frontend. This
2716
component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode
@@ -31,92 +20,20 @@ Other components include:
3120
the [libc++ C++ standard library](https://libcxx.llvm.org),
3221
the [LLD linker](https://lld.llvm.org), and more.
3322

34-
### Getting the Source Code and Building LLVM
35-
36-
The LLVM Getting Started documentation may be out of date. The [Clang
37-
Getting Started](http://clang.llvm.org/get_started.html) page might have more
38-
accurate information.
39-
40-
This is an example work-flow and configuration to get and build the LLVM source:
41-
42-
1. Checkout LLVM (including related sub-projects like Clang):
43-
44-
* ``git clone https://github.com/llvm/llvm-project.git``
45-
46-
* Or, on windows, ``git clone --config core.autocrlf=false
47-
https://github.com/llvm/llvm-project.git``
48-
49-
2. Configure and build LLVM and Clang:
50-
51-
* ``cd llvm-project``
52-
53-
* ``cmake -S llvm -B build -G <generator> [options]``
54-
55-
Some common build system generators are:
56-
57-
* ``Ninja`` --- for generating [Ninja](https://ninja-build.org)
58-
build files. Most llvm developers use Ninja.
59-
* ``Unix Makefiles`` --- for generating make-compatible parallel makefiles.
60-
* ``Visual Studio`` --- for generating Visual Studio projects and
61-
solutions.
62-
* ``Xcode`` --- for generating Xcode projects.
63-
64-
Some common options:
65-
66-
* ``-DLLVM_ENABLE_PROJECTS='...'`` and ``-DLLVM_ENABLE_RUNTIMES='...'`` ---
67-
semicolon-separated list of the LLVM sub-projects and runtimes you'd like to
68-
additionally build. ``LLVM_ENABLE_PROJECTS`` can include any of: clang,
69-
clang-tools-extra, cross-project-tests, flang, libc, libclc, lld, lldb,
70-
mlir, openmp, polly, or pstl. ``LLVM_ENABLE_RUNTIMES`` can include any of
71-
libcxx, libcxxabi, libunwind, compiler-rt, libc or openmp. Some runtime
72-
projects can be specified either in ``LLVM_ENABLE_PROJECTS`` or in
73-
``LLVM_ENABLE_RUNTIMES``.
74-
75-
For example, to build LLVM, Clang, libcxx, and libcxxabi, use
76-
``-DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"``.
77-
78-
* ``-DCMAKE_INSTALL_PREFIX=directory`` --- Specify for *directory* the full
79-
path name of where you want the LLVM tools and libraries to be installed
80-
(default ``/usr/local``). Be careful if you install runtime libraries: if
81-
your system uses those provided by LLVM (like libc++ or libc++abi), you
82-
must not overwrite your system's copy of those libraries, since that
83-
could render your system unusable. In general, using something like
84-
``/usr`` is not advised, but ``/usr/local`` is fine.
85-
86-
* ``-DCMAKE_BUILD_TYPE=type`` --- Valid options for *type* are Debug,
87-
Release, RelWithDebInfo, and MinSizeRel. Default is Debug.
88-
89-
* ``-DLLVM_ENABLE_ASSERTIONS=On`` --- Compile with assertion checks enabled
90-
(default is Yes for Debug builds, No for all other build types).
91-
92-
* ``cmake --build build [-- [options] <target>]`` or your build system specified above
93-
directly.
94-
95-
* The default target (i.e. ``ninja`` or ``make``) will build all of LLVM.
96-
97-
* The ``check-all`` target (i.e. ``ninja check-all``) will run the
98-
regression tests to ensure everything is in working order.
99-
100-
* CMake will generate targets for each tool and library, and most
101-
LLVM sub-projects generate their own ``check-<project>`` target.
102-
103-
* Running a serial build will be **slow**. To improve speed, try running a
104-
parallel build. That's done by default in Ninja; for ``make``, use the option
105-
``-j NNN``, where ``NNN`` is the number of parallel jobs to run.
106-
In most cases, you get the best performance if you specify the number of CPU threads you have.
107-
On some Unix systems, you can specify this with ``-j$(nproc)``.
108-
109-
* For more information see [CMake](https://llvm.org/docs/CMake.html).
23+
## Getting the Source Code and Building LLVM
11024

11125
Consult the
112-
[Getting Started with LLVM](https://llvm.org/docs/GettingStarted.html#getting-started-with-llvm)
113-
page for detailed information on configuring and compiling LLVM. You can visit
114-
[Directory Layout](https://llvm.org/docs/GettingStarted.html#directory-layout)
115-
to learn about the layout of the source code tree.
26+
[Getting Started with LLVM](https://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm)
27+
page for information on building and running LLVM.
28+
29+
For information on how to contribute to the LLVM project, please take a look at
30+
the [Contributing to LLVM](https://llvm.org/docs/Contributing.html) guide.
11631

11732
## Getting in touch
11833

119-
Join [LLVM Discourse forums](https://discourse.llvm.org/), [discord chat](https://discord.gg/xS7Z362) or #llvm IRC channel on [OFTC](https://oftc.net/).
34+
Join the [LLVM Discourse forums](https://discourse.llvm.org/), [Discord
35+
chat](https://discord.gg/xS7Z362), or #llvm IRC channel on
36+
[OFTC](https://oftc.net/).
12037

12138
The LLVM project has adopted a [code of conduct](https://llvm.org/docs/CodeOfConduct.html) for
12239
participants to all modes of communication within the project.

bolt/include/bolt/Core/BinaryBasicBlock.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -427,10 +427,6 @@ class BinaryBasicBlock {
427427
/// Return branch info corresponding to an edge going to \p Succ basic block.
428428
const BinaryBranchInfo &getBranchInfo(const BinaryBasicBlock &Succ) const;
429429

430-
/// Return branch info corresponding to an edge going to a basic block with
431-
/// label \p Label.
432-
BinaryBranchInfo &getBranchInfo(const MCSymbol *Label);
433-
434430
/// Set branch information for the outgoing edge to block \p Succ.
435431
void setSuccessorBranchInfo(const BinaryBasicBlock &Succ, uint64_t Count,
436432
uint64_t MispredictedCount) {

bolt/include/bolt/Core/BinaryFunction.h

Lines changed: 28 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,10 @@ class BinaryFunction {
167167
/// List of relocations associated with data in the constant island
168168
std::map<uint64_t, Relocation> Relocations;
169169

170+
/// Set true if constant island contains dynamic relocations, which may
171+
/// happen if binary is linked with -z notext option.
172+
bool HasDynamicRelocations{false};
173+
170174
/// Offsets in function that are data values in a constant island identified
171175
/// after disassembling
172176
std::map<uint64_t, MCSymbol *> Offsets;
@@ -1229,96 +1233,11 @@ class BinaryFunction {
12291233
return InputOffsetToAddressMap;
12301234
}
12311235

1232-
void addRelocationAArch64(uint64_t Offset, MCSymbol *Symbol, uint64_t RelType,
1233-
uint64_t Addend, uint64_t Value, bool IsCI) {
1234-
std::map<uint64_t, Relocation> &Rels =
1235-
(IsCI) ? Islands->Relocations : Relocations;
1236-
switch (RelType) {
1237-
case ELF::R_AARCH64_ABS64:
1238-
case ELF::R_AARCH64_ABS32:
1239-
case ELF::R_AARCH64_ABS16:
1240-
case ELF::R_AARCH64_ADD_ABS_LO12_NC:
1241-
case ELF::R_AARCH64_ADR_GOT_PAGE:
1242-
case ELF::R_AARCH64_ADR_PREL_LO21:
1243-
case ELF::R_AARCH64_ADR_PREL_PG_HI21:
1244-
case ELF::R_AARCH64_ADR_PREL_PG_HI21_NC:
1245-
case ELF::R_AARCH64_LD64_GOT_LO12_NC:
1246-
case ELF::R_AARCH64_LDST8_ABS_LO12_NC:
1247-
case ELF::R_AARCH64_LDST16_ABS_LO12_NC:
1248-
case ELF::R_AARCH64_LDST32_ABS_LO12_NC:
1249-
case ELF::R_AARCH64_LDST64_ABS_LO12_NC:
1250-
case ELF::R_AARCH64_LDST128_ABS_LO12_NC:
1251-
case ELF::R_AARCH64_TLSDESC_ADD_LO12:
1252-
case ELF::R_AARCH64_TLSDESC_ADR_PAGE21:
1253-
case ELF::R_AARCH64_TLSDESC_ADR_PREL21:
1254-
case ELF::R_AARCH64_TLSDESC_LD64_LO12:
1255-
case ELF::R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21:
1256-
case ELF::R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC:
1257-
case ELF::R_AARCH64_MOVW_UABS_G0:
1258-
case ELF::R_AARCH64_MOVW_UABS_G0_NC:
1259-
case ELF::R_AARCH64_MOVW_UABS_G1:
1260-
case ELF::R_AARCH64_MOVW_UABS_G1_NC:
1261-
case ELF::R_AARCH64_MOVW_UABS_G2:
1262-
case ELF::R_AARCH64_MOVW_UABS_G2_NC:
1263-
case ELF::R_AARCH64_MOVW_UABS_G3:
1264-
case ELF::R_AARCH64_PREL16:
1265-
case ELF::R_AARCH64_PREL32:
1266-
case ELF::R_AARCH64_PREL64:
1267-
Rels[Offset] = Relocation{Offset, Symbol, RelType, Addend, Value};
1268-
return;
1269-
case ELF::R_AARCH64_CALL26:
1270-
case ELF::R_AARCH64_JUMP26:
1271-
case ELF::R_AARCH64_TSTBR14:
1272-
case ELF::R_AARCH64_CONDBR19:
1273-
case ELF::R_AARCH64_TLSDESC_CALL:
1274-
case ELF::R_AARCH64_TLSLE_ADD_TPREL_HI12:
1275-
case ELF::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC:
1276-
return;
1277-
default:
1278-
llvm_unreachable("Unexpected AArch64 relocation type in code");
1279-
}
1280-
}
1281-
1282-
void addRelocationX86(uint64_t Offset, MCSymbol *Symbol, uint64_t RelType,
1283-
uint64_t Addend, uint64_t Value) {
1284-
switch (RelType) {
1285-
case ELF::R_X86_64_8:
1286-
case ELF::R_X86_64_16:
1287-
case ELF::R_X86_64_32:
1288-
case ELF::R_X86_64_32S:
1289-
case ELF::R_X86_64_64:
1290-
case ELF::R_X86_64_PC8:
1291-
case ELF::R_X86_64_PC32:
1292-
case ELF::R_X86_64_PC64:
1293-
case ELF::R_X86_64_GOTPCRELX:
1294-
case ELF::R_X86_64_REX_GOTPCRELX:
1295-
Relocations[Offset] = Relocation{Offset, Symbol, RelType, Addend, Value};
1296-
return;
1297-
case ELF::R_X86_64_PLT32:
1298-
case ELF::R_X86_64_GOTPCREL:
1299-
case ELF::R_X86_64_TPOFF32:
1300-
case ELF::R_X86_64_GOTTPOFF:
1301-
return;
1302-
default:
1303-
llvm_unreachable("Unexpected x86 relocation type in code");
1304-
}
1305-
}
1306-
13071236
/// Register relocation type \p RelType at a given \p Address in the function
13081237
/// against \p Symbol.
13091238
/// Assert if the \p Address is not inside this function.
13101239
void addRelocation(uint64_t Address, MCSymbol *Symbol, uint64_t RelType,
1311-
uint64_t Addend, uint64_t Value) {
1312-
assert(Address >= getAddress() && Address < getAddress() + getMaxSize() &&
1313-
"address is outside of the function");
1314-
uint64_t Offset = Address - getAddress();
1315-
if (BC.isAArch64()) {
1316-
return addRelocationAArch64(Offset, Symbol, RelType, Addend, Value,
1317-
isInConstantIsland(Address));
1318-
}
1319-
1320-
return addRelocationX86(Offset, Symbol, RelType, Addend, Value);
1321-
}
1240+
uint64_t Addend, uint64_t Value);
13221241

13231242
/// Return the name of the section this function originated from.
13241243
std::optional<StringRef> getOriginSectionName() const {
@@ -1835,7 +1754,7 @@ class BinaryFunction {
18351754

18361755
/// Returns if this function is a child of \p Other function.
18371756
bool isChildOf(const BinaryFunction &Other) const {
1838-
return llvm::is_contained(ParentFragments, &Other);
1757+
return ParentFragments.contains(&Other);
18391758
}
18401759

18411760
/// Set the profile data for the number of times the function was called.
@@ -1945,6 +1864,28 @@ class BinaryFunction {
19451864
return Symbol;
19461865
}
19471866

1867+
/// Support dynamic relocations in constant islands, which may happen if
1868+
/// binary is linked with -z notext option.
1869+
void markIslandDynamicRelocationAtAddress(uint64_t Address) {
1870+
if (!isInConstantIsland(Address)) {
1871+
errs() << "BOLT-ERROR: dynamic relocation found for text section at 0x"
1872+
<< Twine::utohexstr(Address) << "\n";
1873+
exit(1);
1874+
}
1875+
1876+
// Mark island to have dynamic relocation
1877+
Islands->HasDynamicRelocations = true;
1878+
1879+
// Create island access, so we would emit the label and
1880+
// move binary data during updateOutputValues, making us emit
1881+
// dynamic relocation with the right offset value.
1882+
getOrCreateIslandAccess(Address);
1883+
}
1884+
1885+
bool hasDynamicRelocationAtIsland() const {
1886+
return !!(Islands && Islands->HasDynamicRelocations);
1887+
}
1888+
19481889
/// Called by an external function which wishes to emit references to constant
19491890
/// island symbols of this function. We create a proxy for it, so we emit
19501891
/// separate symbols when emitting our constant island on behalf of this other

bolt/include/bolt/Core/BinarySection.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ class BinarySection {
275275
bool isTBSS() const { return isBSS() && isTLS(); }
276276
bool isVirtual() const { return ELFType == ELF::SHT_NOBITS; }
277277
bool isRela() const { return ELFType == ELF::SHT_RELA; }
278+
bool isRelr() const { return ELFType == ELF::SHT_RELR; }
278279
bool isWritable() const { return (ELFFlags & ELF::SHF_WRITE); }
279280
bool isAllocatable() const {
280281
if (isELF()) {

0 commit comments

Comments
 (0)