diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp @@ -517,6 +517,17 @@ // I am not sure on If this is going to hold as an invariant. Revisit. if (!Name) return Name.takeError(); + + // Allocate uninitialized common blocks. + if (SymRef.isCommon()) { + // st_value holds alignment constraints for SHN_COMMON symbols + Symbol &S = + G->addCommonSymbol(*Name, Scope::Default, getCommonSection(), 0, + SymRef.st_size, SymRef.getValue(), false); + JITSymbolTable[SymbolIndex] = &S; + continue; + } + // TODO: weak and hidden if (SymRef.isExternal()) bindings = {Linkage::Strong, Scope::Default}; @@ -558,18 +569,12 @@ JITSymbolTable[SymbolIndex] = &S; } - // } // TODO: The following has to be implmented. // leaving commented out to save time for future patchs /* G->addAbsoluteSymbol(*Name, SymRef.getValue(), SymRef.st_size, Linkage::Strong, Scope::Default, false); - - if(SymRef.isCommon()) { - G->addCommonSymbol(*Name, Scope::Default, getCommonSection(), 0, 0, - SymRef.getValue(), false); - } - */ + */ } } return Error::success();