[llvm] r183403 - Print symbol names in relocations when dumping COFF as YAML.
Rafael Espindola
rafael.espindola at gmail.com
Thu Jun 6 06:06:17 PDT 2013
Author: rafael
Date: Thu Jun 6 08:06:17 2013
New Revision: 183403
URL: http://llvm.org/viewvc/llvm-project?rev=183403&view=rev
Log:
Print symbol names in relocations when dumping COFF as YAML.
Modified:
llvm/trunk/include/llvm/Object/COFFYAML.h
llvm/trunk/lib/Object/COFFYAML.cpp
llvm/trunk/test/Object/Inputs/COFF/i386.yaml
llvm/trunk/test/Object/Inputs/COFF/x86-64.yaml
llvm/trunk/test/Object/obj2yaml.test
llvm/trunk/tools/obj2yaml/coff2yaml.cpp
llvm/trunk/tools/yaml2obj/yaml2coff.cpp
Modified: llvm/trunk/include/llvm/Object/COFFYAML.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFFYAML.h?rev=183403&r1=183402&r2=183403&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/COFFYAML.h (original)
+++ llvm/trunk/include/llvm/Object/COFFYAML.h Thu Jun 6 08:06:17 2013
@@ -35,11 +35,17 @@ inline SectionCharacteristics operator|(
// The structure of the yaml files is not an exact 1:1 match to COFF. In order
// to use yaml::IO, we use these structures which are closer to the source.
namespace COFFYAML {
+ struct Relocation {
+ uint32_t VirtualAddress;
+ uint16_t Type;
+ StringRef SymbolName;
+ };
+
struct Section {
COFF::section Header;
unsigned Alignment;
object::yaml::BinaryRef SectionData;
- std::vector<COFF::relocation> Relocations;
+ std::vector<Relocation> Relocations;
StringRef Name;
Section();
};
@@ -64,7 +70,7 @@ namespace COFFYAML {
LLVM_YAML_IS_SEQUENCE_VECTOR(COFFYAML::Section)
LLVM_YAML_IS_SEQUENCE_VECTOR(COFFYAML::Symbol)
-LLVM_YAML_IS_SEQUENCE_VECTOR(COFF::relocation)
+LLVM_YAML_IS_SEQUENCE_VECTOR(COFFYAML::Relocation)
namespace llvm {
namespace yaml {
@@ -105,8 +111,8 @@ struct ScalarBitSetTraits<COFF::SectionC
};
template <>
-struct MappingTraits<COFF::relocation> {
- static void mapping(IO &IO, COFF::relocation &Rel);
+struct MappingTraits<COFFYAML::Relocation> {
+ static void mapping(IO &IO, COFFYAML::Relocation &Rel);
};
template <>
Modified: llvm/trunk/lib/Object/COFFYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFYAML.cpp?rev=183403&r1=183402&r2=183403&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFYAML.cpp (original)
+++ llvm/trunk/lib/Object/COFFYAML.cpp Thu Jun 6 08:06:17 2013
@@ -229,11 +229,12 @@ struct NType {
}
-void MappingTraits<COFF::relocation>::mapping(IO &IO, COFF::relocation &Rel) {
+void MappingTraits<COFFYAML::Relocation>::mapping(IO &IO,
+ COFFYAML::Relocation &Rel) {
MappingNormalization<NType, uint16_t> NT(IO, Rel.Type);
IO.mapRequired("VirtualAddress", Rel.VirtualAddress);
- IO.mapRequired("SymbolTableIndex", Rel.SymbolTableIndex);
+ IO.mapRequired("SymbolName", Rel.SymbolName);
IO.mapRequired("Type", NT->Type);
}
Modified: llvm/trunk/test/Object/Inputs/COFF/i386.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/Inputs/COFF/i386.yaml?rev=183403&r1=183402&r2=183403&view=diff
==============================================================================
--- llvm/trunk/test/Object/Inputs/COFF/i386.yaml (original)
+++ llvm/trunk/test/Object/Inputs/COFF/i386.yaml Thu Jun 6 08:06:17 2013
@@ -12,17 +12,17 @@ sections:
Relocations:
- !Relocation
VirtualAddress: 0xe
- SymbolTableIndex: 5
+ SymbolName: L_.str
Type: IMAGE_REL_I386_DIR32
- !Relocation
VirtualAddress: 0x13
- SymbolTableIndex: 6
+ SymbolName: _puts
Type: IMAGE_REL_I386_REL32
- !Relocation
VirtualAddress: 0x18
- SymbolTableIndex: 7
+ SymbolName: _SomeOtherFunction
Type: IMAGE_REL_I386_REL32
- !Section
Modified: llvm/trunk/test/Object/Inputs/COFF/x86-64.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/Inputs/COFF/x86-64.yaml?rev=183403&r1=183402&r2=183403&view=diff
==============================================================================
--- llvm/trunk/test/Object/Inputs/COFF/x86-64.yaml (original)
+++ llvm/trunk/test/Object/Inputs/COFF/x86-64.yaml Thu Jun 6 08:06:17 2013
@@ -11,17 +11,17 @@ sections:
Relocations:
- !Relocation
VirtualAddress: 0xf
- SymbolTableIndex: 5
+ SymbolName: L.str
Type: IMAGE_REL_AMD64_REL32
- !Relocation
VirtualAddress: 0x14
- SymbolTableIndex: 6
+ SymbolName: puts
Type: IMAGE_REL_AMD64_REL32
- !Relocation
VirtualAddress: 0x19
- SymbolTableIndex: 7
+ SymbolName: SomeOtherFunction
Type: IMAGE_REL_AMD64_REL32
- !Section
Modified: llvm/trunk/test/Object/obj2yaml.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/obj2yaml.test?rev=183403&r1=183402&r2=183403&view=diff
==============================================================================
--- llvm/trunk/test/Object/obj2yaml.test (original)
+++ llvm/trunk/test/Object/obj2yaml.test Thu Jun 6 08:06:17 2013
@@ -13,15 +13,15 @@ COFF-I386-NEXT: SectionData: 83EC0CC
COFF-I386: Relocations:
COFF-I386-NEXT: - VirtualAddress: 14
-COFF-I386-NEXT: SymbolTableIndex: 5
+COFF-I386-NEXT: SymbolName: L_.str
COFF-I386-NEXT: Type: IMAGE_REL_I386_DIR32
COFF-I386: - VirtualAddress: 19
-COFF-I386-NEXT: SymbolTableIndex: 6
+COFF-I386-NEXT: SymbolName: _puts
COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32
COFF-I386: - VirtualAddress: 24
-COFF-I386-NEXT: SymbolTableIndex: 7
+COFF-I386-NEXT: SymbolName: _SomeOtherFunction
COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32
COFF-I386: - Name: .data
@@ -88,15 +88,15 @@ COFF-X86-64-NEXT: SectionData: 4883E
COFF-X86-64: Relocations:
COFF-X86-64-NEXT: - VirtualAddress: 15
-COFF-X86-64-NEXT: SymbolTableIndex: 5
+COFF-X86-64-NEXT: SymbolName: L.str
COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32
COFF-X86-64: - VirtualAddress: 20
-COFF-X86-64-NEXT: SymbolTableIndex: 6
+COFF-X86-64-NEXT: SymbolName: puts
COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32
COFF-X86-64: - VirtualAddress: 25
-COFF-X86-64-NEXT: SymbolTableIndex: 7
+COFF-X86-64-NEXT: SymbolName: SomeOtherFunction
COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32
COFF-X86-64: - Name: .data
Modified: llvm/trunk/tools/obj2yaml/coff2yaml.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/coff2yaml.cpp?rev=183403&r1=183402&r2=183403&view=diff
==============================================================================
--- llvm/trunk/tools/obj2yaml/coff2yaml.cpp (original)
+++ llvm/trunk/tools/obj2yaml/coff2yaml.cpp Thu Jun 6 08:06:17 2013
@@ -66,13 +66,15 @@ void COFFDumper::dumpSections(unsigned N
Obj.getSectionContents(Sect, sectionData);
Sec.SectionData = object::yaml::BinaryRef(sectionData);
- std::vector<COFF::relocation> Relocations;
+ std::vector<COFFYAML::Relocation> Relocations;
for (object::relocation_iterator rIter = iter->begin_relocations();
rIter != iter->end_relocations(); rIter.increment(ec)) {
const object::coff_relocation *reloc = Obj.getCOFFRelocation(rIter);
- COFF::relocation Rel;
+ COFFYAML::Relocation Rel;
+ object::symbol_iterator Sym = rIter->getSymbol();
+ StringRef Name;
+ Sym->getName(Rel.SymbolName);
Rel.VirtualAddress = reloc->VirtualAddress;
- Rel.SymbolTableIndex = reloc->SymbolTableIndex;
Rel.Type = reloc->Type;
Relocations.push_back(Rel);
}
Modified: llvm/trunk/tools/yaml2obj/yaml2coff.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2coff.cpp?rev=183403&r1=183402&r2=183403&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2coff.cpp (original)
+++ llvm/trunk/tools/yaml2obj/yaml2coff.cpp Thu Jun 6 08:06:17 2013
@@ -219,15 +219,25 @@ bool writeCOFF(COFFParser &CP, raw_ostre
<< 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);
}
}
More information about the llvm-commits
mailing list