linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Romeo Cane <romeo.cane.ext@coriant.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] powerpc: fix sys_call_table declaration
Date: Fri, 3 Oct 2014 11:00:46 +0100	[thread overview]
Message-ID: <20141003100046.GB2144@rcane-VirtualBox> (raw)
In-Reply-To: <1412285674.28143.35.camel@pasglop>

On Fri, Oct 03, 2014 at 07:34:34AM +1000, Benjamin Herrenschmidt wrote:
> On Thu, 2014-10-02 at 15:41 +0100, Romeo Cane wrote:
> > Declaring sys_call_table as a pointer causes the compiler to generate the wrong lookup code in arch_syscall_addr
> 
> Care to elaborate ?
> 
> Ben.
> 
> > Signed-off-by: Romeo Cane <romeo.cane.ext@coriant.com>
> > ---
> >  arch/powerpc/include/asm/syscall.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h
> > index b54b2ad..528ba9d 100644
> > --- a/arch/powerpc/include/asm/syscall.h
> > +++ b/arch/powerpc/include/asm/syscall.h
> > @@ -17,7 +17,7 @@
> >  
> >  /* ftrace syscalls requires exporting the sys_call_table */
> >  #ifdef CONFIG_FTRACE_SYSCALLS
> > -extern const unsigned long *sys_call_table;
> > +extern const unsigned long sys_call_table[];
> >  #endif /* CONFIG_FTRACE_SYSCALLS */
> >  
> >  static inline long syscall_get_nr(struct task_struct *task,
> 
>

Hi Ben,

this is the arch_syscall_addr function from kernel/trace/trace_syscalls.c:

unsigned long __init __weak arch_syscall_addr(int nr)
{
    return (unsigned long)sys_call_table[nr];
}

on my platform (E500MC) the generated assembly code is as follows:

without the patch:
  <arch_syscall_addr>:
     lis     r9,-16384
     rlwinm  r3,r3,2,0,29
     lwz     r11,30640(r9)
     lwzx    r3,r11,r3
     blr

with the patch:
  <arch_syscall_addr>:
     lis     r9,-16384
     rlwinm  r3,r3,2,0,29
     addi    r9,r9,30640
     lwzx    r3,r9,r3
     blr


the goal of the function is to retrieve the n-th element of the table (i.e. the address of a syscall)
Without the patch, the returned value is in fact the memory content pointed by the address of the first syscall plus an offset, that is not what we want.
The consequence is that ftrace of syscalls doesn't work.

That table has always been declared as a pointer since the support for syscalls tracing has been introduced for powerpc years ago, so I'm wondering why nobody else had this problem before.
Other architectures are not affected since in their includes the table is already declared as an array.


Romeo
 

  reply	other threads:[~2014-10-03 10:01 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-02 14:41 [PATCH] powerpc: fix sys_call_table declaration Romeo Cane
2014-10-02 21:34 ` Benjamin Herrenschmidt
2014-10-03 10:00   ` Romeo Cane [this message]
2014-10-07 12:15     ` Michael Ellerman

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=20141003100046.GB2144@rcane-VirtualBox \
    --to=romeo.cane.ext@coriant.com \
    --cc=benh@kernel.crashing.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=paulus@samba.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 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).