diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index ee2d87c1d100..5335cc5786dc 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -556,17 +556,14 @@ void SymbolTableSection::writeGlobalSymbols(uint8_t *&Buf) { ESym->setBindingAndType(Binding, InputSym.getType()); ESym->st_size = InputSym.st_size; ESym->setVisibility(Visibility); - if (InputSym.isAbsolute()) { - ESym->st_shndx = SHN_ABS; - ESym->st_value = InputSym.st_value; - } + ESym->st_value = getSymVA(EBody, BssSec); if (Section) Out = Section->getOutputSection(); - ESym->st_value = getSymVA(EBody, BssSec); - - if (Out) + if (InputSym.isAbsolute()) + ESym->st_shndx = SHN_ABS; + else if (Out) ESym->st_shndx = Out->getSectionIndex(); } if (!StrTabSec.isDynamic())