summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2011-05-13 23:11:30 +0000
committerJim Grosbach <grosbach@apple.com>2011-05-13 23:11:30 +0000
commitf6b1846f39157c13618f70840e5ac0c355907030 (patch)
treef1de8040a8d79b8ae18dff2072ae1ca826bc5407 /llvm/lib/ExecutionEngine
parentbe7850dd8aa4224f7f7883c922a07eeee9001a49 (diff)
downloadbcm5719-llvm-f6b1846f39157c13618f70840e5ac0c355907030.tar.gz
bcm5719-llvm-f6b1846f39157c13618f70840e5ac0c355907030.zip
Be a bit more permissive about symbols we don't understand. Just skip them
rather than throwing an error. llvm-svn: 131322
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
index 2cfe87f37b0..eda4cbbad52 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
@@ -296,11 +296,11 @@ loadSegment32(const MachOObject *Obj,
// FIXME: Check the symbol type and flags.
if (STE->Type != 0xF) // external, defined in this section.
- return Error("unexpected symbol type!");
+ continue;
// Flags == 0x8 marks a thumb function for ARM, which is fine as it
// doesn't require any special handling here.
if (STE->Flags != 0x0 && STE->Flags != 0x8)
- return Error("unexpected symbol type!");
+ continue;
// Remember the symbol.
Symbols.push_back(SymbolEntry(STE->Value, Name));
@@ -311,6 +311,10 @@ loadSegment32(const MachOObject *Obj,
// Sort the symbols by address, just in case they didn't come in that way.
array_pod_sort(Symbols.begin(), Symbols.end());
+ // If there weren't any functions (odd, but just in case...)
+ if (!Symbols.size())
+ continue;
+
// Extract the function data.
uint8_t *Base = (uint8_t*)Obj->getData(SegmentLC->FileOffset,
SegmentLC->FileSize).data();
@@ -431,9 +435,9 @@ loadSegment64(const MachOObject *Obj,
// FIXME: Check the symbol type and flags.
if (STE->Type != 0xF) // external, defined in this section.
- return Error("unexpected symbol type!");
+ continue;
if (STE->Flags != 0x0)
- return Error("unexpected symbol type!");
+ continue;
// Remember the symbol.
Symbols.push_back(SymbolEntry(STE->Value, Name));
@@ -444,6 +448,10 @@ loadSegment64(const MachOObject *Obj,
// Sort the symbols by address, just in case they didn't come in that way.
array_pod_sort(Symbols.begin(), Symbols.end());
+ // If there weren't any functions (odd, but just in case...)
+ if (!Symbols.size())
+ continue;
+
// Extract the function data.
uint8_t *Base = (uint8_t*)Obj->getData(Segment64LC->FileOffset,
Segment64LC->FileSize).data();
OpenPOWER on IntegriCloud