[llvm] r179848 - Don't read one command past the end.
Rafael Espindola
rafael.espindola at gmail.com
Fri Apr 19 04:36:47 PDT 2013
Author: rafael
Date: Fri Apr 19 06:36:47 2013
New Revision: 179848
URL: http://llvm.org/viewvc/llvm-project?rev=179848&view=rev
Log:
Don't read one command past the end.
Thanks to Evgeniy Stepanov for reporting this.
It might be a good idea to add a command iterator abstraction to MachO.h, but
this fixes the bug for now.
Added:
llvm/trunk/test/Object/ARM/objdump-thumb.test
llvm/trunk/test/Object/Inputs/macho-text.thumb
Modified:
llvm/trunk/lib/Object/MachOObjectFile.cpp
llvm/trunk/tools/llvm-objdump/MachODump.cpp
Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=179848&r1=179847&r2=179848&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Fri Apr 19 06:36:47 2013
@@ -405,7 +405,7 @@ MachOObjectFile::MachOObjectFile(MemoryB
macho::LCT_Segment64 : macho::LCT_Segment;
MachOObjectFile::LoadCommandInfo Load = getFirstLoadCommandInfo();
- for (unsigned I = 0; I < LoadCommandCount; ++I) {
+ for (unsigned I = 0; ; ++I) {
if (Load.C.Type == macho::LCT_Symtab) {
assert(!SymtabLoadCmd && "Multiple symbol tables");
SymtabLoadCmd = Load.Ptr;
@@ -418,7 +418,11 @@ MachOObjectFile::MachOObjectFile(MemoryB
Sections.push_back(reinterpret_cast<const char*>(Sec));
}
}
- Load = getNextLoadCommandInfo(Load);
+
+ if (I == LoadCommandCount - 1)
+ break;
+ else
+ Load = getNextLoadCommandInfo(Load);
}
}
Added: llvm/trunk/test/Object/ARM/objdump-thumb.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/ARM/objdump-thumb.test?rev=179848&view=auto
==============================================================================
--- llvm/trunk/test/Object/ARM/objdump-thumb.test (added)
+++ llvm/trunk/test/Object/ARM/objdump-thumb.test Fri Apr 19 06:36:47 2013
@@ -0,0 +1,4 @@
+RUN: llvm-objdump -d -macho -triple=thumbv7-apple-ios \
+RUN: %p/../Inputs/macho-text.thumb | FileCheck %s
+
+CHECK: 0: 00 bf nop
Added: llvm/trunk/test/Object/Inputs/macho-text.thumb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/Inputs/macho-text.thumb?rev=179848&view=auto
==============================================================================
Binary files llvm/trunk/test/Object/Inputs/macho-text.thumb (added) and llvm/trunk/test/Object/Inputs/macho-text.thumb Fri Apr 19 06:36:47 2013 differ
Modified: llvm/trunk/tools/llvm-objdump/MachODump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/MachODump.cpp?rev=179848&r1=179847&r2=179848&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/MachODump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/MachODump.cpp Fri Apr 19 06:36:47 2013
@@ -205,7 +205,7 @@ getSectionsAndSymbols(const macho::Heade
MachOObjectFile::LoadCommandInfo Command =
MachOObj->getFirstLoadCommandInfo();
- for (unsigned i = 0; i != Header.NumLoadCommands; ++i) {
+ for (unsigned i = 0; ; ++i) {
if (Command.C.Type == macho::LCT_FunctionStarts) {
// We found a function starts segment, parse the addresses for later
// consumption.
@@ -214,7 +214,11 @@ getSectionsAndSymbols(const macho::Heade
MachOObj->ReadULEB128s(LLC.DataOffset, FoundFns);
}
- Command = MachOObj->getNextLoadCommandInfo(Command);
+
+ if (i == Header.NumLoadCommands - 1)
+ break;
+ else
+ Command = MachOObj->getNextLoadCommandInfo(Command);
}
}
More information about the llvm-commits
mailing list