brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · b167813 Raw
74 lines · plain
1# REQUIRES: x86, aarch642# RUN: rm -rf %t; mkdir -p %t3# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/x86_64.o4# RUN: llvm-mc -filetype=obj -triple=arm64_32-apple-watchos %s -o %t/arm64-32.o5# RUN: %lld -o %t/x86_64 %t/x86_64.o6# RUN: %lld-watchos -o %t/arm64_32 %t/arm64-32.o7 8# RUN: llvm-readobj --macho-segment %t/x86_64 > %t/x86_64.out9# RUN: echo "Total file size" >> %t/x86_64.out10# RUN: wc -c %t/x86_64 >> %t/x86_64.out11# RUN: FileCheck %s -DSUFFIX=_64 -DPAGEZERO_SIZE=0x100000000 -DTEXT_ADDR=0x100000000 < %t/x86_64.out12 13# RUN: llvm-readobj --macho-segment %t/arm64_32 > %t/arm64-32.out14# RUN: echo "Total file size" >> %t/arm64-32.out15# RUN: wc -c %t/arm64_32 >> %t/arm64-32.out16# RUN: FileCheck %s -DSUFFIX= -DPAGEZERO_SIZE=0x4000 -DTEXT_ADDR=0x4000 < %t/arm64-32.out17 18## These two segments must always be present at the start of an executable.19# CHECK-NOT:  Segment {20# CHECK:      Segment {21# CHECK-NEXT:   Cmd: LC_SEGMENT[[SUFFIX]]{{$}}22# CHECK-NEXT:   Name: __PAGEZERO23# CHECK-NEXT:   Size:24# CHECK-NEXT:   vmaddr: 0x025# CHECK-NEXT:   vmsize: [[PAGEZERO_SIZE]]26# CHECK-NEXT:   fileoff: 027# CHECK-NEXT:   filesize: 028## The kernel won't execute a binary with the wrong protections for __PAGEZERO.29# CHECK-NEXT:   maxprot: ---30# CHECK-NEXT:   initprot: ---31# CHECK-NEXT:   nsects: 032# CHECK-NEXT:   flags: 0x033# CHECK-NEXT: }34# CHECK-NEXT: Segment {35# CHECK-NEXT:   Cmd: LC_SEGMENT[[SUFFIX]]{{$}}36# CHECK-NEXT:   Name: __TEXT37# CHECK-NEXT:   Size:38# CHECK-NEXT:   vmaddr: [[TEXT_ADDR]]39# CHECK-NEXT:   vmsize:40## dyld3 assumes that the __TEXT segment starts from the file header41# CHECK-NEXT:   fileoff: 042# CHECK-NEXT:   filesize:43# CHECK-NEXT:   maxprot: r-x44# CHECK-NEXT:   initprot: r-x45# CHECK-NEXT:   nsects: 146# CHECK-NEXT:   flags: 0x047# CHECK-NEXT: }48 49## Check that we handle max-length names correctly.50# CHECK:      Cmd: LC_SEGMENT[[SUFFIX]]{{$}}51# CHECK-NEXT: Name: maxlen_16ch_name52 53## This segment must always be present at the end of an executable, and cover54## its last byte.55# CHECK:      Name: __LINKEDIT56# CHECK-NEXT: Size:57# CHECK-NEXT: vmaddr:58# CHECK-NEXT: vmsize:59# CHECK-NEXT: fileoff: [[#%u, LINKEDIT_OFF:]]60# CHECK-NEXT: filesize: [[#%u, LINKEDIT_SIZE:]]61# CHECK-NEXT: maxprot: r--62# CHECK-NEXT: initprot: r--63# CHECK-NOT:  Cmd: LC_SEGMENT[[SUFFIX]]{{$}}64 65# CHECK-LABEL: Total file size66# CHECK-NEXT:  [[#%u, LINKEDIT_OFF + LINKEDIT_SIZE]]67 68.text69.global _main70_main:71  ret72 73.section maxlen_16ch_name,foo74