summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2012-11-13 19:39:55 +0000
committerDaniel Dunbar <daniel@zuster.org>2012-11-13 19:39:55 +0000
commit38d2284eeb0c0675688233f14a3326632cb377c1 (patch)
treec64db6fa0f19a050488aab0bd9568eec330018d9 /llvm
parent8557850053c4a821eec2f06323648b0125bcc802 (diff)
downloadbcm5719-llvm-38d2284eeb0c0675688233f14a3326632cb377c1.tar.gz
bcm5719-llvm-38d2284eeb0c0675688233f14a3326632cb377c1.zip
llvm-nm: Make sort more stable when symbol names are equal.
llvm-svn: 167866
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/Object/coff-archive.test2
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp13
2 files changed, 13 insertions, 2 deletions
diff --git a/llvm/test/Object/coff-archive.test b/llvm/test/Object/coff-archive.test
index fc968bb944c..60f7a703c46 100644
--- a/llvm/test/Object/coff-archive.test
+++ b/llvm/test/Object/coff-archive.test
@@ -153,8 +153,8 @@ CHECKIDX: U ??_7type_info@@6B@
CHECKIDX: 00000000 R ??_C@_0BC@IHENMCGI@b?5cannot?5be?5zero?$CB?$AA@
CHECKIDX: w ??_Einvalid_argument@std@@UAEPAXI@Z
CHECKIDX: w ??_Elogic_error@std@@UAEPAXI@Z
-CHECKIDX: U ??_Ginvalid_argument@std@@UAEPAXI@Z
CHECKIDX: 00000000 T ??_Ginvalid_argument@std@@UAEPAXI@Z
+CHECKIDX: U ??_Ginvalid_argument@std@@UAEPAXI@Z
CHECKIDX: 00000000 T ??_Glogic_error@std@@UAEPAXI@Z
CHECKIDX: U ??_Glogic_error@std@@UAEPAXI@Z
CHECKIDX: 00000000 D ??_R0?AVexception@std@@@8
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index 153de952935..27efd74264d 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -150,6 +150,8 @@ namespace {
return true;
else if (a.Address == b.Address && a.Name < b.Name)
return true;
+ else if (a.Address == b.Address && a.Name == b.Name && a.Size < b.Size)
+ return true;
else
return false;
@@ -160,12 +162,21 @@ namespace {
return true;
else if (a.Size == b.Size && a.Name < b.Name)
return true;
+ else if (a.Size == b.Size && a.Name == b.Name && a.Address < b.Address)
+ return true;
else
return false;
}
static bool CompareSymbolName(const NMSymbol &a, const NMSymbol &b) {
- return a.Name < b.Name;
+ if (a.Name < b.Name)
+ return true;
+ else if (a.Name == b.Name && a.Size < b.Size)
+ return true;
+ else if (a.Name == b.Name && a.Size == b.Size && a.Address < b.Address)
+ return true;
+ else
+ return false;
}
StringRef CurrentFilename;
OpenPOWER on IntegriCloud