diff --git a/lld/MachO/InputSection.h b/lld/MachO/InputSection.h --- a/lld/MachO/InputSection.h +++ b/lld/MachO/InputSection.h @@ -36,7 +36,8 @@ }; inline bool isZeroFill(uint8_t flags) { - return (flags & llvm::MachO::SECTION_TYPE) == llvm::MachO::S_ZEROFILL; + return llvm::MachO::isVirtualSection(flags & llvm::MachO::SECTION_TYPE); +} } class InputSection { diff --git a/lld/test/MachO/bss.s b/lld/test/MachO/bss.s --- a/lld/test/MachO/bss.s +++ b/lld/test/MachO/bss.s @@ -26,7 +26,7 @@ # CHECK-NEXT: Name: __bss # CHECK-NEXT: Segment: __DATA # CHECK-NEXT: Address: -# CHECK-NEXT: Size: 0x4 +# CHECK-NEXT: Size: 0x8 # CHECK-NEXT: Offset: 0 # CHECK-NEXT: Alignment: 0 # CHECK-NEXT: RelocationOffset: 0x0 @@ -38,10 +38,26 @@ # CHECK-NEXT: Reserved2: 0x0 # CHECK-NEXT: Reserved3: 0x0 +# CHECK: Index: 3 +# CHECK-NEXT: Name: __thread_bss +# CHECK-NEXT: Segment: __DATA +# CHECK-NEXT: Address: 0x100001010 +# CHECK-NEXT: Size: 0x4 +# CHECK-NEXT: Offset: 0 +# CHECK-NEXT: Alignment: 0 +# CHECK-NEXT: RelocationOffset: 0x0 +# CHECK-NEXT: RelocationCount: 0 +# CHECK-NEXT: Type: ThreadLocalZerofill (0x12) +# CHECK-NEXT: Attributes [ (0x0) +# CHECK-NEXT: ] +# CHECK-NEXT: Reserved1: 0x0 +# CHECK-NEXT: Reserved2: 0x0 +# CHECK-NEXT: Reserved3: 0x0 + # CHECK: Name: __DATA # CHECK-NEXT: Size: # CHECK-NEXT: vmaddr: -# CHECK-NEXT: vmsize: 0xC +# CHECK-NEXT: vmsize: 0x14 # CHECK-NEXT: fileoff: # CHECK-NEXT: filesize: 8 @@ -55,5 +71,8 @@ .bss .zero 4 +.tbss _foo, 4 +.zero 4 + .data .quad 0x1234