All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markos Chandras <Markos.Chandras@imgtec.com>
To: Dave Jones <davej@redhat.com>
Cc: trinity@vger.kernel.org
Subject: Re: [PATCH] syscall: Take SYSCALL_OFFSET into account
Date: Thu, 15 May 2014 09:26:08 +0100	[thread overview]
Message-ID: <53747A20.1020305@imgtec.com> (raw)
In-Reply-To: <20140514152209.GA15614@redhat.com>

On 05/14/2014 04:22 PM, Dave Jones wrote:
> On Wed, May 14, 2014 at 12:35:38PM +0100, Markos Chandras wrote:
>  > MIPS and IA64 have their syscall tables starting at non-zero
>  > offsets so take that into account when executing a sycall
>  > otherwise trinity just fails with ENOSYS error messages.
>  > 
>  > Tested on MIPS 32/LE system.
>  > 
>  > Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
>  > ---
>  >  syscall.c | 5 +++--
>  >  1 file changed, 3 insertions(+), 2 deletions(-)
>  > 
>  > diff --git a/syscall.c b/syscall.c
>  > index 968962b..a1ccb6b 100644
>  > --- a/syscall.c
>  > +++ b/syscall.c
>  > @@ -79,6 +79,7 @@ static long syscall32(unsigned int call,
>  >  static unsigned long do_syscall(int childno, int *errno_saved)
>  >  {
>  >  	int nr = shm->syscall[childno].nr;
>  > +	int call = nr + SYSCALL_OFFSET;
>  >  	unsigned long a1, a2, a3, a4, a5, a6;
>  >  	unsigned long ret = 0;
>  >  
>  > @@ -99,9 +100,9 @@ static unsigned long do_syscall(int childno, int *errno_saved)
>  >  	errno = 0;
>  >  
>  >  	if (shm->syscall[childno].do32bit == FALSE)
>  > -		ret = syscall(nr, a1, a2, a3, a4, a5, a6);
>  > +		ret = syscall(call, a1, a2, a3, a4, a5, a6);
>  >  	else
>  > -		ret = syscall32(nr, a1, a2, a3, a4, a5, a6);
>  > +		ret = syscall32(call, a1, a2, a3, a4, a5, a6);
>  >  
>  >  	*errno_saved = errno;
> 
> Oops. This was the intention of the code in mkcall() that calls
> do_syscall().
> 
> 152         /* Some architectures (IA64/MIPS) start their Linux syscalls
> 153          * At non-zero, and have other ABIs below.
> 154          */
> 155         call += SYSCALL_OFFSET;
> 
> Looking at that code closer, it seems that the code around line 193
> will do the wrong thing on MIPS/IA64 because we've done this addition.
> 
> I'm wondering if just removing those lines I just quoted would be
> the right thing to do (after applying your patch).
> 
> 	Dave
> 
Hi Dave,

Removing these four lines may work but it will break the following:

209                 output(1, "%s (%d) returned ENOSYS, marking as
inactive.\n",
210                         entry->name, call);

'call' will have the syscall (shm->syscall[childno].nr) number without
the offset which will simply print the wrong syscall number for mips and
ia64.

I am not that familiar with the code yet to be able to tell whether the
'search_syscall_table' or 'deactivate_syscall' functions need the offset
as well or not.

-- 
markos

  reply	other threads:[~2014-05-15  8:26 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-14 11:35 [PATCH] syscall: Take SYSCALL_OFFSET into account Markos Chandras
2014-05-14 15:22 ` Dave Jones
2014-05-15  8:26   ` Markos Chandras [this message]
2014-05-15 15:23     ` Dave Jones

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=53747A20.1020305@imgtec.com \
    --to=markos.chandras@imgtec.com \
    --cc=davej@redhat.com \
    --cc=trinity@vger.kernel.org \
    /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.