diff options
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp | 9 | ||||
-rw-r--r-- | lld/test/pecoff/Inputs/alignment.obj.yaml | 20 | ||||
-rw-r--r-- | lld/test/pecoff/alignment.test | 7 |
3 files changed, 30 insertions, 6 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp index 59d429fd727..a9c1d31e812 100644 --- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp @@ -678,10 +678,6 @@ std::error_code FileCOFF::AtomizeDefinedSymbolsInSection( _symbolAtom[*si] = atom; _definedAtomLocations[section][(*si)->Value].push_back(atom); } - - // Finally, set alignment to the first atom so that the section contents - // will be aligned as specified by the object section header. - _definedAtomLocations[section][0][0]->setAlignment(getAlignment(section)); return std::error_code(); } @@ -698,6 +694,11 @@ std::error_code FileCOFF::AtomizeDefinedSymbols( AtomizeDefinedSymbolsInSection(section, symbols, atoms)) return ec; + // Set alignment to the first atom so that the section contents + // will be aligned as specified by the object section header. + if (atoms.size() > 0) + atoms[0]->setAlignment(getAlignment(section)); + // Connect atoms with layout-before/layout-after edges. connectAtomsWithLayoutEdge(atoms); diff --git a/lld/test/pecoff/Inputs/alignment.obj.yaml b/lld/test/pecoff/Inputs/alignment.obj.yaml index 2cb62e6abc3..0d4da1ae328 100644 --- a/lld/test/pecoff/Inputs/alignment.obj.yaml +++ b/lld/test/pecoff/Inputs/alignment.obj.yaml @@ -23,6 +23,14 @@ sections: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] Alignment: 0 SectionData: 22 + - Name: .bss$1 + Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] + Alignment: 16 + SectionData: 0000 + - Name: .bss$2 + Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] + Alignment: 16 + SectionData: 0000 symbols: - Name: .text Value: 0 @@ -60,4 +68,16 @@ symbols: SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_FUNCTION StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: .bss$1 + Value: 0 + SectionNumber: 6 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .bss$2 + Value: 0 + SectionNumber: 7 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC ... diff --git a/lld/test/pecoff/alignment.test b/lld/test/pecoff/alignment.test index 31f3acf09dd..f3d8d0661f0 100644 --- a/lld/test/pecoff/alignment.test +++ b/lld/test/pecoff/alignment.test @@ -1,9 +1,12 @@ # RUN: yaml2obj %p/Inputs/alignment.obj.yaml > %t.obj # -# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /entry:start \ -# RUN: -- %t.obj +# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \ +# RUN: /entry:start /opt:noref -- %t.obj # RUN: llvm-readobj -sections %t.exe | FileCheck %s +CHECK: Name: .bss (2E 62 73 73 00 00 00 00) +CHECK: RawDataSize: 18 + CHECK: Name: .data (2E 64 61 74 61 00 00 00) CHECK-NEXT: VirtualSize: 0x6 |