From 45ad5fac80d018a37e7afa9883389d90d3c02425 Mon Sep 17 00:00:00 2001 From: Zhou Kang Date: Mon, 10 Jul 2023 11:20:11 +0000 Subject: [PATCH] compat to openEuler 22.03 LTS --- devops-env.sh | 2 +- src/binfmt_rto/binfmt_rto.c | 14 +++++++++ tests/bash/Makefile | 62 +++++++++++++++++++++---------------- 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/devops-env.sh b/devops-env.sh index 0d1576d..a5f914f 100644 --- a/devops-env.sh +++ b/devops-env.sh @@ -5,4 +5,4 @@ set -x # update pkg >= kernel-5.10.0-60.99.0.123.oe2203 # install tools -sudo yum install -y gcc meson cargo xz-devel kernel kernel-devel ncurses-devel +sudo yum install -y gcc make meson cargo xz-devel kernel kernel-devel ncurses-devel diff --git a/src/binfmt_rto/binfmt_rto.c b/src/binfmt_rto/binfmt_rto.c index c5e986b..2c4f9cf 100644 --- a/src/binfmt_rto/binfmt_rto.c +++ b/src/binfmt_rto/binfmt_rto.c @@ -83,7 +83,10 @@ static struct global_symbols { proc_symbol(arch_elf_adjust_prot); #else proc_symbol(elf_hwcap2); +/* 22.03 LTS not have get_sigframe_size */ +#ifdef get_sigframe_size proc_symbol(get_sigframe_size); +#endif proc_symbol(set_personality_64bit); proc_symbol(vdso64_enabled); proc_symbol(map_vdso); @@ -110,7 +113,9 @@ static char *global_symbol_names[] = { proc_symbol_char(arch_elf_adjust_prot), #else proc_symbol_char(elf_hwcap2), +#ifdef get_sigframe_size proc_symbol_char(get_sigframe_size), +#endif proc_symbol_char(set_personality_64bit), proc_symbol_char(vdso64_enabled), proc_symbol_char(map_vdso), @@ -246,6 +251,7 @@ do { \ #else // x86 +#ifdef get_sigframe_size #define ARCH_DLINFO \ do { \ if (*(unsigned int *)g_sym.vdso64_enabled) \ @@ -253,6 +259,14 @@ do { \ (unsigned long __force)current->mm->context.vdso); \ NEW_AUX_ENT(AT_MINSIGSTKSZ, g_sym.get_sigframe_size()); \ } while (0) +#else +#define ARCH_DLINFO \ +do { \ + if (*(unsigned int *)g_sym.vdso64_enabled) \ + NEW_AUX_ENT(AT_SYSINFO_EHDR, \ + (unsigned long __force)current->mm->context.vdso); \ +} while (0) +#endif int __arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp, unsigned long load_bias, bool is_rto_format) { diff --git a/tests/bash/Makefile b/tests/bash/Makefile index c74c47b..6ff0474 100644 --- a/tests/bash/Makefile +++ b/tests/bash/Makefile @@ -1,39 +1,47 @@ # SPDX-License-Identifier: MulanPSL-2.0 ROOT_DIR=../../ -BUILD_DIR=$(ROOT_DIR)build/ -SYSBOOST=$(BUILD_DIR)src/sysboost -BASH=/usr/bin/bash +BUILD_DIR=$(ROOT_DIR)build +SYSBOOST=$(BUILD_DIR)/src/sysboost +RELOCATION_DIR=/usr/lib/relocation + +TEMPLATE_FILE=$(BUILD_DIR)/src/static_template/sysboost_static_template +TEMPLATE_FILE_PUB_PATH=$(RELOCATION_DIR)/sysboost_static_template.relocation -TEMPLATE_FILE=$(BUILD_DIR)src/static_template/sysboost_static_template -TEMPLATE_FILE_PUB_PATH=/usr/lib/relocation/sysboost_static_template.relocation +BASH=/usr/bin/bash +BASH_R=$(RELOCATION_DIR)/usr/bin/bash LIBC=/usr/lib64/libc.so.6 -LIBC_R=/usr/lib/relocation$(LIBC).relocation +LIBC_R=$(RELOCATION_DIR)$(LIBC).relocation LIBTINFO=/usr/lib64/libtinfo.so.7 -LIBTINFO_R=/usr/lib/relocation$(LIBTINFO).relocation +LIBTINFO_R=$(RELOCATION_DIR)$(LIBTINFO).relocation +MODE?=--static-nold +#MODE=--static-nolibc .PHONY: all all: bash +ifeq ($(MODE), --static-nold) +# --static-nold bash: clear make -C $(ROOT_DIR) - xz $(TEMPLATE_FILE) - mv -f $(TEMPLATE_FILE).xz $(TEMPLATE_FILE_PUB_PATH) @echo ===rto=== - $(SYSBOOST) --static $(BASH) $(LIBTINFO) $(LIBC) - readelf -W -a bash.rto > bash.rto.elf - objdump -d bash.rto > bash.rto.asm + $(SYSBOOST) $(MODE) $(BASH) $(LIBTINFO) $(LIBC) + readelf -W -a $(BASH).rto > bash.rto.elf + objdump -d $(BASH).rto > bash.rto.asm @echo ===run=== - ./bash.rto -c "echo 1" + $(BASH).rto -c "echo 1" rto: - gdb --args $(SYSBOOST) --static $(BASH) $(LIBTINFO) $(LIBC) + gdb --args $(SYSBOOST) $(MODE) $(BASH) $(LIBTINFO) $(LIBC) -nolibc: +else + +# static-nolibc +bash: clear readelf -W -a $(TEMPLATE_FILE) > sysboost_static_template.elf objdump -d $(TEMPLATE_FILE) > sysboost_static_template.asm @@ -41,24 +49,26 @@ nolibc: xz $(TEMPLATE_FILE) mv -f $(TEMPLATE_FILE).xz $(TEMPLATE_FILE_PUB_PATH) @echo ===rto2=== - $(SYSBOOST) --static-nolibc $(BASH) $(LIBTINFO) - readelf -W -a bash.rto > bash.rto.elf - objdump -d bash.rto > bash.rto.asm + $(SYSBOOST) $(MODE) $(BASH) $(LIBTINFO) + readelf -W -a $(BASH).rto > bash.rto.elf + objdump -d $(BASH).rto > bash.rto.asm @echo ===run=== - ./bash.rto -c "echo 1" + $(BASH).rto -c "echo 1" + +rto: + gdb --args $(SYSBOOST) $(MODE) $(BASH) $(LIBTINFO) -rto2: - gdb --args $(SYSBOOST) --static-nolibc $(BASH) $(LIBTINFO) +endif run: - gdb --args ./bash.rto -c "echo 1" + gdb --args $(BASH).rto -c "echo 1" env: echo 0 > /proc/sys/kernel/randomize_va_space cat /proc/sys/kernel/randomize_va_space - readelf -W -a $(BASH) > bash.elf - objdump -d $(BASH) > bash.asm + readelf -W -a $(BASH_R) > bash.elf + objdump -d $(BASH_R) > bash.asm readelf -W -a $(LIBC_R) > libc.so.elf objdump -d $(LIBC_R) > libc.so.asm - readelf -W -a $(LIBTINFO) > libtinfo.so.elf - objdump -d $(LIBTINFO) > libtinfo.so.asm + readelf -W -a $(LIBTINFO_R) > libtinfo.so.elf + objdump -d $(LIBTINFO_R) > libtinfo.so.asm -- Gitee