mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 00:35:44 +00:00
Merge mozilla-inbound to mozilla-central a=merge
This commit is contained in:
commit
aacd9754e9
@ -49,6 +49,7 @@
|
||||
"patches": [
|
||||
"static-llvm-symbolizer.patch",
|
||||
"find_symbolizer_linux.patch",
|
||||
"rename_gcov_flush.patch"
|
||||
"rename_gcov_flush.patch",
|
||||
"revert-r362047-and-r362065.patch"
|
||||
]
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
--- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py 2019-03-27 15:12:48.000000000 +0200
|
||||
+++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py 2019-03-27 15:12:39.000000000 +0200
|
||||
@@ -169,6 +169,7 @@
|
||||
with lock:
|
||||
sys.stdout.write(' '.join(invocation) + '\n' + output.decode('utf-8') + '\n')
|
||||
if len(err) > 0:
|
||||
+ sys.stdout.flush()
|
||||
sys.stderr.write(err.decode('utf-8') + '\n')
|
||||
queue.task_done()
|
||||
|
@ -10,6 +10,5 @@
|
||||
"cxx": "{MOZ_FETCHES_DIR}/gcc/bin/g++",
|
||||
"as": "{MOZ_FETCHES_DIR}/gcc/bin/gcc",
|
||||
"patches": [
|
||||
"clang-tidy-8.patch"
|
||||
]
|
||||
}
|
||||
|
@ -15,7 +15,6 @@
|
||||
"libtool": "{MOZ_FETCHES_DIR}/cctools/bin/x86_64-apple-darwin-libtool",
|
||||
"ld": "{MOZ_FETCHES_DIR}/clang/bin/clang",
|
||||
"patches": [
|
||||
"clang-tidy-8.patch",
|
||||
"compiler-rt-no-codesign.patch"
|
||||
]
|
||||
}
|
||||
|
@ -9,6 +9,5 @@
|
||||
"cxx": "cl.exe",
|
||||
"ml": "ml64.exe",
|
||||
"patches": [
|
||||
"clang-tidy-8.patch"
|
||||
]
|
||||
}
|
||||
|
@ -8,11 +8,10 @@
|
||||
"cxx": "cl.exe",
|
||||
"ml": "ml64.exe",
|
||||
"patches": [
|
||||
"workaround-issue38586.patch",
|
||||
"unpoison-thread-stacks.patch",
|
||||
"downgrade-mangling-error.patch",
|
||||
"r357725-asan-vs2019.patch",
|
||||
"loosen-msvc-detection.patch",
|
||||
"revert-r355311.patch"
|
||||
"r372020-r372182-profiler-linkage.patch",
|
||||
"revert-r359260-due-to-bug41817.patch",
|
||||
"loosen-msvc-detection.patch"
|
||||
]
|
||||
}
|
||||
|
@ -2,9 +2,9 @@ Disable codesign for macosx cross-compile toolchain. Codesign only works on OSX.
|
||||
|
||||
Index: cmake/Modules/AddCompilerRT.cmake
|
||||
===================================================================
|
||||
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake (revision 342374)
|
||||
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake (working copy)
|
||||
@@ -290,14 +290,6 @@
|
||||
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
|
||||
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
|
||||
@@ -321,14 +321,6 @@
|
||||
set_target_properties(${libname} PROPERTIES IMPORT_PREFIX "")
|
||||
set_target_properties(${libname} PROPERTIES IMPORT_SUFFIX ".lib")
|
||||
endif()
|
||||
@ -17,5 +17,5 @@ Index: cmake/Modules/AddCompilerRT.cmake
|
||||
- )
|
||||
- endif()
|
||||
endif()
|
||||
install(TARGETS ${libname}
|
||||
ARCHIVE DESTINATION ${install_dir_${libname}}
|
||||
|
||||
set(parent_target_arg)
|
||||
|
@ -8,11 +8,11 @@ diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
|
||||
index b483187394..fb01348ebb 100644
|
||||
--- a/clang/lib/AST/ItaniumMangle.cpp
|
||||
+++ b/clang/lib/AST/ItaniumMangle.cpp
|
||||
@@ -3557,20 +3557,21 @@ recurse:
|
||||
case Expr::AsTypeExprClass:
|
||||
case Expr::PseudoObjectExprClass:
|
||||
@@ -3623,20 +3623,21 @@ recurse:
|
||||
case Expr::AtomicExprClass:
|
||||
case Expr::SourceLocExprClass:
|
||||
case Expr::FixedPointLiteralClass:
|
||||
case Expr::BuiltinBitCastExprClass:
|
||||
{
|
||||
if (!NullOut) {
|
||||
// As bad as this diagnostic is, it's better than crashing.
|
||||
|
@ -1,32 +0,0 @@
|
||||
Merge LLVM r357725 to allow ASan builds to run on machines with the VS2019 CRT.
|
||||
|
||||
---
|
||||
|
||||
[winasan] Fix strrchr interception with vs2019 CRT
|
||||
|
||||
strrchr in vs2019 CRT begins with unrecognized instructions.
|
||||
|
||||
VCRUNTIME140!strrchr:
|
||||
4533c9 xor r9d, r9d
|
||||
4c8bc1 mov r8, rcx
|
||||
|
||||
Patch by Christopher Reid!
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D60217
|
||||
|
||||
===================================================================
|
||||
--- a/compiler-rt/lib/interception/interception_win.cc (revision 365039)
|
||||
+++ b/compiler-rt/lib/interception/interception_win.cc (working copy)
|
||||
@@ -513,10 +513,12 @@
|
||||
case 0xc0854d: // 4d 85 c0 : test r8, r8
|
||||
case 0xc2b60f: // 0f b6 c2 : movzx eax, dl
|
||||
case 0xc03345: // 45 33 c0 : xor r8d, r8d
|
||||
+ case 0xc93345: // 45 33 c9 : xor r9d, r9d
|
||||
case 0xdb3345: // 45 33 DB : xor r11d, r11d
|
||||
case 0xd98b4c: // 4c 8b d9 : mov r11, rcx
|
||||
case 0xd28b4c: // 4c 8b d2 : mov r10, rdx
|
||||
case 0xc98b4c: // 4C 8B C9 : mov r9, rcx
|
||||
+ case 0xc18b4c: // 4C 8B C1 : mov r8, rcx
|
||||
case 0xd2b60f: // 0f b6 d2 : movzx edx, dl
|
||||
case 0xca2b48: // 48 2b ca : sub rcx, rdx
|
||||
case 0x10b70f: // 0f b7 10 : movzx edx, WORD PTR [rax]
|
130
build/build-clang/r372020-r372182-profiler-linkage.patch
Normal file
130
build/build-clang/r372020-r372182-profiler-linkage.patch
Normal file
@ -0,0 +1,130 @@
|
||||
--- a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp
|
||||
+++ b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp
|
||||
@@ -731,9 +731,8 @@
|
||||
PD = It->second;
|
||||
}
|
||||
|
||||
- // Match the linkage and visibility of the name global, except on COFF, where
|
||||
- // the linkage must be local and consequentially the visibility must be
|
||||
- // default.
|
||||
+ // Match the linkage and visibility of the name global. COFF supports using
|
||||
+ // comdats with internal symbols, so do that if we can.
|
||||
Function *Fn = Inc->getParent()->getParent();
|
||||
GlobalValue::LinkageTypes Linkage = NamePtr->getLinkage();
|
||||
GlobalValue::VisibilityTypes Visibility = NamePtr->getVisibility();
|
||||
@@ -749,19 +748,25 @@
|
||||
// new comdat group for the counters and profiling data. If we use the comdat
|
||||
// of the parent function, that will result in relocations against discarded
|
||||
// sections.
|
||||
- Comdat *Cmdt = nullptr;
|
||||
- GlobalValue::LinkageTypes CounterLinkage = Linkage;
|
||||
- if (needsComdatForCounter(*Fn, *M)) {
|
||||
- StringRef CmdtPrefix = getInstrProfComdatPrefix();
|
||||
+ bool NeedComdat = needsComdatForCounter(*Fn, *M);
|
||||
+ Comdat *Cmdt = nullptr; // Comdat group.
|
||||
+ if (NeedComdat) {
|
||||
if (TT.isOSBinFormatCOFF()) {
|
||||
- // For COFF, the comdat group name must be the name of a symbol in the
|
||||
- // group. Use the counter variable name, and upgrade its linkage to
|
||||
- // something externally visible, like linkonce_odr.
|
||||
- CmdtPrefix = getInstrProfCountersVarPrefix();
|
||||
- CounterLinkage = GlobalValue::LinkOnceODRLinkage;
|
||||
+ // For COFF, put the counters, data, and values each into their own
|
||||
+ // comdats. We can't use a group because the Visual C++ linker will
|
||||
+ // report duplicate symbol errors if there are multiple external symbols
|
||||
+ // with the same name marked IMAGE_COMDAT_SELECT_ASSOCIATIVE.
|
||||
+ Linkage = GlobalValue::LinkOnceODRLinkage;
|
||||
+ Visibility = GlobalValue::HiddenVisibility;
|
||||
+ } else {
|
||||
+ // Otherwise, create one comdat group for everything.
|
||||
+ Cmdt = M->getOrInsertComdat(getVarName(Inc, getInstrProfComdatPrefix()));
|
||||
}
|
||||
- Cmdt = M->getOrInsertComdat(getVarName(Inc, CmdtPrefix));
|
||||
}
|
||||
+ auto MaybeSetComdat = [=](GlobalVariable *GV) {
|
||||
+ if (NeedComdat)
|
||||
+ GV->setComdat(Cmdt ? Cmdt : M->getOrInsertComdat(GV->getName()));
|
||||
+ };
|
||||
|
||||
uint64_t NumCounters = Inc->getNumCounters()->getZExtValue();
|
||||
LLVMContext &Ctx = M->getContext();
|
||||
@@ -776,8 +781,8 @@
|
||||
CounterPtr->setSection(
|
||||
getInstrProfSectionName(IPSK_cnts, TT.getObjectFormat()));
|
||||
CounterPtr->setAlignment(8);
|
||||
- CounterPtr->setComdat(Cmdt);
|
||||
- CounterPtr->setLinkage(CounterLinkage);
|
||||
+ MaybeSetComdat(CounterPtr);
|
||||
+ CounterPtr->setLinkage(Linkage);
|
||||
|
||||
auto *Int8PtrTy = Type::getInt8PtrTy(Ctx);
|
||||
// Allocate statically the array of pointers to value profile nodes for
|
||||
@@ -798,7 +803,7 @@
|
||||
ValuesVar->setSection(
|
||||
getInstrProfSectionName(IPSK_vals, TT.getObjectFormat()));
|
||||
ValuesVar->setAlignment(8);
|
||||
- ValuesVar->setComdat(Cmdt);
|
||||
+ MaybeSetComdat(ValuesVar);
|
||||
ValuesPtrExpr =
|
||||
ConstantExpr::getBitCast(ValuesVar, Type::getInt8PtrTy(Ctx));
|
||||
}
|
||||
@@ -831,7 +836,8 @@
|
||||
Data->setVisibility(Visibility);
|
||||
Data->setSection(getInstrProfSectionName(IPSK_data, TT.getObjectFormat()));
|
||||
Data->setAlignment(INSTR_PROF_DATA_ALIGNMENT);
|
||||
- Data->setComdat(Cmdt);
|
||||
+ MaybeSetComdat(Data);
|
||||
+ Data->setLinkage(Linkage);
|
||||
|
||||
PD.RegionCounters = CounterPtr;
|
||||
PD.DataVar = Data;
|
||||
--- a/llvm/test/Instrumentation/InstrProfiling/PR23499.ll
|
||||
+++ b/llvm/test/Instrumentation/InstrProfiling/PR23499.ll
|
||||
@@ -20,8 +20,8 @@
|
||||
|
||||
|
||||
; COFF-NOT: __profn__Z3barIvEvv
|
||||
-; COFF: @__profc__Z3barIvEvv = linkonce_odr dso_local global [1 x i64] zeroinitializer, section "{{.*}}prfc$M", comdat, align 8
|
||||
-; COFF: @__profd__Z3barIvEvv = internal global { i64, i64, i64*, i8*, i8*, i32, [2 x i16] } { i64 4947693190065689389, i64 0, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc__Z3barIvEvv, i32 0, i32 0), i8*{{.*}}, i8* null, i32 1, [2 x i16] zeroinitializer }, section "{{.*}}prfd{{.*}}", comdat($__profc__Z3barIvEvv), align 8
|
||||
+; COFF: @__profc__Z3barIvEvv = linkonce_odr hidden global [1 x i64] zeroinitializer, section "{{.*}}prfc$M", comdat, align 8
|
||||
+; COFF: @__profd__Z3barIvEvv = linkonce_odr hidden global { i64, i64, i64*, i8*, i8*, i32, [2 x i16] } { i64 4947693190065689389, i64 0, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc__Z3barIvEvv, i32 0, i32 0), i8*{{.*}}, i8* null, i32 1, [2 x i16] zeroinitializer }, section "{{.*}}prfd{{.*}}", comdat, align 8
|
||||
|
||||
|
||||
declare void @llvm.instrprof.increment(i8*, i64, i32, i32) #1
|
||||
--- a/llvm/test/Instrumentation/InstrProfiling/comdat.ll
|
||||
+++ b/llvm/test/Instrumentation/InstrProfiling/comdat.ll
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
; ELF: @__profc_foo_inline = linkonce_odr hidden global{{.*}}, section "__llvm_prf_cnts", comdat($__profv_foo_inline), align 8
|
||||
; ELF: @__profd_foo_inline = linkonce_odr hidden global{{.*}}, section "__llvm_prf_data", comdat($__profv_foo_inline), align 8
|
||||
-; COFF: @__profc_foo_inline = linkonce_odr dso_local global{{.*}}, section ".lprfc$M", comdat, align 8
|
||||
-; COFF: @__profd_foo_inline = internal global{{.*}}, section ".lprfd$M", comdat($__profc_foo_inline), align 8
|
||||
+; COFF: @__profc_foo_inline = linkonce_odr hidden global{{.*}}, section ".lprfc$M", comdat, align 8
|
||||
+; COFF: @__profd_foo_inline = linkonce_odr hidden global{{.*}}, section ".lprfd$M", comdat, align 8
|
||||
define weak_odr void @foo_inline() comdat {
|
||||
call void @llvm.instrprof.increment(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @__profn_foo_inline, i32 0, i32 0), i64 0, i32 1, i32 0)
|
||||
ret void
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
; ELF: @__profc_foo_extern = linkonce_odr hidden global{{.*}}, section "__llvm_prf_cnts", comdat($__profv_foo_extern)
|
||||
; ELF: @__profd_foo_extern = linkonce_odr hidden global{{.*}}, section "__llvm_prf_data", comdat($__profv_foo_extern)
|
||||
-; COFF: @__profc_foo_extern = linkonce_odr dso_local global{{.*}}, section ".lprfc$M", comdat, align 8
|
||||
-; COFF: @__profd_foo_extern = internal global{{.*}}, section ".lprfd$M", comdat($__profc_foo_extern), align 8
|
||||
+; COFF: @__profc_foo_extern = linkonce_odr hidden global{{.*}}, section ".lprfc$M", comdat, align 8
|
||||
+; COFF: @__profd_foo_extern = linkonce_odr hidden global{{.*}}, section ".lprfd$M", comdat, align 8
|
||||
define available_externally void @foo_extern() {
|
||||
call void @llvm.instrprof.increment(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @__profn_foo_extern, i32 0, i32 0), i64 0, i32 1, i32 0)
|
||||
ret void
|
||||
--- a/llvm/test/Instrumentation/InstrProfiling/linkage.ll
|
||||
+++ b/llvm/test/Instrumentation/InstrProfiling/linkage.ll
|
||||
@@ -57,8 +57,8 @@
|
||||
; LINUX: @__profd_foo_extern = linkonce_odr hidden global {{.*}}section "__llvm_prf_data", comdat($__profv_foo_extern), align 8
|
||||
; MACHO: @__profc_foo_extern = linkonce_odr hidden global
|
||||
; MACHO: @__profd_foo_extern = linkonce_odr hidden global
|
||||
-; COFF: @__profc_foo_extern = linkonce_odr dso_local global {{.*}}section ".lprfc$M", comdat, align 8
|
||||
-; COFF: @__profd_foo_extern = internal global {{.*}}section ".lprfd$M", comdat($__profc_foo_extern), align 8
|
||||
+; COFF: @__profc_foo_extern = linkonce_odr hidden global {{.*}}section ".lprfc$M", comdat, align 8
|
||||
+; COFF: @__profd_foo_extern = linkonce_odr hidden global {{.*}}section ".lprfd$M", comdat, align 8
|
||||
define available_externally void @foo_extern() {
|
||||
call void @llvm.instrprof.increment(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @__profn_foo_extern, i32 0, i32 0), i64 0, i32 1, i32 0)
|
||||
ret void
|
@ -1,9 +1,9 @@
|
||||
Index: compiler-rt/lib/profile/GCDAProfiling.c
|
||||
===================================================================
|
||||
diff --git a/compiler-rt/lib/profile/GCDAProfiling.c b/compiler-rt/lib/profile/GCDAProfiling.c
|
||||
--- a/compiler-rt/lib/profile/GCDAProfiling.c (revisione 336380)
|
||||
+++ b/compiler-rt/lib/profile/GCDAProfiling.c (copia locale)
|
||||
@@ -555,7 +555,7 @@
|
||||
--- a/compiler-rt/lib/profile/GCDAProfiling.c
|
||||
+++ b/compiler-rt/lib/profile/GCDAProfiling.c
|
||||
@@ -619,7 +619,7 @@
|
||||
fn_list_insert(&flush_fn_list, fn);
|
||||
}
|
||||
|
||||
@ -16,12 +16,12 @@ diff --git a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp b/llvm/lib/Tr
|
||||
index 9af64ed332c..bcebe303ff4 100644
|
||||
--- a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
|
||||
+++ b/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
|
||||
@@ -648,7 +648,7 @@ void GCOVProfiler::AddFlushBeforeForkAndExec() {
|
||||
@@ -647,7 +647,7 @@
|
||||
for (auto I : ForkAndExecs) {
|
||||
IRBuilder<> Builder(I);
|
||||
FunctionType *FTy = FunctionType::get(Builder.getVoidTy(), {}, false);
|
||||
- Constant *GCOVFlush = M->getOrInsertFunction("__gcov_flush", FTy);
|
||||
+ Constant *GCOVFlush = M->getOrInsertFunction("__custom_llvm_gcov_flush", FTy);
|
||||
- FunctionCallee GCOVFlush = M->getOrInsertFunction("__gcov_flush", FTy);
|
||||
+ FunctionCallee GCOVFlush = M->getOrInsertFunction("__custom_llvm_gcov_flush", FTy);
|
||||
Builder.CreateCall(GCOVFlush);
|
||||
I->getParent()->splitBasicBlock(I);
|
||||
}
|
||||
@ -29,7 +29,7 @@ diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChain
|
||||
index e113f9a679..b3a07b18c0 100644
|
||||
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
|
||||
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
|
||||
@@ -1058,7 +1058,7 @@ void Darwin::addProfileRTLibs(const ArgList &Args,
|
||||
@@ -1122,7 +1122,7 @@
|
||||
// runtime's functionality.
|
||||
if (hasExportSymbolDirective(Args)) {
|
||||
if (needsGCovInstrumentation(Args)) {
|
||||
|
@ -1,117 +0,0 @@
|
||||
We need to revert LLVM's r355311 because it breaks exception handling in
|
||||
Windows/AArch64 builds
|
||||
|
||||
diff --git a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
|
||||
index ac5bdae9f1f..09e0706e284 100644
|
||||
--- a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
|
||||
+++ b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
|
||||
@@ -605,28 +605,19 @@ void AArch64AsmPrinter::PrintDebugValueComment(const MachineInstr *MI,
|
||||
|
||||
void AArch64AsmPrinter::EmitJumpTableInfo() {
|
||||
const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo();
|
||||
if (!MJTI) return;
|
||||
|
||||
const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables();
|
||||
if (JT.empty()) return;
|
||||
|
||||
- const Function &F = MF->getFunction();
|
||||
const TargetLoweringObjectFile &TLOF = getObjFileLowering();
|
||||
- bool JTInDiffSection =
|
||||
- !STI->isTargetCOFF() ||
|
||||
- !TLOF.shouldPutJumpTableInFunctionSection(
|
||||
- MJTI->getEntryKind() == MachineJumpTableInfo::EK_LabelDifference32,
|
||||
- F);
|
||||
- if (JTInDiffSection) {
|
||||
- // Drop it in the readonly section.
|
||||
- MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(F, TM);
|
||||
- OutStreamer->SwitchSection(ReadOnlySec);
|
||||
- }
|
||||
+ MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(MF->getFunction(), TM);
|
||||
+ OutStreamer->SwitchSection(ReadOnlySec);
|
||||
|
||||
auto AFI = MF->getInfo<AArch64FunctionInfo>();
|
||||
for (unsigned JTI = 0, e = JT.size(); JTI != e; ++JTI) {
|
||||
const std::vector<MachineBasicBlock*> &JTBBs = JT[JTI].MBBs;
|
||||
|
||||
// If this jump table was deleted, ignore it.
|
||||
if (JTBBs.empty()) continue;
|
||||
|
||||
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
|
||||
index d657fd414f3..d32f5a0ab29 100644
|
||||
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
|
||||
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
|
||||
@@ -204,18 +204,18 @@ static std::string computeDataLayout(const Triple &TT,
|
||||
return "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128";
|
||||
if (LittleEndian)
|
||||
return "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128";
|
||||
return "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128";
|
||||
}
|
||||
|
||||
static Reloc::Model getEffectiveRelocModel(const Triple &TT,
|
||||
Optional<Reloc::Model> RM) {
|
||||
- // AArch64 Darwin and Windows are always PIC.
|
||||
- if (TT.isOSDarwin() || TT.isOSWindows())
|
||||
+ // AArch64 Darwin is always PIC.
|
||||
+ if (TT.isOSDarwin())
|
||||
return Reloc::PIC_;
|
||||
// On ELF platforms the default static relocation model has a smart enough
|
||||
// linker to cope with referencing external symbols defined in a shared
|
||||
// library. Hence DynamicNoPIC doesn't need to be promoted to PIC.
|
||||
if (!RM.hasValue() || *RM == Reloc::DynamicNoPIC)
|
||||
return Reloc::Static;
|
||||
return *RM;
|
||||
}
|
||||
diff --git a/llvm/test/CodeGen/AArch64/win64-jumptable.ll b/llvm/test/CodeGen/AArch64/win64-jumptable.ll
|
||||
deleted file mode 100644
|
||||
index 8148a593c91..00000000000
|
||||
--- a/llvm/test/CodeGen/AArch64/win64-jumptable.ll
|
||||
+++ /dev/null
|
||||
@@ -1,48 +0,0 @@
|
||||
-; RUN: llc -o - %s -mtriple=aarch64-windows -aarch64-enable-compress-jump-tables=0 | FileCheck %s
|
||||
-
|
||||
-define void @f(i32 %x) {
|
||||
-entry:
|
||||
- switch i32 %x, label %sw.epilog [
|
||||
- i32 0, label %sw.bb
|
||||
- i32 1, label %sw.bb1
|
||||
- i32 2, label %sw.bb2
|
||||
- i32 3, label %sw.bb3
|
||||
- ]
|
||||
-
|
||||
-sw.bb: ; preds = %entry
|
||||
- tail call void @g(i32 0) #2
|
||||
- br label %sw.epilog
|
||||
-
|
||||
-sw.bb1: ; preds = %entry
|
||||
- tail call void @g(i32 1) #2
|
||||
- br label %sw.epilog
|
||||
-
|
||||
-sw.bb2: ; preds = %entry
|
||||
- tail call void @g(i32 2) #2
|
||||
- br label %sw.epilog
|
||||
-
|
||||
-sw.bb3: ; preds = %entry
|
||||
- tail call void @g(i32 3) #2
|
||||
- br label %sw.epilog
|
||||
-
|
||||
-sw.epilog: ; preds = %entry, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb
|
||||
- tail call void @g(i32 10) #2
|
||||
- ret void
|
||||
-}
|
||||
-
|
||||
-declare void @g(i32)
|
||||
-
|
||||
-; CHECK: .text
|
||||
-; CHECK: f:
|
||||
-; CHECK: .seh_proc f
|
||||
-; CHECK: b g
|
||||
-; CHECK-NEXT: .p2align 2
|
||||
-; CHECK-NEXT: .LJTI0_0:
|
||||
-; CHECK: .word .LBB0_2-.LJTI0_0
|
||||
-; CHECK: .word .LBB0_3-.LJTI0_0
|
||||
-; CHECK: .word .LBB0_4-.LJTI0_0
|
||||
-; CHECK: .word .LBB0_5-.LJTI0_0
|
||||
-; CHECK: .section .xdata,"dr"
|
||||
-; CHECK: .seh_handlerdata
|
||||
-; CHECK: .text
|
||||
-; CHECK: .seh_endproc
|
341
build/build-clang/revert-r359260-due-to-bug41817.patch
Normal file
341
build/build-clang/revert-r359260-due-to-bug41817.patch
Normal file
@ -0,0 +1,341 @@
|
||||
https://llvm.org/pr41817 "The linkage changes in r359260 break MIDL code"
|
||||
|
||||
MIDL produces non-standards-compliant C code for some of our .idl files. MSVC
|
||||
and older versions of clang-cl used to accept it, but r359260 inadvertently
|
||||
caused such code to break. Until a fix is available upstream, let's revert
|
||||
r359260 in the meantime.
|
||||
|
||||
Index: lib/AST/Decl.cpp
|
||||
===================================================================
|
||||
--- a/clang/lib/AST/Decl.cpp
|
||||
+++ b/clang/lib/AST/Decl.cpp
|
||||
@@ -610,18 +610,6 @@
|
||||
return LinkageInfo::external();
|
||||
}
|
||||
|
||||
-static StorageClass getStorageClass(const Decl *D) {
|
||||
- if (auto *TD = dyn_cast<TemplateDecl>(D))
|
||||
- D = TD->getTemplatedDecl();
|
||||
- if (D) {
|
||||
- if (auto *VD = dyn_cast<VarDecl>(D))
|
||||
- return VD->getStorageClass();
|
||||
- if (auto *FD = dyn_cast<FunctionDecl>(D))
|
||||
- return FD->getStorageClass();
|
||||
- }
|
||||
- return SC_None;
|
||||
-}
|
||||
-
|
||||
LinkageInfo
|
||||
LinkageComputer::getLVForNamespaceScopeDecl(const NamedDecl *D,
|
||||
LVComputationKind computation,
|
||||
@@ -633,28 +621,24 @@
|
||||
// C++ [basic.link]p3:
|
||||
// A name having namespace scope (3.3.6) has internal linkage if it
|
||||
// is the name of
|
||||
+ // - an object, reference, function or function template that is
|
||||
+ // explicitly declared static; or,
|
||||
+ // (This bullet corresponds to C99 6.2.2p3.)
|
||||
+ if (const auto *Var = dyn_cast<VarDecl>(D)) {
|
||||
+ // Explicitly declared static.
|
||||
+ if (Var->getStorageClass() == SC_Static)
|
||||
+ return getInternalLinkageFor(Var);
|
||||
|
||||
- if (getStorageClass(D->getCanonicalDecl()) == SC_Static) {
|
||||
- // - a variable, variable template, function, or function template
|
||||
- // that is explicitly declared static; or
|
||||
- // (This bullet corresponds to C99 6.2.2p3.)
|
||||
- return getInternalLinkageFor(D);
|
||||
- }
|
||||
-
|
||||
- if (const auto *Var = dyn_cast<VarDecl>(D)) {
|
||||
- // - a non-template variable of non-volatile const-qualified type, unless
|
||||
- // - it is explicitly declared extern, or
|
||||
- // - it is inline or exported, or
|
||||
- // - it was previously declared and the prior declaration did not have
|
||||
- // internal linkage
|
||||
- // (There is no equivalent in C99.)
|
||||
+ // - a non-inline, non-volatile object or reference that is explicitly
|
||||
+ // declared const or constexpr and neither explicitly declared extern
|
||||
+ // nor previously declared to have external linkage; or (there is no
|
||||
+ // equivalent in C99)
|
||||
+ // The C++ modules TS adds "non-exported" to this list.
|
||||
if (Context.getLangOpts().CPlusPlus &&
|
||||
Var->getType().isConstQualified() &&
|
||||
!Var->getType().isVolatileQualified() &&
|
||||
!Var->isInline() &&
|
||||
- !isExportedFromModuleInterfaceUnit(Var) &&
|
||||
- !isa<VarTemplateSpecializationDecl>(Var) &&
|
||||
- !Var->getDescribedVarTemplate()) {
|
||||
+ !isExportedFromModuleInterfaceUnit(Var)) {
|
||||
const VarDecl *PrevVar = Var->getPreviousDecl();
|
||||
if (PrevVar)
|
||||
return getLVForDecl(PrevVar, computation);
|
||||
@@ -674,6 +658,14 @@
|
||||
if (PrevVar->getStorageClass() == SC_Static)
|
||||
return getInternalLinkageFor(Var);
|
||||
}
|
||||
+ } else if (const FunctionDecl *Function = D->getAsFunction()) {
|
||||
+ // C++ [temp]p4:
|
||||
+ // A non-member function template can have internal linkage; any
|
||||
+ // other template name shall have external linkage.
|
||||
+
|
||||
+ // Explicitly declared static.
|
||||
+ if (Function->getCanonicalDecl()->getStorageClass() == SC_Static)
|
||||
+ return getInternalLinkageFor(Function);
|
||||
} else if (const auto *IFD = dyn_cast<IndirectFieldDecl>(D)) {
|
||||
// - a data member of an anonymous union.
|
||||
const VarDecl *VD = IFD->getVarDecl();
|
||||
@@ -682,8 +674,6 @@
|
||||
}
|
||||
assert(!isa<FieldDecl>(D) && "Didn't expect a FieldDecl!");
|
||||
|
||||
- // FIXME: This gives internal linkage to names that should have no linkage
|
||||
- // (those not covered by [basic.link]p6).
|
||||
if (D->isInAnonymousNamespace()) {
|
||||
const auto *Var = dyn_cast<VarDecl>(D);
|
||||
const auto *Func = dyn_cast<FunctionDecl>(D);
|
||||
@@ -743,20 +733,10 @@
|
||||
|
||||
// C++ [basic.link]p4:
|
||||
|
||||
- // A name having namespace scope that has not been given internal linkage
|
||||
- // above and that is the name of
|
||||
- // [...bullets...]
|
||||
- // has its linkage determined as follows:
|
||||
- // - if the enclosing namespace has internal linkage, the name has
|
||||
- // internal linkage; [handled above]
|
||||
- // - otherwise, if the declaration of the name is attached to a named
|
||||
- // module and is not exported, the name has module linkage;
|
||||
- // - otherwise, the name has external linkage.
|
||||
- // LV is currently set up to handle the last two bullets.
|
||||
+ // A name having namespace scope has external linkage if it is the
|
||||
+ // name of
|
||||
//
|
||||
- // The bullets are:
|
||||
-
|
||||
- // - a variable; or
|
||||
+ // - an object or reference, unless it has internal linkage; or
|
||||
if (const auto *Var = dyn_cast<VarDecl>(D)) {
|
||||
// GCC applies the following optimization to variables and static
|
||||
// data members, but not to functions:
|
||||
@@ -802,7 +782,7 @@
|
||||
mergeTemplateLV(LV, spec, computation);
|
||||
}
|
||||
|
||||
- // - a function; or
|
||||
+ // - a function, unless it has internal linkage; or
|
||||
} else if (const auto *Function = dyn_cast<FunctionDecl>(D)) {
|
||||
// In theory, we can modify the function's LV by the LV of its
|
||||
// type unless it has C linkage (see comment above about variables
|
||||
@@ -856,8 +836,7 @@
|
||||
mergeTemplateLV(LV, spec, computation);
|
||||
}
|
||||
|
||||
- // FIXME: This is not part of the C++ standard any more.
|
||||
- // - an enumerator belonging to an enumeration with external linkage; or
|
||||
+ // - an enumerator belonging to an enumeration with external linkage;
|
||||
} else if (isa<EnumConstantDecl>(D)) {
|
||||
LinkageInfo EnumLV = getLVForDecl(cast<NamedDecl>(D->getDeclContext()),
|
||||
computation);
|
||||
@@ -865,7 +844,8 @@
|
||||
return LinkageInfo::none();
|
||||
LV.merge(EnumLV);
|
||||
|
||||
- // - a template
|
||||
+ // - a template, unless it is a function template that has
|
||||
+ // internal linkage (Clause 14);
|
||||
} else if (const auto *temp = dyn_cast<TemplateDecl>(D)) {
|
||||
bool considerVisibility = !hasExplicitVisibilityAlready(computation);
|
||||
LinkageInfo tempLV =
|
||||
@@ -872,9 +852,8 @@
|
||||
getLVForTemplateParameterList(temp->getTemplateParameters(), computation);
|
||||
LV.mergeMaybeWithVisibility(tempLV, considerVisibility);
|
||||
|
||||
- // An unnamed namespace or a namespace declared directly or indirectly
|
||||
- // within an unnamed namespace has internal linkage. All other namespaces
|
||||
- // have external linkage.
|
||||
+ // - a namespace (7.3), unless it is declared within an unnamed
|
||||
+ // namespace.
|
||||
//
|
||||
// We handled names in anonymous namespaces above.
|
||||
} else if (isa<NamespaceDecl>(D)) {
|
||||
Index: test/CXX/drs/dr23xx.cpp
|
||||
===================================================================
|
||||
--- a/clang/test/CXX/drs/dr23xx.cpp
|
||||
+++ b/clang/test/CXX/drs/dr23xx.cpp
|
||||
@@ -60,20 +60,3 @@
|
||||
void wrong_value() { auto [x, y] = Bad2(); } // expected-error {{decomposes into 42 elements}}
|
||||
} // namespace dr2386
|
||||
#endif
|
||||
-
|
||||
-namespace dr2387 { // dr2387: 9
|
||||
-#if __cplusplus >= 201402L
|
||||
- template<int> int a = 0;
|
||||
- extern template int a<0>; // ok
|
||||
-
|
||||
- template<int> static int b = 0;
|
||||
- extern template int b<0>; // expected-error {{internal linkage}}
|
||||
-
|
||||
- template<int> const int c = 0;
|
||||
- extern template const int c<0>; // ok, has external linkage despite 'const'
|
||||
-
|
||||
- template<typename T> T d = 0;
|
||||
- extern template int d<int>;
|
||||
- extern template const int d<const int>;
|
||||
-#endif
|
||||
-}
|
||||
Index: test/CXX/module/module.interface/p3.cpp
|
||||
===================================================================
|
||||
--- a/clang/test/CXX/module/module.interface/p3.cpp
|
||||
+++ b/clang/test/CXX/module/module.interface/p3.cpp
|
||||
@@ -48,7 +48,7 @@
|
||||
namespace { // expected-note {{here}}
|
||||
export int d; // expected-error {{export declaration appears within anonymous namespace}}
|
||||
}
|
||||
-export template<typename> static int e; // expected-error {{declaration of 'e' with internal linkage cannot be exported}}
|
||||
+export template<typename> static int e; // FIXME
|
||||
export template<typename> static int f(); // expected-error {{declaration of 'f' with internal linkage cannot be exported}}
|
||||
export const int k = 5;
|
||||
export static union { int n; }; // expected-error {{declaration of 'n' with internal linkage cannot be exported}}
|
||||
Index: test/CXX/module/module.interface/p5.cpp
|
||||
===================================================================
|
||||
--- a/clang/test/CXX/module/module.interface/p5.cpp
|
||||
+++ b/clang/test/CXX/module/module.interface/p5.cpp
|
||||
@@ -14,7 +14,7 @@
|
||||
namespace NS {}
|
||||
|
||||
template<typename> int ta;
|
||||
-template<typename> static int sta; // expected-note {{target}}
|
||||
+template<typename> static int sta;
|
||||
template<typename> void tb();
|
||||
template<typename> static void stb(); // expected-note {{target}}
|
||||
template<typename> struct tc {};
|
||||
@@ -44,7 +44,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
-export { // expected-note 19{{here}}
|
||||
+export { // expected-note 18{{here}}
|
||||
using ::a;
|
||||
using ::sa; // expected-error {{using declaration referring to 'sa' with internal linkage}}
|
||||
using ::b;
|
||||
@@ -56,7 +56,7 @@
|
||||
using ::sg1; // expected-error {{using declaration referring to 'sg1' with internal linkage}}
|
||||
|
||||
using ::ta;
|
||||
- using ::sta; // expected-error {{using declaration referring to 'sta' with internal linkage}}
|
||||
+ using ::sta; // FIXME {{using declaration referring to 'sta' with internal linkage}}
|
||||
using ::tb;
|
||||
using ::stb; // expected-error {{using declaration referring to 'stb' with internal linkage}}
|
||||
using ::tc;
|
||||
Index: test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
|
||||
===================================================================
|
||||
--- a/clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
|
||||
+++ b/clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
|
||||
@@ -6,61 +6,21 @@
|
||||
// should be 'internal global' and not 'linkonce_odr global'.
|
||||
|
||||
template <typename T> int x = 42;
|
||||
-// CHECK-DAG: @_Z1xIiE = linkonce_odr global
|
||||
+
|
||||
// CHECK-DAG: @_Z1xIZL3foovE3FooE = internal global
|
||||
|
||||
-// 'static' affects the linkage of the global
|
||||
-template <typename T> static int y = 42;
|
||||
-// CHECK-DAG: @_ZL1yIiE = internal global
|
||||
-// CHECK-DAG: @_ZL1yIZL3foovE3FooE = internal global
|
||||
-
|
||||
-// 'const' does not
|
||||
-template <typename T> const int z = 42;
|
||||
-// CHECK-DAG: @_Z1zIiE = linkonce_odr constant
|
||||
-// CHECK-DAG: @_Z1zIZL3foovE3FooE = internal constant
|
||||
-
|
||||
-template <typename T> T t = 42;
|
||||
-// CHECK-DAG: @_Z1tIiE = linkonce_odr global
|
||||
-// CHECK-DAG: @_Z1tIKiE = linkonce_odr constant
|
||||
-
|
||||
-int mode;
|
||||
-
|
||||
// CHECK-DAG: define internal dereferenceable(4) i32* @_ZL3foov(
|
||||
-static const int &foo() {
|
||||
+static int &foo() {
|
||||
struct Foo { };
|
||||
-
|
||||
- switch (mode) {
|
||||
- case 0:
|
||||
- // CHECK-DAG: @_Z1xIiE
|
||||
- return x<int>;
|
||||
- case 1:
|
||||
- // CHECK-DAG: @_Z1xIZL3foovE3FooE
|
||||
- return x<Foo>;
|
||||
- case 2:
|
||||
- // CHECK-DAG: @_ZL1yIiE
|
||||
- return y<int>;
|
||||
- case 3:
|
||||
- // CHECK-DAG: @_ZL1yIZL3foovE3FooE
|
||||
- return y<Foo>;
|
||||
- case 4:
|
||||
- // CHECK-DAG: @_Z1zIiE
|
||||
- return z<int>;
|
||||
- case 5:
|
||||
- // CHECK-DAG: @_Z1zIZL3foovE3FooE
|
||||
- return z<Foo>;
|
||||
- case 6:
|
||||
- // CHECK-DAG: @_Z1tIiE
|
||||
- return t<int>;
|
||||
- case 7:
|
||||
- // CHECK-DAG: @_Z1tIKiE
|
||||
- return t<const int>;
|
||||
- }
|
||||
+
|
||||
+ // CHECK-DAG: ret i32* @_Z1xIZL3foovE3FooE
|
||||
+ return x<Foo>;
|
||||
}
|
||||
|
||||
|
||||
#if !__has_feature(cxx_exceptions) // File A
|
||||
// CHECKA-DAG: define dereferenceable(4) i32* @_Z3barv(
|
||||
-const int &bar() {
|
||||
+int &bar() {
|
||||
// CHECKA-DAG: call dereferenceable(4) i32* @_ZL3foov()
|
||||
return foo();
|
||||
}
|
||||
@@ -68,7 +28,7 @@
|
||||
#else // File B
|
||||
|
||||
// CHECKB-DAG: declare dereferenceable(4) i32* @_Z3barv(
|
||||
-const int &bar();
|
||||
+int &bar();
|
||||
|
||||
int main() {
|
||||
// CHECKB-DAG: call dereferenceable(4) i32* @_Z3barv()
|
||||
Index: test/SemaCXX/warn-unused-filescoped.cpp
|
||||
===================================================================
|
||||
--- a/clang/test/SemaCXX/warn-unused-filescoped.cpp
|
||||
+++ b/clang/test/SemaCXX/warn-unused-filescoped.cpp
|
||||
@@ -207,9 +207,8 @@
|
||||
|
||||
namespace test10 {
|
||||
#if __cplusplus >= 201103L
|
||||
-// FIXME: Warn on template definitions with no instantiations?
|
||||
template<class T>
|
||||
-constexpr T pi = T(3.14);
|
||||
+constexpr T pi = T(3.14); // expected-warning {{unused}}
|
||||
#endif
|
||||
}
|
||||
|
||||
Index: test/SemaCXX/warn-unused-variables.cpp
|
||||
===================================================================
|
||||
--- a/clang/test/SemaCXX/warn-unused-variables.cpp
|
||||
+++ b/clang/test/SemaCXX/warn-unused-variables.cpp
|
||||
@@ -135,9 +135,7 @@
|
||||
template<typename T> int m = 0;
|
||||
template<typename T> int m<T*> = 0;
|
||||
|
||||
- // This has external linkage, so could be referenced by a declaration in a
|
||||
- // different translation unit.
|
||||
- template<> const int m<void> = 0; // no warning
|
||||
+ template<> const int m<void> = 0; // expected-warning {{unused variable}}
|
||||
}
|
||||
|
||||
namespace ctor_with_cleanups {
|
65
build/build-clang/revert-r362047-and-r362065.patch
Normal file
65
build/build-clang/revert-r362047-and-r362065.patch
Normal file
@ -0,0 +1,65 @@
|
||||
Bisection found that r362047 (and its followup build fix r362065) cause the
|
||||
build to install the android PGO library into the following location:
|
||||
stage2/clang/lib/linux/libclang_rt.profile-arm-android.a
|
||||
rather than the expected:
|
||||
stage2/clang/lib64/clang/$VERSION/lib/linux/libclang_rt.profile-arm-android.a
|
||||
|
||||
For lack of any progress in debugging this, revert those two patches.
|
||||
|
||||
--- a/llvm/runtimes/CMakeLists.txt
|
||||
+++ b/llvm/runtimes/CMakeLists.txt
|
||||
@@ -59,13 +59,12 @@
|
||||
cmake_minimum_required(VERSION 3.4.3)
|
||||
project(Runtimes C CXX ASM)
|
||||
|
||||
- find_package(LLVM PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
|
||||
-
|
||||
# Add the root project's CMake modules, and the LLVM build's modules to the
|
||||
# CMake module path.
|
||||
list(INSERT CMAKE_MODULE_PATH 0
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../cmake"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules"
|
||||
+ "${LLVM_LIBRARY_DIR}/cmake/llvm"
|
||||
)
|
||||
|
||||
# Some of the runtimes will conditionally use the compiler-rt sanitizers
|
||||
@@ -80,6 +79,11 @@
|
||||
endif()
|
||||
endif()
|
||||
|
||||
+ # LLVMConfig.cmake contains a bunch of CMake variables from the LLVM build.
|
||||
+ # This file is installed as part of LLVM distributions, so this can be used
|
||||
+ # either from a build directory or an installed LLVM.
|
||||
+ include(LLVMConfig)
|
||||
+
|
||||
# Setting these variables will allow the sub-build to put their outputs into
|
||||
# the library and bin directories of the top-level build.
|
||||
set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR})
|
||||
@@ -89,9 +93,6 @@
|
||||
set(LLVM_MAIN_SRC_DIR ${LLVM_BUILD_MAIN_SRC_DIR})
|
||||
set(LLVM_CMAKE_PATH ${LLVM_MAIN_SRC_DIR}/cmake/modules)
|
||||
|
||||
- # This variable is used by individual runtimes to locate LLVM files.
|
||||
- set(LLVM_PATH ${LLVM_BUILD_MAIN_SRC_DIR})
|
||||
-
|
||||
if(APPLE)
|
||||
set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "")
|
||||
endif()
|
||||
@@ -380,6 +381,8 @@
|
||||
# Builtins were built separately above
|
||||
CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off
|
||||
-DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
|
||||
+ -DLLVM_BINARY_DIR=${LLVM_BINARY_DIR}
|
||||
+ -DLLVM_LIBRARY_DIR=${LLVM_LIBRARY_DIR}
|
||||
-DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE}
|
||||
-DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED}
|
||||
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
|
||||
@@ -470,6 +473,8 @@
|
||||
# Builtins were built separately above
|
||||
CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off
|
||||
-DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
|
||||
+ -DLLVM_BINARY_DIR=${LLVM_BINARY_DIR}
|
||||
+ -DLLVM_LIBRARY_DIR=${LLVM_LIBRARY_DIR}
|
||||
-DLLVM_DEFAULT_TARGET_TRIPLE=${target}
|
||||
-DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED}
|
||||
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
|
@ -1,13 +1,21 @@
|
||||
[winasan] Unpoison the stack in NtTerminateThread
|
||||
|
||||
In long-running builds we've seen some ASan complaints during thread creation that we suspect are due to leftover poisoning from previous threads whose stacks occupied that memory. This patch adds a hook that unpoisons the stack just before the NtTerminateThread syscall.
|
||||
In long-running builds we've seen some ASan complaints during thread creation
|
||||
that we suspect are due to leftover poisoning from previous threads whose stacks
|
||||
occupied that memory. This patch adds a hook that unpoisons the stack just
|
||||
before the NtTerminateThread syscall.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D52091
|
||||
|
||||
--- a/compiler-rt/lib/asan/asan_win.cc (revision 342651)
|
||||
+++ b/compiler-rt/lib/asan/asan_win.cc (revision 342652)
|
||||
** Update for clang 9 ** : After some backouts, this patch eventually landed
|
||||
upstream in a different form, as the TLS handler `asan_thread_exit`, but that
|
||||
variant causes failures in our test suite, so revert the TLS handler in favor of
|
||||
the interceptor approach from the first patch.
|
||||
|
||||
--- a/compiler-rt/lib/asan/asan_win.cc
|
||||
+++ b/compiler-rt/lib/asan/asan_win.cc
|
||||
@@ -154,6 +154,14 @@
|
||||
asan_thread_start, t, thr_flags, tid);
|
||||
thr_flags, tid);
|
||||
}
|
||||
|
||||
+INTERCEPTOR_WINAPI(void, NtTerminateThread, void *rcx) {
|
||||
@ -21,7 +29,7 @@ Differential Revision: https://reviews.llvm.org/D52091
|
||||
// }}}
|
||||
|
||||
namespace __asan {
|
||||
@@ -169,7 +177,9 @@
|
||||
@@ -168,7 +176,9 @@
|
||||
|
||||
ASAN_INTERCEPT_FUNC(CreateThread);
|
||||
ASAN_INTERCEPT_FUNC(SetUnhandledExceptionFilter);
|
||||
@ -32,3 +40,23 @@ Differential Revision: https://reviews.llvm.org/D52091
|
||||
#ifdef _WIN64
|
||||
ASAN_INTERCEPT_FUNC(__C_specific_handler);
|
||||
#else
|
||||
@@ -380,19 +390,6 @@
|
||||
void *, unsigned long, void *) = asan_thread_init;
|
||||
#endif
|
||||
|
||||
-static void NTAPI asan_thread_exit(void *module, DWORD reason, void *reserved) {
|
||||
- if (reason == DLL_THREAD_DETACH) {
|
||||
- // Unpoison the thread's stack because the memory may be re-used.
|
||||
- NT_TIB *tib = (NT_TIB *)NtCurrentTeb();
|
||||
- uptr stackSize = (uptr)tib->StackBase - (uptr)tib->StackLimit;
|
||||
- __asan_unpoison_memory_region(tib->StackLimit, stackSize);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-#pragma section(".CRT$XLY", long, read) // NOLINT
|
||||
-__declspec(allocate(".CRT$XLY")) void(NTAPI *__asan_tls_exit)(
|
||||
- void *, unsigned long, void *) = asan_thread_exit;
|
||||
-
|
||||
WIN_FORCE_LINK(__asan_dso_reg_hook)
|
||||
|
||||
// }}}
|
||||
|
@ -1,31 +0,0 @@
|
||||
diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt
|
||||
index 86ca2b3ef..f6ddd24eb 100644
|
||||
--- a/compiler-rt/CMakeLists.txt
|
||||
+++ b/compiler-rt/CMakeLists.txt
|
||||
@@ -284,6 +284,26 @@ if(MSVC)
|
||||
# warning from the MS linker complaining that it can't find the 'vc140.pdb'
|
||||
# file used by our object library compilations.
|
||||
list(APPEND SANITIZER_COMMON_CFLAGS /Z7)
|
||||
+
|
||||
+# Copied from llvm/cmake/modules/LLVMProcessSources.cmake
|
||||
+function(llvm_replace_compiler_option var old new)
|
||||
+ # Replaces a compiler option or switch `old' in `var' by `new'.
|
||||
+ # If `old' is not in `var', appends `new' to `var'.
|
||||
+ # Example: llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
|
||||
+ # If the option already is on the variable, don't add it:
|
||||
+ if( "${${var}}" MATCHES "(^| )${new}($| )" )
|
||||
+ set(n "")
|
||||
+ else()
|
||||
+ set(n "${new}")
|
||||
+ endif()
|
||||
+ if( "${${var}}" MATCHES "(^| )${old}($| )" )
|
||||
+ string( REGEX REPLACE "(^| )${old}($| )" " ${n} " ${var} "${${var}}" )
|
||||
+ else()
|
||||
+ set( ${var} "${${var}} ${n}" )
|
||||
+ endif()
|
||||
+ set( ${var} "${${var}}" PARENT_SCOPE )
|
||||
+endfunction(llvm_replace_compiler_option)
|
||||
+
|
||||
llvm_replace_compiler_option(CMAKE_CXX_FLAGS "/Z[i7I]" "/Z7")
|
||||
llvm_replace_compiler_option(CMAKE_CXX_FLAGS_DEBUG "/Z[i7I]" "/Z7")
|
||||
llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Z[i7I]" "/Z7")
|
@ -1058,7 +1058,7 @@ linux64-ccov/debug:
|
||||
need-xvfb: true
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-rust-nightly
|
||||
- linux64-gcc
|
||||
- linux64-grcov
|
||||
@ -1096,7 +1096,7 @@ linux64-ccov/opt:
|
||||
need-xvfb: true
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-rust-nightly
|
||||
- linux64-gcc
|
||||
- linux64-cbindgen
|
||||
|
@ -400,6 +400,13 @@ clang-8:
|
||||
repo: https://github.com/llvm/llvm-project
|
||||
revision: 19a71f6bdf2dddb10764939e7f0ec2b98dba76c9
|
||||
|
||||
clang-9:
|
||||
description: clang 9.0.0 source code
|
||||
fetch:
|
||||
type: git
|
||||
repo: https://github.com/llvm/llvm-project
|
||||
revision: 0399d5a9682b3cef71c653373e38890c63c4c365
|
||||
|
||||
ninja:
|
||||
description: ninja 1.9.0
|
||||
fetch:
|
||||
|
@ -44,7 +44,7 @@ macosx64-cbindgen:
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-cctools-port
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-llvm-dsymutil
|
||||
- linux64-rust-macos-1.32
|
||||
|
||||
|
@ -20,5 +20,5 @@ linux64-cctools-port:
|
||||
toolchain-artifact: public/build/cctools.tar.xz
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-binutils
|
||||
|
@ -24,7 +24,7 @@ job-defaults:
|
||||
- try
|
||||
fetches:
|
||||
fetch:
|
||||
- clang-8
|
||||
- clang-9
|
||||
|
||||
linux64-clang-tidy:
|
||||
index:
|
||||
@ -39,6 +39,7 @@ linux64-clang-tidy:
|
||||
- 'build/build-clang/clang-tidy-linux64.json'
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-binutils
|
||||
- linux64-gcc-6
|
||||
|
||||
macosx64-clang-tidy:
|
||||
@ -61,8 +62,9 @@ macosx64-clang-tidy:
|
||||
- 'taskcluster/scripts/misc/tooltool-download.sh'
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-binutils
|
||||
- linux64-cctools-port
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-gcc-6
|
||||
- linux64-node
|
||||
|
||||
|
@ -46,23 +46,24 @@ linux64-clang-7:
|
||||
toolchain:
|
||||
- linux64-gcc-6
|
||||
|
||||
linux64-clang-8:
|
||||
description: "Clang 8 toolchain build"
|
||||
linux64-clang-9:
|
||||
description: "Clang 9 toolchain build"
|
||||
treeherder:
|
||||
symbol: TL(clang8)
|
||||
symbol: TL(clang9)
|
||||
run:
|
||||
using: toolchain-script
|
||||
script: build-clang.sh
|
||||
arguments:
|
||||
- 'build/build-clang/clang-8-linux64.json'
|
||||
- 'build/build-clang/clang-linux64.json'
|
||||
resources:
|
||||
- 'build/build-clang/clang-8-linux64.json'
|
||||
- 'build/build-clang/clang-linux64.json'
|
||||
toolchain-alias: linux64-clang
|
||||
toolchain-artifact: public/build/clang.tar.xz
|
||||
fetches:
|
||||
fetch:
|
||||
- clang-8
|
||||
- clang-9
|
||||
toolchain:
|
||||
- linux64-binutils
|
||||
- linux64-gcc-6
|
||||
|
||||
linux64-clang-8-mingw-x86:
|
||||
@ -110,30 +111,31 @@ linux64-clang-8-mingw-x64:
|
||||
toolchain:
|
||||
- linux64-gcc-6
|
||||
|
||||
linux64-clang-8-android-cross:
|
||||
description: "Clang 8 toolchain build"
|
||||
linux64-clang-9-android-cross:
|
||||
description: "Clang 9 toolchain build"
|
||||
treeherder:
|
||||
symbol: TL(clang8-android)
|
||||
symbol: TL(clang9-android)
|
||||
run:
|
||||
using: toolchain-script
|
||||
script: build-clang.sh
|
||||
arguments:
|
||||
- 'build/build-clang/clang-8-android.json'
|
||||
- 'build/build-clang/clang-android.json'
|
||||
resources:
|
||||
- 'build/build-clang/clang-8-android.json'
|
||||
- 'build/build-clang/clang-android.json'
|
||||
toolchain-alias: linux64-clang-android-cross
|
||||
toolchain-artifact: public/build/clang.tar.xz
|
||||
fetches:
|
||||
fetch:
|
||||
- clang-8
|
||||
- clang-9
|
||||
toolchain:
|
||||
- linux64-binutils
|
||||
- linux64-gcc-6
|
||||
- linux64-android-ndk-linux-repack
|
||||
|
||||
linux64-clang-8-aarch64-cross:
|
||||
description: "Clang 8 toolchain build with aarch64 runtime"
|
||||
linux64-clang-9-aarch64-cross:
|
||||
description: "Clang 9 toolchain build with aarch64 runtime"
|
||||
treeherder:
|
||||
symbol: TL(clang8-aarch64)
|
||||
symbol: TL(clang9-aarch64)
|
||||
worker-type: b-linux
|
||||
worker:
|
||||
max-run-time: 3600
|
||||
@ -142,43 +144,44 @@ linux64-clang-8-aarch64-cross:
|
||||
using: toolchain-script
|
||||
script: build-clang.sh
|
||||
arguments:
|
||||
- 'build/build-clang/clang-8-linux64-aarch64-cross.json'
|
||||
- 'build/build-clang/clang-linux64-aarch64-cross.json'
|
||||
resources:
|
||||
- 'build/build-clang/clang-8-linux64-aarch64-cross.json'
|
||||
- 'build/build-clang/clang-linux64-aarch64-cross.json'
|
||||
toolchain-alias: linux64-clang-aarch64-cross
|
||||
toolchain-artifact: public/build/clang.tar.xz
|
||||
fetches:
|
||||
fetch:
|
||||
- clang-8
|
||||
- clang-9
|
||||
toolchain:
|
||||
- linux64-binutils
|
||||
- linux64-gcc-6
|
||||
|
||||
linux64-clang-8-macosx-cross:
|
||||
description: "Clang 8 toolchain build with MacOS Compiler RT libs"
|
||||
linux64-clang-9-macosx-cross:
|
||||
description: "Clang 9 toolchain build with MacOS Compiler RT libs"
|
||||
treeherder:
|
||||
symbol: TL(clang8-macosx-cross)
|
||||
symbol: TL(clang9-macosx-cross)
|
||||
worker-type: b-linux
|
||||
worker:
|
||||
max-run-time: 3600
|
||||
env:
|
||||
TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-clang.manifest"
|
||||
run:
|
||||
script: build-clang-8-linux-macosx-cross.sh
|
||||
script: build-clang-linux-macosx-cross.sh
|
||||
arguments:
|
||||
- 'build/build-clang/clang-8-macosx64.json'
|
||||
- 'build/build-clang/clang-macosx64.json'
|
||||
resources:
|
||||
- 'build/build-clang/clang-8-macosx64.json'
|
||||
- 'build/build-clang/clang-macosx64.json'
|
||||
- 'taskcluster/scripts/misc/tooltool-download.sh'
|
||||
toolchain-alias: linux64-clang-macosx-cross
|
||||
toolchain-artifact: public/build/clang.tar.xz
|
||||
tooltool-downloads: internal
|
||||
fetches:
|
||||
fetch:
|
||||
- clang-8
|
||||
- clang-9
|
||||
toolchain:
|
||||
- linux64-binutils
|
||||
- linux64-cctools-port
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-gcc-6
|
||||
|
||||
macosx64-clang:
|
||||
@ -197,17 +200,18 @@ macosx64-clang:
|
||||
script: build-clang.sh
|
||||
tooltool-downloads: internal
|
||||
arguments:
|
||||
- 'build/build-clang/clang-8-macosx64.json'
|
||||
- 'build/build-clang/clang-macosx64.json'
|
||||
resources:
|
||||
- 'build/build-clang/clang-8-macosx64.json'
|
||||
- 'build/build-clang/clang-macosx64.json'
|
||||
- 'taskcluster/scripts/misc/tooltool-download.sh'
|
||||
toolchain-artifact: public/build/clang.tar.xz
|
||||
fetches:
|
||||
fetch:
|
||||
- clang-8
|
||||
- clang-9
|
||||
toolchain:
|
||||
- linux64-binutils
|
||||
- linux64-cctools-port
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-gcc-6
|
||||
- linux64-node
|
||||
|
||||
@ -229,6 +233,6 @@ win64-clang-cl:
|
||||
toolchain-artifact: public/build/clang.tar.bz2
|
||||
fetches:
|
||||
fetch:
|
||||
- clang-8
|
||||
- clang-9
|
||||
- cmake
|
||||
- ninja
|
||||
|
@ -22,7 +22,7 @@ clang-dist-toolchain:
|
||||
toolchain-artifact: public/build/clang-dist-toolchain.tar.xz
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-sccache
|
||||
|
||||
rustc-dist-toolchain:
|
||||
|
@ -41,7 +41,7 @@ macosx64-gn:
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-cctools-port
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
|
||||
win32-gn:
|
||||
treeherder:
|
||||
|
@ -31,7 +31,7 @@ linux64-minidump-stackwalk:
|
||||
symbol: TL(stackwalk)
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-binutils
|
||||
- linux64-rust-1.31
|
||||
|
||||
@ -49,7 +49,7 @@ macosx64-minidump-stackwalk:
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-cctools-port
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-rust-macos-1.31
|
||||
|
||||
win32-minidump-stackwalk:
|
||||
|
@ -65,7 +65,7 @@ linux64-hfsplus:
|
||||
fetch:
|
||||
- hfsplus-tools
|
||||
toolchain:
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
|
||||
linux64-libdmg:
|
||||
description: "libdmg-hfsplus toolchain build"
|
||||
|
@ -48,7 +48,7 @@ macosx64-sccache:
|
||||
fetches:
|
||||
toolchain:
|
||||
- linux64-rust-macos-1.34
|
||||
- linux64-clang-8
|
||||
- linux64-clang-9
|
||||
- linux64-cctools-port
|
||||
- linux64-llvm-dsymutil
|
||||
- linux64-binutils
|
||||
|
@ -847,7 +847,9 @@ xul|tree {
|
||||
|
||||
xul|tree:-moz-focusring,
|
||||
xul|richlistbox:-moz-focusring {
|
||||
border: 1px dotted var(--in-content-border-focus);
|
||||
border-color: var(--in-content-border-active);
|
||||
box-shadow: 0 0 0 1px var(--in-content-border-active),
|
||||
0 0 0 4px var(--in-content-border-active-shadow);
|
||||
}
|
||||
|
||||
xul|treecols {
|
||||
|
@ -18,7 +18,7 @@ platforms:
|
||||
- win64
|
||||
# Minimum clang-tidy version that is required for all the following checkers
|
||||
# to work properly.
|
||||
package_version: "8.0.1"
|
||||
package_version: "9.0.0"
|
||||
clang_checkers:
|
||||
- name: -*
|
||||
publish: !!bool no
|
||||
|
@ -1 +1 @@
|
||||
[["warning", "string constructor parameters are probably swapped; expecting string(count, character)", "bugprone-string-constructor"], ["warning", "length is bigger then string literal size", "bugprone-string-constructor"], ["warning", "constructor creating an empty string", "bugprone-string-constructor"], {"reliability": "high"}]
|
||||
[["warning", "string constructor parameters are probably swapped; expecting string(count, character)", "bugprone-string-constructor"], ["warning", "length is bigger than string literal size", "bugprone-string-constructor"], ["warning", "constructor creating an empty string", "bugprone-string-constructor"], {"reliability": "high"}]
|
Loading…
Reference in New Issue
Block a user