[lld] [LLD][ELF] Allow merging XO and RX sections, and add `--[no-]xosegment` flag (PR #132412)
Csanád Hajdú via llvm-commits
llvm-commits at lists.llvm.org
Sun Mar 23 01:31:01 PDT 2025
================
@@ -0,0 +1,55 @@
+// REQUIRES: aarch64
+// RUN: rm -rf %t && split-file %s %t && cd %t
+
+// RUN: llvm-mc -filetype=obj -triple=aarch64 start.s -o start.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64 xo.s -o xo.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64 rx.s -o rx.o
+// RUN: ld.lld start.o xo.o -o xo
+// RUN: ld.lld start.o rx.o -o rx-default
+// RUN: ld.lld --xosegment start.o rx.o -o rx-xosegment
+// RUN: ld.lld --no-xosegment start.o rx.o -o rx-no-xosegment
+// RUN: llvm-readelf -l xo | FileCheck --check-prefix=CHECK-XO %s
+// RUN: llvm-readelf -l rx-default | FileCheck --check-prefix=CHECK-MERGED %s
+// RUN: llvm-readelf -l rx-xosegment | FileCheck --check-prefix=CHECK-SEPARATE %s
+// RUN: llvm-readelf -l rx-no-xosegment | FileCheck --check-prefix=CHECK-MERGED %s
+
+// CHECK-XO: PHDR
+// CHECK-XO-NEXT: LOAD
+// CHECK-XO-NEXT: LOAD 0x000120 0x0000000000210120 0x0000000000210120 0x00000c 0x00000c E 0x10000
+/// Index should match the index of the LOAD section above.
+// CHECK-XO: 02 .text .foo
+
+// CHECK-MERGED: PHDR
+// CHECK-MERGED-NEXT: LOAD
+// CHECK-MERGED-NEXT: LOAD 0x000120 0x0000000000210120 0x0000000000210120 0x00000c 0x00000c R E 0x10000
+/// Index should match the index of the LOAD section above.
+// CHECK-MERGED: 02 .text .foo
+
+// CHECK-SEPARATE: PHDR
+// CHECK-SEPARATE-NEXT: LOAD
+// CHECK-SEPARATE-NEXT: LOAD 0x000158 0x0000000000210158 0x0000000000210158 0x000008 0x000008 E 0x10000
+// CHECK-SEPARATE-NEXT: LOAD 0x000160 0x0000000000220160 0x0000000000220160 0x000004 0x000004 R E 0x10000
+/// Index should match the index of the LOAD section above.
+// CHECK-SEPARATE: 02 .text
+// CHECK-SEPARATE: 03 .foo
+
+//--- start.s
+.section .text,"axy", at progbits,unique,0
+.global _start
+_start:
+ bl foo
+ ret
+
+//--- xo.s
+.section .foo,"axy", at progbits,unique,0
+.global foo
+foo:
+ ret
+
+//--- rx.s
+/// An empty .text section is implicitly created without the SHF_AARCH64_PURECODE flag without this.
----------------
Il-Capitano wrote:
Done.
https://github.com/llvm/llvm-project/pull/132412
More information about the llvm-commits
mailing list