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 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.