[flang-commits] [flang] [Flang] mark safe external globals as dso_local (PR #189709)
Jason Van Beusekom via flang-commits
flang-commits at lists.llvm.org
Mon Apr 6 14:08:48 PDT 2026
================
@@ -197,6 +197,38 @@ llvm::StringRef fir::getCommandline(mlir::ModuleOp mod) {
return {};
}
+static constexpr const char *relocationModelName = "fir.relocation_model";
+
+void fir::setRelocationModel(mlir::ModuleOp mod, llvm::Reloc::Model rm) {
+ auto *ctx = mod.getContext();
+ mod->setAttr(relocationModelName,
+ mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 32),
+ static_cast<unsigned>(rm)));
+}
+
+llvm::Reloc::Model fir::getRelocationModel(mlir::ModuleOp mod) {
+ if (auto attr = mod->getAttrOfType<mlir::IntegerAttr>(relocationModelName)) {
+ auto val = attr.getInt();
+ if (val >= llvm::Reloc::Static && val <= llvm::Reloc::ROPI_RWPI)
+ return static_cast<llvm::Reloc::Model>(val);
+ }
+ return llvm::Reloc::PIC_;
----------------
Jason-Van-Beusekom wrote:
Erroring out is not a valid option in the current implementation, as the relocation model is set in bridge.cpp so mlir and fir direct tests / compilations fail:
```bash
Flang :: Fir/CUDA/cuda-code-gen.mlir
Flang :: Fir/CUDA/cuda-compiler-generated-names.mlir
Flang :: Fir/Todo/global_len.fir
Flang :: Fir/box_addr-codegen-in-global.fir
Flang :: Fir/boxchar.fir
Flang :: Fir/convert-and-fold-insert-on-range.fir
Flang :: Fir/convert-to-llvm.fir
Flang :: Fir/global-attributes.fir
Flang :: Fir/global.fir
Flang :: Fir/omp-declare-target-data.fir
Flang :: Fir/polymorphic.fir
Flang :: Fir/rebox-global.fir
Flang :: Transforms/debug-module-2.fir
```
I chose PIC as it is the most safe option as PIC means we do not set `dso_local`, and assuming PIC is the conservative choice.
It is also the default in: `flang/include/flang/Frontend/CodeGenOptions.def`:
```
EUM_CODEGENOPT(RelocationModel, llvm::Reloc::Model, 3, llvm::Reloc::PIC_) ///< Name of the relocation model to use.
```
https://github.com/llvm/llvm-project/pull/189709
More information about the flang-commits
mailing list