preparing to 4.5.19 release
Mike Frysinger
vapier at gentoo.org
Fri Oct 9 05:34:30 UTC 2009
On Thursday 08 October 2009 21:09:22 Mike Frysinger wrote:
> On Thursday 08 October 2009 20:33:31 Frederik Schüler wrote:
> > On Friday 09 October 2009 01:14:13 Dmitry V. Levin wrote:
> > > On sparc, it is defined as "static struct regs regs;"
> > > Nothing has changed in this area since v4.5.18.
> >
> > Yes, still barfing:
> >
> > gcc -DHAVE_CONFIG_H -I. -I.. -Ilinux/sparc -I../linux/sparc -Ilinux
> > -I../linux -Wall -g -O2 -MT syscall.o -MD -MP -MF .deps/syscall.Tpo -c
> > -o syscall.o ../syscall.c
> > ../syscall.c: In function ‘get_scno’:
> > ../syscall.c:1192: error: invalid use of undefined type ‘struct regs’
> > ../syscall.c:1234: error: invalid use of undefined type ‘struct regs’
> > ../syscall.c:1234: warning: format ‘%08x’ expects type ‘unsigned int’,
> > but argument 3 has type ‘long unsigned int’
> >
> > (sid)fs at smetana:~/strace-4.5.19$ uname -a
> > Linux smetana 2.6.26-2-sparc64-smp #1 SMP Thu Aug 20 16:48:42 UTC 2009
> > sparc64 GNU/Linux
> > (sid)fs at smetana:~/strace-4.5.19$ gcc --version
> > gcc (Debian 4.3.4-4) 4.3.4
> > Copyright (C) 2008 Free Software Foundation, Inc.
> > This is free software; see the source for copying conditions. There is
> > NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
> > PURPOSE.
>
> not related to the running kernel or gcc/glibc. 'struct regs' comes from
> asm/regs*.h which comes from the kernel headers. 2.6.28 and older
> installed it, but it was killed off as "useless" during 2.6.29
> development. presumably you're using newer kernel headers version.
>
> going by arch/sparc/kernel/ptrace_*.c, looks like it should be switched to
> struct pt_regs as asm/ptrace.h is still installed.
i thought learning another ptrace abi would be neat, so ive converted the code
from 'struct regs' to 'struct pt_regs', but i think the sparc kernel headers
are a little wonky here. if you look at the UREG_XX values, they appear to
all be off by one, and they declare the o registers as i registers.
compare the 32 and 64 bit versions of struct pt_regs to struct regs and you'll
see that the fields all line up, but for some reason pt_regs.u_regs[UREG_G0]
actually refers to g1 as in reg.r_g1. that is why in the attached patch
register names get changed. strace still runs fine, but the new code doesnt
make me happy. it should however work on both sparc32 and sparc64 userland.
looking at gdb shows that they use sys/ucontext.h from glibc to provide the
gregset_t type (which is really just a simple array -- they rely on the size
being correct for the ptrace call). this header also provides REG_xx defines
for sparc32 to index this array and the nice thing is that it appears to
actually line up correctly -- g1 is g1 and o0 is o0. the downside is that the
sparc64 api uses diff define names for indexing (MC_xx), and it apparently
relies on sparc32 layout (so i guess it assumes PTRACE_GETREGS will always be
used as opposed to PTRACE_GETREGS64). you can tell this as the 32bit abi has
the state/pc regs first followed by the g/o regs while the 64bit abi has the
state/pc regs after the g/o regs. in turn, this would prevent a pure 64bit
kernel and userland combo.
perhaps the sanest thing is to use pt_regs from the kernel, but then define
our own set of defines for indexing the u_regs array. call them U_REG_xx to
avoid conflicting with the header. and we stick a note in there about why we
arent using UREG_xx from the kernel. this way the strace sparc code would
reflect the calling convention actually in use -- g1 is the syscall number and
o0..o5.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: strace-sparc-ptrace.patch
Type: text/x-patch
Size: 7535 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20091009/62392317/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20091009/62392317/attachment-0001.bin>
More information about the Strace-devel
mailing list