74 lines · plain
1# REQUIRES: aarch642 3## Old versions of Android (Android 11 & 12) have very strict parsing logic on4## the layout of the ELF note. This test ensures that backwards compatibility is5## maintained, i.e. new versions of the linker will still produce binaries that6## can be run on these versions of Android.7 8# RUN: llvm-mc --filetype=obj -triple=aarch64-linux-android %s -o %t.o9# RUN: ld.lld -shared --android-memtag-mode=async --android-memtag-heap %t.o -o %t10# RUN: llvm-readelf --memtag %t | FileCheck %s --check-prefixes=CHECK,HEAP,NOSTACK,ASYNC11 12# RUN: ld.lld -shared --android-memtag-mode=sync --android-memtag-heap %t.o -o %t13# RUN: llvm-readelf --memtag %t | FileCheck %s --check-prefixes=CHECK,HEAP,NOSTACK,SYNC14 15# RUN: ld.lld -shared --android-memtag-mode=async --android-memtag-stack %t.o -o %t16# RUN: llvm-readelf --memtag %t | FileCheck %s --check-prefixes=CHECK,NOHEAP,STACK,ASYNC17 18# RUN: ld.lld -shared --android-memtag-mode=sync --android-memtag-stack %t.o -o %t19# RUN: llvm-readelf --memtag %t | FileCheck %s --check-prefixes=CHECK,NOHEAP,STACK,SYNC20 21# RUN: ld.lld -shared --android-memtag-mode=async --android-memtag-heap \22# RUN: --android-memtag-stack %t.o -o %t23# RUN: llvm-readelf --memtag %t | FileCheck %s --check-prefixes=CHECK,HEAP,STACK,ASYNC24 25# RUN: ld.lld -shared --android-memtag-mode=sync --android-memtag-heap \26# RUN: --android-memtag-stack %t.o -o %t27# RUN: llvm-readelf --memtag %t | FileCheck %s --check-prefixes=CHECK,HEAP,STACK,SYNC28 29# RUN: ld.lld -shared --android-memtag-heap %t.o -o %t 2>&1 | \30# RUN: FileCheck %s --check-prefixes=MISSING-MODE31# RUN: ld.lld -shared --android-memtag-stack %t.o -o %t 2>&1 | \32# RUN: FileCheck %s --check-prefixes=MISSING-MODE33# RUN: ld.lld -shared --android-memtag-heap --android-memtag-stack %t.o -o %t 2>&1 | \34# RUN: FileCheck %s --check-prefixes=MISSING-MODE35# MISSING-MODE: warning: --android-memtag-mode is unspecified, leaving36# MISSING-MODE: --android-memtag-{{(heap|stack)}} a no-op37 38# CHECK: Memtag Dynamic Entries39# SYNC: AARCH64_MEMTAG_MODE: Synchronous (0)40# ASYNC: AARCH64_MEMTAG_MODE: Asynchronous (1)41# HEAP: AARCH64_MEMTAG_HEAP: Enabled (1)42# NOHEAP: AARCH64_MEMTAG_HEAP: Disabled (0)43# STACK: AARCH64_MEMTAG_STACK: Enabled (1)44# NOSTACK: AARCH64_MEMTAG_STACK: Disabled (0)45 46# CHECK: Memtag Android Note47# ASYNC-NEXT: Tagging Mode: ASYNC48# SYNC-NEXT: Tagging Mode: SYNC49# HEAP-NEXT: Heap: Enabled50# NOHEAP-NEXT: Heap: Disabled51# STACK-NEXT: Stack: Enabled52# NOSTACK-NEXT: Stack: Disabled53 54# RUN: not ld.lld -shared --android-memtag-mode=asymm --android-memtag-heap 2>&1 | \55# RUN: FileCheck %s --check-prefix=BAD-MODE56# BAD-MODE: error: unknown --android-memtag-mode value: "asymm", should be one of57# BAD-MODE: {async, sync, none}58 59# RUN: ld.lld -static --android-memtag-mode=sync --android-memtag-heap \60# RUN: --android-memtag-stack %t.o -o %t61# RUN: llvm-readelf --memtag %t | FileCheck %s --check-prefixes=STATIC62 63# STATIC: Memtag Dynamic Entries:64# STATIC-NEXT: < none found >65# STATIC: Memtag Android Note:66# STATIC-NEXT: Tagging Mode: SYNC67# STATIC-NEXT: Heap: Enabled68# STATIC-NEXT: Stack: Enabled69 70 71.globl _start72_start:73 ret74