Merge tag 'powerpc-5.11-7' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc fixes from Michael Ellerman: - A fix for a change we made to __kernel_sigtramp_rt64() which confused glibc's backtrace logic, and also changed the semantics of that symbol, which was arguably an ABI break. - A fix for a stack overwrite in our VSX instruction emulation. - A couple of fixes for the Makefile logic in the new C VDSO. Thanks to Masahiro Yamada, Naveen N. Rao, Raoni Fassina Firmino, and Ravi Bangoria. * tag 'powerpc-5.11-7' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/64/signal: Fix regression in __kernel_sigtramp_rt64() semantics powerpc/vdso64: remove meaningless vgettimeofday.o build rule powerpc/vdso: fix unnecessary rebuilds of vgettimeofday.o powerpc/sstep: Fix array out of bound warning
This commit is contained in:
@@ -51,7 +51,7 @@ obj-y += ptrace/
|
||||
obj-$(CONFIG_PPC64) += setup_64.o \
|
||||
paca.o nvram_64.o note.o syscall_64.o
|
||||
obj-$(CONFIG_COMPAT) += sys_ppc32.o signal_32.o
|
||||
obj-$(CONFIG_VDSO32) += vdso32/
|
||||
obj-$(CONFIG_VDSO32) += vdso32_wrapper.o
|
||||
obj-$(CONFIG_PPC_WATCHDOG) += watchdog.o
|
||||
obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
|
||||
obj-$(CONFIG_PPC_DAWR) += dawr.o
|
||||
@@ -60,7 +60,7 @@ obj-$(CONFIG_PPC_BOOK3S_64) += cpu_setup_power.o
|
||||
obj-$(CONFIG_PPC_BOOK3S_64) += mce.o mce_power.o
|
||||
obj-$(CONFIG_PPC_BOOK3E_64) += exceptions-64e.o idle_book3e.o
|
||||
obj-$(CONFIG_PPC_BARRIER_NOSPEC) += security.o
|
||||
obj-$(CONFIG_PPC64) += vdso64/
|
||||
obj-$(CONFIG_PPC64) += vdso64_wrapper.o
|
||||
obj-$(CONFIG_ALTIVEC) += vecemu.o
|
||||
obj-$(CONFIG_PPC_BOOK3S_IDLE) += idle_book3s.o
|
||||
procfs-y := proc_powerpc.o
|
||||
|
||||
@@ -30,7 +30,7 @@ CC32FLAGS += -m32
|
||||
KBUILD_CFLAGS := $(filter-out -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc,$(KBUILD_CFLAGS))
|
||||
endif
|
||||
|
||||
targets := $(obj-vdso32) vdso32.so.dbg
|
||||
targets := $(obj-vdso32) vdso32.so.dbg vgettimeofday.o
|
||||
obj-vdso32 := $(addprefix $(obj)/, $(obj-vdso32))
|
||||
|
||||
GCOV_PROFILE := n
|
||||
@@ -46,9 +46,6 @@ obj-y += vdso32_wrapper.o
|
||||
targets += vdso32.lds
|
||||
CPPFLAGS_vdso32.lds += -P -C -Upowerpc
|
||||
|
||||
# Force dependency (incbin is bad)
|
||||
$(obj)/vdso32_wrapper.o : $(obj)/vdso32.so.dbg
|
||||
|
||||
# link rule for the .so file, .lds has to be first
|
||||
$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) $(obj)/vgettimeofday.o FORCE
|
||||
$(call if_changed,vdso32ld_and_check)
|
||||
|
||||
@@ -17,7 +17,7 @@ endif
|
||||
|
||||
# Build rules
|
||||
|
||||
targets := $(obj-vdso64) vdso64.so.dbg
|
||||
targets := $(obj-vdso64) vdso64.so.dbg vgettimeofday.o
|
||||
obj-vdso64 := $(addprefix $(obj)/, $(obj-vdso64))
|
||||
|
||||
GCOV_PROFILE := n
|
||||
@@ -29,15 +29,9 @@ ccflags-y := -shared -fno-common -fno-builtin -nostdlib \
|
||||
-Wl,-soname=linux-vdso64.so.1 -Wl,--hash-style=both
|
||||
asflags-y := -D__VDSO64__ -s
|
||||
|
||||
obj-y += vdso64_wrapper.o
|
||||
targets += vdso64.lds
|
||||
CPPFLAGS_vdso64.lds += -P -C -U$(ARCH)
|
||||
|
||||
$(obj)/vgettimeofday.o: %.o: %.c FORCE
|
||||
|
||||
# Force dependency (incbin is bad)
|
||||
$(obj)/vdso64_wrapper.o : $(obj)/vdso64.so.dbg
|
||||
|
||||
# link rule for the .so file, .lds has to be first
|
||||
$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday.o FORCE
|
||||
$(call if_changed,vdso64ld_and_check)
|
||||
|
||||
@@ -15,11 +15,20 @@
|
||||
|
||||
.text
|
||||
|
||||
/*
|
||||
* __kernel_start_sigtramp_rt64 and __kernel_sigtramp_rt64 together
|
||||
* are one function split in two parts. The kernel jumps to the former
|
||||
* and the signal handler indirectly (by blr) returns to the latter.
|
||||
* __kernel_sigtramp_rt64 needs to point to the return address so
|
||||
* glibc can correctly identify the trampoline stack frame.
|
||||
*/
|
||||
.balign 8
|
||||
.balign IFETCH_ALIGN_BYTES
|
||||
V_FUNCTION_BEGIN(__kernel_sigtramp_rt64)
|
||||
V_FUNCTION_BEGIN(__kernel_start_sigtramp_rt64)
|
||||
.Lsigrt_start:
|
||||
bctrl /* call the handler */
|
||||
V_FUNCTION_END(__kernel_start_sigtramp_rt64)
|
||||
V_FUNCTION_BEGIN(__kernel_sigtramp_rt64)
|
||||
addi r1, r1, __SIGNAL_FRAMESIZE
|
||||
li r0,__NR_rt_sigreturn
|
||||
sc
|
||||
|
||||
@@ -131,4 +131,4 @@ VERSION
|
||||
/*
|
||||
* Make the sigreturn code visible to the kernel.
|
||||
*/
|
||||
VDSO_sigtramp_rt64 = __kernel_sigtramp_rt64;
|
||||
VDSO_sigtramp_rt64 = __kernel_start_sigtramp_rt64;
|
||||
|
||||
@@ -818,13 +818,15 @@ void emulate_vsx_store(struct instruction_op *op, const union vsx_reg *reg,
|
||||
break;
|
||||
if (rev) {
|
||||
/* reverse 32 bytes */
|
||||
buf.d[0] = byterev_8(reg->d[3]);
|
||||
buf.d[1] = byterev_8(reg->d[2]);
|
||||
buf.d[2] = byterev_8(reg->d[1]);
|
||||
buf.d[3] = byterev_8(reg->d[0]);
|
||||
reg = &buf;
|
||||
union vsx_reg buf32[2];
|
||||
buf32[0].d[0] = byterev_8(reg[1].d[1]);
|
||||
buf32[0].d[1] = byterev_8(reg[1].d[0]);
|
||||
buf32[1].d[0] = byterev_8(reg[0].d[1]);
|
||||
buf32[1].d[1] = byterev_8(reg[0].d[0]);
|
||||
memcpy(mem, buf32, size);
|
||||
} else {
|
||||
memcpy(mem, reg, size);
|
||||
}
|
||||
memcpy(mem, reg, size);
|
||||
break;
|
||||
case 16:
|
||||
/* stxv, stxvx, stxvl, stxvll */
|
||||
|
||||
Reference in New Issue
Block a user