See http://lists.llvm.org/pipermail/llvm-dev/2020-April/140549.html For the record, GNU ld changed to 64k max page size in 2014 https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=7572ca8989ead4c3425a1500bc241eaaeffa2c89 "[RFC] ld/ARM: Increase maximum page size to 64kB" Android driver forced 4k page size in AArch64 (D55029) and ARM (D77746). A binary linked with max-page-size=4096 does not run on a system with a higher page size configured. There are some systems out there that do this and it leads to the binary getting `Killed!` by the kernel. In the non-linker-script cases, when linked with -z noseparate-code (default), the max-page-size increase should not cause any size difference. There may be some VMA usage differences, though. Reviewed By: psmith, MaskRay Differential Revision: https://reviews.llvm.org/D77330
39 lines
1.5 KiB
ArmAsm
39 lines
1.5 KiB
ArmAsm
// REQUIRES: arm
|
|
// RUN: llvm-mc --triple=armv7a-linux-gnueabihf -arm-add-build-attributes -filetype=obj -o %t.o %s
|
|
// RUN: ld.lld %t.o --defsym sym=0x13001 -o %t 2>&1 | FileCheck %s --check-prefix=WARN
|
|
// RUN: llvm-objdump --no-show-raw-insn -d %t | FileCheck %s
|
|
|
|
/// A similar test to arm-thumb-interwork-notfunc.s this time exercising the
|
|
/// case where a symbol does not have type STT_FUNC but it does have the bottom
|
|
/// bit set. We use absolute symbols to represent assembler labels as the
|
|
/// minimum alignment of a label in code is 2.
|
|
.syntax unified
|
|
.global sym
|
|
.global _start
|
|
.type _start, %function
|
|
.text
|
|
.balign 0x1000
|
|
_start:
|
|
arm_caller:
|
|
.arm
|
|
b sym
|
|
bl sym
|
|
// WARN: branch and link relocation: R_ARM_CALL to non STT_FUNC symbol: sym interworking not performed; consider using directive '.type sym, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required
|
|
blx sym
|
|
.thumb
|
|
thumb_caller:
|
|
b sym
|
|
bl sym
|
|
blx sym
|
|
// WARN: branch and link relocation: R_ARM_THM_CALL to non STT_FUNC symbol: sym interworking not performed; consider using directive '.type sym, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required
|
|
|
|
// CHECK: 00021000 <arm_caller>:
|
|
// CHECK-NEXT: 21000: b #-57352
|
|
// CHECK-NEXT: 21004: bl #-57356
|
|
// CHECK-NEXT: 21008: blx #-57360
|
|
|
|
// CHECK: 0002100c <thumb_caller>:
|
|
// CHECK-NEXT: 2100c: b.w #-57360
|
|
// CHECK-NEXT: 21010: bl #-57364
|
|
// CHECK-NEXT: 21014: blx #-57364
|