public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
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

  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