- Add support for `.openbsd.mutable` (rebaser's note) adapted from:bd249b5664New auto-coalescing sections removed In the linkers, collect objects in section "openbsd.mutable" and place them into a page-aligned region in the bss, with the right markers for kernel/ld.so to identify the region and skip making it immutable. While here, fix readelf/objdump versions to show all of this. ok miod kettenis - Add support for `.openbsd.syscalls` (rebaser's note) adapted from:42a61acefaCollect .openbsd.syscalls sections into a new PT_OPENBSD_SYSCALLS segment. This will be used soon to pin system calls to designated call sites. ok deraadt@ - Scope OpenBSD special section handling under that ELFOSABI As a preexisting comment in `ELF/Writer.cpp` says: > section names shouldn't be significant in ELF in spirit. so scoping OSABI-specific magic name hacks to just the OSABI in question limits the degree to which we deviate from that "spirit" for all other OSABIs. OpenBSD in particular is very fast moving, having added a number of special sections, etc. in recent years. It is unclear how possible / reasonable it is for upstream to implement all these features in any event, but scoping like this at least mitigates the fallout for other OSABIs systems which wish to be more slow-moving. Co-authored-by: deraadt <deraadt@openbsd.org>
45 lines
2.0 KiB
ArmAsm
45 lines
2.0 KiB
ArmAsm
# REQUIRES: x86
|
|
# RUN: rm -rf %t && split-file %s %t && cd %t
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-openbsd randomdata.s -o randomdata.o
|
|
# RUN: ld.lld randomdata.o -o randomdata
|
|
# RUN: llvm-readelf -S -l randomdata | FileCheck %s --check-prefix=RANDOMDATA
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-openbsd /dev/null -o wxneeded.o
|
|
# RUN: ld.lld -z wxneeded wxneeded.o -o wxneeded
|
|
# RUN: llvm-readelf -l wxneeded | FileCheck %s --check-prefix=WXNEEDED
|
|
|
|
# RUN: ld.lld -T lds randomdata.o -o out
|
|
# RUN: llvm-readelf -S -l out | FileCheck %s --check-prefixes=RANDOMDATA,CHECK
|
|
|
|
# RANDOMDATA: Name Type Address Off Size ES Flg Lk Inf Al
|
|
# RANDOMDATA: .openbsd.randomdata PROGBITS [[ADDR:[0-9a-f]+]] [[O:[0-9a-f]+]] 000008 00 A 0 0 1
|
|
|
|
# WXNEEDED: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
|
|
# WXNEEDED: OPENBSD_WXNEEDED 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 E 0
|
|
|
|
# RANDOMDATA: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
|
|
# RANDOMDATA: OPENBSD_RANDOMIZE 0x[[O]] 0x[[ADDR]] 0x[[ADDR]] 0x000008 0x000008 R 0x1
|
|
# CHECK-NEXT: OPENBSD_BOOTDATA 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 R 0
|
|
# CHECK-NEXT: OPENBSD_MUTABLE 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 R 0
|
|
# CHECK-NEXT: OPENBSD_SYSCALLS 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 R 0
|
|
# CHECK-NEXT: OPENBSD_WXNEEDED 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 R 0
|
|
|
|
#--- randomdata.s
|
|
.section .openbsd.randomdata, "a"
|
|
.quad 0
|
|
|
|
#--- lds
|
|
PHDRS {
|
|
text PT_LOAD FILEHDR PHDRS;
|
|
rand PT_OPENBSD_RANDOMIZE;
|
|
boot PT_OPENBSD_BOOTDATA;
|
|
mutable PT_OPENBSD_MUTABLE;
|
|
syscalls PT_OPENBSD_SYSCALLS;
|
|
wxneeded PT_OPENBSD_WXNEEDED;
|
|
}
|
|
SECTIONS {
|
|
. = SIZEOF_HEADERS;
|
|
.text : { *(.text) }
|
|
.openbsd.randomdata : { *(.openbsd.randomdata) } : rand
|
|
}
|