<pre style='margin:0'>
Jeremy Huddleston Sequoia (jeremyhu) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/87e7b2fc0c4ba850dcd82b4cc3ddce0db939f17a">https://github.com/macports/macports-ports/commit/87e7b2fc0c4ba850dcd82b4cc3ddce0db939f17a</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 87e7b2f ld64-136: Mark port obsolete.
</span>87e7b2f is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 87e7b2fc0c4ba850dcd82b4cc3ddce0db939f17a
</span>Author: Jeremy Huddleston Sequoia <jeremyhu@macports.org>
AuthorDate: Sun Dec 25 23:03:16 2016 -0800
<span style='display:block; white-space:pre;color:#404040;'> ld64-136: Mark port obsolete.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Users should be able to use ld64-127, ld64-236, or ld64-latest instead.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@macports.org>
</span>---
devel/ld64/Portfile | 47 +--
devel/ld64/files/ld64-136-hash_set.patch | 560 -------------------------------
2 files changed, 10 insertions(+), 597 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/ld64/Portfile b/devel/ld64/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index f3fba6e..64d956f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/ld64/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/ld64/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3,7 +3,7 @@ PortGroup compiler_blacklist_versions 1.0
</span>
name ld64
epoch 2
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 3
</span> set dyld_version 421.2
categories devel
platforms darwin
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -29,9 +29,6 @@ checksums dyld-421.2.tar.gz \
</span> ld64-127.2.tar.gz \
rmd160 8ee709341549a1944732daef6ebab7ef1acfcc6e \
sha256 97b75547b2bd761306ab3e15ae297f01e7ab9760b922bc657f4ef72e4e052142 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ld64-136.tar.gz \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 4a2930ccdd398b63a108810e90293ab96dc154a0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 99d6c4acb6d4cdf45772951dd2308222aa966763170137459a9d276674645d9e \
</span> ld64-236.3.tar.gz \
rmd160 6a3f44aa9ae57a60d2cff5b3d47be7972ad83029 \
sha256 8ef36729b643201081ab45ebd8586ede8f9968bc17614b679a940faa82875ca6 \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -105,30 +102,9 @@ subport ld64-127 {
</span> subport ld64-136 {
# XCode 4.6
version 136
<span style='display:block; white-space:pre;background:#ffe0e0;'>- revision 9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set makefile "Makefile-133"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ld64_ver 136
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- patchfiles-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ld64-version.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ld64-133-no-CrashReporterClient.h.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ld64-134-missing-include.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ld64-136-i386-badAddress.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PR-13282463.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PR-29117886.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ld64-ppc-9610466.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${configure.cxx_stdlib} eq "libstdc++"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- patchfiles-append ld64-136-hash_set.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.major} <= 9} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pre-fetch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "$subport is not supported on Leopard or earlier. It requires the blocks runtime."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- error "unsupported platform"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ revision 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ replaced_by ld64-236
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ PortGroup obsolete 1.0
</span> }
subport ld64-236 {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -207,13 +183,12 @@ if {${subport} eq ${name}} {
</span> build {}
use_configure no
<span style='display:block; white-space:pre;background:#ffe0e0;'>- variant ld64_97 conflicts ld64_127 ld64_136 ld64_236 ld64_xcode description {Use ld64-97 as the default linker (last version that works on Tiger)} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant ld64_127 conflicts ld64_97 ld64_136 ld64_236 ld64_xcode description {Use ld64-127 as the default linker (last version that supports ppc and works on Leopard)} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant ld64_136 conflicts ld64_97 ld64_127 ld64_236 ld64_xcode description {Use ld64-136 as the default linker (last version that can be built by gcc)} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant ld64_236 conflicts ld64_97 ld64_127 ld64_136 ld64_xcode description {Use ld64-236 as the default linker (last version that builds against OS X's libstdc++)} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant ld64_xcode conflicts ld64_97 ld64_127 ld64_136 ld64_236 description {Use ld64-xcode as the default linker (version provided by the selected Xcode.app toolchain)} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variant ld64_97 conflicts ld64_127 ld64_236 ld64_xcode description {Use ld64-97 as the default linker (last version that works on Tiger)} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variant ld64_127 conflicts ld64_97 ld64_236 ld64_xcode description {Use ld64-127 as the default linker (last version that supports ppc and works on Leopard)} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variant ld64_236 conflicts ld64_97 ld64_127 ld64_xcode description {Use ld64-236 as the default linker (last version that builds against OS X's libstdc++)} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variant ld64_xcode conflicts ld64_97 ld64_127 ld64_236 description {Use ld64-xcode as the default linker (version provided by the selected Xcode.app toolchain)} {}
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![variant_isset ld64_97] && ![variant_isset ld64_127] && ![variant_isset ld64_136]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![variant_isset ld64_97] && ![variant_isset ld64_127]} {
</span> if {${os.major} < 9} {
default_variants +ld64_97
} elseif {${os.major} < 11} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -225,8 +200,6 @@ if {${subport} eq ${name}} {
</span> set ld64_ver 97
} elseif {[variant_isset ld64_127]} {
set ld64_ver 127
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {[variant_isset ld64_136]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ld64_ver 136
</span> } elseif {[variant_isset ld64_236]} {
set ld64_ver 236
} elseif {[variant_isset ld64_xcode]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -260,7 +233,7 @@ if {${subport} eq ${name}} {
</span> xinstall -m 755 ${filespath}/ld-xcode ${destroot}${prefix}/libexec/ld64/ld-xcode
ln -s ../libexec/ld64/ld-xcode ${destroot}${prefix}/bin/ld-xcode
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-} else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} elseif {${subport} ne "${name}-136"} {
</span> distfiles dyld-${dyld_version}.tar.gz ${name}-${version}.tar.gz
depends_build path:include/mach-o/arm/reloc.h:libmacho-headers
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/ld64/files/ld64-136-hash_set.patch b/devel/ld64/files/ld64-136-hash_set.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0808e0b..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/ld64/files/ld64-136-hash_set.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,560 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Don't use unordered_set without libc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/InputFiles.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/InputFiles.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -49,6 +49,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <list>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <algorithm>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <dlfcn.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/InputFiles.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/InputFiles.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -103,7 +103,11 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static void parseWorkerThread(InputFiles *inputFiles);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void startThread(void (*threadFunc)(InputFiles *)) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, ld::dylib::File*, CStringHash, CStringEquals> InstallNameToDylib;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, ld::dylib::File*, __gnu_cxx::hash<const char*>, CStringEquals> InstallNameToDylib;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const Options& _options;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::vector<ld::File*> _inputFiles;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/LinkEditClassic.hpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/LinkEditClassic.hpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -32,7 +32,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <unistd.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Options.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -91,8 +90,13 @@ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- uint32_t currentOffset();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- enum { kBufferSize = 0x01000000 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, int32_t, CStringHash, CStringEquals> StringToOffset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, int32_t, __gnu_cxx::hash<const char*>, CStringEquals> StringToOffset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const uint32_t _pointerSize;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::vector<char*> _fullBuffers;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/Options.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/Options.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -30,8 +30,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <mach/machine.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Snapshot.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -342,8 +342,13 @@ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const char* pipelineFifo() const { return fPipelineFifo; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, unsigned int, ld::CStringHash, ld::CStringEquals> NameToOrder;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_set<const char*, ld::CStringHash, ld::CStringEquals> NameSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, unsigned int, __gnu_cxx::hash<const char*>, CStringEquals> NameToOrder;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> NameSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- enum ExportMode { kExportDefault, kExportSome, kDontExportSome };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- enum LibrarySearchMode { kSearchDylibAndArchiveInEachDir, kSearchAllDirsForDylibsThenAllDirsForArchives };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- enum InterposeMode { kInterposeNone, kInterposeAllExternal, kInterposeSome };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/OutputFile.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/OutputFile.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -50,7 +50,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <list>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <algorithm>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <CommonCrypto/CommonDigest.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3420,6 +3421,12 @@ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const char* OutputFile::assureFullPath(const char* path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ( path[0] == '/' )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3505,7 +3512,7 @@ void OutputFile::synthesizeDebugNotes(ld::Internal& state)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const char* filename = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool wroteStartSO = false;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- state.stabs.reserve(atomsNeedingDebugNotes.size()*4);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- std::unordered_set<const char*, CStringHash, CStringEquals> seenFiles;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> seenFiles;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (std::vector<const ld::Atom*>::iterator it=atomsNeedingDebugNotes.begin(); it != atomsNeedingDebugNotes.end(); it++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const ld::Atom* atom = *it;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const ld::File* atomFile = atom->file();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/Resolver.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/Resolver.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -47,6 +47,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <list>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <algorithm>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <dlfcn.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/Resolver.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/Resolver.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -42,7 +42,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <mach-o/dyld.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Options.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -100,7 +99,11 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool printReferencedBy(const char* name, SymbolTable::IndirectBindingSlot slot);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void tweakWeakness();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_set<const char*, CStringHash, CStringEquals> StringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> StringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class NotLive {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/SymbolTable.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/SymbolTable.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -41,6 +41,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <algorithm>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Options.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -746,7 +748,7 @@ void SymbolTable::printStatistics()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- count[b] = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for(unsigned int i=0; i < _cstringTable.bucket_count(); ++i) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- unsigned int n = _cstringTable.bucket_size(i);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ unsigned int n = _cstringTable.elems_in_bucket(i);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ( n < 10 )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- count[n] += 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/SymbolTable.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/SymbolTable.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -42,7 +42,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <mach-o/dyld.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Options.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -57,38 +57,42 @@ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef uint32_t IndirectBindingSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, IndirectBindingSlot, CStringHash, CStringEquals> NameToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, IndirectBindingSlot, __gnu_cxx::hash<const char*>, CStringEquals> NameToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class ContentFuncs {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t operator()(const ld::Atom*) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool operator()(const ld::Atom* left, const ld::Atom* right) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const ld::Atom*, IndirectBindingSlot, ContentFuncs, ContentFuncs> ContentToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const ld::Atom*, IndirectBindingSlot, ContentFuncs, ContentFuncs> ContentToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class ReferencesHashFuncs {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t operator()(const ld::Atom*) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool operator()(const ld::Atom* left, const ld::Atom* right) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const ld::Atom*, IndirectBindingSlot, ReferencesHashFuncs, ReferencesHashFuncs> ReferencesToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const ld::Atom*, IndirectBindingSlot, ReferencesHashFuncs, ReferencesHashFuncs> ReferencesToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class CStringHashFuncs {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t operator()(const ld::Atom*) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool operator()(const ld::Atom* left, const ld::Atom* right) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const ld::Atom*, IndirectBindingSlot, CStringHashFuncs, CStringHashFuncs> CStringToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const ld::Atom*, IndirectBindingSlot, CStringHashFuncs, CStringHashFuncs> CStringToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class UTF16StringHashFuncs {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t operator()(const ld::Atom*) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool operator()(const ld::Atom* left, const ld::Atom* right) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const ld::Atom*, IndirectBindingSlot, UTF16StringHashFuncs, UTF16StringHashFuncs> UTF16StringToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const ld::Atom*, IndirectBindingSlot, UTF16StringHashFuncs, UTF16StringHashFuncs> UTF16StringToSlot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef std::map<IndirectBindingSlot, const char*> SlotToName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, CStringToSlot*, CStringHash, CStringEquals> NameToMap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, CStringToSlot*, __gnu_cxx::hash<const char*>, CStringEquals> NameToMap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef std::vector<const ld::Atom *> DuplicatedSymbolAtomList;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef std::map<const char *, DuplicatedSymbolAtomList * > DuplicateSymbols;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/ld.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/ld.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -54,7 +54,8 @@ extern "C" double log2 ( double );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <list>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <algorithm>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <cxxabi.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Options.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -146,7 +147,7 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct SectionEquals {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool operator()(const ld::Section* left, const ld::Section* right) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const ld::Section*, FinalSection*, SectionHash, SectionEquals> SectionInToOut;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const ld::Section*, FinalSection*, SectionHash, SectionEquals> SectionInToOut;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SectionInToOut _sectionInToFinalMap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -167,7 +168,7 @@ std::vector<const char*> InternalState::FinalSection::_s_segmentsSeen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t InternalState::SectionHash::operator()(const ld::Section* sect) const
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t hash = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ld::CStringHash temp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ __gnu_cxx::hash<const char*> temp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- hash += temp.operator()(sect->segmentName());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- hash += temp.operator()(sect->sectionName());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return hash;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/ld.hpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/ld.hpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -788,20 +788,6 @@ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// utility classes for using std::unordered_map with c-strings
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--struct CStringHash {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- size_t operator()(const char* __s) const {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- size_t __h = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- for ( ; *__s; ++__s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- __h = 5 * __h + *__s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return __h;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--struct CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/parsers/archive_file.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/parsers/archive_file.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,7 +33,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <algorithm>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "MachOFileAbstraction.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Architectures.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -112,7 +112,12 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct MemberState { ld::relocatable::File* file; const Entry *entry; bool logged; bool loaded; uint16_t index;};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool loadMember(MemberState& state, ld::File::AtomHandler& handler, const char *format, ...) const;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, const struct ranlib*, ld::CStringHash, ld::CStringEquals> NameToEntryMap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, const struct ranlib*, __gnu_cxx::hash<const char*>, CStringEquals> NameToEntryMap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P P;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P::E E;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/parsers/lto_file.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/parsers/lto_file.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -30,11 +30,10 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <sys/fcntl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <pthread.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <mach-o/dyld.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "MachOFileAbstraction.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Architectures.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -212,8 +211,13 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static const char* tripletPrefixForArch(cpu_type_t arch);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static ld::relocatable::File* parseMachOFile(const uint8_t* p, size_t len, const OptimizeOptions& options);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_set<const char*, ld::CStringHash, ld::CStringEquals> CStringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, Atom*, ld::CStringHash, ld::CStringEquals> CStringToAtom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> CStringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, Atom*, __gnu_cxx::hash<const char*>, CStringEquals> CStringToAtom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class AtomSyncer : public ld::File::AtomHandler {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/parsers/macho_dylib_file.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/parsers/macho_dylib_file.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,8 +33,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <algorithm>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "Architectures.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "MachOFileAbstraction.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -178,17 +178,14 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- friend class ExportAtom<A>;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- friend class ImportAtom<A>;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- struct CStringHash {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- std::size_t operator()(const char* __s) const {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- unsigned long __h = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- for ( ; *__s; ++__s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- __h = 5 * __h + *__s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return size_t(__h);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct AtomAndWeak { ld::Atom* atom; bool weakDef; bool tlv; pint_t address; };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, AtomAndWeak, ld::CStringHash, ld::CStringEquals> NameToAtomMap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_set<const char*, CStringHash, ld::CStringEquals> NameSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, AtomAndWeak, __gnu_cxx::hash<const char*>, CStringEquals> NameToAtomMap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> NameSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct Dependent { const char* path; File<A>* dylib; bool reExport; };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -509,14 +506,14 @@ void File<A>::buildExportHashTableFromSymbolTable(const macho_dysymtab_command<P
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ( _s_logHashtable ) fprintf(stderr, "ld: building hashtable of %u toc entries for %s\n", dynamicInfo->nextdefsym(), this->path());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const macho_nlist<P>* start = &symbolTable[dynamicInfo->iextdefsym()];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const macho_nlist<P>* end = &start[dynamicInfo->nextdefsym()];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- _atoms.reserve(dynamicInfo->nextdefsym()); // set initial bucket count
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ _atoms.resize(dynamicInfo->nextdefsym()); // set initial bucket count
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (const macho_nlist<P>* sym=start; sym < end; ++sym) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- this->addSymbol(&strings[sym->n_strx()], (sym->n_desc() & N_WEAK_DEF) != 0, false, sym->n_value());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int32_t count = dynamicInfo->ntoc();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- _atoms.reserve(count); // set initial bucket count
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ _atoms.resize(count); // set initial bucket count
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ( _s_logHashtable ) fprintf(stderr, "ld: building hashtable of %u entries for %s\n", count, this->path());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const struct dylib_table_of_contents* toc = (dylib_table_of_contents*)(fileContent + dynamicInfo->tocoff());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (int32_t i = 0; i < count; ++i) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/passes/dtrace_dof.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/passes/dtrace_dof.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -30,8 +30,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "dtrace_dof.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -104,14 +103,20 @@ Atom::Atom(File& f, const char* n, const uint8_t* content, uint64_t sz)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct DTraceProbeInfo {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DTraceProbeInfo(const ld::Atom* a, uint32_t o, const char* n) : atom(a), offset(o), probeName(n) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const ld::Atom* atom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- uint32_t offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const char* probeName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--typedef std::unordered_map<const char*, std::vector<DTraceProbeInfo>, CStringHash, CStringEquals> ProviderToProbes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--typedef std::unordered_set<const char*, CStringHash, CStringEquals> CStringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef __gnu_cxx::hash_map<const char*, std::vector<DTraceProbeInfo>, __gnu_cxx::hash<const char*>, CStringEquals> ProviderToProbes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> CStringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/passes/got.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/passes/got.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -30,6 +30,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "got.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/passes/order.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/passes/order.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -31,7 +31,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "order.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -83,7 +82,11 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const Layout& _layout;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_map<const char*, const ld::Atom*, CStringHash, CStringEquals> NameToAtom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_map<const char*, const ld::Atom*, __gnu_cxx::hash<const char*>, CStringEquals> NameToAtom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef std::map<const ld::Atom*, const ld::Atom*> AtomToAtom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/ld/passes/tlvp.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/ld/passes/tlvp.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -30,6 +30,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_map>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "ld.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "tlvp.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/other/dyldinfo.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/other/dyldinfo.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,7 +33,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "configure.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "MachOFileAbstraction.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -87,6 +87,14 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P::E E;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P::uint_t pint_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> StringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DyldInfoPrinter(const uint8_t* fileContent, uint32_t fileLength, const char* path, bool printArch);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void printRebaseInfo();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void printRebaseInfoOpcodes();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/other/machochecker.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/other/machochecker.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,7 +33,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "configure.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -110,21 +110,13 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P::E E;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P::uint_t pint_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // utility classes for using std::unordered_map with c-strings
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- struct CStringHash {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- size_t operator()(const char* __s) const {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- size_t __h = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- for ( ; *__s; ++__s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- __h = 5 * __h + *__s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return __h;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- struct CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- typedef std::unordered_set<const char*, CStringHash, CStringEquals> StringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> StringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MachOChecker(const uint8_t* fileContent, uint32_t fileLength, const char* path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void checkMachHeader();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/other/unwinddump.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/other/unwinddump.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,7 +33,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <vector>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <unordered_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ext/hash_set>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "MachOFileAbstraction.hpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -71,6 +71,14 @@ private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P::E E;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- typedef typename A::P::uint_t pint_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ class CStringEquals
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ public:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals> StringSet;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- UnwindPrinter(const uint8_t* fileContent, uint32_t fileLength,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const char* path, bool showFunctionNames);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool findUnwindSection();
</span></pre><pre style='margin:0'>
</pre>