[llvm] r209607 - tools: avoid use of std::function
Saleem Abdulrasool
compnerd at compnerd.org
Sun May 25 14:37:59 PDT 2014
Author: compnerd
Date: Sun May 25 16:37:59 2014
New Revision: 209607
URL: http://llvm.org/viewvc/llvm-project?rev=209607&view=rev
Log:
tools: avoid use of std::function
Remove the use of the std::function and replace the capturing lambda with a
non-capturing one, opting to pass the user data down to the context. This is
needed as std::function is not yet available on all hosted platforms (it
requires RTTI, which breaks on Windows).
Thanks to Nico Rieck for pointing this out!
Modified:
llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp
llvm/trunk/tools/llvm-readobj/Win64EHDumper.h
Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=209607&r1=209606&r2=209607&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Sun May 25 16:37:59 2014
@@ -849,11 +849,12 @@ void COFFDumper::printUnwindInfo() {
case COFF::IMAGE_FILE_MACHINE_AMD64: {
Win64EH::Dumper Dumper(W);
Win64EH::Dumper::SymbolResolver Resolver =
- [this](const object::coff_section *Section, uint64_t Offset,
- SymbolRef &Symbol) -> error_code {
- return this->resolveSymbol(Section, Offset, Symbol);
+ [](const object::coff_section *Section, uint64_t Offset,
+ SymbolRef &Symbol, void *user_data) -> error_code {
+ COFFDumper *Dumper = reinterpret_cast<COFFDumper*>(user_data);
+ return Dumper->resolveSymbol(Section, Offset, Symbol);
};
- Win64EH::Dumper::Context Ctx(*Obj, Resolver);
+ Win64EH::Dumper::Context Ctx(*Obj, Resolver, this);
Dumper.printData(Ctx);
break;
}
Modified: llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp?rev=209607&r1=209606&r2=209607&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp Sun May 25 16:37:59 2014
@@ -120,7 +120,8 @@ static std::string formatSymbol(const Du
StringRef Name;
SymbolRef Symbol;
- if (Ctx.ResolveSymbol(Section, Offset, Symbol) || Symbol.getName(Name)) {
+ if (Ctx.ResolveSymbol(Section, Offset, Symbol, Ctx.UserData) ||
+ Symbol.getName(Name)) {
OS << format(" (0x%" PRIX64 ")", Offset);
return OS.str();
}
@@ -139,7 +140,7 @@ static error_code resolveRelocation(cons
const coff_section *&ResolvedSection,
uint64_t &ResolvedAddress) {
SymbolRef Symbol;
- if (error_code EC = Ctx.ResolveSymbol(Section, Offset, Symbol))
+ if (error_code EC = Ctx.ResolveSymbol(Section, Offset, Symbol, Ctx.UserData))
return EC;
if (error_code EC = Symbol.getAddress(ResolvedAddress))
Modified: llvm/trunk/tools/llvm-readobj/Win64EHDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/Win64EHDumper.h?rev=209607&r1=209606&r2=209607&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/Win64EHDumper.h (original)
+++ llvm/trunk/tools/llvm-readobj/Win64EHDumper.h Sun May 25 16:37:59 2014
@@ -13,8 +13,6 @@
#include "StreamWriter.h"
#include "llvm/Support/Win64EH.h"
-#include <functional>
-
namespace llvm {
namespace object {
class COFFObjectFile;
@@ -28,15 +26,17 @@ class Dumper {
raw_ostream &OS;
public:
- typedef std::function<error_code(const object::coff_section *, uint64_t,
- object::SymbolRef &)> SymbolResolver;
+ typedef error_code (*SymbolResolver)(const object::coff_section *, uint64_t,
+ object::SymbolRef &, void *);
struct Context {
const object::COFFObjectFile &COFF;
SymbolResolver ResolveSymbol;
+ void *UserData;
- Context(const object::COFFObjectFile &COFF, SymbolResolver Resolver)
- : COFF(COFF), ResolveSymbol(Resolver) {}
+ Context(const object::COFFObjectFile &COFF, SymbolResolver Resolver,
+ void *UserData)
+ : COFF(COFF), ResolveSymbol(Resolver), UserData(UserData) {}
};
private:
More information about the llvm-commits
mailing list