diff options
Diffstat (limited to 'llvm/lib/Object/SymbolSize.cpp')
-rw-r--r-- | llvm/lib/Object/SymbolSize.cpp | 10 |
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; } |