summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-nm
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-07-06 18:48:47 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-07-06 18:48:47 +0000
commit63d10d6767f71bca93f288ec9949894bb6cff1a2 (patch)
tree2eaeed5d47498eaa1f5ff5b8123a157bece5d000 /llvm/tools/llvm-nm
parentfc0f93832b12677d2e7356dea93e9990dc79f9f5 (diff)
downloadbcm5719-llvm-63d10d6767f71bca93f288ec9949894bb6cff1a2.tar.gz
bcm5719-llvm-63d10d6767f71bca93f288ec9949894bb6cff1a2.zip
Reduce code duplication. NFC.
llvm-svn: 241484
Diffstat (limited to 'llvm/tools/llvm-nm')
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp58
1 files changed, 17 insertions, 41 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index 4edb4efa8d0..961754ccefa 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -185,60 +185,31 @@ struct NMSymbol {
}
static bool compareSymbolAddress(const NMSymbol &A, const NMSymbol &B) {
- if (!ReverseSort) {
- if (A.Address < B.Address)
- return true;
- if (A.Address == B.Address && A.Name < B.Name)
- return true;
- if (A.Address == B.Address && A.Name == B.Name && A.Size < B.Size)
- return true;
- return false;
- }
-
- if (A.Address > B.Address)
+ if (A.Address < B.Address)
return true;
- if (A.Address == B.Address && A.Name > B.Name)
+ if (A.Address == B.Address && A.Name < B.Name)
return true;
- if (A.Address == B.Address && A.Name == B.Name && A.Size > B.Size)
+ if (A.Address == B.Address && A.Name == B.Name && A.Size < B.Size)
return true;
return false;
}
static bool compareSymbolSize(const NMSymbol &A, const NMSymbol &B) {
- if (!ReverseSort) {
- if (A.Size < B.Size)
- return true;
- if (A.Size == B.Size && A.Name < B.Name)
- return true;
- if (A.Size == B.Size && A.Name == B.Name && A.Address < B.Address)
- return true;
- return false;
- }
-
- if (A.Size > B.Size)
+ if (A.Size < B.Size)
return true;
- if (A.Size == B.Size && A.Name > B.Name)
+ if (A.Size == B.Size && A.Name < B.Name)
return true;
- if (A.Size == B.Size && A.Name == B.Name && A.Address > B.Address)
+ if (A.Size == B.Size && A.Name == B.Name && A.Address < B.Address)
return true;
return false;
}
static bool compareSymbolName(const NMSymbol &A, const NMSymbol &B) {
- if (!ReverseSort) {
- if (A.Name < B.Name)
- return true;
- if (A.Name == B.Name && A.Size < B.Size)
- return true;
- if (A.Name == B.Name && A.Size == B.Size && A.Address < B.Address)
- return true;
- return false;
- }
- if (A.Name > B.Name)
+ if (A.Name < B.Name)
return true;
- if (A.Name == B.Name && A.Size > B.Size)
+ if (A.Name == B.Name && A.Size < B.Size)
return true;
- if (A.Name == B.Name && A.Size == B.Size && A.Address > B.Address)
+ if (A.Name == B.Name && A.Size == B.Size && A.Address < B.Address)
return true;
return false;
}
@@ -526,12 +497,17 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
std::string ArchiveName,
std::string ArchitectureName) {
if (!NoSort) {
+ std::function<bool(const NMSymbol &, const NMSymbol &)> Cmp;
if (NumericSort)
- std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolAddress);
+ Cmp = compareSymbolAddress;
else if (SizeSort)
- std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolSize);
+ Cmp = compareSymbolSize;
else
- std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolName);
+ Cmp = compareSymbolName;
+
+ if (ReverseSort)
+ Cmp = [=](const NMSymbol &A, const NMSymbol &B) { return !Cmp(A, B); };
+ std::sort(SymbolList.begin(), SymbolList.end(), Cmp);
}
if (!PrintFileName) {
OpenPOWER on IntegriCloud