summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/ARMAttributeParser.cpp
diff options
context:
space:
mode:
authorIvan Krasin <krasin@chromium.org>2017-01-13 16:45:15 +0000
committerIvan Krasin <krasin@chromium.org>2017-01-13 16:45:15 +0000
commit1ed7896c1b656276bc3b495ecbca3096dd5781ab (patch)
tree620385ecb80c4e685d518dc2f1cabecb61f2fc3c /llvm/lib/Support/ARMAttributeParser.cpp
parente4bbd88116c5600bffe65b4ce295d2aa57b1e1df (diff)
downloadbcm5719-llvm-1ed7896c1b656276bc3b495ecbca3096dd5781ab.tar.gz
bcm5719-llvm-1ed7896c1b656276bc3b495ecbca3096dd5781ab.zip
Revert r291903 and r291898. Reason: they break check-lld on the bots.
Summary: Revert [ARM] Fix ubig32_t read in ARMAttributeParser Now using support functions to read data instead of trying to perform casts. =========================================================== Revert [ARM] Enable objdump to construct triple for ARM Now that The ARMAttributeParser has been moved into the library, it has been modified so that it can parse the attributes without printing them and stores them in a map. ELFObjectFile now queries the attributes to fill out the architecture details of a provided triple for 'arm' and 'thumb' targets. llvm-objdump uses this new functionality. Subscribers: llvm-commits, samparker, aemerson, mgorny Differential Revision: https://reviews.llvm.org/D28683 llvm-svn: 291911
Diffstat (limited to 'llvm/lib/Support/ARMAttributeParser.cpp')
-rw-r--r--llvm/lib/Support/ARMAttributeParser.cpp119
1 files changed, 47 insertions, 72 deletions
diff --git a/llvm/lib/Support/ARMAttributeParser.cpp b/llvm/lib/Support/ARMAttributeParser.cpp
index 6ab072d683d..792510e6b84 100644
--- a/llvm/lib/Support/ARMAttributeParser.cpp
+++ b/llvm/lib/Support/ARMAttributeParser.cpp
@@ -89,43 +89,32 @@ StringRef ARMAttributeParser::ParseString(const uint8_t *Data,
void ARMAttributeParser::IntegerAttribute(AttrType Tag, const uint8_t *Data,
uint32_t &Offset) {
-
- uint64_t Value = ParseInteger(Data, Offset);
- Attributes.insert(std::make_pair(Tag, Value));
-
- if (SW)
- SW->printNumber(ARMBuildAttrs::AttrTypeAsString(Tag), Value);
+ SW.printNumber(ARMBuildAttrs::AttrTypeAsString(Tag),
+ ParseInteger(Data, Offset));
}
void ARMAttributeParser::StringAttribute(AttrType Tag, const uint8_t *Data,
uint32_t &Offset) {
StringRef TagName = ARMBuildAttrs::AttrTypeAsString(Tag, /*TagPrefix*/false);
- StringRef ValueDesc = ParseString(Data, Offset);
-
- if (SW) {
- DictScope AS(*SW, "Attribute");
- SW->printNumber("Tag", Tag);
- if (!TagName.empty())
- SW->printString("TagName", TagName);
- SW->printString("Value", ValueDesc);
- }
+
+ DictScope AS(SW, "Attribute");
+ SW.printNumber("Tag", Tag);
+ if (!TagName.empty())
+ SW.printString("TagName", TagName);
+ SW.printString("Value", ParseString(Data, Offset));
}
void ARMAttributeParser::PrintAttribute(unsigned Tag, unsigned Value,
StringRef ValueDesc) {
- Attributes.insert(std::make_pair(Tag, Value));
-
- if (SW) {
- StringRef TagName = ARMBuildAttrs::AttrTypeAsString(Tag,
- /*TagPrefix*/false);
- DictScope AS(*SW, "Attribute");
- SW->printNumber("Tag", Tag);
- SW->printNumber("Value", Value);
- if (!TagName.empty())
- SW->printString("TagName", TagName);
- if (!ValueDesc.empty())
- SW->printString("Description", ValueDesc);
- }
+ StringRef TagName = ARMBuildAttrs::AttrTypeAsString(Tag, /*TagPrefix*/false);
+
+ DictScope AS(SW, "Attribute");
+ SW.printNumber("Tag", Tag);
+ SW.printNumber("Value", Value);
+ if (!TagName.empty())
+ SW.printString("TagName", TagName);
+ if (!ValueDesc.empty())
+ SW.printString("Description", ValueDesc);
}
void ARMAttributeParser::CPU_arch(AttrType Tag, const uint8_t *Data,
@@ -460,22 +449,20 @@ void ARMAttributeParser::compatibility(AttrType Tag, const uint8_t *Data,
uint64_t Integer = ParseInteger(Data, Offset);
StringRef String = ParseString(Data, Offset);
- if (SW) {
- DictScope AS(*SW, "Attribute");
- SW->printNumber("Tag", Tag);
- SW->startLine() << "Value: " << Integer << ", " << String << '\n';
- SW->printString("TagName", AttrTypeAsString(Tag, /*TagPrefix*/false));
- switch (Integer) {
- case 0:
- SW->printString("Description", StringRef("No Specific Requirements"));
- break;
- case 1:
- SW->printString("Description", StringRef("AEABI Conformant"));
- break;
- default:
- SW->printString("Description", StringRef("AEABI Non-Conformant"));
- break;
- }
+ DictScope AS(SW, "Attribute");
+ SW.printNumber("Tag", Tag);
+ SW.startLine() << "Value: " << Integer << ", " << String << '\n';
+ SW.printString("TagName", AttrTypeAsString(Tag, /*TagPrefix*/false));
+ switch (Integer) {
+ case 0:
+ SW.printString("Description", StringRef("No Specific Requirements"));
+ break;
+ case 1:
+ SW.printString("Description", StringRef("AEABI Conformant"));
+ break;
+ default:
+ SW.printString("Description", StringRef("AEABI Non-Conformant"));
+ break;
}
}
@@ -617,33 +604,27 @@ void ARMAttributeParser::ParseAttributeList(const uint8_t *Data,
void ARMAttributeParser::ParseSubsection(const uint8_t *Data, uint32_t Length) {
uint32_t Offset = sizeof(uint32_t); /* SectionLength */
+ SW.printNumber("SectionLength", Length);
+
const char *VendorName = reinterpret_cast<const char*>(Data + Offset);
size_t VendorNameLength = std::strlen(VendorName);
+ SW.printString("Vendor", StringRef(VendorName, VendorNameLength));
Offset = Offset + VendorNameLength + 1;
- if (SW) {
- SW->printNumber("SectionLength", Length);
- SW->printString("Vendor", StringRef(VendorName, VendorNameLength));
- }
-
- if (StringRef(VendorName, VendorNameLength).lower() != "aeabi") {
+ if (StringRef(VendorName, VendorNameLength).lower() != "aeabi")
return;
- }
while (Offset < Length) {
/// Tag_File | Tag_Section | Tag_Symbol uleb128:byte-size
uint8_t Tag = Data[Offset];
+ SW.printEnum("Tag", Tag, makeArrayRef(TagNames));
Offset = Offset + sizeof(Tag);
uint32_t Size =
*reinterpret_cast<const support::ulittle32_t*>(Data + Offset);
+ SW.printNumber("Size", Size);
Offset = Offset + sizeof(Size);
- if (SW) {
- SW->printEnum("Tag", Tag, makeArrayRef(TagNames));
- SW->printNumber("Size", Size);
- }
-
if (Size > Length) {
errs() << "subsection length greater than section length\n";
return;
@@ -670,37 +651,31 @@ void ARMAttributeParser::ParseSubsection(const uint8_t *Data, uint32_t Length) {
return;
}
- if (SW) {
- DictScope ASS(*SW, ScopeName);
- if (!Indicies.empty())
- SW->printList(IndexName, Indicies);
- }
+ DictScope ASS(SW, ScopeName);
+
+ if (!Indicies.empty())
+ SW.printList(IndexName, Indicies);
ParseAttributeList(Data, Offset, Length);
}
}
-void ARMAttributeParser::Parse(ArrayRef<uint8_t> Section, bool isLittle) {
+void ARMAttributeParser::Parse(ArrayRef<uint8_t> Section) {
size_t Offset = 1;
unsigned SectionNumber = 0;
while (Offset < Section.size()) {
uint32_t SectionLength =
- isLittle ? support::endian::read32le(Section.data() + Offset)
- : support::endian::read32be(Section.data() + Offset);
+ *reinterpret_cast<const support::ulittle32_t*>(Section.data() + Offset);
- if (SW) {
- SW->startLine() << "Section " << ++SectionNumber << " {\n";
- SW->indent();
- }
+ SW.startLine() << "Section " << ++SectionNumber << " {\n";
+ SW.indent();
ParseSubsection(Section.data() + Offset, SectionLength);
Offset = Offset + SectionLength;
- if (SW) {
- SW->unindent();
- SW->startLine() << "}\n";
- }
+ SW.unindent();
+ SW.startLine() << "}\n";
}
}
}
OpenPOWER on IntegriCloud