[llvm] Use MapVector to fix lld thinLTO bep issue. (PR #117551)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 25 05:12:34 PST 2024
https://github.com/llvmssh created https://github.com/llvm/llvm-project/pull/117551
When the ModuleSymbolTable is generated, the binary consistency problem occurs due to the
unorder of the data structure when collecting asm symbols.
Use MapVector to fix lld thinLTO bep issue.
>From fa5890fa6394781b8bcdc53722c10799bbd0a47f Mon Sep 17 00:00:00 2001
From: "Author: shaosenhao" <shaosenhao at huawei.com>
Date: Thu, 21 Nov 2024 14:58:08 +0800
Subject: [PATCH] When the ModuleSymbolTable is generated, the binary
consistency problem occurs due to the unorder of the data structure when
collecting asm symbols. Use MapVector to fix lld thinLTO bep issue.
---
llvm/lib/Object/ModuleSymbolTable.cpp | 2 +-
llvm/lib/Object/RecordStreamer.h | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/Object/ModuleSymbolTable.cpp b/llvm/lib/Object/ModuleSymbolTable.cpp
index 54e654a0d121cb..dc8ba00d3c91c7 100644
--- a/llvm/lib/Object/ModuleSymbolTable.cpp
+++ b/llvm/lib/Object/ModuleSymbolTable.cpp
@@ -144,7 +144,7 @@ void ModuleSymbolTable::CollectAsmSymbols(
Streamer.flushSymverDirectives();
for (auto &KV : Streamer) {
- StringRef Key = KV.first();
+ StringRef Key = KV.first;
RecordStreamer::State Value = KV.second;
// FIXME: For now we just assume that all asm symbols are executable.
uint32_t Res = BasicSymbolRef::SF_Executable;
diff --git a/llvm/lib/Object/RecordStreamer.h b/llvm/lib/Object/RecordStreamer.h
index 70b41f270720b4..946578ef06d11e 100644
--- a/llvm/lib/Object/RecordStreamer.h
+++ b/llvm/lib/Object/RecordStreamer.h
@@ -14,6 +14,7 @@
#include "llvm/MC/MCDirectives.h"
#include "llvm/MC/MCStreamer.h"
#include "llvm/Support/SMLoc.h"
+#include "llvm/ADT/MapVector.h"
#include <vector>
namespace llvm {
@@ -28,11 +29,11 @@ class RecordStreamer : public MCStreamer {
private:
const Module &M;
- StringMap<State> Symbols;
+ MapVector<StringRef, State> Symbols;
// Map of aliases created by .symver directives, saved so we can update
// their symbol binding after parsing complete. This maps from each
// aliasee to its list of aliases.
- DenseMap<const MCSymbol *, std::vector<StringRef>> SymverAliasMap;
+ MapVector<const MCSymbol *, std::vector<StringRef>> SymverAliasMap;
/// Get the state recorded for the given symbol.
State getSymbolState(const MCSymbol *Sym);
@@ -70,7 +71,7 @@ class RecordStreamer : public MCStreamer {
void flushSymverDirectives();
// Symbols iterators
- using const_iterator = StringMap<State>::const_iterator;
+ using const_iterator = MapVector<StringRef, State>::const_iterator;
const_iterator begin();
const_iterator end();
More information about the llvm-commits
mailing list