llvm-project/lld/test/old-elf/linkerscript/phdrs-default.test

83 lines
2.3 KiB
Plaintext

/*
This group of tests checks usage of default headers during linking,
when PHDRS command is not defined or defined empty in linker scripts.
This test uses a single X86-64 input object, simple.o, created with the
following X86-64 assembly code:
*** simple.S:
(command line clang -c simple.S -o simple.o)
.text
main:
mov $1, %eax
movq $1, %rdi
movq $msg, %rsi
movq $14, %rdx
syscall
ret
.globl _start
_start:
call main
mov $60, %eax
syscall
ret
.data
msg: .asciz "Hello, World!\n"
*/
/*
Prepare the object file to test on.
RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
*/
/*
Test when no linker script passed.
RUN: lld -flavor old-gnu -target x86_64 %t.o -static -o %t1
RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix SECTIONS %s
RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix HEADERS %s
SECTIONS: .text {{[0-9a-f]+}} 00000000004000b0
SECTIONS: .data {{[0-9a-f]+}} 0000000000401000
HEADERS: ProgramHeader {
HEADERS: Type: PT_LOAD (0x1)
HEADERS: VirtualAddress: 0x400000
HEADERS: }
HEADERS: ProgramHeader {
HEADERS: Type: PT_LOAD (0x1)
HEADERS: VirtualAddress: 0x401000
HEADERS: }
*/
/*
Test when linker script doesn't contain PHDRS and sections are not assigned to any segments.
RUN: lld -flavor old-gnu -target x86_64 -T %p/phdrs/sections-no-phdrs.script %t.o -static -o %t2
RUN: llvm-objdump -section-headers %t2 | FileCheck -check-prefix SECTIONS %s
RUN: llvm-readobj -program-headers %t2 | FileCheck -check-prefix HEADERS %s
*/
/*
Test when linker script contains empty PHDRS and sections are not assigned to any segments.
RUN: lld -flavor old-gnu -target x86_64 -T %p/phdrs/sections-empty-phdrs.script %t.o -static -o %t3
RUN: llvm-objdump -section-headers %t3 | FileCheck -check-prefix SECTIONS %s
RUN: llvm-readobj -program-headers %t3 | FileCheck -check-prefix HEADERS %s
*/
/*
Test when linker script contains empty PHDRS and sections are only assigned to NONE segments
or not assigned at all.
NOTE: Segments with the name NONE are ignored in such a case.
RUN: lld -flavor old-gnu -target x86_64 -T %p/phdrs/sections-none-phdrs.script %t.o -static -o %t4
RUN: llvm-objdump -section-headers %t4 | FileCheck -check-prefix SECTIONS %s
RUN: llvm-readobj -program-headers %t4 | FileCheck -check-prefix HEADERS %s
*/