diff options
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r-- | llvm/lib/IR/Globals.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp index 11d33e2..0731fcb 100644 --- a/llvm/lib/IR/Globals.cpp +++ b/llvm/lib/IR/Globals.cpp @@ -289,11 +289,28 @@ void GlobalObject::setSection(StringRef S) { } void GlobalObject::setSectionPrefix(StringRef Prefix) { + if (Prefix.empty()) { + setMetadata(LLVMContext::MD_section_prefix, nullptr); + return; + } MDBuilder MDB(getContext()); setMetadata(LLVMContext::MD_section_prefix, MDB.createGlobalObjectSectionPrefix(Prefix)); } +bool GlobalObject::updateSectionPrefix(StringRef Prefix) { + auto MD = getMetadata(LLVMContext::MD_section_prefix); + StringRef ExistingPrefix; // Empty by default. + if (MD != nullptr) + ExistingPrefix = cast<MDString>(MD->getOperand(1))->getString(); + + if (ExistingPrefix != Prefix) { + setSectionPrefix(Prefix); + return true; + } + return false; +} + std::optional<StringRef> GlobalObject::getSectionPrefix() const { if (MDNode *MD = getMetadata(LLVMContext::MD_section_prefix)) { [[maybe_unused]] StringRef MDName = |