mirror of
https://github.com/RPCSX/llvm.git
synced 2025-05-13 10:56:01 +00:00
Tweak to r250117 and change to use ErrorOr and drop isSizeValid for
ArchiveMemberHeader, suggestion by Rafael Espíndola. Also The clang-x86-win2008-selfhost bot still does not like the malformed-machos 00000031.a test, so removing it for now. All the other bots are fine with it however. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250222 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3d6511f5ef
commit
1cd4c56bf6
@ -37,8 +37,7 @@ struct ArchiveMemberHeader {
|
||||
llvm::StringRef getName() const;
|
||||
|
||||
/// Members are not larger than 4GB.
|
||||
uint32_t getSize() const;
|
||||
bool isSizeValid() const;
|
||||
ErrorOr<uint32_t> getSize() const;
|
||||
|
||||
sys::fs::perms getAccessMode() const;
|
||||
sys::TimeValue getLastModified() const;
|
||||
|
@ -43,20 +43,13 @@ StringRef ArchiveMemberHeader::getName() const {
|
||||
return llvm::StringRef(Name, end);
|
||||
}
|
||||
|
||||
uint32_t ArchiveMemberHeader::getSize() const {
|
||||
ErrorOr<uint32_t> ArchiveMemberHeader::getSize() const {
|
||||
uint32_t Ret;
|
||||
if (llvm::StringRef(Size, sizeof(Size)).rtrim(" ").getAsInteger(10, Ret))
|
||||
llvm_unreachable("Size is not a decimal number.");
|
||||
return object_error::parse_failed;
|
||||
return Ret;
|
||||
}
|
||||
|
||||
bool ArchiveMemberHeader::isSizeValid() const {
|
||||
uint32_t Ret;
|
||||
if (llvm::StringRef(Size, sizeof(Size)).rtrim(" ").getAsInteger(10, Ret))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
sys::fs::perms ArchiveMemberHeader::getAccessMode() const {
|
||||
unsigned Ret;
|
||||
if (StringRef(AccessMode, sizeof(AccessMode)).rtrim(" ").getAsInteger(8, Ret))
|
||||
@ -96,11 +89,6 @@ Archive::Child::Child(const Archive *Parent, const char *Start)
|
||||
|
||||
uint64_t Size = sizeof(ArchiveMemberHeader);
|
||||
Data = StringRef(Start, Size);
|
||||
// Check to make sure the size is valid.
|
||||
const ArchiveMemberHeader *Header =
|
||||
reinterpret_cast<const ArchiveMemberHeader *>(Data.data());
|
||||
if (!Header->isSizeValid())
|
||||
return;
|
||||
if (!isThinMember()) {
|
||||
Size += getRawSize();
|
||||
Data = StringRef(Start, Size);
|
||||
@ -119,13 +107,20 @@ Archive::Child::Child(const Archive *Parent, const char *Start)
|
||||
}
|
||||
|
||||
uint64_t Archive::Child::getSize() const {
|
||||
if (Parent->IsThin)
|
||||
return getHeader()->getSize();
|
||||
if (Parent->IsThin) {
|
||||
ErrorOr<uint32_t> Size = getHeader()->getSize();
|
||||
if (Size.getError())
|
||||
return 0;
|
||||
return Size.get();
|
||||
}
|
||||
return Data.size() - StartOfFile;
|
||||
}
|
||||
|
||||
uint64_t Archive::Child::getRawSize() const {
|
||||
return getHeader()->getSize();
|
||||
ErrorOr<uint32_t> Size = getHeader()->getSize();
|
||||
if (Size.getError())
|
||||
return 0;
|
||||
return Size.get();
|
||||
}
|
||||
|
||||
bool Archive::Child::isThinMember() const {
|
||||
|
@ -39,10 +39,3 @@
|
||||
# RUN: | FileCheck -check-prefix=m0337 %s
|
||||
|
||||
# m0337: subq $16, %rsp
|
||||
|
||||
# RUN: llvm-objdump -arch x86_64 -macho -disassemble \
|
||||
# RUN: %p/Inputs/malformed-machos/00000031.a \
|
||||
# RUN: | FileCheck -check-prefix=0031a %s
|
||||
|
||||
# 0031a: Archive
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user