Merge mozilla-central to autoland. On a CLOSED TREE
authorDaniel Varga <dvarga@mozilla.com>
Wed, 21 Aug 2019 14:45:21 +0300
changeset 489169 524d316dcbfc5bc2d95d1e0e66154ed40cdf5ecb
parent 489168 6ec4fe140cf1ec37ec6e93ef3766f403c82eac6a (current diff)
parent 489108 33a280baf6f4955a82e449b1e5dfb355da3a21a6 (diff)
child 489170 76cb5e6e7d00d362b37a9aafc824c4a5dcab4775
push id36465
push userdvarga@mozilla.com
push dateWed, 21 Aug 2019 16:47:43 +0000
treeherdermozilla-central@4ab60925635c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone70.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to autoland. On a CLOSED TREE
--- a/build/build-clang/clang-win64.json
+++ b/build/build-clang/clang-win64.json
@@ -6,13 +6,14 @@
     "python_path": "c:/mozilla-build/python/python.exe",
     "cc": "cl.exe",
     "cxx": "cl.exe",
     "ml": "ml64.exe",
     "patches": [
       "workaround-issue38586.patch",
       "unpoison-thread-stacks.patch",
       "downgrade-mangling-error.patch",
+      "r355141-arm64-cfg.patch",
       "r357725-asan-vs2019.patch",
       "loosen-msvc-detection.patch",
       "revert-r355311.patch"
     ]
 }
new file mode 100644
--- /dev/null
+++ b/build/build-clang/r355141-arm64-cfg.patch
@@ -0,0 +1,112 @@
+[COFF] Add address-taken import thunks to the fid table
+
+https://bugs.llvm.org/show_bug.cgi?id=39799
+https://reviews.llvm.org/D58739
+
+--- a/lld/COFF/Writer.cpp
++++ b/lld/COFF/Writer.cpp
+@@ -1390,19 +1390,47 @@
+ // symbol in an executable section.
+ static void maybeAddAddressTakenFunction(SymbolRVASet &AddressTakenSyms,
+                                          Symbol *S) {
+-  auto *D = dyn_cast_or_null<DefinedCOFF>(S);
+-
+-  // Ignore undefined symbols and references to non-functions (e.g. globals and
+-  // labels).
+-  if (!D ||
+-      D->getCOFFSymbol().getComplexType() != COFF::IMAGE_SYM_DTYPE_FUNCTION)
++  if (!S)
+     return;
+ 
+-  // Mark the symbol as address taken if it's in an executable section.
+-  Chunk *RefChunk = D->getChunk();
+-  OutputSection *OS = RefChunk ? RefChunk->getOutputSection() : nullptr;
+-  if (OS && OS->Header.Characteristics & IMAGE_SCN_MEM_EXECUTE)
+-    addSymbolToRVASet(AddressTakenSyms, D);
++  switch (S->kind()) {
++  case Symbol::DefinedLocalImportKind:
++  case Symbol::DefinedImportDataKind:
++    // Defines an __imp_ pointer, so it is data, so it is ignored.
++    break;
++  case Symbol::DefinedCommonKind:
++    // Common is always data, so it is ignored.
++    break;
++  case Symbol::DefinedAbsoluteKind:
++  case Symbol::DefinedSyntheticKind:
++    // Absolute is never code, synthetic generally isn't and usually isn't
++    // determinable.
++    break;
++  case Symbol::LazyKind:
++  case Symbol::UndefinedKind:
++    // Undefined symbols resolve to zero, so they don't have an RVA. Lazy
++    // symbols shouldn't have relocations.
++    break;
++
++  case Symbol::DefinedImportThunkKind:
++    // Thunks are always code, include them.
++    addSymbolToRVASet(AddressTakenSyms, cast<Defined>(S));
++    break;
++
++  case Symbol::DefinedRegularKind: {
++    // This is a regular, defined, symbol from a COFF file. Mark the symbol as
++    // address taken if the symbol type is function and it's in an executable
++    // section.
++    auto *D = cast<DefinedRegular>(S);
++    if (D->getCOFFSymbol().getComplexType() == COFF::IMAGE_SYM_DTYPE_FUNCTION) {
++      Chunk *RefChunk = D->getChunk();
++      OutputSection *OS = RefChunk ? RefChunk->getOutputSection() : nullptr;
++      if (OS && OS->Header.Characteristics & IMAGE_SCN_MEM_EXECUTE)
++        addSymbolToRVASet(AddressTakenSyms, D);
++    }
++    break;
++  }
++  }
+ }
+ 
+ // Visit all relocations from all section contributions of this object file and
+--- a/lld/test/COFF/guardcf-thunk.s
++++ b/lld/test/COFF/guardcf-thunk.s
+@@ -0,0 +1,43 @@
++# REQUIRES: x86
++
++# Make a DLL that exports exportfn1.
++# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
++# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1 /implib:%t.lib
++
++# Make an obj that takes the address of that exported function.
++# RUN: llvm-mc -filetype=obj -triple=x86_64-windows-msvc %s -o %t2.obj
++# RUN: lld-link -entry:main -guard:cf %t2.obj %t.lib -nodefaultlib -out:%t.exe
++# RUN: llvm-readobj -coff-load-config %t.exe | FileCheck %s
++
++# Check that the gfids table contains *exactly* two entries, one for exportfn1
++# and one for main.
++# CHECK: GuardFidTable [
++# CHECK-NEXT: 0x{{[0-9A-Fa-f]+0$}}
++# CHECK-NEXT: 0x{{[0-9A-Fa-f]+0$}}
++# CHECK-NEXT: ]
++
++
++        .def     @feat.00;
++        .scl    3;
++        .type   0;
++        .endef
++        .globl  @feat.00
++@feat.00 = 0x001
++
++        .section .text,"rx"
++        .def     main; .scl    2; .type   32; .endef
++        .global main
++main:
++        leaq exportfn1(%rip), %rax
++        retq
++
++        .section .rdata,"dr"
++.globl _load_config_used
++_load_config_used:
++        .long 256
++        .fill 124, 1, 0
++        .quad __guard_fids_table
++        .quad __guard_fids_count
++        .long __guard_flags
++        .fill 128, 1, 0
++
--- a/taskcluster/ci/fetch/toolchains.yml
+++ b/taskcluster/ci/fetch/toolchains.yml
@@ -389,21 +389,21 @@ clang-4.0:
 clang-7:
     description: clang 7 source code
     fetch:
         type: git
         repo: https://github.com/llvm/llvm-project
         revision: d0d8eb2e5415b8be29343e3c17a18e49e67b5551
 
 clang-8:
-    description: clang 8.0.1 source code
+    description: clang 8 source code
     fetch:
         type: git
         repo: https://github.com/llvm/llvm-project
-        revision: 19a71f6bdf2dddb10764939e7f0ec2b98dba76c9
+        revision: d2298e74235598f15594fe2c99bbac870a507c59
 
 ninja:
     description: ninja 1.9.0
     fetch:
         type: static-url
         url: https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-win.zip
         sha256: 2d70010633ddaacc3af4ffbd21e22fae90d158674a09e132e06424ba3ab036e9
         size: 254497