diff options
-rw-r--r-- | lld/lib/Core/YamlReader.cpp | 29 | ||||
-rw-r--r-- | lld/tools/lld-core/lld-core.cpp | 3 |
2 files changed, 10 insertions, 22 deletions
diff --git a/lld/lib/Core/YamlReader.cpp b/lld/lib/Core/YamlReader.cpp index 98201f8b046..64192b0ee3f 100644 --- a/lld/lib/Core/YamlReader.cpp +++ b/lld/lib/Core/YamlReader.cpp @@ -764,13 +764,10 @@ void YAMLAtomState::setRefName(const char *n) { } void YAMLAtomState::setAlign2(const char *s) { - llvm::StringRef str(s); - uint32_t res; - str.getAsInteger(10, res); - _alignment.powerOf2 = static_cast<uint16_t>(res); + if (llvm::StringRef(s).getAsInteger(10, _alignment.powerOf2)) + _alignment.powerOf2 = 1; } - void YAMLAtomState::setFixupKind(const char *s) { _ref._kind = _platform.kindFromString(llvm::StringRef(s)); } @@ -915,7 +912,7 @@ llvm::error_code parseObjectText( llvm::MemoryBuffer *mb } else if (strcmp(entry->key, KeyValues::sizeKeyword) == 0) { llvm::StringRef val = entry->value; - if ( val.getAsInteger(0, atomState._size) ) + if (val.getAsInteger(0, atomState._size)) return make_error_code(yaml_reader_error::illegal_value); haveAtom = true; } @@ -956,9 +953,9 @@ llvm::error_code parseObjectText( llvm::MemoryBuffer *mb haveFixup = true; } else if (strcmp(entry->key, KeyValues::fixupsOffsetKeyword) == 0) { - llvm::APInt Val; - llvm::StringRef(entry->value).getAsInteger(0, Val); - atomState._ref._offsetInAtom = Val.getZExtValue(); + if (llvm::StringRef(entry->value).getAsInteger(0, + atomState._ref._offsetInAtom)) + return make_error_code(yaml_reader_error::illegal_value); haveFixup = true; } else if (strcmp(entry->key, KeyValues::fixupsTargetKeyword) == 0) { @@ -966,19 +963,9 @@ llvm::error_code parseObjectText( llvm::MemoryBuffer *mb haveFixup = true; } else if (strcmp(entry->key, KeyValues::fixupsAddendKeyword) == 0) { - llvm::APInt Val; - // HACK: getAsInteger for APInt doesn't handle negative values - // the same as other getAsInteger functions. And getAsInteger - // doesn't work on all platforms for {,u}int64_t. So manually - // handle this until getAsInteger is fixed. - bool IsNeg = false; llvm::StringRef Addend(entry->value); - if (Addend.find('-') == 0) { - IsNeg = true; - Addend = Addend.substr(1); - } - Addend.getAsInteger(0, Val); - atomState._ref._addend = Val.getSExtValue() * (IsNeg ? -1 : 1); + if (Addend.getAsInteger(0, atomState._ref._addend)) + return make_error_code(yaml_reader_error::illegal_value); haveFixup = true; } } diff --git a/lld/tools/lld-core/lld-core.cpp b/lld/tools/lld-core/lld-core.cpp index d71a0f906d6..6f6e687b75e 100644 --- a/lld/tools/lld-core/lld-core.cpp +++ b/lld/tools/lld-core/lld-core.cpp @@ -269,7 +269,8 @@ public: return p->value; } int k; - kindName.getAsInteger(0, k); + if (kindName.getAsInteger(0, k)) + k = 0; return k; } |