Dmitry V. Levin <[email protected]> writes:
> On Wed, Apr 16, 2014 at 11:19:06PM -0700, Dima Kogan wrote:
>> Dima Kogan <[email protected]> writes:
>> > Dmitry V. Levin <[email protected]> writes:
>> >
>> OK. Never mind on the llseek, actually. I was testing lseek, NOT llseek,
>> which is why it looked odd. The patch I attached earlier can be fixed
>> with some #ifdefs probably. I should be pretty trivial. Is it useful for
>> me to do it, or do you want to?
>
> If the result is going to be as complex as printllval without alignment,
> it worth extending printllval instead of reinventing the wheel.
Currently printllval assumes register alignment, which (on ARM at least)
should be done for some syscalls (like pread) but not others (like
preadv). To make printllval work here, it'd need to take an extra
argument to indicate whether alignment should happen or not. That
function is already full of logic, so I was thinking instead something
of printing the preadv/pwritev pos like this:
#ifdef 64bit
printllval(tcp, "%llu", PREAD_OFFSET_ARG);
#else
tprintf("%llu", LONG_LONG(tcp->u_arg[3], tcp->u_arg[4]));
#endif
Here "64bit" would be replaced by something that's defined if we can
pass 64-bit args in a single register. I don't know about all the
platforms that printllval() checks, so I can't say if this "64bit" check
would be complicated or not. Looking at printllval(), it looks like it's
possible to have sizeof(long)==8, but still pass syscall args in 32-bit
pieces. Do you know the details about all the cases?
dima
------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Strace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/strace-devel