[llvm-dev] Create the GlobalVariable which have extern in one header file
Tim Northover via llvm-dev
llvm-dev at lists.llvm.org
Thu Feb 21 21:02:34 PST 2019
On Thu, 21 Feb 2019 at 18:42, Mustakimur Khandaker via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> GlobalVariable *gvar_data = new GlobalVariable(
> M, blockItems->getType(), true, GlobalValue::CommonLinkage,
> blockItems, "DATA_TABLE");
> gvar_data->setAlignment(16);
> gvar_data->setSection("data_section");
> gvar_data->addAttribute(llvm::Attribute::OptimizeNone);
>
> I am not sure if I am using the correct Linkage or not.
> The pass has failed to complete it. Here is the runtime fault. Any guess what I am doing incorrect?
As you've guessed, it's the linkage.
"common" is the name for the C situation where multiple source files
simply declare "int a;" with nothing else specified. The names get
merged, and the variable gets zero-initialized by default. A "real"
definition (like you're trying to provide) would take precedence over
this and specify the actual data.
You almost certainly want GlobalValue::ExternalLinkage for a
bog-standard global variable.
Cheers.
Tim.
More information about the llvm-dev
mailing list