mailing list of musl libc
 help / color / mirror / code / Atom feed
From: <sidneym@codeaurora.org>
To: <musl@lists.openwall.com>
Subject: RE: [musl] sigsetjmp
Date: Mon, 8 Jun 2020 20:01:24 -0500	[thread overview]
Message-ID: <0bbd01d63df9$7fd69a50$7f83cef0$@codeaurora.org> (raw)
In-Reply-To: <20200608171057.GC1079@brightrain.aerifal.cx>



> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Monday, June 8, 2020 12:11 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] sigsetjmp
> 
> On Sun, Jun 07, 2020 at 08:45:11PM -0500, sidneym@codeaurora.org wrote:
> > Wanting to make sure I'm reading the requirements correctly.
> >
> > Looks like this routine only needs to save the link register and env,
> > call setjmp then restore the link register and env followed by the tail
call.
> 
> Yes, that's correct. This is an unconventional design but necessary so
that the
> stack frame has already been restored when signals are unmasked by
> siglongjmp. See the message for commit
> 583e55122e767b1586286a0d9c35e2a4027998ab for a description of how this
> works.
> 
> > Hexagon was out of date so I did this:
> >
> >
> >
> > ..balign 4
> >
> > ..type sigsetjmp,@function
> >
> > sigsetjmp:
> >
> >         // if savemask is 0 sigsetjmp behaves like setjmp
> >
> >         {
> >
> >                 p0 = cmp.eq(r1, #0)
> >
> >                 if (p0.new) jump:t ##setjmp
> >
> >         }
> >
> >         {
> >
> >                 memw(r0+#64+4) = r16  // save r16 in __ss[0]
> >
> >                 memw(r0+#64)   = r31  // save linkregister in __fl
> >
> >                 r16 = r0
> >
> >         }
> 
> This is not correct. __ss[0] is occupied by the saved signal mask, and
will be
> clobbered when it's saved in the tail call. Instead you need to use unused
space
> in struct __jmp_buf_tag. The canonical place is
> (char*)__ss+8 (the "HURD ABI area" :) assuming _NSIG==65.

I was not able to find a description of the HURD ABI area is it documented
someplace?

So upon entry to sigsetjmp __ss[0] is holding the saved mask and using
__ss[0] to buffer r16 will clobber it, correct?  As it is coded __ss[0] is
just used over the call to setjmp to preserve the value of r16.

If __ss is r0+#64+4, then you are suggesting that I use r0+#64+4+8 or
__ss[2]. I need to look into this some more because with that I'm have some
testcase issues.

Thanks,


> 
> Rich


  reply	other threads:[~2020-06-09  1:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-08  1:45 sidneym
2020-06-08 17:10 ` Rich Felker
2020-06-09  1:01   ` sidneym [this message]
2020-06-09  1:12     ` Rich Felker
2020-06-10 17:44       ` sidneym

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='0bbd01d63df9$7fd69a50$7f83cef0$@codeaurora.org' \
    --to=sidneym@codeaurora.org \
    --cc=musl@lists.openwall.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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).