All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com>
To: Yury Norov <ynorov@caviumnetworks.com>, <arnd@arndb.de>,
	<catalin.marinas@arm.com>, <linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>, <linux-doc@vger.kernel.org>,
	<linux-arch@vger.kernel.org>, <linux-s390@vger.kernel.org>,
	<libc-alpha@sourceware.org>
Cc: <schwidefsky@de.ibm.com>, <heiko.carstens@de.ibm.com>,
	<pinskia@gmail.com>, <broonie@kernel.org>,
	<joseph@codesourcery.com>,
	<christoph.muellner@theobroma-systems.com>,
	<szabolcs.nagy@arm.com>, <klimov.linux@gmail.com>,
	<Nathan_Lynch@mentor.com>, <agraf@suse.de>,
	<Prasun.Kapoor@caviumnetworks.com>, <kilobyte@angband.pl>,
	<geert@linux-m68k.org>, <philipp.tomsich@theobroma-systems.com>,
	"Andrew Pinski" <apinski@cavium.com>,
	Andrew Pinski <Andrew.Pinski@caviumnetworks.com>,
	Hanjun Guo <guohanjun@huawei.com>,
	"Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com>
Subject: Re: [PATCH 21/23] arm64: ilp32: introduce ilp32-specific handlers for sigframe and ucontext
Date: Sun, 12 Jun 2016 20:34:39 +0800	[thread overview]
Message-ID: <575D56DF.8080203@huawei.com> (raw)
In-Reply-To: <5752BCC8.7080205@huawei.com>

ping

On 2016/6/4 19:34, Zhangjian (Bamvor) wrote:
> Hi,
>
> I found an issue of unwind with the following code. The correct backtrace
> should be:
> (gdb) where
> #0 0x004004d0 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 func2 (num=0) at test_force3.c:22
> #3 0x00400540 in func1 (num=1) at test_force3.c:28
> #4 0x00400574 in main (argc=1, argv=0xffd7bc04) at test_force3.c:33
>
> Without my patch, the backtrace is:
> (gdb) where
> #0 0x00400490 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 0x004004e4 in main (argc=1, argv=0xffe6f8f4) at test_force3.c:33
>
> With my patch which fix the wrong frame pointer(setup_return calculate the offset
> of fp through ilp32_sigframe instead of sigfreame), the backtrace is:
> (gdb) where
> #0 0x00400490 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 func1 () at test_force3.c:28
> #3 0x004004e4 in main (argc=1, argv=0xffe6f8f4) at test_force3.c:33
>
> I am not sure there is still some issue in kernel. But it seem that the gdb of ilp32
> does not work correctly when unwind without framepointer.
>
> The test code is:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <signal.h>
>
> void my_sig(int sig)
> {
>      printf("sig=%d\n", sig);
>      *(int *)0 = 0x0;
> }
>
>
> void func2()
> {
>      *(int *)0 = 0x0;
> }
>
> void func1()
> {
>      func2();
> }
>
> int main(int argc, char **argv)
> {
>      signal(11, my_sig);
>      func1();
>      return 0;
> }
>
>
> The full patch is as follows:
>
>  From 7e364a765097f57aed2d73f94c1688c2e7343e79 Mon Sep 17 00:00:00 2001
> From: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com>
> Date: Sat, 4 Jun 2016 14:30:05 +0800
> Subject: [PATCH] arm64: ilp32: fix for wrong fp offset when calculate the
>   new fp
>
> ILP32 define its own sigframe(ilp32_sigframe) because of the
> difference uc_context. setup_return do not use ilp32 specific
> sigframe to calculate the new offset of fp which lead to wrong
> fp in signal handler. At this circumstance, gdb backtrace will miss
> one item:
> (gdb) where
>
> It should be:
> (gdb) where
>
> The test code is as follows:
>
> void my_sig(int sig)
> {
>          printf("sig=%d\n", sig);
>          *(int *)0 = 0x0;
> }
>
> void func2(int num)
> {
>          printf("%s: %d\n", __FUNCTION__, num);
>          *(int *)0 = 0x0;
>          func2(num-1);
> }
>
> void func1(int num)
> {
>          printf("%s\n", __FUNCTION__);
>          func2(num - 1);
> }
>
> int main(int argc, char **argv)
> {
>          signal(11, my_sig);
>          func1(argc);
>          return 0;
> }
>
> This patch fix this by passing the correct offset of fp to
> setup_return.
> Test pass on both ILP32 and LP64 in aarch64 EE.
>
> Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com>
> ---
>   arch/arm64/include/asm/signal_common.h | 3 ++-
>   arch/arm64/kernel/signal.c             | 9 +++++----
>   arch/arm64/kernel/signal_ilp32.c       | 4 ++--
>   3 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm64/include/asm/signal_common.h b/arch/arm64/include/asm/signal_common.h
> index de93c71..a5d7b63 100644
> --- a/arch/arm64/include/asm/signal_common.h
> +++ b/arch/arm64/include/asm/signal_common.h
> @@ -29,6 +29,7 @@ int setup_sigcontex(struct sigcontext __user *uc_mcontext,
>               struct pt_regs *regs);
>   int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sf);
>   void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
> -            void __user *frame, off_t sigframe_off, int usig);
> +            void __user *frame, off_t sigframe_off, off_t fp_off,
> +            int usig);
>
>   #endif /* __ASM_SIGNAL_COMMON_H */
> diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
> index 038bebe..e66a6e9 100644
> --- a/arch/arm64/kernel/signal.c
> +++ b/arch/arm64/kernel/signal.c
> @@ -256,14 +256,14 @@ static struct rt_sigframe __user *get_sigframe(struct ksignal *ksig,
>   }
>
>   void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
> -             void __user *frame, off_t sigframe_off, int usig)
> +             void __user *frame, off_t sigframe_off, off_t fp_off,
> +             int usig)
>   {
>       __sigrestore_t sigtramp;
>
>       regs->regs[0] = usig;
>       regs->sp = (unsigned long)frame;
> -    regs->regs[29] = regs->sp + sigframe_off +
> -        offsetof(struct sigframe, fp);
> +    regs->regs[29] = regs->sp + sigframe_off + fp_off;
>       regs->pc = (unsigned long)ka->sa.sa_handler;
>
>       if (ka->sa.sa_flags & SA_RESTORER)
> @@ -294,7 +294,8 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
>       err |= setup_sigframe(&frame->sig, regs, set);
>       if (err == 0) {
>           setup_return(regs, &ksig->ka, frame,
> -            offsetof(struct rt_sigframe, sig), usig);
> +            offsetof(struct rt_sigframe, sig),
> +            offsetof(struct sigframe, fp), usig);
>           if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
>               err |= copy_siginfo_to_user(&frame->info, &ksig->info);
>               regs->regs[1] = (unsigned long)&frame->info;
> diff --git a/arch/arm64/kernel/signal_ilp32.c b/arch/arm64/kernel/signal_ilp32.c
> index a8ea73e..9030f14 100644
> --- a/arch/arm64/kernel/signal_ilp32.c
> +++ b/arch/arm64/kernel/signal_ilp32.c
> @@ -147,7 +147,6 @@ static struct ilp32_rt_sigframe __user *ilp32_get_sigframe(struct ksignal *ksig,
>       struct ilp32_rt_sigframe __user *frame;
>
>       sp = sp_top = sigsp(regs->sp, ksig);
> -
>       sp = (sp - sizeof(struct ilp32_rt_sigframe)) & ~15;
>       frame = (struct ilp32_rt_sigframe __user *)sp;
>
> @@ -183,7 +182,8 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig,
>       err |= setup_ilp32_sigframe(&frame->sig, regs, set);
>       if (err == 0) {
>           setup_return(regs, &ksig->ka, frame,
> -                 offsetof(struct ilp32_rt_sigframe, sig), usig);
> +                 offsetof(struct ilp32_rt_sigframe, sig),
> +                 offsetof(struct ilp32_sigframe, fp), usig);
>           regs->regs[1] = (unsigned long)&frame->info;
>           regs->regs[2] = (unsigned long)&frame->sig.uc;
>       }

WARNING: multiple messages have this Message-ID (diff)
From: "Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com>
To: Yury Norov <ynorov@caviumnetworks.com>,
	arnd@arndb.de, catalin.marinas@arm.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
	libc-alpha@sourceware.org
Cc: schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com,
	pinskia@gmail.com, broonie@kernel.org, joseph@codesourcery.com,
	christoph.muellner@theobroma-systems.com, szabolcs.nagy@arm.com,
	klimov.linux@gmail.com, Nathan_Lynch@mentor.com, agraf@suse.de,
	Prasun.Kapoor@caviumnetworks.com, kilobyte@angband.pl,
	geert@linux-m68k.org, philipp.tomsich@theobroma-systems.com,
	Andrew Pinski <apinski@cavium.com>,
	Andrew Pinski <Andrew.Pinski@caviumnetworks.com>,
	Hanjun Guo <guohanjun@huawei.com>,
	"Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com>
Subject: Re: [PATCH 21/23] arm64: ilp32: introduce ilp32-specific handlers for sigframe and ucontext
Date: Sun, 12 Jun 2016 20:34:39 +0800	[thread overview]
Message-ID: <575D56DF.8080203@huawei.com> (raw)
In-Reply-To: <5752BCC8.7080205@huawei.com>

ping

On 2016/6/4 19:34, Zhangjian (Bamvor) wrote:
> Hi,
>
> I found an issue of unwind with the following code. The correct backtrace
> should be:
> (gdb) where
> #0 0x004004d0 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 func2 (num=0) at test_force3.c:22
> #3 0x00400540 in func1 (num=1) at test_force3.c:28
> #4 0x00400574 in main (argc=1, argv=0xffd7bc04) at test_force3.c:33
>
> Without my patch, the backtrace is:
> (gdb) where
> #0 0x00400490 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 0x004004e4 in main (argc=1, argv=0xffe6f8f4) at test_force3.c:33
>
> With my patch which fix the wrong frame pointer(setup_return calculate the offset
> of fp through ilp32_sigframe instead of sigfreame), the backtrace is:
> (gdb) where
> #0 0x00400490 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 func1 () at test_force3.c:28
> #3 0x004004e4 in main (argc=1, argv=0xffe6f8f4) at test_force3.c:33
>
> I am not sure there is still some issue in kernel. But it seem that the gdb of ilp32
> does not work correctly when unwind without framepointer.
>
> The test code is:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <signal.h>
>
> void my_sig(int sig)
> {
>      printf("sig=%d\n", sig);
>      *(int *)0 = 0x0;
> }
>
>
> void func2()
> {
>      *(int *)0 = 0x0;
> }
>
> void func1()
> {
>      func2();
> }
>
> int main(int argc, char **argv)
> {
>      signal(11, my_sig);
>      func1();
>      return 0;
> }
>
>
> The full patch is as follows:
>
>  From 7e364a765097f57aed2d73f94c1688c2e7343e79 Mon Sep 17 00:00:00 2001
> From: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com>
> Date: Sat, 4 Jun 2016 14:30:05 +0800
> Subject: [PATCH] arm64: ilp32: fix for wrong fp offset when calculate the
>   new fp
>
> ILP32 define its own sigframe(ilp32_sigframe) because of the
> difference uc_context. setup_return do not use ilp32 specific
> sigframe to calculate the new offset of fp which lead to wrong
> fp in signal handler. At this circumstance, gdb backtrace will miss
> one item:
> (gdb) where
>
> It should be:
> (gdb) where
>
> The test code is as follows:
>
> void my_sig(int sig)
> {
>          printf("sig=%d\n", sig);
>          *(int *)0 = 0x0;
> }
>
> void func2(int num)
> {
>          printf("%s: %d\n", __FUNCTION__, num);
>          *(int *)0 = 0x0;
>          func2(num-1);
> }
>
> void func1(int num)
> {
>          printf("%s\n", __FUNCTION__);
>          func2(num - 1);
> }
>
> int main(int argc, char **argv)
> {
>          signal(11, my_sig);
>          func1(argc);
>          return 0;
> }
>
> This patch fix this by passing the correct offset of fp to
> setup_return.
> Test pass on both ILP32 and LP64 in aarch64 EE.
>
> Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com>
> ---
>   arch/arm64/include/asm/signal_common.h | 3 ++-
>   arch/arm64/kernel/signal.c             | 9 +++++----
>   arch/arm64/kernel/signal_ilp32.c       | 4 ++--
>   3 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm64/include/asm/signal_common.h b/arch/arm64/include/asm/signal_common.h
> index de93c71..a5d7b63 100644
> --- a/arch/arm64/include/asm/signal_common.h
> +++ b/arch/arm64/include/asm/signal_common.h
> @@ -29,6 +29,7 @@ int setup_sigcontex(struct sigcontext __user *uc_mcontext,
>               struct pt_regs *regs);
>   int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sf);
>   void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
> -            void __user *frame, off_t sigframe_off, int usig);
> +            void __user *frame, off_t sigframe_off, off_t fp_off,
> +            int usig);
>
>   #endif /* __ASM_SIGNAL_COMMON_H */
> diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
> index 038bebe..e66a6e9 100644
> --- a/arch/arm64/kernel/signal.c
> +++ b/arch/arm64/kernel/signal.c
> @@ -256,14 +256,14 @@ static struct rt_sigframe __user *get_sigframe(struct ksignal *ksig,
>   }
>
>   void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
> -             void __user *frame, off_t sigframe_off, int usig)
> +             void __user *frame, off_t sigframe_off, off_t fp_off,
> +             int usig)
>   {
>       __sigrestore_t sigtramp;
>
>       regs->regs[0] = usig;
>       regs->sp = (unsigned long)frame;
> -    regs->regs[29] = regs->sp + sigframe_off +
> -        offsetof(struct sigframe, fp);
> +    regs->regs[29] = regs->sp + sigframe_off + fp_off;
>       regs->pc = (unsigned long)ka->sa.sa_handler;
>
>       if (ka->sa.sa_flags & SA_RESTORER)
> @@ -294,7 +294,8 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
>       err |= setup_sigframe(&frame->sig, regs, set);
>       if (err == 0) {
>           setup_return(regs, &ksig->ka, frame,
> -            offsetof(struct rt_sigframe, sig), usig);
> +            offsetof(struct rt_sigframe, sig),
> +            offsetof(struct sigframe, fp), usig);
>           if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
>               err |= copy_siginfo_to_user(&frame->info, &ksig->info);
>               regs->regs[1] = (unsigned long)&frame->info;
> diff --git a/arch/arm64/kernel/signal_ilp32.c b/arch/arm64/kernel/signal_ilp32.c
> index a8ea73e..9030f14 100644
> --- a/arch/arm64/kernel/signal_ilp32.c
> +++ b/arch/arm64/kernel/signal_ilp32.c
> @@ -147,7 +147,6 @@ static struct ilp32_rt_sigframe __user *ilp32_get_sigframe(struct ksignal *ksig,
>       struct ilp32_rt_sigframe __user *frame;
>
>       sp = sp_top = sigsp(regs->sp, ksig);
> -
>       sp = (sp - sizeof(struct ilp32_rt_sigframe)) & ~15;
>       frame = (struct ilp32_rt_sigframe __user *)sp;
>
> @@ -183,7 +182,8 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig,
>       err |= setup_ilp32_sigframe(&frame->sig, regs, set);
>       if (err == 0) {
>           setup_return(regs, &ksig->ka, frame,
> -                 offsetof(struct ilp32_rt_sigframe, sig), usig);
> +                 offsetof(struct ilp32_rt_sigframe, sig),
> +                 offsetof(struct ilp32_sigframe, fp), usig);
>           regs->regs[1] = (unsigned long)&frame->info;
>           regs->regs[2] = (unsigned long)&frame->sig.uc;
>       }

WARNING: multiple messages have this Message-ID (diff)
From: bamvor.zhangjian@huawei.com (Zhangjian (Bamvor))
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 21/23] arm64: ilp32: introduce ilp32-specific handlers for sigframe and ucontext
Date: Sun, 12 Jun 2016 20:34:39 +0800	[thread overview]
Message-ID: <575D56DF.8080203@huawei.com> (raw)
In-Reply-To: <5752BCC8.7080205@huawei.com>

ping

On 2016/6/4 19:34, Zhangjian (Bamvor) wrote:
> Hi,
>
> I found an issue of unwind with the following code. The correct backtrace
> should be:
> (gdb) where
> #0 0x004004d0 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 func2 (num=0) at test_force3.c:22
> #3 0x00400540 in func1 (num=1) at test_force3.c:28
> #4 0x00400574 in main (argc=1, argv=0xffd7bc04) at test_force3.c:33
>
> Without my patch, the backtrace is:
> (gdb) where
> #0 0x00400490 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 0x004004e4 in main (argc=1, argv=0xffe6f8f4) at test_force3.c:33
>
> With my patch which fix the wrong frame pointer(setup_return calculate the offset
> of fp through ilp32_sigframe instead of sigfreame), the backtrace is:
> (gdb) where
> #0 0x00400490 in my_sig (sig=11) at test_force3.c:16
> #1 <signal handler called>
> #2 func1 () at test_force3.c:28
> #3 0x004004e4 in main (argc=1, argv=0xffe6f8f4) at test_force3.c:33
>
> I am not sure there is still some issue in kernel. But it seem that the gdb of ilp32
> does not work correctly when unwind without framepointer.
>
> The test code is:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <signal.h>
>
> void my_sig(int sig)
> {
>      printf("sig=%d\n", sig);
>      *(int *)0 = 0x0;
> }
>
>
> void func2()
> {
>      *(int *)0 = 0x0;
> }
>
> void func1()
> {
>      func2();
> }
>
> int main(int argc, char **argv)
> {
>      signal(11, my_sig);
>      func1();
>      return 0;
> }
>
>
> The full patch is as follows:
>
>  From 7e364a765097f57aed2d73f94c1688c2e7343e79 Mon Sep 17 00:00:00 2001
> From: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com>
> Date: Sat, 4 Jun 2016 14:30:05 +0800
> Subject: [PATCH] arm64: ilp32: fix for wrong fp offset when calculate the
>   new fp
>
> ILP32 define its own sigframe(ilp32_sigframe) because of the
> difference uc_context. setup_return do not use ilp32 specific
> sigframe to calculate the new offset of fp which lead to wrong
> fp in signal handler. At this circumstance, gdb backtrace will miss
> one item:
> (gdb) where
>
> It should be:
> (gdb) where
>
> The test code is as follows:
>
> void my_sig(int sig)
> {
>          printf("sig=%d\n", sig);
>          *(int *)0 = 0x0;
> }
>
> void func2(int num)
> {
>          printf("%s: %d\n", __FUNCTION__, num);
>          *(int *)0 = 0x0;
>          func2(num-1);
> }
>
> void func1(int num)
> {
>          printf("%s\n", __FUNCTION__);
>          func2(num - 1);
> }
>
> int main(int argc, char **argv)
> {
>          signal(11, my_sig);
>          func1(argc);
>          return 0;
> }
>
> This patch fix this by passing the correct offset of fp to
> setup_return.
> Test pass on both ILP32 and LP64 in aarch64 EE.
>
> Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com>
> ---
>   arch/arm64/include/asm/signal_common.h | 3 ++-
>   arch/arm64/kernel/signal.c             | 9 +++++----
>   arch/arm64/kernel/signal_ilp32.c       | 4 ++--
>   3 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm64/include/asm/signal_common.h b/arch/arm64/include/asm/signal_common.h
> index de93c71..a5d7b63 100644
> --- a/arch/arm64/include/asm/signal_common.h
> +++ b/arch/arm64/include/asm/signal_common.h
> @@ -29,6 +29,7 @@ int setup_sigcontex(struct sigcontext __user *uc_mcontext,
>               struct pt_regs *regs);
>   int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sf);
>   void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
> -            void __user *frame, off_t sigframe_off, int usig);
> +            void __user *frame, off_t sigframe_off, off_t fp_off,
> +            int usig);
>
>   #endif /* __ASM_SIGNAL_COMMON_H */
> diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
> index 038bebe..e66a6e9 100644
> --- a/arch/arm64/kernel/signal.c
> +++ b/arch/arm64/kernel/signal.c
> @@ -256,14 +256,14 @@ static struct rt_sigframe __user *get_sigframe(struct ksignal *ksig,
>   }
>
>   void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
> -             void __user *frame, off_t sigframe_off, int usig)
> +             void __user *frame, off_t sigframe_off, off_t fp_off,
> +             int usig)
>   {
>       __sigrestore_t sigtramp;
>
>       regs->regs[0] = usig;
>       regs->sp = (unsigned long)frame;
> -    regs->regs[29] = regs->sp + sigframe_off +
> -        offsetof(struct sigframe, fp);
> +    regs->regs[29] = regs->sp + sigframe_off + fp_off;
>       regs->pc = (unsigned long)ka->sa.sa_handler;
>
>       if (ka->sa.sa_flags & SA_RESTORER)
> @@ -294,7 +294,8 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
>       err |= setup_sigframe(&frame->sig, regs, set);
>       if (err == 0) {
>           setup_return(regs, &ksig->ka, frame,
> -            offsetof(struct rt_sigframe, sig), usig);
> +            offsetof(struct rt_sigframe, sig),
> +            offsetof(struct sigframe, fp), usig);
>           if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
>               err |= copy_siginfo_to_user(&frame->info, &ksig->info);
>               regs->regs[1] = (unsigned long)&frame->info;
> diff --git a/arch/arm64/kernel/signal_ilp32.c b/arch/arm64/kernel/signal_ilp32.c
> index a8ea73e..9030f14 100644
> --- a/arch/arm64/kernel/signal_ilp32.c
> +++ b/arch/arm64/kernel/signal_ilp32.c
> @@ -147,7 +147,6 @@ static struct ilp32_rt_sigframe __user *ilp32_get_sigframe(struct ksignal *ksig,
>       struct ilp32_rt_sigframe __user *frame;
>
>       sp = sp_top = sigsp(regs->sp, ksig);
> -
>       sp = (sp - sizeof(struct ilp32_rt_sigframe)) & ~15;
>       frame = (struct ilp32_rt_sigframe __user *)sp;
>
> @@ -183,7 +182,8 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig,
>       err |= setup_ilp32_sigframe(&frame->sig, regs, set);
>       if (err == 0) {
>           setup_return(regs, &ksig->ka, frame,
> -                 offsetof(struct ilp32_rt_sigframe, sig), usig);
> +                 offsetof(struct ilp32_rt_sigframe, sig),
> +                 offsetof(struct ilp32_sigframe, fp), usig);
>           regs->regs[1] = (unsigned long)&frame->info;
>           regs->regs[2] = (unsigned long)&frame->sig.uc;
>       }

  reply	other threads:[~2016-06-12 12:35 UTC|newest]

Thread overview: 207+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-24  0:04 [PATCH v6 00/21] ILP32 for ARM64 Yury Norov
2016-05-24  0:04 ` Yury Norov
2016-05-24  0:04 ` Yury Norov
2016-05-24  0:04 ` [PATCH 01/23] all: syscall wrappers: add documentation Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-25 19:30   ` David Miller
2016-05-25 19:30     ` David Miller
2016-05-25 20:03     ` Yury Norov
2016-05-25 20:03       ` Yury Norov
2016-05-25 20:03       ` Yury Norov
2016-05-25 20:21       ` David Miller
2016-05-25 20:21         ` David Miller
2016-05-25 20:47         ` Arnd Bergmann
2016-05-25 20:47           ` Arnd Bergmann
2016-05-25 20:50           ` David Miller
2016-05-25 20:50             ` David Miller
2016-05-25 21:01             ` Arnd Bergmann
2016-05-25 21:01               ` Arnd Bergmann
2016-05-25 21:28               ` David Miller
2016-05-25 21:28                 ` David Miller
2016-05-26 14:20                 ` Catalin Marinas
2016-05-26 14:20                   ` Catalin Marinas
2016-05-26 14:50                   ` Szabolcs Nagy
2016-05-26 14:50                     ` Szabolcs Nagy
2016-05-26 14:50                     ` Szabolcs Nagy
2016-05-26 15:19                     ` Catalin Marinas
2016-05-26 15:19                       ` Catalin Marinas
2016-05-26 19:43                   ` David Miller
2016-05-26 19:43                     ` David Miller
2016-05-27 10:10                     ` Catalin Marinas
2016-05-27 10:10                       ` Catalin Marinas
2016-05-26 20:48                 ` Yury Norov
2016-05-26 20:48                   ` Yury Norov
2016-05-26 20:48                   ` Yury Norov
2016-05-26 22:29                   ` Catalin Marinas
2016-05-26 22:29                     ` Catalin Marinas
2016-05-27  0:37                     ` Yury Norov
2016-05-27  0:37                       ` Yury Norov
2016-05-27  0:37                       ` Yury Norov
2016-05-27  6:03                       ` Heiko Carstens
2016-05-27  6:03                         ` Heiko Carstens
2016-05-27  8:42                         ` Arnd Bergmann
2016-05-27  8:42                           ` Arnd Bergmann
2016-05-27  9:30                           ` Catalin Marinas
2016-05-27  9:30                             ` Catalin Marinas
2016-05-27 10:49                             ` Arnd Bergmann
2016-05-27 10:49                               ` Arnd Bergmann
2016-05-27 13:04                               ` Catalin Marinas
2016-05-27 13:04                                 ` Catalin Marinas
2016-05-27 16:58                                 ` Yury Norov
2016-05-27 16:58                                   ` Yury Norov
2016-05-27 16:58                                   ` Yury Norov
2016-05-27 17:36                                   ` Catalin Marinas
2016-05-27 17:36                                     ` Catalin Marinas
2016-05-27  9:01                         ` Catalin Marinas
2016-05-27  9:01                           ` Catalin Marinas
2016-06-14 23:08                     ` Yury Norov
2016-06-14 23:08                       ` Yury Norov
2016-06-14 23:08                       ` Yury Norov
2016-05-27  5:52     ` Heiko Carstens
2016-05-27  5:52       ` Heiko Carstens
2016-05-24  0:04 ` [PATCH 02/23] all: introduce COMPAT_WRAPPER option and enable it for s390 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 03/23] all: s390: move wrapper infrastructure to generic headers Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 04/23] all: s390: move compat_wrappers.c from arch/s390/kernel to kernel/ Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 05/23] all: wrap needed syscalls in generic unistd Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 06/23] compat ABI: use non-compat openat and open_by_handle_at variants Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 07/23] 32-bit ABI: introduce ARCH_32BIT_OFF_T config option Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 08/23] arm64: ilp32: add documentation on the ILP32 ABI for ARM64 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 09/23] arm64: ensure the kernel is compiled for LP64 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 10/23] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 11/23] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 12/23] thread: move thread bits accessors to separated file Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 13/23] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-06-12 12:21   ` Zhangjian (Bamvor)
2016-06-12 12:21     ` Zhangjian (Bamvor)
2016-06-12 12:21     ` Zhangjian (Bamvor)
2016-06-12 13:08     ` Zhangjian (Bamvor)
2016-06-12 13:08       ` Zhangjian (Bamvor)
2016-06-12 13:08       ` Zhangjian (Bamvor)
2016-06-12 17:56       ` Yury Norov
2016-06-12 17:56         ` Yury Norov
2016-06-12 17:56         ` Yury Norov
2016-05-24  0:04 ` [PATCH 14/23] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Yury Norov
2016-05-24  0:04   ` [PATCH 14/23] arm64: ilp32: add is_ilp32_compat_{task, thread} " Yury Norov
2016-05-24  0:04   ` [PATCH 14/23] arm64: ilp32: add is_ilp32_compat_{task,thread} " Yury Norov
2016-05-24  0:04 ` [PATCH 15/23] arm64: introduce binfmt_elf32.c Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 16/23] arm64: ilp32: introduce binfmt_ilp32.c Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-26 13:49   ` Zhangjian (Bamvor)
2016-05-26 13:49     ` Zhangjian (Bamvor)
2016-05-26 13:49     ` Zhangjian (Bamvor)
2016-05-26 21:08     ` Yury Norov
2016-05-26 21:08       ` Yury Norov
2016-05-26 21:08       ` Yury Norov
2016-06-15  0:40     ` Yury Norov
2016-06-15  0:40       ` Yury Norov
2016-06-15  0:40       ` Yury Norov
2016-06-13  3:05   ` Zhangjian (Bamvor)
2016-06-13  3:05     ` Zhangjian (Bamvor)
2016-06-13  3:05     ` Zhangjian (Bamvor)
2016-06-13 13:22     ` Zhangjian (Bamvor)
2016-06-13 13:22       ` Zhangjian (Bamvor)
2016-06-13 13:22       ` Zhangjian (Bamvor)
2016-05-24  0:04 ` [PATCH 17/23] arm64: ptrace: handle ptrace_request differently for aarch32 and ilp32 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-06-08  1:34   ` zhouchengming
2016-06-08  1:34     ` zhouchengming
2016-06-08  1:34     ` zhouchengming
2016-06-08 17:00     ` Yury Norov
2016-06-08 17:00       ` Yury Norov
2016-06-08 17:00       ` Yury Norov
2016-06-25  9:36       ` zhouchengming
2016-06-25  9:36         ` zhouchengming
2016-06-25  9:36         ` zhouchengming
2016-06-25 14:15         ` Bamvor Zhang
2016-06-25 14:15           ` Bamvor Zhang
2016-06-27  2:09           ` zhouchengming
2016-06-27  2:09             ` zhouchengming
2016-06-27  2:09             ` zhouchengming
2016-05-24  0:04 ` [PATCH 18/23] arm64: ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-25 20:26   ` Arnd Bergmann
2016-05-25 20:26     ` Arnd Bergmann
2016-05-24  0:04 ` [PATCH 19/23] arm64: signal: share lp64 signal routines to ilp32 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 20/23] arm64: signal32: move ilp32 and aarch32 common code to separated file Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 21/23] arm64: ilp32: introduce ilp32-specific handlers for sigframe and ucontext Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-06-04 11:34   ` Zhangjian (Bamvor)
2016-06-04 11:34     ` Zhangjian (Bamvor)
2016-06-04 11:34     ` Zhangjian (Bamvor)
2016-06-12 12:34     ` Zhangjian (Bamvor) [this message]
2016-06-12 12:34       ` Zhangjian (Bamvor)
2016-06-12 12:34       ` Zhangjian (Bamvor)
2016-06-12 13:12     ` Zhangjian (Bamvor)
2016-06-12 13:12       ` Zhangjian (Bamvor)
2016-06-12 13:12       ` Zhangjian (Bamvor)
2016-06-12 17:44     ` Yury Norov
2016-06-12 17:44       ` Yury Norov
2016-06-12 17:44       ` Yury Norov
2016-06-16 11:21       ` Zhangjian (Bamvor)
2016-06-16 11:21         ` Zhangjian (Bamvor)
2016-06-16 11:21         ` Zhangjian (Bamvor)
2016-06-12 12:39   ` Zhangjian (Bamvor)
2016-06-12 12:39     ` Zhangjian (Bamvor)
2016-06-12 12:39     ` Zhangjian (Bamvor)
2016-05-24  0:04 ` [PATCH 22/23] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 23/23] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-25 10:42 ` [PATCH v6 00/21] ILP32 for ARM64 Szabolcs Nagy
2016-05-25 10:42   ` Szabolcs Nagy
2016-05-25 10:42   ` Szabolcs Nagy
2016-05-25 16:41   ` Yury Norov
2016-05-25 16:41     ` Yury Norov
2016-05-25 16:41     ` Yury Norov
2016-06-02 19:03 ` Yury Norov
2016-06-02 19:03   ` Yury Norov
2016-06-02 19:03   ` Yury Norov
2016-06-02 19:03   ` Yury Norov
2016-06-03 11:02   ` Szabolcs Nagy
2016-06-03 11:02     ` Szabolcs Nagy
2016-06-03 11:02     ` Szabolcs Nagy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=575D56DF.8080203@huawei.com \
    --to=bamvor.zhangjian@huawei.com \
    --cc=Andrew.Pinski@caviumnetworks.com \
    --cc=Nathan_Lynch@mentor.com \
    --cc=Prasun.Kapoor@caviumnetworks.com \
    --cc=agraf@suse.de \
    --cc=apinski@cavium.com \
    --cc=arnd@arndb.de \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoph.muellner@theobroma-systems.com \
    --cc=geert@linux-m68k.org \
    --cc=guohanjun@huawei.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=joseph@codesourcery.com \
    --cc=kilobyte@angband.pl \
    --cc=klimov.linux@gmail.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=philipp.tomsich@theobroma-systems.com \
    --cc=pinskia@gmail.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=szabolcs.nagy@arm.com \
    --cc=ynorov@caviumnetworks.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.