From: Jan Stancek <jstancek@redhat.com>
To: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
Cc: vasily isaenko <vasily.isaenko@oracle.com>,
ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH 1/2] ltp_rt_sigaction: SPARC fixes for -O0
Date: Mon, 17 Aug 2015 08:49:43 -0400 (EDT) [thread overview]
Message-ID: <980148897.10916298.1439815783172.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <1439813598-11524-1-git-send-email-stanislav.kholmanskikh@oracle.com>
----- Original Message -----
> From: "Stanislav Kholmanskikh" <stanislav.kholmanskikh@oracle.com>
> To: ltp-list@lists.sourceforge.net
> Cc: "vasily isaenko" <vasily.isaenko@oracle.com>
> Sent: Monday, 17 August, 2015 2:13:17 PM
> Subject: [LTP] [PATCH 1/2] ltp_rt_sigaction: SPARC fixes for -O0
>
> The *sigreturn_stub functions are copied from glibc, and they
> work only if optimization > 0, since they expect that the compiler
> does not add an epilogue.
Isn't that prologue?
Other than that it looks good to me, ACK.
Regards,
Jan
>
> For example, with -O > 0:
>
> 0000000000102140 <__rt_sigreturn_stub>:
> 102140: 82 10 20 65 mov 0x65, %g1 ! 65 <_init-0x101f23>
> 102144: 91 d0 20 6d ta 0x6d
> 102148: 81 c3 e0 08 retl
> 10214c: 01 00 00 00 nop
>
> but without -O:
>
> 000000000010212c <__rt_sigreturn_stub>:
> 10212c: 9d e3 bf 50 save %sp, -176, %sp <--- this
> 102130: 82 10 20 65 mov 0x65, %g1
> 102134: 91 d0 20 6d ta 0x6d
> 102138: 81 cf e0 08 rett %i7 + 8
> 10213c: 01 00 00 00 nop
>
> Therefore, if we build LTP with OPT_CFLAGS="", ltp_rt_sigaction() will
> malfunction.
>
> To avoid this, let's declare a new symbol pointing to the instruction we
> need ('mov ...').
>
> The trick was proposed by Jose E. Marchesi <jose.marchesi@oracle.com>.
>
> Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
> ---
> include/lapi/rt_sigaction.h | 20 ++++++++++++--------
> 1 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/include/lapi/rt_sigaction.h b/include/lapi/rt_sigaction.h
> index 46f6a50..f99c372 100644
> --- a/include/lapi/rt_sigaction.h
> +++ b/include/lapi/rt_sigaction.h
> @@ -105,12 +105,14 @@ static inline int sig_initial(int sig)
> # if defined __arch64__ || defined __sparcv9
>
> /*
> - * From glibc/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c
> + * Based on glibc/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c
> */
>
> +extern char *__rt_sig_stub;
> +
> static void __rt_sigreturn_stub(void)
> {
> - __asm__ ("mov %0, %%g1\n\t"
> + __asm__ ("__rt_sig_stub: mov %0, %%g1\n\t"
> "ta 0x6d\n\t"
> : /* no outputs */
> : "i" (__NR_rt_sigreturn));
> @@ -119,12 +121,14 @@ static void __rt_sigreturn_stub(void)
> # else /* sparc32 */
>
> /*
> - * From glibc/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
> + * Based on glibc/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
> */
>
> +extern char *__rt_sig_stub, *__sig_stub;
> +
> static void __rt_sigreturn_stub(void)
> {
> - __asm__ ("mov %0, %%g1\n\t"
> + __asm__ ("__rt_sig_stub: mov %0, %%g1\n\t"
> "ta 0x10\n\t"
> : /* no outputs */
> : "i" (__NR_rt_sigreturn));
> @@ -132,7 +136,7 @@ static void __rt_sigreturn_stub(void)
>
> static void __sigreturn_stub(void)
> {
> - __asm__ ("mov %0, %%g1\n\t"
> + __asm__ ("__sig_stub: mov %0, %%g1\n\t"
> "ta 0x10\n\t"
> : /* no outputs */
> : "i" (__NR_sigreturn));
> @@ -181,12 +185,12 @@ static int ltp_rt_sigaction(int signum, const struct
> sigaction *act,
> #ifdef __sparc__
> unsigned long stub = 0;
> # if defined __arch64__ || defined __sparcv9
> - stub = ((unsigned long) &__rt_sigreturn_stub) - 8;
> + stub = ((unsigned long) &__rt_sig_stub) - 8;
> # else /* sparc32 */
> if ((kact.sa_flags & SA_SIGINFO) != 0)
> - stub = ((unsigned long) &__rt_sigreturn_stub) - 8;
> + stub = ((unsigned long) &__rt_sig_stub) - 8;
> else
> - stub = ((unsigned long) &__sigreturn_stub) - 8;
> + stub = ((unsigned long) &__sig_stub) - 8;
> # endif
> #endif
>
> --
> 1.7.1
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> Ltp-list mailing list
> Ltp-list@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next prev parent reply other threads:[~2015-08-17 12:49 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-17 12:13 [LTP] [PATCH 1/2] ltp_rt_sigaction: SPARC fixes for -O0 Stanislav Kholmanskikh
2015-08-17 12:13 ` [LTP] [PATCH 2/2] containers: allow linking with additional libs Stanislav Kholmanskikh
2015-08-17 12:49 ` Jan Stancek [this message]
2015-08-17 13:17 ` [LTP] [PATCH 1/2] ltp_rt_sigaction: SPARC fixes for -O0 Stanislav Kholmanskikh
2015-08-19 14:22 ` Stanislav Kholmanskikh
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=980148897.10916298.1439815783172.JavaMail.zimbra@redhat.com \
--to=jstancek@redhat.com \
--cc=ltp-list@lists.sourceforge.net \
--cc=stanislav.kholmanskikh@oracle.com \
--cc=vasily.isaenko@oracle.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox