[llvm-commits] [llvm] r131322 - /llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp

Jim Grosbach grosbach at apple.com
Fri May 13 16:11:30 PDT 2011


Author: grosbach
Date: Fri May 13 18:11:30 2011
New Revision: 131322

URL: http://llvm.org/viewvc/llvm-project?rev=131322&view=rev
Log:
Be a bit more permissive about symbols we don't understand. Just skip them
rather than throwing an error.

Modified:
    llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp

Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp?rev=131322&r1=131321&r2=131322&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp Fri May 13 18:11:30 2011
@@ -296,11 +296,11 @@
 
       // 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 @@
     // 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 @@
 
       // 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 @@
     // 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();





More information about the llvm-commits mailing list