-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'pull-lu-20231030' of https://gitlab.com/rth7680/qemu into …
…staging linux-user: Fix guest signal remapping after adjusting SIGABRT linux-user: Implement VDSOs * tag 'pull-lu-20231030' of https://gitlab.com/rth7680/qemu: (21 commits) build: Add update-linux-vdso makefile rule linux-user: Show vdso address in /proc/pid/maps linux-user/s390x: Add vdso linux-user/s390x: Rename __SIGNAL_FRAMESIZE to STACK_FRAME_OVERHEAD linux-user/ppc: Add vdso linux-user/loongarch64: Add vdso linux-user/riscv: Add vdso linux-user/hppa: Add vdso linux-user/arm: Add vdso linux-user/aarch64: Add vdso linux-user/x86_64: Add vdso linux-user/i386: Add vdso linux-user: Add gen-vdso tool linux-user: Load vdso image if available linux-user: Replace bprm->fd with bprm->src.fd linux-user: Use ImageSource in load_symbols linux-user: Use ImageSource in load_elf_image linux-user: Do not clobber bprm_buf swapping ehdr linux-user: Tidy loader_exec linux-user: Introduce imgsrc_read, imgsrc_read_alloc ... Conflicts: linux-user/arm/signal.c Fix an #include context conflict. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
- Loading branch information
Showing
76 changed files
with
3,278 additions
and
211 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
include $(BUILD_DIR)/tests/tcg/aarch64-linux-user/config-target.mak | ||
|
||
SUBDIR = $(SRC_PATH)/linux-user/aarch64 | ||
VPATH += $(SUBDIR) | ||
|
||
all: $(SUBDIR)/vdso-be.so $(SUBDIR)/vdso-le.so | ||
|
||
LDFLAGS = -nostdlib -shared -Wl,-h,linux-vdso.so.1 -Wl,--build-id=sha1 \ | ||
-Wl,--hash-style=both -Wl,-T,$(SUBDIR)/vdso.ld | ||
|
||
$(SUBDIR)/vdso-be.so: vdso.S vdso.ld | ||
$(CC) -o $@ $(LDFLAGS) -mbig-endian $< | ||
|
||
$(SUBDIR)/vdso-le.so: vdso.S vdso.ld | ||
$(CC) -o $@ $(LDFLAGS) -mlittle-endian $< |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# TARGET_BIG_ENDIAN is defined to 'n' for little-endian; which means it | ||
# is always true as far as source_set.apply() is concerned. Always build | ||
# both header files and include the right one via #if. | ||
|
||
vdso_be_inc = gen_vdso.process('vdso-be.so', | ||
extra_args: ['-r', '__kernel_rt_sigreturn']) | ||
|
||
vdso_le_inc = gen_vdso.process('vdso-le.so', | ||
extra_args: ['-r', '__kernel_rt_sigreturn']) | ||
|
||
linux_user_ss.add(when: 'TARGET_AARCH64', if_true: [vdso_be_inc, vdso_le_inc]) |
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/* | ||
* aarch64 linux replacement vdso. | ||
* | ||
* Copyright 2023 Linaro, Ltd. | ||
* | ||
* SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
|
||
#include <asm/unistd.h> | ||
|
||
/* ??? These are in include/elf.h, which is not ready for inclusion in asm. */ | ||
#define NT_GNU_PROPERTY_TYPE_0 5 | ||
#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 | ||
#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0) | ||
#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1) | ||
|
||
#define GNU_PROPERTY_AARCH64_FEATURE_1_DEFAULT \ | ||
(GNU_PROPERTY_AARCH64_FEATURE_1_BTI | GNU_PROPERTY_AARCH64_FEATURE_1_PAC) | ||
|
||
.section .note.gnu.property | ||
.align 3 | ||
.long 2f - 1f | ||
.long 6f - 3f | ||
.long NT_GNU_PROPERTY_TYPE_0 | ||
1: .string "GNU" | ||
2: .align 3 | ||
3: .long GNU_PROPERTY_AARCH64_FEATURE_1_AND | ||
.long 5f - 4f | ||
4: .long GNU_PROPERTY_AARCH64_FEATURE_1_DEFAULT | ||
5: .align 3 | ||
6: | ||
|
||
.text | ||
|
||
.macro endf name | ||
.globl \name | ||
.type \name, @function | ||
.size \name, . - \name | ||
.endm | ||
|
||
.macro vdso_syscall name, nr | ||
\name: | ||
bti c | ||
mov x8, #\nr | ||
svc #0 | ||
ret | ||
endf \name | ||
.endm | ||
|
||
.cfi_startproc | ||
|
||
vdso_syscall __kernel_gettimeofday, __NR_gettimeofday | ||
vdso_syscall __kernel_clock_gettime, __NR_clock_gettime | ||
vdso_syscall __kernel_clock_getres, __NR_clock_getres | ||
|
||
.cfi_endproc | ||
|
||
|
||
/* | ||
* TODO: The kernel makes a big deal of turning off the .cfi directives, | ||
* because they cause libgcc to crash, but that's because they're wrong. | ||
* | ||
* For now, elide the unwind info for __kernel_rt_sigreturn and rely on | ||
* the libgcc fallback routine as we have always done. This requires | ||
* that the code sequence used be exact. | ||
*/ | ||
__kernel_rt_sigreturn: | ||
/* No BTI C insn here -- we arrive via RET. */ | ||
mov x8, #__NR_rt_sigreturn | ||
svc #0 | ||
endf __kernel_rt_sigreturn |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/* | ||
* Linker script for linux aarch64 replacement vdso. | ||
* | ||
* Copyright 2021 Linaro, Ltd. | ||
* | ||
* SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
|
||
VERSION { | ||
LINUX_2.6.39 { | ||
global: | ||
__kernel_rt_sigreturn; | ||
__kernel_gettimeofday; | ||
__kernel_clock_gettime; | ||
__kernel_clock_getres; | ||
|
||
local: *; | ||
}; | ||
} | ||
|
||
|
||
PHDRS { | ||
phdr PT_PHDR FLAGS(4) PHDRS; | ||
load PT_LOAD FLAGS(7) FILEHDR PHDRS; | ||
dynamic PT_DYNAMIC FLAGS(4); | ||
eh_frame_hdr PT_GNU_EH_FRAME; | ||
note PT_NOTE FLAGS(4); | ||
} | ||
|
||
SECTIONS { | ||
/* | ||
* We can't prelink to any address without knowing something about | ||
* the virtual memory space of the host, since that leaks over into | ||
* the available memory space of the guest. | ||
*/ | ||
. = SIZEOF_HEADERS; | ||
|
||
/* | ||
* The following, including the FILEHDRS and PHDRS, are modified | ||
* when we relocate the binary. We want them to be initially | ||
* writable for the relocation; we'll force them read-only after. | ||
*/ | ||
.note : { *(.note*) } :load :note | ||
.dynamic : { *(.dynamic) } :load :dynamic | ||
.dynsym : { *(.dynsym) } :load | ||
/* | ||
* There ought not be any real read-write data. | ||
* But since we manipulated the segment layout, | ||
* we have to put these sections somewhere. | ||
*/ | ||
.data : { | ||
*(.data*) | ||
*(.sdata*) | ||
*(.got.plt) *(.got) | ||
*(.gnu.linkonce.d.*) | ||
*(.bss*) | ||
*(.dynbss*) | ||
*(.gnu.linkonce.b.*) | ||
} | ||
|
||
.rodata : { *(.rodata*) } | ||
.hash : { *(.hash) } | ||
.gnu.hash : { *(.gnu.hash) } | ||
.dynstr : { *(.dynstr) } | ||
.gnu.version : { *(.gnu.version) } | ||
.gnu.version_d : { *(.gnu.version_d) } | ||
.gnu.version_r : { *(.gnu.version_r) } | ||
.eh_frame_hdr : { *(.eh_frame_hdr) } :load :eh_frame_hdr | ||
.eh_frame : { *(.eh_frame) } :load | ||
|
||
.text : { *(.text*) } :load =0xd503201f | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
include $(BUILD_DIR)/tests/tcg/arm-linux-user/config-target.mak | ||
|
||
SUBDIR = $(SRC_PATH)/linux-user/arm | ||
VPATH += $(SUBDIR) | ||
|
||
all: $(SUBDIR)/vdso-be.so $(SUBDIR)/vdso-le.so | ||
|
||
# Adding -use-blx disables unneeded interworking without actually using blx. | ||
LDFLAGS = -nostdlib -shared -Wl,-use-blx \ | ||
-Wl,-h,linux-vdso.so.1 -Wl,--build-id=sha1 \ | ||
-Wl,--hash-style=both -Wl,-T,$(SUBDIR)/vdso.ld | ||
|
||
$(SUBDIR)/vdso-be.so: vdso.S vdso.ld vdso-asmoffset.h | ||
$(CC) -o $@ $(LDFLAGS) -mbig-endian $< | ||
|
||
$(SUBDIR)/vdso-le.so: vdso.S vdso.ld vdso-asmoffset.h | ||
$(CC) -o $@ $(LDFLAGS) -mlittle-endian $< |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
/* offsetof(struct sigframe, retcode[3]) */ | ||
#define SIGFRAME_RC3_OFFSET 756 | ||
#define RT_SIGFRAME_RC3_OFFSET 884 |
Binary file not shown.
Binary file not shown.
Oops, something went wrong.