Skip to content

Commit

Permalink
Merged master:b182ccfc2d6a into amd-gfx:5f4901f0c4e9
Browse files Browse the repository at this point in the history
Local branch amd-gfx 5f4901f Merged master:21810b0e1428 into amd-gfx:99aa69d1fa46
Remote branch master b182ccf [WebAssembly] Add missing lit.local.cfg
  • Loading branch information
Sw authored and Sw committed Aug 13, 2020
2 parents 5f4901f + b182ccf commit 3bb5d8e
Show file tree
Hide file tree
Showing 65 changed files with 1,032 additions and 316 deletions.
4 changes: 2 additions & 2 deletions clang-tools-extra/clang-tidy/abseil/AbseilMatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ AST_POLYMORPHIC_MATCHER(
static const char *AbseilLibraries[] = {
"algorithm", "base", "container", "debugging", "flags",
"hash", "iterator", "memory", "meta", "numeric",
"random", "strings", "synchronization", "time", "types",
"utility"};
"random", "strings", "synchronization", "status", "time",
"types", "utility"};
return std::any_of(
std::begin(AbseilLibraries), std::end(AbseilLibraries),
[&](const char *Library) { return Path.startswith(Library); });
Expand Down
2 changes: 2 additions & 0 deletions clang/include/clang/Driver/Options.td
Original file line number Diff line number Diff line change
Expand Up @@ -3691,6 +3691,8 @@ def mrelocation_model : Separate<["-"], "mrelocation-model">,
AutoNormalizeEnum;
def fno_math_builtin : Flag<["-"], "fno-math-builtin">,
HelpText<"Disable implicit builtin knowledge of math functions">;
def fuse_ctor_homing: Flag<["-"], "fuse-ctor-homing">,
HelpText<"Use constructor homing if we are using limited debug info already">;
}

def disable_llvm_verifier : Flag<["-"], "disable-llvm-verifier">,
Expand Down
9 changes: 7 additions & 2 deletions clang/lib/Driver/ToolChain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -568,8 +568,13 @@ std::string ToolChain::GetLinkerPath() const {
}
// If we're passed -fuse-ld= with no argument, or with the argument ld,
// then use whatever the default system linker is.
if (UseLinker.empty() || UseLinker == "ld")
return GetProgramPath(getDefaultLinker());
if (UseLinker.empty() || UseLinker == "ld") {
const char *DefaultLinker = getDefaultLinker();
if (llvm::sys::path::is_absolute(DefaultLinker))
return std::string(DefaultLinker);
else
return GetProgramPath(DefaultLinker);
}

// Extending -fuse-ld= to an absolute or relative path is unexpected. Checking
// for the linker flavor is brittle. In addition, prepending "ld." or "ld64."
Expand Down
5 changes: 5 additions & 0 deletions clang/lib/Driver/ToolChains/Solaris.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ class LLVM_LIBRARY_VISIBILITY Solaris : public Generic_ELF {
SanitizerMask getSupportedSanitizers() const override;
unsigned GetDefaultDwarfVersion() const override { return 2; }

const char *getDefaultLinker() const override {
// clang currently uses Solaris ld-only options.
return "/usr/bin/ld";
}

protected:
Tool *buildAssembler() const override;
Tool *buildLinker() const override;
Expand Down
10 changes: 9 additions & 1 deletion clang/lib/Frontend/CompilerInvocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -775,6 +775,12 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
else
Opts.setDebugInfo(static_cast<codegenoptions::DebugInfoKind>(Val));
}
// If -fuse-ctor-homing is set and limited debug info is already on, then use
// constructor homing.
if (Arg *A = Args.getLastArg(OPT_fuse_ctor_homing))
if (Opts.getDebugInfo() == codegenoptions::LimitedDebugInfo)
Opts.setDebugInfo(codegenoptions::DebugInfoConstructor);

if (Arg *A = Args.getLastArg(OPT_debugger_tuning_EQ)) {
unsigned Val = llvm::StringSwitch<unsigned>(A->getValue())
.Case("gdb", unsigned(llvm::DebuggerKind::GDB))
Expand Down Expand Up @@ -2787,7 +2793,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
// Mimicking gcc's behavior, trigraphs are only enabled if -trigraphs
// is specified, or -std is set to a conforming mode.
// Trigraphs are disabled by default in c++1z onwards.
Opts.Trigraphs = !Opts.GNUMode && !Opts.MSVCCompat && !Opts.CPlusPlus17;
// For z/OS, trigraphs are enabled by default (without regard to the above).
Opts.Trigraphs =
(!Opts.GNUMode && !Opts.MSVCCompat && !Opts.CPlusPlus17) || T.isOSzOS();
Opts.Trigraphs =
Args.hasFlag(OPT_ftrigraphs, OPT_fno_trigraphs, Opts.Trigraphs);

Expand Down
20 changes: 20 additions & 0 deletions clang/test/CodeGenCXX/debug-info-ctor-homing-flag.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// RUN: %clang -cc1 -debug-info-kind=constructor -emit-llvm %s -o - \
// RUN: | FileCheck %s -check-prefix=CTOR_HOMING
// RUN: %clang -cc1 -debug-info-kind=limited -fuse-ctor-homing -emit-llvm %s -o - \
// RUN: | FileCheck %s -check-prefix=CTOR_HOMING
// RUN: %clang -cc1 -debug-info-kind=standalone -fuse-ctor-homing -emit-llvm %s -o - \
// RUN: | FileCheck %s -check-prefix=FULL_DEBUG
// RUN: %clang -cc1 -debug-info-kind=line-tables-only -fuse-ctor-homing -emit-llvm %s -o - \
// RUN: | FileCheck %s -check-prefix=NO_DEBUG
// RUN: %clang -cc1 -fuse-ctor-homing -emit-llvm %s -o - \
// RUN: | FileCheck %s -check-prefix=NO_DEBUG

// This tests that the -fuse-ctor-homing is only used if limited debug info would have
// been used otherwise.

// CTOR_HOMING: !DICompositeType(tag: DW_TAG_structure_type, name: "A"{{.*}}flags: DIFlagFwdDecl
// FULL_DEBUG: !DICompositeType(tag: DW_TAG_structure_type, name: "A"{{.*}}DIFlagTypePassByValue
// NO_DEBUG-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "A"
struct A {
A();
} TestA;
7 changes: 7 additions & 0 deletions clang/test/Driver/solaris-ld-sld.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// REQUIRES: system-solaris

// Check that clang invokes the native ld.

// RUN: test -f /usr/gnu/bin/ld && env PATH=/usr/gnu/bin %clang -o %t.o %s

int main() { return 0; }
6 changes: 4 additions & 2 deletions clang/test/Frontend/trigraphs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
// RUN: %clang_cc1 -DSTDCPP17 -std=c++1z -verify -fsyntax-only %s
// RUN: %clang_cc1 -DSTDCPP17TRI -ftrigraphs -std=c++1z -verify -fsyntax-only %s
// RUN: %clang_cc1 -DMSCOMPAT -fms-compatibility -std=c++11 -verify -fsyntax-only %s
// RUN: %clang_cc1 -DNOTRI -fno-trigraphs -verify -fsyntax-only %s

void foo() {
#if defined(NOFLAGS) || defined(STDCPP11) || defined(STDGNU11TRI) || \
defined(STDCPP17TRI)
defined(STDCPP17TRI) || (defined(__MVS__) && !defined(NOTRI))
const char c[] = "??/n"; // expected-warning{{trigraph converted to '\' character}}
#elif defined(STDGNU11) || defined(STDCPP17) || defined(MSCOMPAT)
#elif defined(STDGNU11) || defined(STDCPP17) || defined(MSCOMPAT) || \
defined(NOTRI)
const char c[] = "??/n"; // expected-warning{{trigraph ignored}}
#else
#error Not handled.
Expand Down
31 changes: 24 additions & 7 deletions clang/test/Lexer/cxx1z-trigraphs.cpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,31 @@
// RUN: %clang_cc1 -std=c++1z %s -verify
// RUN: %clang_cc1 -std=c++1z %s -ftrigraphs -fsyntax-only 2>&1 | FileCheck --check-prefix=TRIGRAPHS %s
// RUN: %clang_cc1 -std=c++1z %s -verify -ftrigraphs -DENABLED_TRIGRAPHS=1
// RUN: %clang_cc1 -std=c++1z %s -verify -fno-trigraphs -DENABLED_TRIGRAPHS=0

??= define foo ; // expected-error {{}} expected-warning {{trigraph ignored}}
#ifdef __MVS__
#ifndef ENABLED_TRIGRAPHS
#define ENABLED_TRIGRAPHS 1
#endif
#endif

static_assert("??="[0] == '#', ""); // expected-error {{failed}} expected-warning {{trigraph ignored}}
??= define foo ;

static_assert("??="[0] == '#', "");

// ??/
error here; // expected-error {{}}
error here;

// Note, there is intentionally trailing whitespace two lines below.
// TRIGRAPHS: :[[@LINE+1]]:{{.*}} backslash and newline separated by space
// Note, there is intentionally trailing whitespace one line below.
// ??/
error here; // expected-error {{}}
error here;

#if !ENABLED_TRIGRAPHS
// expected-error@11 {{}} expected-warning@11 {{trigraph ignored}}
// expected-error@13 {{failed}} expected-warning@13 {{trigraph ignored}}
// expected-error@16 {{}}
// expected-error@20 {{}}
#else
// expected-warning@11 {{trigraph converted}}
// expected-warning@13 {{trigraph converted}}
// expected-warning@19 {{backslash and newline separated by space}}
#endif
4 changes: 4 additions & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,10 @@ uptr internal_munmap(void *addr, uptr length) {
int internal_mprotect(void *addr, uptr length, int prot) {
return internal_syscall(SYSCALL(mprotect), (uptr)addr, length, prot);
}

int internal_madvise(uptr addr, uptr length, int advice) {
return internal_syscall(SYSCALL(madvise), addr, length, advice);
}
#endif

uptr internal_close(fd_t fd) {
Expand Down
4 changes: 4 additions & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ int internal_mprotect(void *addr, uptr length, int prot) {
return mprotect(addr, length, prot);
}

int internal_madvise(uptr addr, uptr length, int advice) {
return madvise((void *)addr, length, advice);
}

uptr internal_close(fd_t fd) {
return close(fd);
}
Expand Down
5 changes: 5 additions & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_netbsd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,11 @@ int internal_mprotect(void *addr, uptr length, int prot) {
return _REAL(mprotect, addr, length, prot);
}

int internal_madvise(uptr addr, uptr length, int advice) {
DEFINE__REAL(int, madvise, void *a, uptr b, int c);
return _REAL(madvise, (void *)addr, length, advice);
}

uptr internal_close(fd_t fd) {
CHECK(&_sys_close);
return _sys_close(fd);
Expand Down
4 changes: 4 additions & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_openbsd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ int internal_mprotect(void *addr, uptr length, int prot) {
return mprotect(addr, length, prot);
}

int internal_madvise(uptr addr, uptr length, int advice) {
return madvise((void *)addr, length, advice);
}

int internal_sysctlbyname(const char *sname, void *oldp, uptr *oldlenp,
const void *newp, uptr newlen) {
Printf("internal_sysctlbyname not implemented for OpenBSD");
Expand Down
1 change: 1 addition & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_posix.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ uptr internal_mmap(void *addr, uptr length, int prot, int flags,
int fd, u64 offset);
uptr internal_munmap(void *addr, uptr length);
int internal_mprotect(void *addr, uptr length, int prot);
int internal_madvise(uptr addr, uptr length, int advice);

// OS
uptr internal_filesize(fd_t fd); // -1 on error.
Expand Down
21 changes: 6 additions & 15 deletions compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,6 @@
#define MAP_NORESERVE 0
#endif

#if SANITIZER_SOLARIS
// Illumos' declaration of madvie cannot be made visible if _XOPEN_SOURCE
// is defined as g++ does on Solaris.
extern "C" int madvise(void *, size_t, int);
#endif

typedef void (*sa_sigaction_t)(int, siginfo_t *, void *);

namespace __sanitizer {
Expand All @@ -67,27 +61,24 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end) {
uptr beg_aligned = RoundUpTo(beg, page_size);
uptr end_aligned = RoundDownTo(end, page_size);
if (beg_aligned < end_aligned)
// In the default Solaris compilation environment, madvise() is declared
// to take a caddr_t arg; casting it to void * results in an invalid
// conversion error, so use char * instead.
madvise((char *)beg_aligned, end_aligned - beg_aligned,
SANITIZER_MADVISE_DONTNEED);
internal_madvise(beg_aligned, end_aligned - beg_aligned,
SANITIZER_MADVISE_DONTNEED);
}

void SetShadowRegionHugePageMode(uptr addr, uptr size) {
#ifdef MADV_NOHUGEPAGE // May not be defined on old systems.
if (common_flags()->no_huge_pages_for_shadow)
madvise((char *)addr, size, MADV_NOHUGEPAGE);
internal_madvise(addr, size, MADV_NOHUGEPAGE);
else
madvise((char *)addr, size, MADV_HUGEPAGE);
internal_madvise(addr, size, MADV_HUGEPAGE);
#endif // MADV_NOHUGEPAGE
}

bool DontDumpShadowMemory(uptr addr, uptr length) {
#if defined(MADV_DONTDUMP)
return madvise((char *)addr, length, MADV_DONTDUMP) == 0;
return internal_madvise(addr, length, MADV_DONTDUMP) == 0;
#elif defined(MADV_NOCORE)
return madvise((char *)addr, length, MADV_NOCORE) == 0;
return internal_madvise(addr, length, MADV_NOCORE) == 0;
#else
return true;
#endif // MADV_DONTDUMP
Expand Down
8 changes: 8 additions & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_solaris.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ DECLARE__REAL_AND_INTERNAL(int, mprotect, void *addr, uptr length, int prot) {
return _REAL(mprotect)(addr, length, prot);
}

// Illumos' declaration of madvise cannot be made visible if _XOPEN_SOURCE
// is defined as g++ does on Solaris.
extern "C" int madvise(caddr_t, size_t, int);

int internal_madvise(uptr addr, uptr length, int advice) {
return madvise((caddr_t)addr, length, advice);
}

DECLARE__REAL_AND_INTERNAL(uptr, close, fd_t fd) {
return _REAL(close)(fd);
}
Expand Down
43 changes: 3 additions & 40 deletions compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ static void DontDumpShadow(uptr addr, uptr size) {
#if !SANITIZER_GO
void InitializeShadowMemory() {
// Map memory shadow.
if (!MmapFixedNoReserve(ShadowBeg(), ShadowEnd() - ShadowBeg(), "shadow")) {
if (!MmapFixedSuperNoReserve(ShadowBeg(), ShadowEnd() - ShadowBeg(),
"shadow")) {
Printf("FATAL: ThreadSanitizer can not mmap the shadow memory\n");
Printf("FATAL: Make sure to compile with -fPIE and to link with -pie.\n");
Die();
Expand All @@ -55,43 +56,6 @@ void InitializeShadowMemory() {
// Frequently a thread uses only a small part of stack and similarly
// a program uses a small part of large mmap. On some programs
// we see 20% memory usage reduction without huge pages for this range.
// FIXME: don't use constants here.
#if defined(__x86_64__)
const uptr kMadviseRangeBeg = 0x7f0000000000ull;
const uptr kMadviseRangeSize = 0x010000000000ull;
#elif defined(__mips64)
const uptr kMadviseRangeBeg = 0xff00000000ull;
const uptr kMadviseRangeSize = 0x0100000000ull;
#elif defined(__aarch64__) && defined(__APPLE__)
uptr kMadviseRangeBeg = LoAppMemBeg();
uptr kMadviseRangeSize = LoAppMemEnd() - LoAppMemBeg();
#elif defined(__aarch64__)
uptr kMadviseRangeBeg = 0;
uptr kMadviseRangeSize = 0;
if (vmaSize == 39) {
kMadviseRangeBeg = 0x7d00000000ull;
kMadviseRangeSize = 0x0300000000ull;
} else if (vmaSize == 42) {
kMadviseRangeBeg = 0x3f000000000ull;
kMadviseRangeSize = 0x01000000000ull;
} else {
DCHECK(0);
}
#elif defined(__powerpc64__)
uptr kMadviseRangeBeg = 0;
uptr kMadviseRangeSize = 0;
if (vmaSize == 44) {
kMadviseRangeBeg = 0x0f60000000ull;
kMadviseRangeSize = 0x0010000000ull;
} else if (vmaSize == 46) {
kMadviseRangeBeg = 0x3f0000000000ull;
kMadviseRangeSize = 0x010000000000ull;
} else {
DCHECK(0);
}
#endif
NoHugePagesInShadow(MemToShadow(kMadviseRangeBeg),
kMadviseRangeSize * kShadowMultiplier);
DontDumpShadow(ShadowBeg(), ShadowEnd() - ShadowBeg());
DPrintf("memory shadow: %zx-%zx (%zuGB)\n",
ShadowBeg(), ShadowEnd(),
Expand All @@ -100,12 +64,11 @@ void InitializeShadowMemory() {
// Map meta shadow.
const uptr meta = MetaShadowBeg();
const uptr meta_size = MetaShadowEnd() - meta;
if (!MmapFixedNoReserve(meta, meta_size, "meta shadow")) {
if (!MmapFixedSuperNoReserve(meta, meta_size, "meta shadow")) {
Printf("FATAL: ThreadSanitizer can not mmap the shadow memory\n");
Printf("FATAL: Make sure to compile with -fPIE and to link with -pie.\n");
Die();
}
NoHugePagesInShadow(meta, meta_size);
DontDumpShadow(meta, meta_size);
DPrintf("meta shadow: %zx-%zx (%zuGB)\n",
meta, meta + meta_size, meta_size >> 30);
Expand Down
13 changes: 8 additions & 5 deletions compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,8 @@ void MapShadow(uptr addr, uptr size) {
const uptr kPageSize = GetPageSizeCached();
uptr shadow_begin = RoundDownTo((uptr)MemToShadow(addr), kPageSize);
uptr shadow_end = RoundUpTo((uptr)MemToShadow(addr + size), kPageSize);
if (!MmapFixedNoReserve(shadow_begin, shadow_end - shadow_begin, "shadow"))
if (!MmapFixedSuperNoReserve(shadow_begin, shadow_end - shadow_begin,
"shadow"))
Die();

// Meta shadow is 2:1, so tread carefully.
Expand All @@ -269,7 +270,8 @@ void MapShadow(uptr addr, uptr size) {
if (!data_mapped) {
// First call maps data+bss.
data_mapped = true;
if (!MmapFixedNoReserve(meta_begin, meta_end - meta_begin, "meta shadow"))
if (!MmapFixedSuperNoReserve(meta_begin, meta_end - meta_begin,
"meta shadow"))
Die();
} else {
// Mapping continous heap.
Expand All @@ -280,7 +282,8 @@ void MapShadow(uptr addr, uptr size) {
return;
if (meta_begin < mapped_meta_end)
meta_begin = mapped_meta_end;
if (!MmapFixedNoReserve(meta_begin, meta_end - meta_begin, "meta shadow"))
if (!MmapFixedSuperNoReserve(meta_begin, meta_end - meta_begin,
"meta shadow"))
Die();
mapped_meta_end = meta_end;
}
Expand All @@ -293,7 +296,7 @@ void MapThreadTrace(uptr addr, uptr size, const char *name) {
CHECK_GE(addr, TraceMemBeg());
CHECK_LE(addr + size, TraceMemEnd());
CHECK_EQ(addr, addr & ~((64 << 10) - 1)); // windows wants 64K alignment
if (!MmapFixedNoReserve(addr, size, name)) {
if (!MmapFixedSuperNoReserve(addr, size, name)) {
Printf("FATAL: ThreadSanitizer can not mmap thread trace (%p/%p)\n",
addr, size);
Die();
Expand Down Expand Up @@ -957,7 +960,7 @@ static void MemoryRangeSet(ThreadState *thr, uptr pc, uptr addr, uptr size,
u64 *p1 = p;
p = RoundDown(end, kPageSize);
UnmapOrDie((void*)p1, (uptr)p - (uptr)p1);
if (!MmapFixedNoReserve((uptr)p1, (uptr)p - (uptr)p1))
if (!MmapFixedSuperNoReserve((uptr)p1, (uptr)p - (uptr)p1))
Die();
// Set the ending.
while (p < end) {
Expand Down
2 changes: 1 addition & 1 deletion compiler-rt/lib/tsan/rtl/tsan_sync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ void MetaMap::ResetRange(Processor *proc, uptr p, uptr sz) {
uptr metap = (uptr)MemToMeta(p0);
uptr metasz = sz0 / kMetaRatio;
UnmapOrDie((void*)metap, metasz);
if (!MmapFixedNoReserve(metap, metasz))
if (!MmapFixedSuperNoReserve(metap, metasz))
Die();
}

Expand Down
Loading

0 comments on commit 3bb5d8e

Please sign in to comment.