================
@@ -188,12 +220,32 @@ void ModuleSymbolTable::CollectAsmSymbols(
}
void ModuleSymbolTable::CollectAsmSymvers(
- const Module &M, function_ref<void(StringRef, StringRef)> AsmSymver) {
- initializeRecordStreamer(M, [&](RecordStreamer &Streamer) {
- for (auto &KV : Streamer.symverAliases())
- for (auto &Alias : KV.second)
- AsmSymver(KV.first->getName(), Alias);
- });
+ const Module &M, function_ref<void(StringRef, StringRef)> AsmSymver,
+ function_ref<void(const DiagnosticInfo &DI)> DiagHandler, StringRef CPU,
+ StringRef Features) {
+
+ MDTuple *SymversMD =
+ dyn_cast_if_present<MDTuple>(M.getModuleFlag("global-asm-symvers"));
+
+ if (SymversMD) {
+ for (const Metadata *MD : SymversMD->operands()) {
+ const MDTuple *SymverMD = cast<MDTuple>(MD);
+ StringRef Name = cast<MDString>(SymverMD->getOperand(0))->getString();
+ for (unsigned i = 1; i < SymverMD->getNumOperands(); ++i) {
+ AsmSymver(Name, cast<MDString>(SymverMD->getOperand(i))->getString());
+ }
+ }
+ return;
+ }
+
+ initializeRecordStreamer(
+ M, CPU, Features,
+ [&](RecordStreamer &Streamer) {
+ for (auto &KV : Streamer.symverAliases())
+ for (auto &Alias : KV.second)
----------------
ilovepi wrote:
nit: you can use destructuring here to slightly simplify. It's not as big a
win as earlier, but `Name`, `Aliases` is a bit more clear about what's what.
https://github.com/llvm/llvm-project/pull/174995
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits