OSDN Git Service

[llvm-objdump] properly use c_str() with format("%s"). Improve getLibraryShortNameBy...
authorNick Kledzik <kledzik@apple.com>
Wed, 17 Sep 2014 00:25:22 +0000 (00:25 +0000)
committerNick Kledzik <kledzik@apple.com>
Wed, 17 Sep 2014 00:25:22 +0000 (00:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217930 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/MachOObjectFile.cpp
test/tools/llvm-objdump/macho-bind.test
test/tools/llvm-objdump/macho-lazy-bind.test
tools/llvm-objdump/MachODump.cpp

index bb973b4..94fa94c 100644 (file)
@@ -1184,27 +1184,22 @@ std::error_code MachOObjectFile::getLibraryShortNameByIndex(unsigned Index,
   if (Index >= Libraries.size())
     return object_error::parse_failed;
 
-  MachO::dylib_command D =
-    getStruct<MachO::dylib_command>(this, Libraries[Index]);
-  if (D.dylib.name >= D.cmdsize)
-    return object_error::parse_failed;
-
   // If the cache of LibrariesShortNames is not built up do that first for
   // all the Libraries.
   if (LibrariesShortNames.size() == 0) {
     for (unsigned i = 0; i < Libraries.size(); i++) {
       MachO::dylib_command D =
         getStruct<MachO::dylib_command>(this, Libraries[i]);
-      if (D.dylib.name >= D.cmdsize) {
-        LibrariesShortNames.push_back(StringRef());
-        continue;
-      }
+      if (D.dylib.name >= D.cmdsize)
+        return object_error::parse_failed;
       const char *P = (const char *)(Libraries[i]) + D.dylib.name;
       StringRef Name = StringRef(P);
+      if (D.dylib.name+Name.size() >= D.cmdsize)
+        return object_error::parse_failed;
       StringRef Suffix;
       bool isFramework;
       StringRef shortName = guessLibraryShortName(Name, isFramework, Suffix);
-      if (shortName == StringRef())
+      if (shortName.empty())
         LibrariesShortNames.push_back(Name);
       else
         LibrariesShortNames.push_back(shortName);
index 8865a9e..1994465 100644 (file)
@@ -6,6 +6,6 @@
 # CHECK:__DATA   __data             0x00001028  pointer  0        flat-namespace      _any
 # CHECK:__DATA   __data             0x00001020  pointer  0        main-executable     _fromApp
 # CHECK:__DATA   __data             0x00001018  pointer  0        this-image          _myfunc
-# CHECK:__DATA   __data             0x00001000  pointer  0        libfoo.dylib        _foo
-# CHECK:__DATA   __data             0x00001008  pointer  0        libbar.dylib        _bar
-# CHECK:__DATA   __data             0x00001010  pointer  0        libSystem.B.dylib   _malloc
+# CHECK:__DATA   __data             0x00001000  pointer  0        libfoo              _foo
+# CHECK:__DATA   __data             0x00001008  pointer  0        libbar              _bar
+# CHECK:__DATA   __data             0x00001010  pointer  0        libSystem           _malloc
index ffb4e5d..6f9ef22 100644 (file)
@@ -3,6 +3,6 @@
 # RUN: && FileCheck %s < %t || cat %t
 
 
-# CHECK: __DATA   __la_symbol_ptr    0x100001010   libfoo.dylib        _foo
-# CHECK: __DATA   __la_symbol_ptr    0x100001018   libbar.dylib        _bar
-# CHECK: __DATA   __la_symbol_ptr    0x100001020   libSystem.B.dylib   _malloc
+# CHECK: __DATA   __la_symbol_ptr    0x100001010   libfoo          _foo
+# CHECK: __DATA   __la_symbol_ptr    0x100001018   libbar          _bar
+# CHECK: __DATA   __la_symbol_ptr    0x100001020   libSystem       _malloc
index 602e800..378eacb 100644 (file)
@@ -2482,7 +2482,7 @@ void llvm::printMachOBindTable(const object::MachOObjectFile *Obj) {
                      Address,
                      Entry.typeName().str().c_str(),
                      Entry.addend(),
-                     ordinalName(Obj, Entry.ordinal()))
+                     ordinalName(Obj, Entry.ordinal()).str().c_str())
            << Entry.symbolName();
     if (Entry.flags() & MachO::BIND_SYMBOL_FLAGS_WEAK_IMPORT)
       outs() << " (weak_import)\n";
@@ -2514,7 +2514,7 @@ void llvm::printMachOLazyBindTable(const object::MachOObjectFile *Obj) {
                      SegmentName.str().c_str(),
                      SectionName.str().c_str(),
                      Address,
-                     ordinalName(Obj, Entry.ordinal()))
+                     ordinalName(Obj, Entry.ordinal()).str().c_str())
            << Entry.symbolName() << "\n";
   }
 }