From owner-svn-src-projects@freebsd.org Mon May 8 19:20:59 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9E93ED6308B for ; Mon, 8 May 2017 19:20:59 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 189B91719; Mon, 8 May 2017 19:20:59 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v48JKwJH095275; Mon, 8 May 2017 19:20:58 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v48JKt0b095251; Mon, 8 May 2017 19:20:55 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201705081920.v48JKt0b095251@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 8 May 2017 19:20:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317969 - in projects/clang500-import: contrib/compiler-rt/include/xray contrib/compiler-rt/lib/asan contrib/compiler-rt/lib/builtins contrib/compiler-rt/lib/cfi contrib/compiler-rt/lib... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 May 2017 19:20:59 -0000 Author: dim Date: Mon May 8 19:20:55 2017 New Revision: 317969 URL: https://svnweb.freebsd.org/changeset/base/317969 Log: Merge llvm, clang, lld, lldb, compiler-rt and libc++ r302418, and update build glue. Added: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_android.cpp - copied unchanged from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_android.cpp projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_android.inc - copied unchanged from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_android.inc projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_context_android.inc - copied unchanged from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_context_android.inc projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_context_linux.inc - copied unchanged from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_context_linux.inc projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.inc - copied unchanged from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_linux.inc projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_diag_standalone.cc - copied unchanged from r317962, vendor/compiler-rt/dist/lib/ubsan/ubsan_diag_standalone.cc projects/clang500-import/contrib/libc++/src/support/runtime/exception_pointer_msvc.ipp - copied unchanged from r317960, vendor/libc++/dist/src/support/runtime/exception_pointer_msvc.ipp projects/clang500-import/contrib/llvm/include/llvm/CodeGen/MIRPrinter.h - copied unchanged from r317960, vendor/llvm/dist/include/llvm/CodeGen/MIRPrinter.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleList.h - copied unchanged from r317960, vendor/llvm/dist/include/llvm/DebugInfo/PDB/Native/DbiModuleList.h projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/DbiModuleList.cpp - copied unchanged from r317960, vendor/llvm/dist/lib/DebugInfo/PDB/Native/DbiModuleList.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepIICHVX.td - copied unchanged from r317960, vendor/llvm/dist/lib/Target/Hexagon/HexagonDepIICHVX.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepIICScalar.td - copied unchanged from r317960, vendor/llvm/dist/lib/Target/Hexagon/HexagonDepIICScalar.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepTimingClasses.h - copied unchanged from r317960, vendor/llvm/dist/lib/Target/Hexagon/HexagonDepTimingClasses.h projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/lwpintrin.h - copied unchanged from r317960, vendor/clang/dist/lib/Headers/lwpintrin.h projects/clang500-import/contrib/llvm/tools/lld/include/lld/Core/TaskGroup.h - copied unchanged from r317960, vendor/lld/dist/include/lld/Core/TaskGroup.h projects/clang500-import/contrib/llvm/tools/lld/lib/Core/TaskGroup.cpp - copied unchanged from r317960, vendor/lld/dist/lib/Core/TaskGroup.cpp Deleted: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.h projects/clang500-import/contrib/llvm/lib/CodeGen/MIRPrinter.h projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64AddressTypePromotion.cpp projects/clang500-import/contrib/llvm/tools/lld/include/lld/Support/ Modified: projects/clang500-import/contrib/compiler-rt/include/xray/xray_interface.h projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.h projects/clang500-import/contrib/compiler-rt/lib/builtins/emutls.c projects/clang500-import/contrib/compiler-rt/lib/builtins/int_types.h projects/clang500-import/contrib/compiler-rt/lib/cfi/cfi_blacklist.txt projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls.h projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.cpp projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc projects/clang500-import/contrib/compiler-rt/lib/xray/xray_init.cc projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface.cc projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface_internal.h projects/clang500-import/contrib/libc++/include/__config projects/clang500-import/contrib/libc++/include/__locale projects/clang500-import/contrib/libc++/include/__threading_support projects/clang500-import/contrib/libc++/include/exception projects/clang500-import/contrib/libc++/include/experimental/dynarray projects/clang500-import/contrib/libc++/include/experimental/optional projects/clang500-import/contrib/libc++/include/functional projects/clang500-import/contrib/libc++/include/future projects/clang500-import/contrib/libc++/include/istream projects/clang500-import/contrib/libc++/include/locale projects/clang500-import/contrib/libc++/include/memory projects/clang500-import/contrib/libc++/include/new projects/clang500-import/contrib/libc++/include/ostream projects/clang500-import/contrib/libc++/include/random projects/clang500-import/contrib/libc++/include/shared_mutex projects/clang500-import/contrib/libc++/include/streambuf projects/clang500-import/contrib/libc++/include/typeinfo projects/clang500-import/contrib/libc++/src/exception.cpp projects/clang500-import/contrib/libc++/src/experimental/filesystem/operations.cpp projects/clang500-import/contrib/libc++/src/locale.cpp projects/clang500-import/contrib/libc++/src/memory.cpp projects/clang500-import/contrib/llvm/include/llvm/ADT/APInt.h projects/clang500-import/contrib/llvm/include/llvm/ADT/BitVector.h projects/clang500-import/contrib/llvm/include/llvm/ADT/SmallBitVector.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/LoopInfoImpl.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/ProfileSummaryInfo.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/ScalarEvolution.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/TargetLibraryInfo.def projects/clang500-import/contrib/llvm/include/llvm/CodeGen/AsmPrinter.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/FastISel.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/FunctionLoweringInfo.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/GlobalISel/IRTranslator.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/MachineFrameInfo.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/MachineModuleInfo.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/TypeDatabase.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFFormValue.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/DbiStream.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/NativeEnumModules.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/RawTypes.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/TpiStream.h projects/clang500-import/contrib/llvm/include/llvm/ExecutionEngine/Orc/RPCSerialization.h projects/clang500-import/contrib/llvm/include/llvm/ExecutionEngine/RuntimeDyldChecker.h projects/clang500-import/contrib/llvm/include/llvm/IR/Attributes.h projects/clang500-import/contrib/llvm/include/llvm/IR/BasicBlock.h projects/clang500-import/contrib/llvm/include/llvm/IR/CFG.h projects/clang500-import/contrib/llvm/include/llvm/IR/CallSite.h projects/clang500-import/contrib/llvm/include/llvm/IR/CallingConv.h projects/clang500-import/contrib/llvm/include/llvm/IR/ConstantRange.h projects/clang500-import/contrib/llvm/include/llvm/IR/DataLayout.h projects/clang500-import/contrib/llvm/include/llvm/IR/DebugInfo.h projects/clang500-import/contrib/llvm/include/llvm/IR/Dominators.h projects/clang500-import/contrib/llvm/include/llvm/IR/Function.h projects/clang500-import/contrib/llvm/include/llvm/IR/InlineAsm.h projects/clang500-import/contrib/llvm/include/llvm/IR/InstIterator.h projects/clang500-import/contrib/llvm/include/llvm/IR/InstrTypes.h projects/clang500-import/contrib/llvm/include/llvm/IR/Intrinsics.td projects/clang500-import/contrib/llvm/include/llvm/IR/IntrinsicsARM.td projects/clang500-import/contrib/llvm/include/llvm/IR/ModuleSummaryIndex.h projects/clang500-import/contrib/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h projects/clang500-import/contrib/llvm/include/llvm/MC/ConstantPools.h projects/clang500-import/contrib/llvm/include/llvm/Object/COFF.h projects/clang500-import/contrib/llvm/include/llvm/Object/Wasm.h projects/clang500-import/contrib/llvm/include/llvm/ObjectYAML/WasmYAML.h projects/clang500-import/contrib/llvm/include/llvm/Support/AArch64TargetParser.def projects/clang500-import/contrib/llvm/include/llvm/Support/BinaryStreamArray.h projects/clang500-import/contrib/llvm/include/llvm/Support/COFF.h projects/clang500-import/contrib/llvm/include/llvm/Support/KnownBits.h projects/clang500-import/contrib/llvm/include/llvm/Support/MathExtras.h projects/clang500-import/contrib/llvm/include/llvm/Target/GlobalISel/SelectionDAGCompat.td projects/clang500-import/contrib/llvm/include/llvm/Target/Target.td projects/clang500-import/contrib/llvm/include/llvm/Target/TargetOpcodes.def projects/clang500-import/contrib/llvm/include/llvm/Transforms/Instrumentation.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Scalar/Float2Int.h projects/clang500-import/contrib/llvm/lib/Analysis/ConstantFolding.cpp projects/clang500-import/contrib/llvm/lib/Analysis/InstructionSimplify.cpp projects/clang500-import/contrib/llvm/lib/Analysis/LazyValueInfo.cpp projects/clang500-import/contrib/llvm/lib/Analysis/Lint.cpp projects/clang500-import/contrib/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp projects/clang500-import/contrib/llvm/lib/Analysis/ScalarEvolution.cpp projects/clang500-import/contrib/llvm/lib/Analysis/TargetLibraryInfo.cpp projects/clang500-import/contrib/llvm/lib/Analysis/ValueTracking.cpp projects/clang500-import/contrib/llvm/lib/Bitcode/Reader/BitcodeReader.cpp projects/clang500-import/contrib/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/BranchFolding.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MIRParser/MIParser.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MIRPrinter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MIRPrintingPass.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MachineFrameInfo.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MachineVerifier.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/PrologEpilogInserter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/ResourcePriorityQueue.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/XRayInstrumentation.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFFormValue.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/DbiStream.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/NativeCompilandSymbol.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/NativeEnumModules.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/TpiStream.cpp projects/clang500-import/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp projects/clang500-import/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h projects/clang500-import/contrib/llvm/lib/IR/ConstantRange.cpp projects/clang500-import/contrib/llvm/lib/IR/DataLayout.cpp projects/clang500-import/contrib/llvm/lib/IR/DebugInfo.cpp projects/clang500-import/contrib/llvm/lib/IR/Instruction.cpp projects/clang500-import/contrib/llvm/lib/IR/ModuleSummaryIndex.cpp projects/clang500-import/contrib/llvm/lib/LTO/LTO.cpp projects/clang500-import/contrib/llvm/lib/LTO/ThinLTOCodeGenerator.cpp projects/clang500-import/contrib/llvm/lib/MC/ConstantPools.cpp projects/clang500-import/contrib/llvm/lib/MC/MCParser/AsmParser.cpp projects/clang500-import/contrib/llvm/lib/Object/COFFObjectFile.cpp projects/clang500-import/contrib/llvm/lib/Object/WasmObjectFile.cpp projects/clang500-import/contrib/llvm/lib/ObjectYAML/WasmYAML.cpp projects/clang500-import/contrib/llvm/lib/Passes/PassBuilder.cpp projects/clang500-import/contrib/llvm/lib/Support/APInt.cpp projects/clang500-import/contrib/llvm/lib/Support/TargetParser.cpp projects/clang500-import/contrib/llvm/lib/Support/Unix/DynamicLibrary.inc projects/clang500-import/contrib/llvm/lib/Support/Unix/Path.inc projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64.h projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64.td projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64InstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.h projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.h projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMInstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMInstrNEON.td projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMInstrThumb2.td projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMRegisterBankInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMRegisterBankInfo.h projects/clang500-import/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp projects/clang500-import/contrib/llvm/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/Disassembler/HexagonDisassembler.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepITypes.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepITypes.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepInstrFormats.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepInstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonIICHVX.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonIICScalar.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrFormats.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrFormatsV4.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrFormatsV60.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrInfo.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonMachineScheduler.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonPatterns.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonPseudo.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonRegisterInfo.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonSchedule.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonScheduleV4.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonScheduleV55.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonScheduleV60.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonScheduleV62.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonSubtarget.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonSubtarget.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/RDFLiveness.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/RDFRegisters.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/RDFRegisters.h projects/clang500-import/contrib/llvm/lib/Target/Mips/MipsAsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/NVPTX/NVPTXInstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/Sparc/SparcISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/AsmParser/X86Operand.h projects/clang500-import/contrib/llvm/lib/Target/X86/X86AsmPrinter.h projects/clang500-import/contrib/llvm/lib/Target/X86/X86FrameLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstrAVX512.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstrSSE.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstructionSelector.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86LegalizerInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86LegalizerInfo.h projects/clang500-import/contrib/llvm/lib/Target/X86/X86MCInstLower.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86OptimizeLEAs.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86RegisterBankInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86RegisterBankInfo.h projects/clang500-import/contrib/llvm/lib/Target/X86/X86Subtarget.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86TargetTransformInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/XCore/XCoreISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/FunctionImport.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/LowerTypeTests.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Instrumentation/IndirectCallPromotion.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/Float2Int.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/JumpThreading.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/NewGVN.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/BuildLibCalls.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/SimplifyCFG.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/ValueMapper.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp projects/clang500-import/contrib/llvm/tools/clang/include/clang/AST/ODRHash.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchers.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/Attr.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/AttrDocs.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsARM.def projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsX86.def projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsX86_64.def projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticLexKinds.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Driver/Distro.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Driver/Multilib.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Driver/Options.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Frontend/CodeGenOptions.def projects/clang500-import/contrib/llvm/tools/clang/include/clang/Frontend/FrontendAction.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/HeaderSearch.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/Lexer.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/ModuleMap.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/Preprocessor.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Sema/Sema.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Tooling/FixIt.h projects/clang500-import/contrib/llvm/tools/clang/lib/ASTMatchers/Dynamic/Registry.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Basic/Diagnostic.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Basic/DiagnosticIDs.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Basic/Targets.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGBlocks.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGBuiltin.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenFunction.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenFunction.h projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/TargetInfo.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/Distro.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/Multilib.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/SanitizerArgs.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/CrossWindows.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Format/FormatToken.h projects/clang500-import/contrib/llvm/tools/clang/lib/Format/FormatTokenLexer.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/FrontendAction.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/FrontendActions.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/PrintPreprocessedOutput.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/Rewrite/FrontendActions.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/Rewrite/InclusionRewriter.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/arm_acle.h projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/x86intrin.h projects/clang500-import/contrib/llvm/tools/clang/lib/Index/IndexDecl.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/HeaderSearch.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/Lexer.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/ModuleMap.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/PPDirectives.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/PPLexerChange.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/PPMacroExpansion.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/Pragma.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/Preprocessor.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/TokenLexer.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/Sema.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaDeclObjC.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaExpr.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaStmt.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Tooling/JSONCompilationDatabase.cpp projects/clang500-import/contrib/llvm/tools/lld/CMakeLists.txt projects/clang500-import/contrib/llvm/tools/lld/COFF/Chunks.h projects/clang500-import/contrib/llvm/tools/lld/COFF/ICF.cpp projects/clang500-import/contrib/llvm/tools/lld/COFF/PDB.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Config.h projects/clang500-import/contrib/llvm/tools/lld/ELF/Driver.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/InputFiles.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/InputFiles.h projects/clang500-import/contrib/llvm/tools/lld/ELF/LinkerScript.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/LinkerScript.h projects/clang500-import/contrib/llvm/tools/lld/ELF/Options.td projects/clang500-import/contrib/llvm/tools/lld/ELF/OutputSections.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Relocations.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/SymbolTable.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Symbols.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Target.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Target.h projects/clang500-import/contrib/llvm/tools/lld/ELF/Writer.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Writer.h projects/clang500-import/contrib/llvm/tools/lld/include/lld/Core/Parallel.h projects/clang500-import/contrib/llvm/tools/lld/lib/Core/CMakeLists.txt projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/API/SBAddress.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/API/SBInstruction.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/API/SBInstructionList.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Core/Disassembler.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Expression/Expression.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/MainLoop.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/common/UDPSocket.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Target/ThreadPlanCallFunction.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Target/ThreadPlanCallUserExpression.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Utility/TaskPool.h projects/clang500-import/contrib/llvm/tools/lldb/source/API/SBAddress.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/API/SBInstruction.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/API/SBInstructionList.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/API/SBProcess.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Core/Disassembler.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/Editline.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/MainLoop.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/UDPSocket.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/ABI/SysV-arm64/ABISysV_arm64.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Target/ThreadPlanCallUserExpression.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Utility/TaskPool.cpp projects/clang500-import/contrib/llvm/tools/llvm-link/llvm-link.cpp projects/clang500-import/contrib/llvm/tools/llvm-lto/llvm-lto.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/Analyze.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/StreamUtil.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp projects/clang500-import/contrib/llvm/tools/llvm-readobj/COFFDumper.cpp projects/clang500-import/contrib/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp projects/clang500-import/lib/clang/include/clang/Basic/Version.inc projects/clang500-import/lib/clang/include/lld/Config/Version.inc projects/clang500-import/lib/clang/include/llvm/Support/VCSRevision.h projects/clang500-import/lib/clang/libllvm/Makefile projects/clang500-import/usr.bin/clang/lld/Makefile Directory Properties: projects/clang500-import/contrib/compiler-rt/ (props changed) projects/clang500-import/contrib/libc++/ (props changed) projects/clang500-import/contrib/llvm/ (props changed) projects/clang500-import/contrib/llvm/tools/clang/ (props changed) projects/clang500-import/contrib/llvm/tools/lld/ (props changed) projects/clang500-import/contrib/llvm/tools/lldb/ (props changed) Modified: projects/clang500-import/contrib/compiler-rt/include/xray/xray_interface.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/include/xray/xray_interface.h Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/include/xray/xray_interface.h Mon May 8 19:20:55 2017 (r317969) @@ -15,10 +15,11 @@ #define XRAY_XRAY_INTERFACE_H #include +#include extern "C" { -// Synchronize this with AsmPrinter::SledKind in LLVM. +/// Synchronize this with AsmPrinter::SledKind in LLVM. enum XRayEntryType { ENTRY = 0, EXIT = 1, @@ -26,32 +27,43 @@ enum XRayEntryType { LOG_ARGS_ENTRY = 3, }; -// Provide a function to invoke for when instrumentation points are hit. This is -// a user-visible control surface that overrides the default implementation. The -// function provided should take the following arguments: -// -// - function id: an identifier that indicates the id of a function; this id -// is generated by xray; the mapping between the function id -// and the actual function pointer is available through -// __xray_table. -// - entry type: identifies what kind of instrumentation point was encountered -// (function entry, function exit, etc.). See the enum -// XRayEntryType for more details. -// -// The user handler must handle correctly spurious calls after this handler is -// removed or replaced with another handler, because it would be too costly for -// XRay runtime to avoid spurious calls. -// To prevent circular calling, the handler function itself and all its -// direct&indirect callees must not be instrumented with XRay, which can be -// achieved by marking them all with: __attribute__((xray_never_instrument)) -// -// Returns 1 on success, 0 on error. +/// Provide a function to invoke for when instrumentation points are hit. This +/// is a user-visible control surface that overrides the default implementation. +/// The function provided should take the following arguments: +/// +/// - function id: an identifier that indicates the id of a function; this id +/// is generated by xray; the mapping between the function id +/// and the actual function pointer is available through +/// __xray_table. +/// - entry type: identifies what kind of instrumentation point was +/// encountered (function entry, function exit, etc.). See the +/// enum XRayEntryType for more details. +/// +/// The user handler must handle correctly spurious calls after this handler is +/// removed or replaced with another handler, because it would be too costly for +/// XRay runtime to avoid spurious calls. +/// To prevent circular calling, the handler function itself and all its +/// direct&indirect callees must not be instrumented with XRay, which can be +/// achieved by marking them all with: __attribute__((xray_never_instrument)) +/// +/// Returns 1 on success, 0 on error. extern int __xray_set_handler(void (*entry)(int32_t, XRayEntryType)); -// This removes whatever the currently provided handler is. Returns 1 on -// success, 0 on error. +/// This removes whatever the currently provided handler is. Returns 1 on +/// success, 0 on error. extern int __xray_remove_handler(); +/// Use XRay to log the first argument of each (instrumented) function call. +/// When this function exits, all threads will have observed the effect and +/// start logging their subsequent affected function calls (if patched). +/// +/// Returns 1 on success, 0 on error. +extern int __xray_set_handler_arg1(void (*)(int32_t, XRayEntryType, uint64_t)); + +/// Disables the XRay handler used to log first arguments of function calls. +/// Returns 1 on success, 0 on error. +extern int __xray_remove_handler_arg1(); + enum XRayPatchingStatus { NOT_INITIALIZED = 0, SUCCESS = 1, @@ -59,24 +71,31 @@ enum XRayPatchingStatus { FAILED = 3, }; -// This tells XRay to patch the instrumentation points. See XRayPatchingStatus -// for possible result values. +/// This tells XRay to patch the instrumentation points. See XRayPatchingStatus +/// for possible result values. extern XRayPatchingStatus __xray_patch(); -// Reverses the effect of __xray_patch(). See XRayPatchingStatus for possible -// result values. +/// Reverses the effect of __xray_patch(). See XRayPatchingStatus for possible +/// result values. extern XRayPatchingStatus __xray_unpatch(); -// Use XRay to log the first argument of each (instrumented) function call. -// When this function exits, all threads will have observed the effect and -// start logging their subsequent affected function calls (if patched). -// -// Returns 1 on success, 0 on error. -extern int __xray_set_handler_arg1(void (*)(int32_t, XRayEntryType, uint64_t)); +/// This patches a specific function id. See XRayPatchingStatus for possible +/// result values. +extern XRayPatchingStatus __xray_patch_function(int32_t FuncId); + +/// This unpatches a specific function id. See XRayPatchingStatus for possible +/// result values. +extern XRayPatchingStatus __xray_unpatch_function(int32_t FuncId); + +/// This function returns the address of the function provided a valid function +/// id. We return 0 if we encounter any error, even if 0 may be a valid function +/// address. +extern uintptr_t __xray_function_address(int32_t FuncId); + +/// This function returns the maximum valid function id. Returns 0 if we +/// encounter errors (when there are no instrumented functions, etc.). +extern size_t __xray_max_function_id(); -// Disables the XRay handler used to log first arguments of function calls. -// Returns 1 on success, 0 on error. -extern int __xray_remove_handler_arg1(); } #endif Modified: projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc Mon May 8 19:20:55 2017 (r317969) @@ -443,6 +443,13 @@ INTERCEPTOR(void, _longjmp, void *env, i } #endif +#if ASAN_INTERCEPT___LONGJMP_CHK +INTERCEPTOR(void, __longjmp_chk, void *env, int val) { + __asan_handle_no_return(); + REAL(__longjmp_chk)(env, val); +} +#endif + #if ASAN_INTERCEPT_SIGLONGJMP INTERCEPTOR(void, siglongjmp, void *env, int val) { __asan_handle_no_return(); @@ -758,6 +765,9 @@ void InitializeAsanInterceptors() { #if ASAN_INTERCEPT__LONGJMP ASAN_INTERCEPT_FUNC(_longjmp); #endif +#if ASAN_INTERCEPT___LONGJMP_CHK + ASAN_INTERCEPT_FUNC(__longjmp_chk); +#endif #if ASAN_INTERCEPT_SIGLONGJMP ASAN_INTERCEPT_FUNC(siglongjmp); #endif Modified: projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.h Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.h Mon May 8 19:20:55 2017 (r317969) @@ -58,6 +58,12 @@ # define ASAN_INTERCEPT_SIGLONGJMP 0 #endif +#if SANITIZER_LINUX && !SANITIZER_ANDROID +# define ASAN_INTERCEPT___LONGJMP_CHK 1 +#else +# define ASAN_INTERCEPT___LONGJMP_CHK 0 +#endif + // Android bug: https://code.google.com/p/android/issues/detail?id=61799 #if ASAN_HAS_EXCEPTIONS && !SANITIZER_WINDOWS && \ !(SANITIZER_ANDROID && defined(__i386)) Modified: projects/clang500-import/contrib/compiler-rt/lib/builtins/emutls.c ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/builtins/emutls.c Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/builtins/emutls.c Mon May 8 19:20:55 2017 (r317969) @@ -98,7 +98,7 @@ static __inline emutls_address_array* em #else -#include +#include #include #include #include Modified: projects/clang500-import/contrib/compiler-rt/lib/builtins/int_types.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/builtins/int_types.h Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/builtins/int_types.h Mon May 8 19:20:55 2017 (r317969) @@ -60,9 +60,7 @@ typedef union }s; } udwords; -/* MIPS64 issue: PR 20098 */ -#if (defined(__LP64__) || defined(__wasm__)) && \ - !(defined(__mips__) && defined(__clang__)) +#if (defined(__LP64__) || defined(__wasm__) || defined(__mips64)) #define CRT_HAS_128BIT #endif Modified: projects/clang500-import/contrib/compiler-rt/lib/cfi/cfi_blacklist.txt ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/cfi/cfi_blacklist.txt Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/cfi/cfi_blacklist.txt Mon May 8 19:20:55 2017 (r317969) @@ -24,3 +24,8 @@ fun:_ZNSt3__19addressof* # Windows C++ stdlib headers that contain bad unrelated casts. src:*xmemory0 src:*xstddef + +# std::_Sp_counted_ptr_inplace::_Sp_counted_ptr_inplace() (libstdc++). +# This ctor is used by std::make_shared and needs to cast to uninitialized T* +# in order to call std::allocator_traits::construct. +fun:_ZNSt23_Sp_counted_ptr_inplace* Modified: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp Mon May 8 19:20:55 2017 (r317969) @@ -368,11 +368,12 @@ struct ScudoAllocator { void *Ptr; uptr Salt; uptr AllocationAlignment = FromPrimary ? MinAlignment : Alignment; - ScudoThreadContext *ThreadContext = getThreadContext(); + ScudoThreadContext *ThreadContext = getThreadContextAndLock(); if (LIKELY(ThreadContext)) { Salt = getPrng(ThreadContext)->getNext(); Ptr = BackendAllocator.Allocate(getAllocatorCache(ThreadContext), NeededSize, AllocationAlignment); + ThreadContext->unlock(); } else { SpinMutexLock l(&FallbackMutex); Salt = FallbackPrng.getNext(); @@ -434,9 +435,10 @@ struct ScudoAllocator { if (BypassQuarantine) { Chunk->eraseHeader(); void *Ptr = Chunk->getAllocBeg(Header); - ScudoThreadContext *ThreadContext = getThreadContext(); + ScudoThreadContext *ThreadContext = getThreadContextAndLock(); if (LIKELY(ThreadContext)) { getBackendAllocator().Deallocate(getAllocatorCache(ThreadContext), Ptr); + ThreadContext->unlock(); } else { SpinMutexLock Lock(&FallbackMutex); getBackendAllocator().Deallocate(&FallbackAllocatorCache, Ptr); @@ -445,12 +447,13 @@ struct ScudoAllocator { UnpackedHeader NewHeader = *Header; NewHeader.State = ChunkQuarantine; Chunk->compareExchangeHeader(&NewHeader, Header); - ScudoThreadContext *ThreadContext = getThreadContext(); + ScudoThreadContext *ThreadContext = getThreadContextAndLock(); if (LIKELY(ThreadContext)) { AllocatorQuarantine.Put(getQuarantineCache(ThreadContext), QuarantineCallback( getAllocatorCache(ThreadContext)), Chunk, Size); + ThreadContext->unlock(); } else { SpinMutexLock l(&FallbackMutex); AllocatorQuarantine.Put(&FallbackQuarantineCache, Modified: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h Mon May 8 19:20:55 2017 (r317969) @@ -72,7 +72,13 @@ const uptr AlignedChunkHeaderSize = #if SANITIZER_CAN_USE_ALLOCATOR64 const uptr AllocatorSpace = ~0ULL; -const uptr AllocatorSize = 0x40000000000ULL; // 4TB. +# if defined(__aarch64__) && SANITIZER_ANDROID +const uptr AllocatorSize = 0x4000000000ULL; // 256G. +# elif defined(__aarch64__) +const uptr AllocatorSize = 0x10000000000ULL; // 1T. +# else +const uptr AllocatorSize = 0x40000000000ULL; // 4T. +# endif typedef DefaultSizeClassMap SizeClassMap; struct AP { static const uptr kSpaceBeg = AllocatorSpace; Modified: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls.h Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls.h Mon May 8 19:20:55 2017 (r317969) @@ -19,10 +19,16 @@ #include "scudo_allocator.h" #include "scudo_utils.h" +#include "sanitizer_common/sanitizer_linux.h" +#include "sanitizer_common/sanitizer_platform.h" + namespace __scudo { -struct ALIGNED(64) ScudoThreadContext { - public: +// Platform specific base thread context definitions. +#include "scudo_tls_context_android.inc" +#include "scudo_tls_context_linux.inc" + +struct ALIGNED(64) ScudoThreadContext : public ScudoThreadContextPlatform { AllocatorCache Cache; Xorshift128Plus Prng; uptr QuarantineCachePlaceHolder[4]; @@ -32,8 +38,9 @@ struct ALIGNED(64) ScudoThreadContext { void initThread(); -// Fastpath functions are defined in the following platform specific headers. -#include "scudo_tls_linux.h" +// Platform specific dastpath functions definitions. +#include "scudo_tls_android.inc" +#include "scudo_tls_linux.inc" } // namespace __scudo Copied: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_android.cpp (from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_android.cpp) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_android.cpp Mon May 8 19:20:55 2017 (r317969, copy of r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_android.cpp) @@ -0,0 +1,95 @@ +//===-- scudo_tls_android.cpp -----------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// Scudo thread local structure implementation for Android. +/// +//===----------------------------------------------------------------------===// + +#include "sanitizer_common/sanitizer_platform.h" + +#if SANITIZER_LINUX && SANITIZER_ANDROID + +#include "scudo_tls.h" + +#include + +namespace __scudo { + +static pthread_once_t GlobalInitialized = PTHREAD_ONCE_INIT; +static pthread_key_t PThreadKey; + +static atomic_uint32_t ThreadContextCurrentIndex; +static ScudoThreadContext *ThreadContexts; +static uptr NumberOfContexts; + +// sysconf(_SC_NPROCESSORS_{CONF,ONLN}) cannot be used as they allocate memory. +static uptr getNumberOfCPUs() { + cpu_set_t CPUs; + CHECK_EQ(sched_getaffinity(0, sizeof(cpu_set_t), &CPUs), 0); + return CPU_COUNT(&CPUs); +} + +static void initOnce() { + // Hack: TLS_SLOT_TSAN was introduced in N. To be able to use it on M for + // testing, we create an unused key. Since the key_data array follows the tls + // array, it basically gives us the extra entry we need. + // TODO(kostyak): remove and restrict to N and above. + CHECK_EQ(pthread_key_create(&PThreadKey, NULL), 0); + initScudo(); + NumberOfContexts = getNumberOfCPUs(); + ThreadContexts = reinterpret_cast( + MmapOrDie(sizeof(ScudoThreadContext) * NumberOfContexts, __func__)); + for (int i = 0; i < NumberOfContexts; i++) + ThreadContexts[i].init(); +} + +void initThread() { + pthread_once(&GlobalInitialized, initOnce); + // Initial context assignment is done in a plain round-robin fashion. + u32 Index = atomic_fetch_add(&ThreadContextCurrentIndex, 1, + memory_order_relaxed); + ScudoThreadContext *ThreadContext = + &ThreadContexts[Index % NumberOfContexts]; + *get_android_tls_ptr() = reinterpret_cast(ThreadContext); +} + +ScudoThreadContext *getThreadContextAndLockSlow() { + ScudoThreadContext *ThreadContext; + // Go through all the contexts and find the first unlocked one. + for (u32 i = 0; i < NumberOfContexts; i++) { + ThreadContext = &ThreadContexts[i]; + if (ThreadContext->tryLock()) { + *get_android_tls_ptr() = reinterpret_cast(ThreadContext); + return ThreadContext; + } + } + // No luck, find the one with the lowest precedence, and slow lock it. + u64 Precedence = UINT64_MAX; + for (u32 i = 0; i < NumberOfContexts; i++) { + u64 SlowLockPrecedence = ThreadContexts[i].getSlowLockPrecedence(); + if (SlowLockPrecedence && SlowLockPrecedence < Precedence) { + ThreadContext = &ThreadContexts[i]; + Precedence = SlowLockPrecedence; + } + } + if (LIKELY(Precedence != UINT64_MAX)) { + ThreadContext->lock(); + *get_android_tls_ptr() = reinterpret_cast(ThreadContext); + return ThreadContext; + } + // Last resort (can this happen?), stick with the current one. + ThreadContext = + reinterpret_cast(*get_android_tls_ptr()); + ThreadContext->lock(); + return ThreadContext; +} + +} // namespace __scudo + +#endif // SANITIZER_LINUX && SANITIZER_ANDROID Copied: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_android.inc (from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_android.inc) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_android.inc Mon May 8 19:20:55 2017 (r317969, copy of r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_android.inc) @@ -0,0 +1,44 @@ +//===-- scudo_tls_android.inc -----------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// Scudo thread local structure fastpath functions implementation for Android. +/// +//===----------------------------------------------------------------------===// + +#ifndef SCUDO_TLS_ANDROID_H_ +#define SCUDO_TLS_ANDROID_H_ + +#ifndef SCUDO_TLS_H_ +# error "This file must be included inside scudo_tls.h." +#endif // SCUDO_TLS_H_ + +#if SANITIZER_LINUX && SANITIZER_ANDROID + +ALWAYS_INLINE void initThreadMaybe() { + if (LIKELY(*get_android_tls_ptr())) + return; + initThread(); +} + +ScudoThreadContext *getThreadContextAndLockSlow(); + +ALWAYS_INLINE ScudoThreadContext *getThreadContextAndLock() { + ScudoThreadContext *ThreadContext = + reinterpret_cast(*get_android_tls_ptr()); + CHECK(ThreadContext); + // Try to lock the currently associated context. + if (ThreadContext->tryLock()) + return ThreadContext; + // If it failed, go the slow path. + return getThreadContextAndLockSlow(); +} + +#endif // SANITIZER_LINUX && SANITIZER_ANDROID + +#endif // SCUDO_TLS_ANDROID_H_ Copied: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_context_android.inc (from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_context_android.inc) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_context_android.inc Mon May 8 19:20:55 2017 (r317969, copy of r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_context_android.inc) @@ -0,0 +1,54 @@ +//===-- scudo_tls_context_android.inc ---------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// Android specific base thread context definition. +/// +//===----------------------------------------------------------------------===// + +#ifndef SCUDO_TLS_CONTEXT_ANDROID_INC_ +#define SCUDO_TLS_CONTEXT_ANDROID_INC_ + +#ifndef SCUDO_TLS_H_ +# error "This file must be included inside scudo_tls.h." +#endif // SCUDO_TLS_H_ + +#if SANITIZER_LINUX && SANITIZER_ANDROID + +struct ScudoThreadContextPlatform { + INLINE bool tryLock() { + if (Mutex.TryLock()) { + atomic_store_relaxed(&SlowLockPrecedence, 0); + return true; + } + if (atomic_load_relaxed(&SlowLockPrecedence) == 0) + atomic_store_relaxed(&SlowLockPrecedence, NanoTime()); + return false; + } + + INLINE void lock() { + Mutex.Lock(); + atomic_store_relaxed(&SlowLockPrecedence, 0); + } + + INLINE void unlock() { + Mutex.Unlock(); + } + + INLINE u64 getSlowLockPrecedence() { + return atomic_load_relaxed(&SlowLockPrecedence); + } + + private: + StaticSpinMutex Mutex; + atomic_uint64_t SlowLockPrecedence; +}; + +#endif // SANITIZER_LINUX && SANITIZER_ANDROID + +#endif // SCUDO_TLS_CONTEXT_ANDROID_INC_ Copied: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_context_linux.inc (from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_context_linux.inc) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_context_linux.inc Mon May 8 19:20:55 2017 (r317969, copy of r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_context_linux.inc) @@ -0,0 +1,29 @@ +//===-- scudo_tls_context_linux.inc -----------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// Linux specific base thread context definition. +/// +//===----------------------------------------------------------------------===// + +#ifndef SCUDO_TLS_CONTEXT_LINUX_INC_ +#define SCUDO_TLS_CONTEXT_LINUX_INC_ + +#ifndef SCUDO_TLS_H_ +# error "This file must be included inside scudo_tls.h." +#endif // SCUDO_TLS_H_ + +#if SANITIZER_LINUX && !SANITIZER_ANDROID + +struct ScudoThreadContextPlatform { + ALWAYS_INLINE void unlock() {} +}; + +#endif // SANITIZER_LINUX && !SANITIZER_ANDROID + +#endif // SCUDO_TLS_CONTEXT_LINUX_INC_ Modified: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.cpp ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.cpp Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.cpp Mon May 8 19:20:55 2017 (r317969) @@ -14,7 +14,7 @@ #include "sanitizer_common/sanitizer_platform.h" -#if SANITIZER_LINUX +#if SANITIZER_LINUX && !SANITIZER_ANDROID #include "scudo_tls.h" @@ -26,8 +26,10 @@ namespace __scudo { static pthread_once_t GlobalInitialized = PTHREAD_ONCE_INIT; static pthread_key_t PThreadKey; -thread_local ThreadState ScudoThreadState = ThreadNotInitialized; -thread_local ScudoThreadContext ThreadLocalContext; +__attribute__((tls_model("initial-exec"))) +THREADLOCAL ThreadState ScudoThreadState = ThreadNotInitialized; +__attribute__((tls_model("initial-exec"))) +THREADLOCAL ScudoThreadContext ThreadLocalContext; static void teardownThread(void *Ptr) { uptr Iteration = reinterpret_cast(Ptr); @@ -59,4 +61,4 @@ void initThread() { } // namespace __scudo -#endif // SANITIZER_LINUX +#endif // SANITIZER_LINUX && !SANITIZER_ANDROID Copied: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.inc (from r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_linux.inc) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.inc Mon May 8 19:20:55 2017 (r317969, copy of r317962, vendor/compiler-rt/dist/lib/scudo/scudo_tls_linux.inc) @@ -0,0 +1,48 @@ +//===-- scudo_tls_linux.inc -------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// Scudo thread local structure fastpath functions implementation for platforms +/// supporting thread_local. +/// +//===----------------------------------------------------------------------===// + +#ifndef SCUDO_TLS_LINUX_H_ +#define SCUDO_TLS_LINUX_H_ + +#ifndef SCUDO_TLS_H_ +# error "This file must be included inside scudo_tls.h." +#endif // SCUDO_TLS_H_ + +#if SANITIZER_LINUX && !SANITIZER_ANDROID + +enum ThreadState : u8 { + ThreadNotInitialized = 0, + ThreadInitialized, + ThreadTornDown, +}; +__attribute__((tls_model("initial-exec"))) +extern THREADLOCAL ThreadState ScudoThreadState; +__attribute__((tls_model("initial-exec"))) +extern THREADLOCAL ScudoThreadContext ThreadLocalContext; + +ALWAYS_INLINE void initThreadMaybe() { + if (LIKELY(ScudoThreadState != ThreadNotInitialized)) + return; + initThread(); +} + +ALWAYS_INLINE ScudoThreadContext *getThreadContextAndLock() { + if (UNLIKELY(ScudoThreadState == ThreadTornDown)) + return nullptr; + return &ThreadLocalContext; +} + +#endif // SANITIZER_LINUX && !SANITIZER_ANDROID + +#endif // SCUDO_TLS_LINUX_H_ Copied: projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_diag_standalone.cc (from r317962, vendor/compiler-rt/dist/lib/ubsan/ubsan_diag_standalone.cc) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_diag_standalone.cc Mon May 8 19:20:55 2017 (r317969, copy of r317962, vendor/compiler-rt/dist/lib/ubsan/ubsan_diag_standalone.cc) @@ -0,0 +1,37 @@ +//===-- ubsan_diag_standalone.cc ------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Diagnostic reporting for the standalone UBSan runtime. +// +//===----------------------------------------------------------------------===// + +#include "ubsan_platform.h" +#if CAN_SANITIZE_UB +#include "ubsan_diag.h" + +using namespace __ubsan; + +extern "C" { +SANITIZER_INTERFACE_ATTRIBUTE +void __sanitizer_print_stack_trace() { + uptr top = 0; + uptr bottom = 0; + bool request_fast_unwind = common_flags()->fast_unwind_on_fatal; + if (request_fast_unwind) + __sanitizer::GetThreadStackTopAndBottom(false, &top, &bottom); + + GET_REPORT_OPTIONS(false); + BufferedStackTrace stack; + stack.Unwind(kStackTraceMax, Opts.pc, Opts.bp, nullptr, top, bottom, + request_fast_unwind); + stack.Print(); +} +} // extern "C" + +#endif // CAN_SANITIZE_UB Modified: projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc Mon May 8 19:20:55 2017 (r317969) @@ -410,7 +410,8 @@ static void handleLoadInvalidValue(Inval SourceLocation Loc = Data->Loc.acquire(); // This check could be more precise if we used different handlers for // -fsanitize=bool and -fsanitize=enum. - bool IsBool = (0 == internal_strcmp(Data->Type.getTypeName(), "'bool'")); + bool IsBool = (0 == internal_strcmp(Data->Type.getTypeName(), "'bool'")) || + (0 == internal_strncmp(Data->Type.getTypeName(), "'BOOL'", 6)); ErrorType ET = IsBool ? ErrorType::InvalidBoolLoad : ErrorType::InvalidEnumLoad; Modified: projects/clang500-import/contrib/compiler-rt/lib/xray/xray_init.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/xray/xray_init.cc Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/xray/xray_init.cc Mon May 8 19:20:55 2017 (r317969) @@ -25,6 +25,8 @@ extern "C" { void __xray_init(); extern const XRaySledEntry __start_xray_instr_map[] __attribute__((weak)); extern const XRaySledEntry __stop_xray_instr_map[] __attribute__((weak)); +extern const XRayFunctionSledIndex __start_xray_fn_idx[] __attribute__((weak)); +extern const XRayFunctionSledIndex __stop_xray_fn_idx[] __attribute__((weak)); } using namespace __xray; @@ -55,6 +57,8 @@ void __xray_init() XRAY_NEVER_INSTRUMENT __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex); XRayInstrMap.Sleds = __start_xray_instr_map; XRayInstrMap.Entries = __stop_xray_instr_map - __start_xray_instr_map; + XRayInstrMap.SledsIndex = __start_xray_fn_idx; + XRayInstrMap.Functions = __stop_xray_fn_idx - __start_xray_fn_idx; } __sanitizer::atomic_store(&XRayInitialized, true, __sanitizer::memory_order_release); Modified: projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface.cc Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface.cc Mon May 8 19:20:55 2017 (r317969) @@ -132,12 +132,48 @@ CleanupInvoker scopeCleanup(Fu return CleanupInvoker{Fn}; } +inline bool patchSled(const XRaySledEntry &Sled, bool Enable, + int32_t FuncId) XRAY_NEVER_INSTRUMENT { + // While we're here, we should patch the nop sled. To do that we mprotect + // the page containing the function to be writeable. + const uint64_t PageSize = GetPageSizeCached(); + void *PageAlignedAddr = + reinterpret_cast(Sled.Address & ~(PageSize - 1)); + std::size_t MProtectLen = (Sled.Address + cSledLength) - + reinterpret_cast(PageAlignedAddr); + MProtectHelper Protector(PageAlignedAddr, MProtectLen); + if (Protector.MakeWriteable() == -1) { + printf("Failed mprotect: %d\n", errno); + return XRayPatchingStatus::FAILED; + } + + bool Success = false; + switch (Sled.Kind) { + case XRayEntryType::ENTRY: + Success = patchFunctionEntry(Enable, FuncId, Sled, __xray_FunctionEntry); + break; + case XRayEntryType::EXIT: + Success = patchFunctionExit(Enable, FuncId, Sled); + break; + case XRayEntryType::TAIL: + Success = patchFunctionTailExit(Enable, FuncId, Sled); + break; + case XRayEntryType::LOG_ARGS_ENTRY: + Success = patchFunctionEntry(Enable, FuncId, Sled, __xray_ArgLoggerEntry); + break; + default: + Report("Unsupported sled kind '%d' @%04x\n", Sled.Address, int(Sled.Kind)); + return false; + } + return Success; +} + // controlPatching implements the common internals of the patching/unpatching // implementation. |Enable| defines whether we're enabling or disabling the // runtime XRay instrumentation. XRayPatchingStatus controlPatching(bool Enable) XRAY_NEVER_INSTRUMENT { if (!__sanitizer::atomic_load(&XRayInitialized, - __sanitizer::memory_order_acquire)) + __sanitizer::memory_order_acquire)) return XRayPatchingStatus::NOT_INITIALIZED; // Not initialized. uint8_t NotPatching = false; @@ -179,38 +215,7 @@ XRayPatchingStatus controlPatching(bool ++FuncId; CurFun = F; } - - // While we're here, we should patch the nop sled. To do that we mprotect - // the page containing the function to be writeable. - void *PageAlignedAddr = - reinterpret_cast(Sled.Address & ~(PageSize - 1)); - std::size_t MProtectLen = (Sled.Address + cSledLength) - - reinterpret_cast(PageAlignedAddr); - MProtectHelper Protector(PageAlignedAddr, MProtectLen); - if (Protector.MakeWriteable() == -1) { - printf("Failed mprotect: %d\n", errno); - return XRayPatchingStatus::FAILED; - } - - bool Success = false; - switch (Sled.Kind) { - case XRayEntryType::ENTRY: - Success = patchFunctionEntry(Enable, FuncId, Sled, __xray_FunctionEntry); - break; - case XRayEntryType::EXIT: - Success = patchFunctionExit(Enable, FuncId, Sled); - break; - case XRayEntryType::TAIL: - Success = patchFunctionTailExit(Enable, FuncId, Sled); - break; - case XRayEntryType::LOG_ARGS_ENTRY: - Success = patchFunctionEntry(Enable, FuncId, Sled, __xray_ArgLoggerEntry); - break; - default: - Report("Unsupported sled kind: %d\n", int(Sled.Kind)); - continue; - } - (void)Success; + patchSled(Sled, Enable, FuncId); } __sanitizer::atomic_store(&XRayPatching, false, __sanitizer::memory_order_release); @@ -226,6 +231,64 @@ XRayPatchingStatus __xray_unpatch() XRAY return controlPatching(false); } +XRayPatchingStatus patchFunction(int32_t FuncId, + bool Enable) XRAY_NEVER_INSTRUMENT { + if (!__sanitizer::atomic_load(&XRayInitialized, + __sanitizer::memory_order_acquire)) + return XRayPatchingStatus::NOT_INITIALIZED; // Not initialized. + + uint8_t NotPatching = false; + if (!__sanitizer::atomic_compare_exchange_strong( + &XRayPatching, &NotPatching, true, __sanitizer::memory_order_acq_rel)) + return XRayPatchingStatus::ONGOING; // Already patching. + + // Next, we look for the function index. + XRaySledMap InstrMap; + { + __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex); + InstrMap = XRayInstrMap; + } + + // If we don't have an index, we can't patch individual functions. + if (InstrMap.Functions == 0) + return XRayPatchingStatus::NOT_INITIALIZED; + + // FuncId must be a positive number, less than the number of functions + // instrumented. + if (FuncId <= 0 || static_cast(FuncId) > InstrMap.Functions) { + Report("Invalid function id provided: %d\n", FuncId); + return XRayPatchingStatus::FAILED; + } + + // Now we patch ths sleds for this specific function. + auto SledRange = InstrMap.SledsIndex[FuncId - 1]; + auto *f = SledRange.Begin; + auto *e = SledRange.End; + + bool SucceedOnce = false; + while (f != e) + SucceedOnce |= patchSled(*f++, Enable, FuncId); + + __sanitizer::atomic_store(&XRayPatching, false, + __sanitizer::memory_order_release); + + if (!SucceedOnce) { + Report("Failed patching any sled for function '%d'.", FuncId); + return XRayPatchingStatus::FAILED; + } + + return XRayPatchingStatus::SUCCESS; +} + +XRayPatchingStatus __xray_patch_function(int32_t FuncId) XRAY_NEVER_INSTRUMENT { + return patchFunction(FuncId, true); +} + +XRayPatchingStatus +__xray_unpatch_function(int32_t FuncId) XRAY_NEVER_INSTRUMENT { + return patchFunction(FuncId, false); +} + int __xray_set_handler_arg1(void (*Handler)(int32_t, XRayEntryType, uint64_t)) { if (!__sanitizer::atomic_load(&XRayInitialized, __sanitizer::memory_order_acquire)) @@ -239,3 +302,15 @@ int __xray_set_handler_arg1(void (*Handl return 1; } int __xray_remove_handler_arg1() { return __xray_set_handler_arg1(nullptr); } + +uintptr_t __xray_function_address(int32_t FuncId) XRAY_NEVER_INSTRUMENT { + __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex); + if (FuncId <= 0 || static_cast(FuncId) > XRayInstrMap.Functions) + return 0; + return XRayInstrMap.SledsIndex[FuncId - 1].Begin->Address; +} + +size_t __xray_max_function_id() XRAY_NEVER_INSTRUMENT { + __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex); + return XRayInstrMap.Functions; +} Modified: projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface_internal.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface_internal.h Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/compiler-rt/lib/xray/xray_interface_internal.h Mon May 8 19:20:55 2017 (r317969) @@ -39,6 +39,11 @@ struct XRaySledEntry { #error "Unsupported word size." #endif }; + +struct XRayFunctionSledIndex { + const XRaySledEntry* Begin; + const XRaySledEntry* End; +}; } namespace __xray { @@ -46,6 +51,8 @@ namespace __xray { struct XRaySledMap { const XRaySledEntry *Sleds; size_t Entries; + const XRayFunctionSledIndex *SledsIndex; + size_t Functions; }; bool patchFunctionEntry(bool Enable, uint32_t FuncId, Modified: projects/clang500-import/contrib/libc++/include/__config ============================================================================== --- projects/clang500-import/contrib/libc++/include/__config Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/libc++/include/__config Mon May 8 19:20:55 2017 (r317969) @@ -314,7 +314,7 @@ typedef __char32_t char32_t; #define _LIBCPP_NO_EXCEPTIONS #endif -#if !(__has_feature(cxx_rtti)) +#if !(__has_feature(cxx_rtti)) && !defined(_LIBCPP_NO_RTTI) #define _LIBCPP_NO_RTTI #endif @@ -1089,6 +1089,13 @@ _LIBCPP_FUNC_VIS extern "C" void __sanit # define _LIBCPP_DIAGNOSE_ERROR(...) #endif +#if __has_attribute(fallthough) || _GNUC_VER >= 700 +// Use a function like macro to imply that it must be followed by a semicolon +#define _LIBCPP_FALLTHROUGH() __attribute__((__fallthrough__)) +#else +#define _LIBCPP_FALLTHROUGH() ((void)0) +#endif + #if defined(_LIBCPP_ABI_MICROSOFT) && \ (defined(_LIBCPP_COMPILER_MSVC) || __has_declspec_attribute(empty_bases)) # define _LIBCPP_DECLSPEC_EMPTY_BASES __declspec(empty_bases) @@ -1113,4 +1120,77 @@ _LIBCPP_FUNC_VIS extern "C" void __sanit #endif // __cplusplus +// Decide whether to use availability macros. +#if !defined(_LIBCPP_BUILDING_LIBRARY) && \ + !defined(_LIBCPP_DISABLE_AVAILABILITY) && \ + __has_feature(attribute_availability_with_strict) && \ + __has_feature(attribute_availability_in_templates) +#ifdef __APPLE__ +#define _LIBCPP_USE_AVAILABILITY_APPLE +#endif +#endif + +// Define availability macros. +#if defined(_LIBCPP_USE_AVAILABILITY_APPLE) +#define _LIBCPP_AVAILABILITY_SHARED_MUTEX \ + __attribute__((availability(macosx,strict,introduced=10.12))) \ + __attribute__((availability(ios,strict,introduced=10.0))) \ + __attribute__((availability(tvos,strict,introduced=10.0))) \ + __attribute__((availability(watchos,strict,introduced=3.0))) +#define _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS __attribute__((unavailable)) +#define _LIBCPP_AVAILABILITY_BAD_ARRAY_LENGTH __attribute__((unavailable)) +#define _LIBCPP_AVAILABILITY_UNCAUGHT_EXCEPTIONS \ + __attribute__((availability(macosx,strict,introduced=10.12))) \ + __attribute__((availability(ios,strict,introduced=10.0))) \ + __attribute__((availability(tvos,strict,introduced=10.0))) \ + __attribute__((availability(watchos,strict,introduced=3.0))) +#define _LIBCPP_AVAILABILITY_SIZED_NEW_DELETE \ + __attribute__((availability(macosx,strict,introduced=10.12))) \ + __attribute__((availability(ios,strict,introduced=10.0))) \ + __attribute__((availability(tvos,strict,introduced=10.0))) \ + __attribute__((availability(watchos,strict,introduced=3.0))) +#define _LIBCPP_AVAILABILITY_FUTURE_ERROR \ + __attribute__((availability(ios,strict,introduced=6.0))) +#define _LIBCPP_AVAILABILITY_TYPEINFO_VTABLE \ + __attribute__((availability(macosx,strict,introduced=10.9))) \ + __attribute__((availability(ios,strict,introduced=7.0))) +#define _LIBCPP_AVAILABILITY_LOCALE_CATEGORY \ + __attribute__((availability(macosx,strict,introduced=10.9))) \ + __attribute__((availability(ios,strict,introduced=7.0))) +#define _LIBCPP_AVAILABILITY_ATOMIC_SHARED_PTR \ + __attribute__((availability(macosx,strict,introduced=10.9))) \ + __attribute__((availability(ios,strict,introduced=7.0))) +#else +#define _LIBCPP_AVAILABILITY_SHARED_MUTEX +#define _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS +#define _LIBCPP_AVAILABILITY_BAD_ARRAY_LENGTH +#define _LIBCPP_AVAILABILITY_UNCAUGHT_EXCEPTIONS +#define _LIBCPP_AVAILABILITY_SIZED_NEW_DELETE +#define _LIBCPP_AVAILABILITY_FUTURE_ERROR +#define _LIBCPP_AVAILABILITY_TYPEINFO_VTABLE +#define _LIBCPP_AVAILABILITY_LOCALE_CATEGORY +#define _LIBCPP_AVAILABILITY_ATOMIC_SHARED_PTR +#endif + +// Define availability that depends on _LIBCPP_NO_EXCEPTIONS. +#ifdef _LIBCPP_NO_EXCEPTIONS +#define _LIBCPP_AVAILABILITY_DYNARRAY +#define _LIBCPP_AVAILABILITY_FUTURE +#else +#define _LIBCPP_AVAILABILITY_DYNARRAY _LIBCPP_AVAILABILITY_BAD_ARRAY_LENGTH +#define _LIBCPP_AVAILABILITY_FUTURE _LIBCPP_AVAILABILITY_FUTURE_ERROR +#endif + +// Availability of stream API in the dylib got dropped and re-added. The +// extern template should effectively be available at: +// availability(macosx,introduced=10.9) +// availability(ios,introduced=7.0) +#if defined(_LIBCPP_USE_AVAILABILITY_APPLE) && \ + ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ <= 1090) || \ + (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ <= 70000)) +#define _LIBCPP_AVAILABILITY_NO_STREAMS_EXTERN_TEMPLATE +#endif + #endif // _LIBCPP_CONFIG Modified: projects/clang500-import/contrib/libc++/include/__locale ============================================================================== --- projects/clang500-import/contrib/libc++/include/__locale Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/libc++/include/__locale Mon May 8 19:20:55 2017 (r317969) @@ -69,6 +69,7 @@ public: class _LIBCPP_TYPE_VIS id; typedef int category; + _LIBCPP_AVAILABILITY_LOCALE_CATEGORY static const category // values assigned here are for exposition only none = 0, collate = LC_COLLATE_MASK, Modified: projects/clang500-import/contrib/libc++/include/__threading_support ============================================================================== --- projects/clang500-import/contrib/libc++/include/__threading_support Mon May 8 18:51:13 2017 (r317968) +++ projects/clang500-import/contrib/libc++/include/__threading_support Mon May 8 19:20:55 2017 (r317969) @@ -474,7 +474,10 @@ int __libcpp_condvar_timedwait(__libcpp_ timeout_ms.count() > 0 ? timeout_ms.count() : 0, 0)) - return GetLastError(); + { + auto __ec = GetLastError(); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***