aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/SymbolSize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Object/SymbolSize.cpp')
-rw-r--r--llvm/lib/Object/SymbolSize.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/Object/SymbolSize.cpp b/llvm/lib/Object/SymbolSize.cpp
index d133266..121bf1b 100644
--- a/llvm/lib/Object/SymbolSize.cpp
+++ b/llvm/lib/Object/SymbolSize.cpp
@@ -28,6 +28,8 @@ static int compareAddress(const SymEntry *A, const SymEntry *B) {
return A->Address - B->Address;
if (A->Section < B->Section)
return -1;
+ if (A->Section == B->Section)
+ return 0;
return 1;
}
@@ -73,7 +75,13 @@ llvm::object::computeSymbolSizes(const ObjectFile &O) {
auto &P = Addresses[I];
if (P.I == O.symbol_end())
continue;
- uint64_t Size = Addresses[I + 1].Address - P.Address;
+
+ // If multiple symbol have the same address, give both the same size.
+ unsigned NextI = I + 1;
+ while (NextI < N && Addresses[NextI].Address == P.Address)
+ ++NextI;
+
+ uint64_t Size = Addresses[NextI].Address - P.Address;
P.Address = Size;
}