powerpc: Move and rename func_descr_t
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 15 Feb 2022 12:40:57 +0000 (13:40 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 16 Feb 2022 12:25:10 +0000 (23:25 +1100)
There are three architectures with function descriptors, try to
have common names for the address they contain in order to
refactor some functions into generic functions later.

powerpc has 'entry'
ia64 has 'ip'
parisc has 'addr'

Vote for 'addr' and update 'func_descr_t' accordingly.

Move it in asm/elf.h to have it at the same place on all
three architectures, remove the typedef which hides its real
type, and change it to a smoother name 'struct func_desc'.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/529b2ba1d001e8f628ef0d30e8044c9b3d0a4921.1644928018.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/code-patching.h
arch/powerpc/include/asm/elf.h
arch/powerpc/include/asm/types.h
arch/powerpc/kernel/signal_64.c

index e26080539c31099f97972d29774ffe260af291d5..409483b2d0ceec15fb6a009e5bd2922a6cea99ac 100644 (file)
@@ -118,7 +118,7 @@ static inline unsigned long ppc_function_entry(void *func)
         * function's descriptor. The first entry in the descriptor is the
         * address of the function text.
         */
-       return ((func_descr_t *)func)->entry;
+       return ((struct func_desc *)func)->addr;
 #else
        return (unsigned long)func;
 #endif
index b8425e3cfd81d2ad5e3372ece835baaed36aff95..971589a21bc033ee95857817f563b123bb10d90c 100644 (file)
@@ -176,4 +176,10 @@ do {                                                                       \
 /* Relocate the kernel image to @final_address */
 void relocate(unsigned long final_address);
 
+struct func_desc {
+       unsigned long addr;
+       unsigned long toc;
+       unsigned long env;
+};
+
 #endif /* _ASM_POWERPC_ELF_H */
index f1630c553efe4355c16a9dc8b9837a16cfe72efa..97da77bc48c911a0074eb45526733b9c43aef254 100644 (file)
 
 typedef __vector128 vector128;
 
-typedef struct {
-       unsigned long entry;
-       unsigned long toc;
-       unsigned long env;
-} func_descr_t;
-
 #endif /* __ASSEMBLY__ */
 
 #endif /* _ASM_POWERPC_TYPES_H */
index d1e1fc0acbea32822ce3ab910e6f9ad1565019ea..73d483b07ff39e9ba5f251a4be3cbb8e9d44db96 100644 (file)
@@ -936,11 +936,11 @@ int handle_rt_signal64(struct ksignal *ksig, sigset_t *set,
                 * descriptor is the entry address of signal and the second
                 * entry is the TOC value we need to use.
                 */
-               func_descr_t __user *funct_desc_ptr =
-                       (func_descr_t __user *) ksig->ka.sa.sa_handler;
+               struct func_desc __user *ptr =
+                       (struct func_desc __user *)ksig->ka.sa.sa_handler;
 
-               err |= get_user(regs->ctr, &funct_desc_ptr->entry);
-               err |= get_user(regs->gpr[2], &funct_desc_ptr->toc);
+               err |= get_user(regs->ctr, &ptr->addr);
+               err |= get_user(regs->gpr[2], &ptr->toc);
        }
 
        /* enter the signal handler in native-endian mode */