llvm-project/lld/test/MachO/section-headers.s
Jez Ng d32e32500f [lld-macho] Fix segment filesize calculation
The previous approach of adding up the file sizes of the
component sections ignored the fact that the sections did not have to be
contiguous in the file. As such, it was underestimating the true size.

I discovered this issue because `codesign` checks whether `__LINKEDIT`
extends to the end of the file. Since we were underestimating segment
sizes, this check failed.

Reviewed By: #lld-macho, compnerd

Differential Revision: https://reviews.llvm.org/D84574
2020-07-28 10:02:19 -07:00

57 lines
1.3 KiB
ArmAsm

# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
# RUN: lld -flavor darwinnew -o %t %t.o
# RUN: llvm-readobj --section-headers --macho-segment %t | FileCheck %s
# CHECK: Name: __text
# CHECK-NEXT: Segment: __TEXT
# CHECK-NOT: }
# CHECK: Alignment: 1
# CHECK-NOT: }
# CHECK: Type: Regular (0x0)
# CHECK-NEXT: Attributes [ (0x800004)
# CHECK-NEXT: PureInstructions (0x800000)
# CHECK-NEXT: SomeInstructions (0x4)
# CHECK-NEXT: ]
# CHECK: Name: __cstring
# CHECK-NEXT: Segment: __TEXT
# CHECK-NOT: }
# CHECK: Alignment: 2
# CHECK-NOT: }
# CHECK: Type: CStringLiterals (0x2)
# CHECK-NEXT: Attributes [ (0x0)
# CHECK-NEXT: ]
# CHECK: Name: maxlen_16ch_name
# CHECK-NEXT: Segment: __TEXT
# CHECK-NEXT: Address:
# CHECK-NEXT: Size: [[#%x, LAST_SEC_SIZE:]]
# CHECK-NEXT: Offset: [[#%u, LAST_SEC_OFF:]]
# CHECK-NEXT: Alignment: 3
# CHECK-NOT: }
# CHECK: Type: Regular (0x0)
# CHECK-LABEL: Segment {
# CHECK: Name: __TEXT
# CHECK-NEXT: Size:
# CHECK-NEXT: vmaddr:
# CHECK-NEXT: vmsize:
# CHECK-NEXT: fileoff: 0
# CHECK-NEXT: filesize: [[#%u, LAST_SEC_SIZE + LAST_SEC_OFF]]
.text
.align 1
.global _main
_main:
mov $0, %rax
ret
.section __TEXT,__cstring
.align 2
str:
.asciz "Hello world!\n"
.section __TEXT,maxlen_16ch_name
.align 3