summaryrefslogtreecommitdiffstats
path: root/llvm/tools/yaml2obj/yaml2coff.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-06-06 13:06:17 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-06-06 13:06:17 +0000
commite2e741ecddd672e08abd29f21d67521edb640e48 (patch)
tree23ca72baca651008fa891976e12af58b79fe21a3 /llvm/tools/yaml2obj/yaml2coff.cpp
parentc9e304afbdbdf529fd7c97ee0353924d645b48df (diff)
downloadbcm5719-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.cpp14
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);
}
}
OpenPOWER on IntegriCloud