diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-06 13:06:17 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-06 13:06:17 +0000 |
commit | e2e741ecddd672e08abd29f21d67521edb640e48 (patch) | |
tree | 23ca72baca651008fa891976e12af58b79fe21a3 /llvm/tools/yaml2obj/yaml2coff.cpp | |
parent | c9e304afbdbdf529fd7c97ee0353924d645b48df (diff) | |
download | bcm5719-llvm-e2e741ecddd672e08abd29f21d67521edb640e48.tar.gz bcm5719-llvm-e2e741ecddd672e08abd29f21d67521edb640e48.zip |
Print symbol names in relocations when dumping COFF as YAML.
llvm-svn: 183403
Diffstat (limited to 'llvm/tools/yaml2obj/yaml2coff.cpp')
-rw-r--r-- | llvm/tools/yaml2obj/yaml2coff.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/tools/yaml2obj/yaml2coff.cpp b/llvm/tools/yaml2obj/yaml2coff.cpp index d800b90791c..11aae0e68b6 100644 --- a/llvm/tools/yaml2obj/yaml2coff.cpp +++ b/llvm/tools/yaml2obj/yaml2coff.cpp @@ -219,15 +219,25 @@ bool writeCOFF(COFFParser &CP, raw_ostream &OS) { << binary_le(i->Header.Characteristics); } + unsigned CurSymbol = 0; + StringMap<unsigned> SymbolTableIndexMap; + for (std::vector<COFFYAML::Symbol>::iterator I = CP.Obj.Symbols.begin(), + E = CP.Obj.Symbols.end(); + I != E; ++I) { + SymbolTableIndexMap[I->Name] = CurSymbol; + CurSymbol += 1 + I->Header.NumberOfAuxSymbols; + } + // Output section data. for (std::vector<COFFYAML::Section>::iterator i = CP.Obj.Sections.begin(), e = CP.Obj.Sections.end(); i != e; ++i) { i->SectionData.writeAsBinary(OS); for (unsigned I2 = 0, E2 = i->Relocations.size(); I2 != E2; ++I2) { - const COFF::relocation &R = i->Relocations[I2]; + const COFFYAML::Relocation &R = i->Relocations[I2]; + uint32_t SymbolTableIndex = SymbolTableIndexMap[R.SymbolName]; OS << binary_le(R.VirtualAddress) - << binary_le(R.SymbolTableIndex) + << binary_le(SymbolTableIndex) << binary_le(R.Type); } } |