Hello community,
here is the log from the commit of package llvm5 for openSUSE:Factory checked in at 2018-01-07 17:22:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/llvm5 (Old)
and /work/SRC/openSUSE:Factory/.llvm5.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "llvm5"
Sun Jan 7 17:22:06 2018 rev:3 rq:561808 version:5.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/llvm5/llvm5.changes 2017-12-31 00:43:58.202472010 +0100
+++ /work/SRC/openSUSE:Factory/.llvm5.new/llvm5.changes 2018-01-07 17:22:17.626686459 +0100
@@ -1,0 +2,15 @@
+Fri Jan 5 08:55:59 UTC 2018 - msrb@suse.com
+
+- Delete intermediate files during build to reduce total disk usage
+ (bnc#1074625)
+
+-------------------------------------------------------------------
+Thu Jan 4 10:28:07 UTC 2018 - msrb@suse.com
+
+- Update to llvm 5.0.1
+ * This release contains bug-fixes for the LLVM 5.0.0 release.
+ * This release is API and ABI compatible with 5.0.0.
+- llvm-do-not-install-static-libraries.patch
+ * Updated.
+
+-------------------------------------------------------------------
Old:
----
cfe-5.0.0.src.tar.xz
cfe-docs-5.0.0.src.tar.xz
clang-tools-extra-5.0.0.src.tar.xz
compiler-rt-5.0.0.src.tar.xz
libcxx-5.0.0.src.tar.xz
libcxxabi-5.0.0.src.tar.xz
lld-5.0.0.src.tar.xz
lldb-5.0.0.src.tar.xz
llvm-5.0.0.src.tar.xz
llvm-docs-5.0.0.src.tar.xz
openmp-5.0.0.src.tar.xz
New:
----
cfe-5.0.1.src.tar.xz
cfe-docs-5.0.1.src.tar.xz
clang-tools-extra-5.0.1.src.tar.xz
compiler-rt-5.0.1.src.tar.xz
libcxx-5.0.1.src.tar.xz
libcxxabi-5.0.1.src.tar.xz
lld-5.0.1.src.tar.xz
lldb-5.0.1.src.tar.xz
llvm-5.0.1.src.tar.xz
llvm-docs-5.0.1.src.tar.xz
openmp-5.0.1.src.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ llvm5.spec ++++++
--- /var/tmp/diff_new_pack.OermVO/_old 2018-01-07 17:22:20.354558596 +0100
+++ /var/tmp/diff_new_pack.OermVO/_new 2018-01-07 17:22:20.358558409 +0100
@@ -1,7 +1,7 @@
#
# spec file for package llvm5
#
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,7 +16,7 @@
#
-%define _relver 5.0.0
+%define _relver 5.0.1
%define _minor 5.0
%define _sonum 5
# Integer version used by update-alternatives
@@ -55,7 +55,7 @@
%bcond_without pyclang
Name: llvm5
-Version: 5.0.0
+Version: 5.0.1
Release: 0
Summary: Low Level Virtual Machine
License: NCSA
@@ -651,6 +651,16 @@
ninja -v -j $ninjaproc clang
cd ..
+# Remove files that won't be needed anymore.
+# This reduces the total amount of disk space used during build. (bnc#1074625)
+find ./stage1 -name '*.o' -delete
+find ./stage1 -name '*.a' \
+ -and -not -name 'libclang*.a' \
+ -and -not -name 'libFuzzer.a' \
+ -and -not -name 'libc++.a' \
+ -and -not -name 'libc++experimental.a' \
+ -delete
+
%define __builddir build
export PATH=${PWD}/stage1/bin:$PATH
export CC=${PWD}/stage1/bin/clang
@@ -710,14 +720,14 @@
# Docs are prebuilt due to sphinx dependency
#
-# pushd llvm-5.0.0.src/docs
+# pushd llvm-5.0.1.src/docs
# make -f Makefile.sphinx man html
# popd
-# pushd cfe-5.0.0.src/docs
+# pushd cfe-5.0.1.src/docs
# make -f Makefile.sphinx man html
# popd
-# tar cvJf llvm-docs-5.0.0.src.tar.xz llvm-5.0.0.src/docs/_build/{man,html}
-# tar cvJf cfe-docs-5.0.0.src.tar.xz cfe-5.0.0.src/docs/_build/{man,html}
+# tar cvJf llvm-docs-5.0.1.src.tar.xz llvm-5.0.1.src/docs/_build/{man,html}
+# tar cvJf cfe-docs-5.0.1.src.tar.xz cfe-5.0.1.src/docs/_build/{man,html}
# Build man/html pages
pushd docs
@@ -904,7 +914,7 @@
# UTF-8.
export LANG=C.UTF-8
-cd build
+pushd build
%ifnarch armv6hl armv7hl armv7l
%if !0%{?qemu_user_space_build:1}
# we just do not have enough memory with qemu emulation
@@ -920,6 +930,13 @@
%endif
%endif
+popd
+
+# Remove files that won't be needed anymore.
+# This reduces the total amount of disk space used during build. (bnc#1074625)
+# This is meant to happen after build, install and check, but before
+# extracting debuginfos or creating the final RPMs.
+rm -rf ./stage1 ./build
%post -n libLLVM%{_sonum} -p /sbin/ldconfig
%postun -n libLLVM%{_sonum} -p /sbin/ldconfig
++++++ cfe-5.0.0.src.tar.xz -> cfe-5.0.1.src.tar.xz ++++++
/work/SRC/openSUSE:Factory/llvm5/cfe-5.0.0.src.tar.xz /work/SRC/openSUSE:Factory/.llvm5.new/cfe-5.0.1.src.tar.xz differ: char 25, line 1
++++++ cfe-docs-5.0.0.src.tar.xz -> cfe-docs-5.0.1.src.tar.xz ++++++
++++ 39950 lines of diff (skipped)
++++++ clang-tools-extra-5.0.0.src.tar.xz -> clang-tools-extra-5.0.1.src.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clang-tools-extra-5.0.0.src/clangd/tool/CMakeLists.txt new/clang-tools-extra-5.0.1.src/clangd/tool/CMakeLists.txt
--- old/clang-tools-extra-5.0.0.src/clangd/tool/CMakeLists.txt 2017-07-11 02:18:07.000000000 +0200
+++ new/clang-tools-extra-5.0.1.src/clangd/tool/CMakeLists.txt 2017-12-05 23:28:17.000000000 +0100
@@ -6,6 +6,10 @@
install(TARGETS clangd RUNTIME DESTINATION bin)
+set(LLVM_LINK_COMPONENTS
+ support
+ )
+
target_link_libraries(clangd
clangBasic
clangDaemon
@@ -14,5 +18,4 @@
clangSema
clangTooling
clangToolingCore
- LLVMSupport
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clang-tools-extra-5.0.0.src/test/Unit/lit.cfg new/clang-tools-extra-5.0.1.src/test/Unit/lit.cfg
--- old/clang-tools-extra-5.0.0.src/test/Unit/lit.cfg 2014-08-13 14:54:50.000000000 +0200
+++ new/clang-tools-extra-5.0.1.src/test/Unit/lit.cfg 2017-10-09 20:00:04.000000000 +0200
@@ -41,14 +41,17 @@
shlibpath_var = 'PATH'
# Point the dynamic loader at dynamic libraries in 'lib'.
+shlibdir = getattr(config, 'shlibdir', None)
+if not shlibdir:
+ lit_config.fatal('No shlibdir set!')
llvm_libs_dir = getattr(config, 'llvm_libs_dir', None)
if not llvm_libs_dir:
lit_config.fatal('No LLVM libs dir set!')
-shlibpath = os.path.pathsep.join((llvm_libs_dir,
+shlibpath = os.path.pathsep.join((shlibdir, llvm_libs_dir,
config.environment.get(shlibpath_var,'')))
# Win32 seeks DLLs along %PATH%.
-if sys.platform in ['win32', 'cygwin'] and os.path.isdir(config.shlibdir):
- shlibpath = os.path.pathsep.join((config.shlibdir, shlibpath))
+if sys.platform in ['win32', 'cygwin'] and os.path.isdir(shlibdir):
+ shlibpath = os.path.pathsep.join((shlibdir, shlibpath))
config.environment[shlibpath_var] = shlibpath
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clang-tools-extra-5.0.0.src/test/lit.cfg new/clang-tools-extra-5.0.1.src/test/lit.cfg
--- old/clang-tools-extra-5.0.0.src/test/lit.cfg 2016-05-31 14:12:19.000000000 +0200
+++ new/clang-tools-extra-5.0.1.src/test/lit.cfg 2017-10-09 20:00:04.000000000 +0200
@@ -99,10 +99,13 @@
clang_tools_dir, llvm_tools_dir, config.environment['PATH']))
config.environment['PATH'] = path
+ clang_libs_dir = getattr(config, 'clang_libs_dir', None)
+ if not clang_libs_dir:
+ lit_config.fatal('No Clang libs dir set!')
llvm_libs_dir = getattr(config, 'llvm_libs_dir', None)
if not llvm_libs_dir:
lit_config.fatal('No LLVM libs dir set!')
- path = os.path.pathsep.join((llvm_libs_dir,
+ path = os.path.pathsep.join((clang_libs_dir, llvm_libs_dir,
config.environment.get('LD_LIBRARY_PATH','')))
config.environment['LD_LIBRARY_PATH'] = path
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clang-tools-extra-5.0.0.src/test/lit.site.cfg.in new/clang-tools-extra-5.0.1.src/test/lit.site.cfg.in
--- old/clang-tools-extra-5.0.0.src/test/lit.site.cfg.in 2016-04-16 09:01:42.000000000 +0200
+++ new/clang-tools-extra-5.0.1.src/test/lit.site.cfg.in 2017-10-09 20:00:04.000000000 +0200
@@ -7,6 +7,7 @@
config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@"
config.clang_tools_binary_dir = "@CLANG_TOOLS_BINARY_DIR@"
config.clang_tools_dir = "@CLANG_TOOLS_DIR@"
+config.clang_libs_dir = "@SHLIBDIR@"
config.python_executable = "@PYTHON_EXECUTABLE@"
config.target_triple = "@TARGET_TRIPLE@"
++++++ compiler-rt-5.0.0.src.tar.xz -> compiler-rt-5.0.1.src.tar.xz ++++++
++++++ libcxx-5.0.0.src.tar.xz -> libcxx-5.0.1.src.tar.xz ++++++
++++ 2796 lines of diff (skipped)
++++++ libcxxabi-5.0.0.src.tar.xz -> libcxxabi-5.0.1.src.tar.xz ++++++
++++++ lld-5.0.0.src.tar.xz -> lld-5.0.1.src.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/ELF/SyntheticSections.cpp new/lld-5.0.1.src/ELF/SyntheticSections.cpp
--- old/lld-5.0.0.src/ELF/SyntheticSections.cpp 2017-07-18 13:59:19.000000000 +0200
+++ new/lld-5.0.1.src/ELF/SyntheticSections.cpp 2017-10-04 01:44:23.000000000 +0200
@@ -427,10 +427,11 @@
&Sec->template getFile<ELFT>()->getRelocTargetSym(Rels[FirstRelI]);
// Search for an existing CIE by CIE contents/relocation target pair.
- CieRecord *Cie = &CieMap[{Piece.data(), Personality}];
+ CieRecord *&Cie = CieMap[{Piece.data(), Personality}];
// If not found, create a new one.
- if (Cie->Piece == nullptr) {
+ if (!Cie) {
+ Cie = make<CieRecord>();
Cie->Piece = &Piece;
Cies.push_back(Cie);
}
@@ -522,9 +523,14 @@
static void writeCieFde(uint8_t *Buf, ArrayRef D) {
memcpy(Buf, D.data(), D.size());
+ size_t Aligned = alignTo(D.size(), sizeof(typename ELFT::uint));
+
+ // Zero-clear trailing padding if it exists.
+ memset(Buf + D.size(), 0, Aligned - D.size());
+
// Fix the size field. -4 since size does not include the size field itself.
const endianness E = ELFT::TargetEndianness;
- write32<E>(Buf, alignTo(D.size(), sizeof(typename ELFT::uint)) - 4);
+ write32<E>(Buf, Aligned - 4);
}
template <class ELFT> void EhFrameSection<ELFT>::finalizeContents() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/ELF/SyntheticSections.h new/lld-5.0.1.src/ELF/SyntheticSections.h
--- old/lld-5.0.0.src/ELF/SyntheticSections.h 2017-07-13 01:56:53.000000000 +0200
+++ new/lld-5.0.1.src/ELF/SyntheticSections.h 2017-10-04 01:42:47.000000000 +0200
@@ -103,7 +103,8 @@
std::vector Cies;
// CIE records are uniquified by their contents and personality functions.
- llvm::DenseMap, SymbolBody *>, CieRecord> CieMap;
+ llvm::DenseMap, SymbolBody *>, CieRecord *>
+ CieMap;
};
class GotSection : public SyntheticSection {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler.h new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler.h
--- old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler.h 2016-03-30 22:15:06.000000000 +0200
+++ new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler.h 2017-12-05 21:25:50.000000000 +0100
@@ -112,6 +112,10 @@
/// info in final executables.
virtual bool isLazyPointer(const Reference &);
+ /// Reference from an __stub_helper entry to the required offset of the
+ /// lazy bind commands.
+ virtual Reference::KindValue lazyImmediateLocationKind() = 0;
+
/// Returns true if the specified relocation is paired to the next relocation.
virtual bool isPairedReloc(const normalized::Relocation &) = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_arm.cpp new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_arm.cpp
--- old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_arm.cpp 2016-11-11 23:28:19.000000000 +0100
+++ new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_arm.cpp 2017-12-05 21:25:50.000000000 +0100
@@ -67,6 +67,10 @@
return invalid;
}
+ Reference::KindValue lazyImmediateLocationKind() override {
+ return lazyImmediateLocation;
+ }
+
Reference::KindValue pointerKind() override {
return invalid;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp
--- old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp 2017-04-15 03:42:55.000000000 +0200
+++ new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp 2017-12-05 21:25:50.000000000 +0100
@@ -127,6 +127,10 @@
return pointer64;
}
+ Reference::KindValue lazyImmediateLocationKind() override {
+ return lazyImmediateLocation;
+ }
+
uint32_t dwarfCompactUnwindType() override {
return 0x03000000;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_x86.cpp new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_x86.cpp
--- old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_x86.cpp 2017-04-15 03:50:51.000000000 +0200
+++ new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_x86.cpp 2017-12-05 21:25:50.000000000 +0100
@@ -70,6 +70,10 @@
return delta32;
}
+ Reference::KindValue lazyImmediateLocationKind() override {
+ return lazyImmediateLocation;
+ }
+
Reference::KindValue unwindRefToEhFrameKind() override {
return invalid;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp
--- old/lld-5.0.0.src/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp 2016-11-11 23:28:19.000000000 +0100
+++ new/lld-5.0.1.src/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp 2017-12-05 21:25:50.000000000 +0100
@@ -116,6 +116,10 @@
return unwindFDEToFunction;
}
+ Reference::KindValue lazyImmediateLocationKind() override {
+ return lazyImmediateLocation;
+ }
+
Reference::KindValue unwindRefToEhFrameKind() override {
return unwindInfoToEhFrame;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp new/lld-5.0.1.src/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
--- old/lld-5.0.0.src/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp 2017-06-10 10:06:17.000000000 +0200
+++ new/lld-5.0.1.src/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp 2017-12-05 21:25:50.000000000 +0100
@@ -172,6 +172,8 @@
SymbolScope &symbolScope);
void appendSection(SectionInfo *si, NormalizedFile &file);
uint32_t sectionIndexForAtom(const Atom *atom);
+ void fixLazyReferenceImm(const DefinedAtom *atom, uint32_t offset,
+ NormalizedFile &file);
typedef llvm::DenseMap AtomToIndex;
struct AtomAndIndex { const Atom *atom; uint32_t index; SymbolScope scope; };
@@ -1423,6 +1425,8 @@
uint8_t segmentIndex;
uint64_t segmentStartAddr;
+ uint32_t offsetInBindInfo = 0;
+
for (SectionInfo *sect : _sectionInfos) {
segIndexForSection(sect, segmentIndex, segmentStartAddr);
for (const AtomInfo &info : sect->atomsAndOffsets) {
@@ -1467,6 +1471,59 @@
bind.symbolName = targ->name();
bind.addend = ref->addend();
nFile.lazyBindingInfo.push_back(bind);
+
+ // Now that we know the segmentOffset and the ordinal attribute,
+ // we can fix the helper's code
+
+ fixLazyReferenceImm(atom, offsetInBindInfo, nFile);
+
+ // 5 bytes for opcodes + variable sizes (target name + \0 and offset
+ // encode's size)
+ offsetInBindInfo +=
+ 6 + targ->name().size() + llvm::getULEB128Size(bind.segOffset);
+ if (bind.ordinal > BIND_IMMEDIATE_MASK)
+ offsetInBindInfo += llvm::getULEB128Size(bind.ordinal);
+ }
+ }
+ }
+ }
+}
+
+void Util::fixLazyReferenceImm(const DefinedAtom *atom, uint32_t offset,
+ NormalizedFile &file) {
+ for (const auto &ref : *atom) {
+ const DefinedAtom *da = dyn_cast<DefinedAtom>(ref->target());
+ if (da == nullptr)
+ return;
+
+ const Reference *helperRef = nullptr;
+ for (const Reference *hr : *da) {
+ if (hr->kindValue() == _archHandler.lazyImmediateLocationKind()) {
+ helperRef = hr;
+ break;
+ }
+ }
+ if (helperRef == nullptr)
+ continue;
+
+ // TODO: maybe get the fixed atom content from _archHandler ?
+ for (SectionInfo *sectInfo : _sectionInfos) {
+ for (const AtomInfo &atomInfo : sectInfo->atomsAndOffsets) {
+ if (atomInfo.atom == helperRef->target()) {
+ auto sectionContent =
+ file.sections[sectInfo->normalizedSectionIndex].content;
+ uint8_t *rawb =
+ file.ownedAllocations.Allocate(sectionContent.size());
+ llvm::MutableArrayRef newContent{rawb,
+ sectionContent.size()};
+ std::copy(sectionContent.begin(), sectionContent.end(),
+ newContent.begin());
+ llvm::support::ulittle32_t *loc =
+ reinterpret_cast(
+ &newContent[atomInfo.offsetInSection +
+ helperRef->offsetInAtom()]);
+ *loc = offset;
+ file.sections[sectInfo->normalizedSectionIndex].content = newContent;
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/test/ELF/eh-frame-padding-no-rosegment.s new/lld-5.0.1.src/test/ELF/eh-frame-padding-no-rosegment.s
--- old/lld-5.0.0.src/test/ELF/eh-frame-padding-no-rosegment.s 1970-01-01 01:00:00.000000000 +0100
+++ new/lld-5.0.1.src/test/ELF/eh-frame-padding-no-rosegment.s 2017-10-04 01:44:23.000000000 +0200
@@ -0,0 +1,64 @@
+// REQUIRES: x86
+
+.cfi_startproc
+.cfi_personality 0x1b, bar
+.cfi_endproc
+
+.global bar
+.hidden bar
+bar:
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+
+// Check the size of the CIE (0x18 + 4) and FDE (0x10 + 4)
+// RUN: llvm-readobj -s -section-data %t.o | FileCheck --check-prefix=OBJ %s
+
+// OBJ: Name: .eh_frame
+// OBJ-NEXT: Type:
+// OBJ-NEXT: Flags [
+// OBJ-NEXT: SHF_ALLOC
+// OBJ-NEXT: ]
+// OBJ-NEXT: Address:
+// OBJ-NEXT: Offset:
+// OBJ-NEXT: Size:
+// OBJ-NEXT: Link:
+// OBJ-NEXT: Info:
+// OBJ-NEXT: AddressAlignment:
+// OBJ-NEXT: EntrySize:
+// OBJ-NEXT: SectionData (
+// OBJ-NEXT: 0000: 18000000 00000000 017A5052 00017810
+// OBJ-NEXT: 0010: 061B0000 00001B0C 07089001 10000000
+// OBJ-NEXT: 0020: 20000000 00000000 00000000 00000000
+// OBJ-NEXT: )
+
+// RUN: ld.lld %t.o -no-rosegment -o %t -shared
+
+// Check that .eh_frame is in the same segment as .text
+// RUN: llvm-readobj -l --elf-output-style=GNU %t | FileCheck --check-prefix=PHDR %s
+
+// PHDR: Segment Sections
+// PHDR: .text
+// PHDR-SAME: .eh_frame
+
+// Check that the CIE and FDE are padded with 0x00 and not 0xCC when the
+// .eh_frame section is placed in the executable segment
+// RUN: llvm-readobj -s -section-data %t | FileCheck %s
+
+// CHECK: Name: .eh_frame
+// CHECK-NEXT: Type:
+// CHECK-NEXT: Flags
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 1C000000 00000000 017A5052 00017810
+// CHECK-NEXT: 0010: 061BBEFF FFFF1B0C 07089001 00000000
+// CHECK-NEXT: 0020: 14000000 24000000 A8FFFFFF 00000000
+// CHECK-NEXT: 0030: 00000000 00000000
+// CHECK-NEXT: )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lld-5.0.0.src/test/mach-o/lazy-bind-x86_64.yaml new/lld-5.0.1.src/test/mach-o/lazy-bind-x86_64.yaml
--- old/lld-5.0.0.src/test/mach-o/lazy-bind-x86_64.yaml 2016-08-11 20:08:59.000000000 +0200
+++ new/lld-5.0.1.src/test/mach-o/lazy-bind-x86_64.yaml 2017-12-05 21:25:50.000000000 +0100
@@ -80,8 +80,8 @@
# CHECK-HELPERS:Disassembly of section __TEXT,__stub_helper:
# CHECK-HELPERS: 68 00 00 00 00 pushq $0
-# CHECK-HELPERS: 68 10 00 00 00 pushq $16
-# CHECK-HELPERS: 68 20 00 00 00 pushq $32
+# CHECK-HELPERS: 68 0b 00 00 00 pushq $11
+# CHECK-HELPERS: 68 16 00 00 00 pushq $22
# Make sure the stub helper is correctly aligned
# CHECK-DYLIBS: sectname __stub_helper
++++++ lldb-5.0.0.src.tar.xz -> lldb-5.0.1.src.tar.xz ++++++
/work/SRC/openSUSE:Factory/llvm5/lldb-5.0.0.src.tar.xz /work/SRC/openSUSE:Factory/.llvm5.new/lldb-5.0.1.src.tar.xz differ: char 25, line 1
++++++ llvm-5.0.0.src.tar.xz -> llvm-5.0.1.src.tar.xz ++++++
/work/SRC/openSUSE:Factory/llvm5/llvm-5.0.0.src.tar.xz /work/SRC/openSUSE:Factory/.llvm5.new/llvm-5.0.1.src.tar.xz differ: char 25, line 1
++++++ llvm-do-not-install-static-libraries.patch ++++++
--- /var/tmp/diff_new_pack.OermVO/_old 2018-01-07 17:22:25.050338493 +0100
+++ /var/tmp/diff_new_pack.OermVO/_new 2018-01-07 17:22:25.050338493 +0100
@@ -2,10 +2,10 @@
want after installation. By not copying them in the first place we reduce the
disk usage during installation.
-Index: llvm-5.0.0.src/cmake/modules/AddLLVM.cmake
+Index: llvm-5.0.1.src/cmake/modules/AddLLVM.cmake
===================================================================
---- llvm-5.0.0.src.orig/cmake/modules/AddLLVM.cmake
-+++ llvm-5.0.0.src/cmake/modules/AddLLVM.cmake
+--- llvm-5.0.1.src.orig/cmake/modules/AddLLVM.cmake
++++ llvm-5.0.1.src/cmake/modules/AddLLVM.cmake
@@ -595,10 +595,18 @@ macro(add_llvm_library name)
set_property(GLOBAL PROPERTY LLVM_HAS_EXPORTS True)
endif()
@@ -29,10 +29,10 @@
if (NOT CMAKE_CONFIGURATION_TYPES)
add_custom_target(install-${name}
-Index: llvm-5.0.0.src/lld-5.0.0.src/cmake/modules/AddLLD.cmake
+Index: llvm-5.0.1.src/lld-5.0.1.src/cmake/modules/AddLLD.cmake
===================================================================
---- llvm-5.0.0.src.orig/lld-5.0.0.src/cmake/modules/AddLLD.cmake
-+++ llvm-5.0.0.src/lld-5.0.0.src/cmake/modules/AddLLD.cmake
+--- llvm-5.0.1.src.orig/lld-5.0.1.src/cmake/modules/AddLLD.cmake
++++ llvm-5.0.1.src/lld-5.0.1.src/cmake/modules/AddLLD.cmake
@@ -17,13 +17,6 @@ macro(add_lld_library name)
set_property(GLOBAL PROPERTY LLD_HAS_EXPORTS True)
endif()
@@ -47,10 +47,10 @@
if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES)
add_custom_target(install-${name}
DEPENDS ${name}
-Index: llvm-5.0.0.src/lldb-5.0.0.src/cmake/modules/AddLLDB.cmake
+Index: llvm-5.0.1.src/lldb-5.0.1.src/cmake/modules/AddLLDB.cmake
===================================================================
---- llvm-5.0.0.src.orig/lldb-5.0.0.src/cmake/modules/AddLLDB.cmake
-+++ llvm-5.0.0.src/lldb-5.0.0.src/cmake/modules/AddLLDB.cmake
+--- llvm-5.0.1.src.orig/lldb-5.0.1.src/cmake/modules/AddLLDB.cmake
++++ llvm-5.0.1.src/lldb-5.0.1.src/cmake/modules/AddLLDB.cmake
@@ -88,7 +88,8 @@ function(add_lldb_library name)
install(TARGETS ${name}
COMPONENT ${name}
++++++ llvm-docs-5.0.0.src.tar.xz -> llvm-docs-5.0.1.src.tar.xz ++++++
++++ 68431 lines of diff (skipped)
++++++ openmp-5.0.0.src.tar.xz -> openmp-5.0.1.src.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/src/kmp_csupport.cpp new/openmp-5.0.1.src/runtime/src/kmp_csupport.cpp
--- old/openmp-5.0.0.src/runtime/src/kmp_csupport.cpp 2017-07-17 11:03:14.000000000 +0200
+++ new/openmp-5.0.1.src/runtime/src/kmp_csupport.cpp 2017-11-27 18:34:55.000000000 +0100
@@ -3095,23 +3095,35 @@
__kmp_wait_yield_4((volatile kmp_uint32 *)&sh_buf->doacross_buf_idx, idx,
__kmp_eq_4, NULL);
}
+#if KMP_32_BIT_ARCH
// Check if we are the first thread. After the CAS the first thread gets 0,
// others get 1 if initialization is in progress, allocated pointer otherwise.
+ // Treat pointer as volatile integer (value 0 or 1) until memory is allocated.
+ flags = (kmp_uint32 *)KMP_COMPARE_AND_STORE_RET32(
+ (volatile kmp_int32 *)&sh_buf->doacross_flags, NULL, 1);
+#else
flags = (kmp_uint32 *)KMP_COMPARE_AND_STORE_RET64(
- (kmp_int64 *)&sh_buf->doacross_flags, NULL, (kmp_int64)1);
+ (volatile kmp_int64 *)&sh_buf->doacross_flags, NULL, 1LL);
+#endif
if (flags == NULL) {
// we are the first thread, allocate the array of flags
- kmp_int64 size =
- trace_count / 8 + 8; // in bytes, use single bit per iteration
- sh_buf->doacross_flags = (kmp_uint32 *)__kmp_thread_calloc(th, size, 1);
- } else if ((kmp_int64)flags == 1) {
+ size_t size = trace_count / 8 + 8; // in bytes, use single bit per iteration
+ flags = (kmp_uint32 *)__kmp_thread_calloc(th, size, 1);
+ KMP_MB();
+ sh_buf->doacross_flags = flags;
+ } else if (flags == (kmp_uint32 *)1) {
+#if KMP_32_BIT_ARCH
// initialization is still in progress, need to wait
- while ((volatile kmp_int64)sh_buf->doacross_flags == 1) {
+ while (*(volatile kmp_int32 *)&sh_buf->doacross_flags == 1)
+#else
+ while (*(volatile kmp_int64 *)&sh_buf->doacross_flags == 1LL)
+#endif
KMP_YIELD(TRUE);
- }
+ KMP_MB();
+ } else {
+ KMP_MB();
}
- KMP_DEBUG_ASSERT((kmp_int64)sh_buf->doacross_flags >
- 1); // check value of pointer
+ KMP_DEBUG_ASSERT(sh_buf->doacross_flags > (kmp_uint32 *)1); // check ptr value
pr_buf->th_doacross_flags =
sh_buf->doacross_flags; // save private copy in order to not
// touch shared buffer on each iteration
@@ -3205,6 +3217,7 @@
while ((flag & pr_buf->th_doacross_flags[iter_number]) == 0) {
KMP_YIELD(TRUE);
}
+ KMP_MB();
KA_TRACE(20,
("__kmpc_doacross_wait() exit: T#%d wait for iter %lld completed\n",
gtid, (iter_number << 5) + shft));
@@ -3257,6 +3270,7 @@
shft = iter_number % 32; // use 32-bit granularity
iter_number >>= 5; // divided by 32
flag = 1 << shft;
+ KMP_MB();
if ((flag & pr_buf->th_doacross_flags[iter_number]) == 0)
KMP_TEST_THEN_OR32(&pr_buf->th_doacross_flags[iter_number], flag);
KA_TRACE(20, ("__kmpc_doacross_post() exit: T#%d iter %lld posted\n", gtid,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/src/kmp_lock.cpp new/openmp-5.0.1.src/runtime/src/kmp_lock.cpp
--- old/openmp-5.0.0.src/runtime/src/kmp_lock.cpp 2017-07-17 11:03:14.000000000 +0200
+++ new/openmp-5.0.1.src/runtime/src/kmp_lock.cpp 2017-11-14 20:21:30.000000000 +0100
@@ -3061,11 +3061,12 @@
if (idx == __kmp_i_lock_table.size) {
// Double up the space for block pointers
int row = __kmp_i_lock_table.size / KMP_I_LOCK_CHUNK;
- kmp_indirect_lock_t **old_table = __kmp_i_lock_table.table;
- __kmp_i_lock_table.table = (kmp_indirect_lock_t **)__kmp_allocate(
+ kmp_indirect_lock_t **new_table = (kmp_indirect_lock_t **)__kmp_allocate(
2 * row * sizeof(kmp_indirect_lock_t *));
- KMP_MEMCPY(__kmp_i_lock_table.table, old_table,
+ KMP_MEMCPY(new_table, __kmp_i_lock_table.table,
row * sizeof(kmp_indirect_lock_t *));
+ kmp_indirect_lock_t **old_table = __kmp_i_lock_table.table;
+ __kmp_i_lock_table.table = new_table;
__kmp_free(old_table);
// Allocate new objects in the new blocks
for (int i = row; i < 2 * row; ++i)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/src/kmp_str.cpp new/openmp-5.0.1.src/runtime/src/kmp_str.cpp
--- old/openmp-5.0.0.src/runtime/src/kmp_str.cpp 2017-07-03 13:24:08.000000000 +0200
+++ new/openmp-5.0.1.src/runtime/src/kmp_str.cpp 2017-11-14 20:16:52.000000000 +0100
@@ -168,7 +168,7 @@
#if !KMP_OS_WINDOWS
va_list _args;
- __va_copy(_args, args); // Make copy of args.
+ va_copy(_args, args); // Make copy of args.
#define args _args // Substitute args with its copy, _args.
#endif // KMP_OS_WINDOWS
rc = KMP_VSNPRINTF(buffer->str + buffer->used, free, format, args);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/src/kmp_tasking.cpp new/openmp-5.0.1.src/runtime/src/kmp_tasking.cpp
--- old/openmp-5.0.0.src/runtime/src/kmp_tasking.cpp 2017-07-18 20:50:13.000000000 +0200
+++ new/openmp-5.0.1.src/runtime/src/kmp_tasking.cpp 2017-11-14 20:11:04.000000000 +0100
@@ -2504,14 +2504,13 @@
// Deallocates a task deque for a particular thread. Happens at library
// deallocation so don't need to reset all thread data fields.
static void __kmp_free_task_deque(kmp_thread_data_t *thread_data) {
- __kmp_acquire_bootstrap_lock(&thread_data->td.td_deque_lock);
-
if (thread_data->td.td_deque != NULL) {
+ __kmp_acquire_bootstrap_lock(&thread_data->td.td_deque_lock);
TCW_4(thread_data->td.td_deque_ntasks, 0);
__kmp_free(thread_data->td.td_deque);
thread_data->td.td_deque = NULL;
+ __kmp_release_bootstrap_lock(&thread_data->td.td_deque_lock);
}
- __kmp_release_bootstrap_lock(&thread_data->td.td_deque_lock);
#ifdef BUILD_TIED_TASK_STACK
// GEH: Figure out what to do here for td_susp_tied_tasks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/src/kmp_threadprivate.cpp new/openmp-5.0.1.src/runtime/src/kmp_threadprivate.cpp
--- old/openmp-5.0.0.src/runtime/src/kmp_threadprivate.cpp 2017-05-12 20:01:32.000000000 +0200
+++ new/openmp-5.0.1.src/runtime/src/kmp_threadprivate.cpp 2017-11-14 20:19:10.000000000 +0100
@@ -228,6 +228,13 @@
struct private_common *tn;
struct shared_common *d_tn;
+ if (!TCR_4(__kmp_init_gtid)) {
+ // This is possible when one of multiple roots initiates early library
+ // termination in a sequential region while other teams are active, and its
+ // child threads are about to end.
+ return;
+ }
+
KC_TRACE(10, ("__kmp_common_destroy_gtid: T#%d called\n", gtid));
if ((__kmp_foreign_tp) ? (!KMP_INITIAL_GTID(gtid)) : (!KMP_UBER_GTID(gtid))) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/test/lock/omp_init_lock.c new/openmp-5.0.1.src/runtime/test/lock/omp_init_lock.c
--- old/openmp-5.0.0.src/runtime/test/lock/omp_init_lock.c 1970-01-01 01:00:00.000000000 +0100
+++ new/openmp-5.0.1.src/runtime/test/lock/omp_init_lock.c 2017-11-14 20:21:30.000000000 +0100
@@ -0,0 +1,42 @@
+// RUN: %libomp-compile-and-run
+#include "omp_testsuite.h"
+#include
+
+// This should be slightly less than KMP_I_LOCK_CHUNK, which is 1024
+#define LOCKS_PER_ITER 1000
+#define ITERATIONS (REPETITIONS + 1)
+
+// This tests concurrently using locks on one thread while initializing new
+// ones on another thread. This exercises the global lock pool.
+int test_omp_init_lock() {
+ int i;
+ omp_lock_t lcks[ITERATIONS * LOCKS_PER_ITER];
+#pragma omp parallel for schedule(static) num_threads(NUM_TASKS)
+ for (i = 0; i < ITERATIONS; i++) {
+ int j;
+ omp_lock_t *my_lcks = &lcks[i * LOCKS_PER_ITER];
+ for (j = 0; j < LOCKS_PER_ITER; j++) {
+ omp_init_lock(&my_lcks[j]);
+ }
+ for (j = 0; j < LOCKS_PER_ITER * 100; j++) {
+ omp_set_lock(&my_lcks[j % LOCKS_PER_ITER]);
+ omp_unset_lock(&my_lcks[j % LOCKS_PER_ITER]);
+ }
+ }
+ // Wait until all repititions are done. The test is exercising growth of
+ // the global lock pool, which does not shrink when no locks are allocated.
+ {
+ int j;
+ for (j = 0; j < ITERATIONS * LOCKS_PER_ITER; j++) {
+ omp_destroy_lock(&lcks[j]);
+ }
+ }
+
+ return 0;
+}
+
+int main() {
+ // No use repeating this test, since it's exercising a private global pool
+ // which is not reset between test iterations.
+ return test_omp_init_lock();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/test/tasking/omp_taskloop_grainsize.c new/openmp-5.0.1.src/runtime/test/tasking/omp_taskloop_grainsize.c
--- old/openmp-5.0.0.src/runtime/test/tasking/omp_taskloop_grainsize.c 2017-07-18 22:16:25.000000000 +0200
+++ new/openmp-5.0.1.src/runtime/test/tasking/omp_taskloop_grainsize.c 2017-10-10 21:57:45.000000000 +0200
@@ -17,7 +17,8 @@
int test_omp_taskloop_grainsize()
{
- int i, grainsize, count, tmp_count, result, num_off;
+ int result = 0;
+ int i, grainsize, count, tmp_count, num_off;
int *tmp, *tids, *tidsArray;
tidsArray = (int *)malloc(sizeof(int) * CFDMAX_SIZE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openmp-5.0.0.src/runtime/test/worksharing/for/kmp_doacross_check.c new/openmp-5.0.1.src/runtime/test/worksharing/for/kmp_doacross_check.c
--- old/openmp-5.0.0.src/runtime/test/worksharing/for/kmp_doacross_check.c 2016-03-02 23:43:14.000000000 +0100
+++ new/openmp-5.0.1.src/runtime/test/worksharing/for/kmp_doacross_check.c 2017-11-27 18:34:55.000000000 +0100
@@ -24,7 +24,7 @@
dims.lo = 1;
dims.up = N-1;
dims.st = 1;
- #pragma omp parallel
+ #pragma omp parallel num_threads(4)
{
int i, gtid;
long long vec;