ARM tracehook support
Wade Farnsworth
wade_farnsworth at mentor.com
Mon Feb 20 13:08:57 EST 2012
Will Deacon wrote:
> On Mon, Feb 20, 2012 at 03:37:57PM +0000, Wade Farnsworth wrote:
>> Hi all,
>
> Hello Wade,
>
>> A few months back, Steven Walter posted some patches that implemement
>> syscall tracing support for ARM:
>>
>> http://lists.arm.linux.org.uk/lurker/message/20111129.162812.bd17d9b5.en.html#linux-arm-kernel
>>
>> I've been working on SystemTap support for ARM, and the tracehook patch
>> in particular is interesting in that respect. With that patch applied,
>> it would allow utrace to be supported on ARM, which is necessary for
>> userspace stap probes to function properly.
>>
>> From what testing I've done, the patches don't appear to be harmful.
>> So, I'm wondering what's preventing this from being pushed into
>> mainline? Are there still outstanding issues that need to be addressed?
>
> Yup, I posted some questions here:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2011-December/074802.html
OK, so to continue that conversation:
Will Deacon wrote:
> On Wed, Nov 30, 2011 at 02:46:20PM +0000, Steven Walter wrote:
>> +static inline void syscall_get_arguments(struct task_struct *task,
>> + struct pt_regs *regs,
>> + unsigned int i, unsigned int n,
>> + unsigned long *args)
>> +{
>> + BUG_ON(i + n > 6);
>
> So I guess 6 is the maximum number of registers that are used for
> syscall passing. That sounds about right to me, but I wondered how
> you worked it out (and whether or not it should be defined
> somewhere?).
I believe the 6 argument constraint is a specific to
syscall_get_arguments(). Notice the comment in
include/asm-generic/syscall.h:
/*
[...]
*
* It's only valid to call this when @task is stopped for tracing on
* entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
* It's invalid to call this with @i + @n > 6; we only support system calls
* taking up to 6 arguments.
*/
Additionally, if you'll look at the other architectures' implementations
you'll see similar code.
> In fact, how are these things supposed to deal with 64-bit arguments
> that straddle two registers? I think we always pack arguments such
> that we don't get holes in the register layout, but it might be worth
> checking (EABI requires 64-bit arguments to be passed in even
> registers).
Hmm, I do believe that 32-bit powerpc has similar alignment issues
(64-bit args must be passed in odd/even pairs), but I don't see any
special handling of this in that architecture's
syscall_get/set_arguments(). So I'm wondering if the handling of this
is or should be handled elsewhere. I'll keep digging on this.
>
> but I haven't heard anything from Steven since then, so it's all stalled at
> the moment. They'll also obviously need rebasing onto latest mainline,
> although that shouldn't be too hard since they're still fairly recent.
>
Yes, it does not appear to be too difficult. I've already made some
progress here, and will post my patches once the other issues have been
resolved.
Thanks again,
-Wade
More information about the linux-arm-kernel
mailing list