mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 01:16:05 +00:00

When `--symbol-ordering-file` is specified, the linker today will always put hot contributions in the middle of cold ones when targeting RISC machine, so to minimize the chances that branch thunks need be generated for hot code calling into cold code. This is not necessary when user specifies an ordering of read-only data (vs. function) symbols, or when output section is small such that no branch thunk would ever be required. The latter is common for mobile apps. For example, among all the native ARM64 libraries in Facebook Instagram App for Android, 80% of them have text section smaller than 64KB and the largest text section seen is less than 8MB, well below the distance that a BRANCH26 can reach. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D128382
72 lines
1.6 KiB
ArmAsm
72 lines
1.6 KiB
ArmAsm
# REQUIRES: arm
|
|
|
|
# RUN: split-file %s %t
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=armv7-unknown-linux %t/small.s -o %t.small.o
|
|
# RUN: llvm-mc -filetype=obj -triple=armv7-unknown-linux %t/large.s -o %t.large.o
|
|
# RUN: llvm-objcopy --set-section-flags .bar=alloc,readonly %t.large.o %t.large.RO.o
|
|
|
|
# RUN: echo ordered > %t_order.txt
|
|
|
|
# RUN: ld.lld --symbol-ordering-file %t_order.txt %t.small.o -o %t2.small.out
|
|
# RUN: ld.lld --symbol-ordering-file %t_order.txt %t.large.o -o %t2.large.out
|
|
# RUN: ld.lld --symbol-ordering-file %t_order.txt %t.large.RO.o -o %t2.large.RO.out
|
|
# RUN: llvm-nm -n %t2.small.out | FileCheck --check-prefix=SMALL %s
|
|
# RUN: llvm-nm -n %t2.large.out | FileCheck --check-prefix=LARGE %s
|
|
# RUN: llvm-nm -n %t2.large.RO.out | FileCheck --check-prefix=SMALL %s
|
|
# RUN: rm -f %t.*.o %t2.*.out
|
|
|
|
# SMALL: ordered
|
|
# SMALL-NEXT: unordered1
|
|
# SMALL-NEXT: unordered2
|
|
# SMALL-NEXT: unordered3
|
|
# SMALL-NEXT: unordered4
|
|
|
|
# LARGE: unordered1
|
|
# LARGE-NEXT: unordered2
|
|
# LARGE-NEXT: ordered
|
|
# LARGE-NEXT: unordered3
|
|
# LARGE-NEXT: unordered4
|
|
|
|
#--- small.s
|
|
.section .foo,"ax",%progbits,unique,1
|
|
unordered1:
|
|
.zero 1
|
|
|
|
.section .foo,"ax",%progbits,unique,2
|
|
unordered2:
|
|
.zero 1
|
|
|
|
.section .foo,"ax",%progbits,unique,3
|
|
unordered3:
|
|
.zero 2
|
|
|
|
.section .foo,"ax",%progbits,unique,4
|
|
unordered4:
|
|
.zero 4
|
|
|
|
.section .foo,"ax",%progbits,unique,5
|
|
ordered:
|
|
.zero 1
|
|
|
|
#--- large.s
|
|
.section .bar,"ax",%progbits,unique,1
|
|
unordered1:
|
|
.zero 0xC00000
|
|
|
|
.section .bar,"ax",%progbits,unique,2
|
|
unordered2:
|
|
.zero 0xC00000
|
|
|
|
.section .bar,"ax",%progbits,unique,3
|
|
unordered3:
|
|
.zero 0xC00000
|
|
|
|
.section .bar,"ax",%progbits,unique,4
|
|
unordered4:
|
|
.zero 0xC00000
|
|
|
|
.section .bar,"ax",%progbits,unique,5
|
|
ordered:
|
|
.zero 8
|