<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">--- src/ld/InputFiles.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/InputFiles.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -50,6 +50,8 @@
 #include &lt;vector&gt;
 #include &lt;list&gt;
 #include &lt;algorithm&gt;
+#include &lt;ext/hash_map&gt;
+#include &lt;ext/hash_set&gt;
 #include &lt;dlfcn.h&gt;
 #include &lt;AvailabilityMacros.h&gt;
 
--- src/ld/InputFiles.h	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/InputFiles.h	2014-05-16 14:28:58.000000000 -0700
@@ -107,7 +107,11 @@ private:
 	static void					parseWorkerThread(InputFiles *inputFiles);
 	void						startThread(void (*threadFunc)(InputFiles *)) const;
 
-	typedef std::unordered_map&lt;const char*, ld::dylib::File*, CStringHash, CStringEquals&gt;	InstallNameToDylib;
+	class CStringEquals {
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+	typedef __gnu_cxx::hash_map&lt;const char*, ld::dylib::File*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;	InstallNameToDylib;
 
 	const Options&amp;				_options;
 	std::vector&lt;ld::File*&gt;		_inputFiles;
--- src/ld/LinkEditClassic.hpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/LinkEditClassic.hpp	2014-05-16 14:28:58.000000000 -0700
@@ -32,7 +32,6 @@
 #include &lt;unistd.h&gt;
 
 #include &lt;vector&gt;
-#include &lt;unordered_map&gt;
 
 #include "Options.h"
 #include "ld.hpp"
@@ -91,8 +90,13 @@ public:
 	uint32_t									currentOffset();
 
 private:
+	class CStringEquals
+	{
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
 	enum { kBufferSize = 0x01000000 };
-	typedef std::unordered_map&lt;const char*, int32_t, CStringHash, CStringEquals&gt; StringToOffset;
+	typedef __gnu_cxx::hash_map&lt;const char*, int32_t, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; StringToOffset;
 
 	const uint32_t							_pointerSize;
 	std::vector&lt;char*&gt;						_fullBuffers;
--- src/ld/Options.h	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/Options.h	2014-05-16 14:28:58.000000000 -0700
@@ -30,8 +30,8 @@
 #include &lt;mach/machine.h&gt;
 
 #include &lt;vector&gt;
-#include &lt;unordered_set&gt;
-#include &lt;unordered_map&gt;
+#include &lt;ext/hash_set&gt;
+#include &lt;ext/hash_map&gt;
 
 #include "ld.hpp"
 #include "Snapshot.h"
@@ -376,8 +376,13 @@ public:
 	const std::vector&lt;SectionRename&gt;&amp; sectionRenames() const { return fSectionRenames; }
 
 private:
-	typedef std::unordered_map&lt;const char*, unsigned int, ld::CStringHash, ld::CStringEquals&gt; NameToOrder;
-	typedef std::unordered_set&lt;const char*, ld::CStringHash, ld::CStringEquals&gt;  NameSet;
+	class CStringEquals
+	{
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+	typedef __gnu_cxx::hash_map&lt;const char*, unsigned int, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; NameToOrder;
+	typedef __gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  NameSet;
 	enum ExportMode { kExportDefault, kExportSome, kDontExportSome };
 	enum LibrarySearchMode { kSearchDylibAndArchiveInEachDir, kSearchAllDirsForDylibsThenAllDirsForArchives };
 	enum InterposeMode { kInterposeNone, kInterposeAllExternal, kInterposeSome };
--- src/ld/OutputFile.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/OutputFile.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -50,7 +50,8 @@
 #include &lt;vector&gt;
 #include &lt;list&gt;
 #include &lt;algorithm&gt;
-#include &lt;unordered_set&gt;
+#include &lt;ext/hash_map&gt;
+#include &lt;ext/hash_set&gt;
 
 #include &lt;CommonCrypto/CommonDigest.h&gt;
 #include &lt;AvailabilityMacros.h&gt;
@@ -4598,6 +4599,12 @@ public:
 };
 
 
+class CStringEquals
+{
+public:
+	bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+};
+
 const char* OutputFile::assureFullPath(const char* path)
 {
 	if ( path[0] == '/' )
@@ -4683,7 +4690,7 @@ void OutputFile::synthesizeDebugNotes(ld
 	const char* filename = NULL;
 	bool wroteStartSO = false;
 	state.stabs.reserve(atomsNeedingDebugNotes.size()*4);
-	std::unordered_set&lt;const char*, CStringHash, CStringEquals&gt;  seenFiles;
+	__gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  seenFiles;
 	for (std::vector&lt;const ld::Atom*&gt;::iterator it=atomsNeedingDebugNotes.begin(); it != atomsNeedingDebugNotes.end(); it++) {
 		const ld::Atom* atom = *it;
 		const ld::File* atomFile = atom-&gt;file();
--- src/ld/Resolver.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/Resolver.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -47,6 +47,8 @@
 #include &lt;vector&gt;
 #include &lt;list&gt;
 #include &lt;algorithm&gt;
+#include &lt;ext/hash_map&gt;
+#include &lt;ext/hash_set&gt;
 #include &lt;dlfcn.h&gt;
 #include &lt;AvailabilityMacros.h&gt;
 
--- src/ld/Resolver.h	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/Resolver.h	2014-05-16 14:28:58.000000000 -0700
@@ -42,7 +42,6 @@
 #include &lt;mach-o/dyld.h&gt;
 
 #include &lt;vector&gt;
-#include &lt;unordered_set&gt;
 
 #include "Options.h"
 #include "ld.hpp"
@@ -103,7 +102,11 @@ private:
 	void					doLinkerOption(const std::vector&lt;const char*&gt;&amp; linkerOption, const char* fileName);
 	void					dumpAtoms();
 
-	typedef std::unordered_set&lt;const char*, CStringHash, CStringEquals&gt;  StringSet;
+	class CStringEquals {
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+	typedef __gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  StringSet;
 
 	class NotLive {
 	public:
--- src/ld/SymbolTable.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/SymbolTable.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -41,6 +41,8 @@
 #include &lt;set&gt;
 #include &lt;vector&gt;
 #include &lt;algorithm&gt;
+#include &lt;ext/hash_map&gt;
+#include &lt;ext/hash_set&gt;
 
 #include "Options.h"
 
@@ -772,7 +774,7 @@ void SymbolTable::printStatistics()
 		count[b] = 0;
 	}
 	for(unsigned int i=0; i &lt; _cstringTable.bucket_count(); ++i) {
-		unsigned int n = _cstringTable.bucket_size(i);
+		unsigned int n = _cstringTable.elems_in_bucket(i);
 		if ( n &lt; 10 ) 
 			count[n] += 1;
 		else
--- src/ld/SymbolTable.h	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/SymbolTable.h	2014-05-16 14:28:58.000000000 -0700
@@ -42,7 +42,7 @@
 #include &lt;mach-o/dyld.h&gt;
 
 #include &lt;vector&gt;
-#include &lt;unordered_map&gt;
+#include &lt;ext/hash_map&gt;
 
 #include "Options.h"
 #include "ld.hpp"
@@ -57,38 +57,42 @@ public:
 	typedef uint32_t IndirectBindingSlot;
 
 private:
-	typedef std::unordered_map&lt;const char*, IndirectBindingSlot, CStringHash, CStringEquals&gt; NameToSlot;
+	class CStringEquals {
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+	typedef __gnu_cxx::hash_map&lt;const char*, IndirectBindingSlot, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; NameToSlot;
 
 	class ContentFuncs {
 	public:
 		size_t	operator()(const ld::Atom*) const;
 		bool	operator()(const ld::Atom* left, const ld::Atom* right) const;
 	};
-	typedef std::unordered_map&lt;const ld::Atom*, IndirectBindingSlot, ContentFuncs, ContentFuncs&gt; ContentToSlot;
+	typedef __gnu_cxx::hash_map&lt;const ld::Atom*, IndirectBindingSlot, ContentFuncs, ContentFuncs&gt; ContentToSlot;
 
 	class ReferencesHashFuncs {
 	public:
 		size_t	operator()(const ld::Atom*) const;
 		bool	operator()(const ld::Atom* left, const ld::Atom* right) const;
 	};
-	typedef std::unordered_map&lt;const ld::Atom*, IndirectBindingSlot, ReferencesHashFuncs, ReferencesHashFuncs&gt; ReferencesToSlot;
+	typedef __gnu_cxx::hash_map&lt;const ld::Atom*, IndirectBindingSlot, ReferencesHashFuncs, ReferencesHashFuncs&gt; ReferencesToSlot;
 
 	class CStringHashFuncs {
 	public:
 		size_t	operator()(const ld::Atom*) const;
 		bool	operator()(const ld::Atom* left, const ld::Atom* right) const;
 	};
-	typedef std::unordered_map&lt;const ld::Atom*, IndirectBindingSlot, CStringHashFuncs, CStringHashFuncs&gt; CStringToSlot;
+	typedef __gnu_cxx::hash_map&lt;const ld::Atom*, IndirectBindingSlot, CStringHashFuncs, CStringHashFuncs&gt; CStringToSlot;
 
 	class UTF16StringHashFuncs {
 	public:
 		size_t	operator()(const ld::Atom*) const;
 		bool	operator()(const ld::Atom* left, const ld::Atom* right) const;
 	};
-	typedef std::unordered_map&lt;const ld::Atom*, IndirectBindingSlot, UTF16StringHashFuncs, UTF16StringHashFuncs&gt; UTF16StringToSlot;
+	typedef __gnu_cxx::hash_map&lt;const ld::Atom*, IndirectBindingSlot, UTF16StringHashFuncs, UTF16StringHashFuncs&gt; UTF16StringToSlot;
 
 	typedef std::map&lt;IndirectBindingSlot, const char*&gt; SlotToName;
-	typedef std::unordered_map&lt;const char*, CStringToSlot*, CStringHash, CStringEquals&gt; NameToMap;
+	typedef __gnu_cxx::hash_map&lt;const char*, CStringToSlot*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; NameToMap;
     
     typedef std::vector&lt;const ld::Atom *&gt; DuplicatedSymbolAtomList;
     typedef std::map&lt;const char *, DuplicatedSymbolAtomList * &gt; DuplicateSymbols;
--- src/ld/ld.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/ld.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -54,7 +54,8 @@ extern "C" double log2 ( double );
 #include &lt;vector&gt;
 #include &lt;list&gt;
 #include &lt;algorithm&gt;
-#include &lt;unordered_map&gt;
+#include &lt;ext/hash_map&gt;
+#include &lt;ext/hash_set&gt;
 #include &lt;cxxabi.h&gt;
 
 #include "Options.h"
@@ -148,7 +149,7 @@ private:
 	struct SectionEquals {
 		bool operator()(const ld::Section* left, const ld::Section* right) const;
 	};
-	typedef std::unordered_map&lt;const ld::Section*, FinalSection*, SectionHash, SectionEquals&gt; SectionInToOut;
+	typedef __gnu_cxx::hash_map&lt;const ld::Section*, FinalSection*, SectionHash, SectionEquals&gt; SectionInToOut;
 	
 
 	SectionInToOut			_sectionInToFinalMap;
@@ -169,7 +170,7 @@ std::vector&lt;const char*&gt; InternalState::
 size_t InternalState::SectionHash::operator()(const ld::Section* sect) const
 {
 	size_t hash = 0;	
-	ld::CStringHash temp;
+	__gnu_cxx::hash&lt;const char*&gt; temp;
 	hash += temp.operator()(sect-&gt;segmentName());
 	hash += temp.operator()(sect-&gt;sectionName());
 	return hash;
--- src/ld/ld.hpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/ld.hpp	2014-05-16 14:43:37.000000000 -0700
@@ -32,7 +32,7 @@
 #include &lt;assert.h&gt;
 
 #include &lt;vector&gt;
-#include &lt;unordered_set&gt;
+#include &lt;ext/hash_set&gt;

 #include "configure.h"
 
@@ -821,7 +821,7 @@ struct CStringEquals
 	bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
 };
 
-typedef	std::unordered_set&lt;const char*, ld::CStringHash, ld::CStringEquals&gt;  CStringSet;
+typedef	__gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  CStringSet;
 
 class Internal
 {
--- src/ld/parsers/archive_file.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/parsers/archive_file.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -33,7 +33,7 @@
 #include &lt;set&gt;
 #include &lt;map&gt;
 #include &lt;algorithm&gt;
-#include &lt;unordered_map&gt;
+#include &lt;ext/hash_map&gt;
 
 #include "MachOFileAbstraction.hpp"
 #include "Architectures.hpp"
@@ -112,7 +112,12 @@ private:
 	struct MemberState { ld::relocatable::File* file; const Entry *entry; bool logged; bool loaded; uint32_t index;};
 	bool											loadMember(MemberState&amp; state, ld::File::AtomHandler&amp; handler, const char *format, ...) const;
 
-	typedef std::unordered_map&lt;const char*, const struct ranlib*, ld::CStringHash, ld::CStringEquals&gt; NameToEntryMap;
+	class CStringEquals
+	{
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+	typedef __gnu_cxx::hash_map&lt;const char*, const struct ranlib*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; NameToEntryMap;
 
 	typedef typename A::P							P;
 	typedef typename A::P::E						E;
--- src/ld/parsers/lto_file.cpp	2014-05-16 14:28:17.000000000 -0700
+++ src/ld/parsers/lto_file.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -30,11 +30,10 @@
 #include &lt;sys/fcntl.h&gt;
 #include &lt;sys/stat.h&gt;
 #include &lt;errno.h&gt;
-#include &lt;pthread.h&gt;
 #include &lt;mach-o/dyld.h&gt;
 #include &lt;vector&gt;
-#include &lt;unordered_set&gt;
-#include &lt;unordered_map&gt;
+#include &lt;ext/hash_set&gt;
+#include &lt;ext/hash_map&gt;
 
 #include &lt;pthread.h&gt;
 
@@ -219,8 +218,13 @@ private:
 	static void ltoDiagnosticHandler(lto_codegen_diagnostic_severity_t, const char*, void*);
 #endif
 
-	typedef	std::unordered_set&lt;const char*, ld::CStringHash, ld::CStringEquals&gt;  CStringSet;
-	typedef std::unordered_map&lt;const char*, Atom*, ld::CStringHash, ld::CStringEquals&gt; CStringToAtom;
+	class CStringEquals
+	{
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+	typedef	__gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  CStringSet;
+	typedef __gnu_cxx::hash_map&lt;const char*, Atom*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; CStringToAtom;
 	
 	class AtomSyncer : public ld::File::AtomHandler {
 	public:
--- src/ld/parsers/macho_dylib_file.cpp	2014-05-16 14:28:17.000000000 -0700
+++ src/ld/parsers/macho_dylib_file.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -34,8 +34,8 @@
 #include &lt;vector&gt;
 #include &lt;set&gt;
 #include &lt;algorithm&gt;
-#include &lt;unordered_map&gt;
-#include &lt;unordered_set&gt;
+#include &lt;ext/hash_map&gt;
+#include &lt;ext/hash_set&gt;
 
 #include "Architectures.hpp"
 #include "MachOFileAbstraction.hpp"
@@ -180,17 +180,14 @@ private:
 	friend class ExportAtom&lt;A&gt;;
 	friend class ImportAtom&lt;A&gt;;
 
-	struct CStringHash {
-		std::size_t operator()(const char* __s) const {
-			unsigned long __h = 0;
-			for ( ; *__s; ++__s)
-				__h = 5 * __h + *__s;
-			return size_t(__h);
-		};
+	class CStringEquals
+	{
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
 	};
 	struct AtomAndWeak { ld::Atom* atom; bool weakDef; bool tlv; pint_t address; };
-	typedef std::unordered_map&lt;const char*, AtomAndWeak, ld::CStringHash, ld::CStringEquals&gt; NameToAtomMap;
-	typedef std::unordered_set&lt;const char*, CStringHash, ld::CStringEquals&gt;  NameSet;
+	typedef __gnu_cxx::hash_map&lt;const char*, AtomAndWeak, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; NameToAtomMap;
+	typedef __gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  NameSet;
 
 	struct Dependent { const char* path; File&lt;A&gt;* dylib; bool reExport; };
 
@@ -548,14 +545,14 @@ void File&lt;A&gt;::buildExportHashTableFromSy
 		if ( _s_logHashtable ) fprintf(stderr, "ld: building hashtable of %u toc entries for %s\n", dynamicInfo-&gt;nextdefsym(), this-&gt;path());
 		const macho_nlist&lt;P&gt;* start = &amp;symbolTable[dynamicInfo-&gt;iextdefsym()];
 		const macho_nlist&lt;P&gt;* end = &amp;start[dynamicInfo-&gt;nextdefsym()];
-		_atoms.reserve(dynamicInfo-&gt;nextdefsym()); // set initial bucket count
+		_atoms.resize(dynamicInfo-&gt;nextdefsym()); // set initial bucket count
 		for (const macho_nlist&lt;P&gt;* sym=start; sym &lt; end; ++sym) {
 			this-&gt;addSymbol(&amp;strings[sym-&gt;n_strx()], (sym-&gt;n_desc() &amp; N_WEAK_DEF) != 0, false, sym-&gt;n_value());
 		}
 	}
 	else {
 		int32_t count = dynamicInfo-&gt;ntoc();
-		_atoms.reserve(count); // set initial bucket count
+		_atoms.resize(count); // set initial bucket count
 		if ( _s_logHashtable ) fprintf(stderr, "ld: building hashtable of %u entries for %s\n", count, this-&gt;path());
 		const struct dylib_table_of_contents* toc = (dylib_table_of_contents*)(fileContent + dynamicInfo-&gt;tocoff());
 		for (int32_t i = 0; i &lt; count; ++i) {
--- src/ld/passes/dtrace_dof.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/passes/dtrace_dof.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -30,8 +30,7 @@
 
 #include &lt;vector&gt;
 #include &lt;map&gt;
-#include &lt;unordered_map&gt;
-#include &lt;unordered_set&gt;
+#include &lt;ext/hash_map&gt;
 
 #include "ld.hpp"
 #include "MachOFileAbstraction.hpp"
@@ -105,14 +104,20 @@ Atom::Atom(File&amp; f, const char* n,  cons
 
 
 
+class CStringEquals
+{
+public:
+	bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+};
+
 struct DTraceProbeInfo {
 	DTraceProbeInfo(const ld::Atom* a, uint32_t o, const char* n) : atom(a), offset(o), probeName(n) {}
 	const ld::Atom*					atom;
 	uint32_t						offset;
 	const char*						probeName;
 };
-typedef std::unordered_map&lt;const char*, std::vector&lt;DTraceProbeInfo&gt;, CStringHash, CStringEquals&gt;	ProviderToProbes;
-typedef	std::unordered_set&lt;const char*, CStringHash, CStringEquals&gt;  CStringSet;
+typedef __gnu_cxx::hash_map&lt;const char*, std::vector&lt;DTraceProbeInfo&gt;, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;	ProviderToProbes;
+typedef	__gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  CStringSet;
 
 
 
--- src/ld/passes/got.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/passes/got.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -30,6 +30,7 @@
 
 #include &lt;vector&gt;
 #include &lt;map&gt;
+#include &lt;ext/hash_map&gt;
 
 #include "MachOFileAbstraction.hpp"
 #include "ld.hpp"
--- src/ld/passes/order.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/passes/order.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -32,7 +32,6 @@
 #include &lt;vector&gt;
 #include &lt;map&gt;
 #include &lt;set&gt;
-#include &lt;unordered_map&gt;
 
 #include "ld.hpp"
 #include "order.h"
@@ -84,7 +83,11 @@ private:
 		const Layout&amp;	_layout;
 	};
 				
-	typedef std::unordered_map&lt;const char*, const ld::Atom*, CStringHash, CStringEquals&gt; NameToAtom;
+	class CStringEquals {
+	public:
+	        bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+	typedef __gnu_cxx::hash_map&lt;const char*, const ld::Atom*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt; NameToAtom;
 	
 	typedef std::map&lt;const ld::Atom*, const ld::Atom*&gt; AtomToAtom;
 	
--- src/ld/passes/tlvp.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/ld/passes/tlvp.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -30,6 +30,7 @@
 
 #include &lt;vector&gt;
 #include &lt;map&gt;
+#include &lt;ext/hash_map&gt;
 
 #include "ld.hpp"
 #include "tlvp.h"
--- src/other/dyldinfo.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/other/dyldinfo.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -33,7 +33,7 @@
 
 #include &lt;vector&gt;
 #include &lt;set&gt;
-#include &lt;unordered_set&gt;
+#include &lt;ext/hash_set&gt;
 
 #include "configure.h"
 #include "MachOFileAbstraction.hpp"
@@ -87,6 +87,14 @@ private:
 	typedef typename A::P::E				E;
 	typedef typename A::P::uint_t			pint_t;
 	
+	class CStringEquals
+	{
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+
+	typedef __gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  StringSet;
+
 												DyldInfoPrinter(const uint8_t* fileContent, uint32_t fileLength, const char* path, bool printArch);
 	void										printRebaseInfo();
 	void										printRebaseInfoOpcodes();
--- src/other/machochecker.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/other/machochecker.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -33,7 +33,7 @@
 
 #include &lt;vector&gt;
 #include &lt;set&gt;
-#include &lt;unordered_set&gt;
+#include &lt;ext/hash_set&gt;
 
 #include "configure.h"
 
@@ -110,21 +110,13 @@ private:
 	typedef typename A::P::E				E;
 	typedef typename A::P::uint_t			pint_t;
 	
-	// utility classes for using std::unordered_map with c-strings
-	struct CStringHash {
-		size_t operator()(const char* __s) const {
-			size_t __h = 0;
-			for ( ; *__s; ++__s)
-				__h = 5 * __h + *__s;
-			return __h;
-		};
-	};
-	struct CStringEquals
+	class CStringEquals
 	{
+	public:
 		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
 	};
 
-	typedef std::unordered_set&lt;const char*, CStringHash, CStringEquals&gt;  StringSet;
+	typedef __gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  StringSet;
 
 												MachOChecker(const uint8_t* fileContent, uint32_t fileLength, const char* path);
 	void										checkMachHeader();
--- src/other/unwinddump.cpp	2014-04-04 15:42:29.000000000 -0700
+++ src/other/unwinddump.cpp	2014-05-16 14:28:58.000000000 -0700
@@ -33,7 +33,7 @@
 
 #include &lt;vector&gt;
 #include &lt;set&gt;
-#include &lt;unordered_set&gt;
+#include &lt;ext/hash_set&gt;
 
 #include "configure.h"
 #include "MachOFileAbstraction.hpp"
@@ -71,6 +71,14 @@ private:
 	typedef typename A::P::E				E;
 	typedef typename A::P::uint_t			pint_t;
 	
+	class CStringEquals
+	{
+	public:
+		bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
+	};
+
+	typedef __gnu_cxx::hash_set&lt;const char*, __gnu_cxx::hash&lt;const char*&gt;, CStringEquals&gt;  StringSet;
+
 												UnwindPrinter(const uint8_t* fileContent, uint32_t fileLength, 
 																const char* path, bool showFunctionNames);
 	bool										findUnwindSection();
</pre></body></html>