x32 mishandles various 64bit syscalls when tracing i386 32bit
Mike Frysinger
vapier at gentoo.org
Thu May 2 00:36:22 UTC 2013
in writing a small testcase for stat64, i also poked some other funcs and they
fail too:
$ cat test.c
#define _GNU_SOURCE
#define _FILE_OFFSET_BITS 64
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
struct stat st;
truncate(argv[1], (unsigned long long)10 * 1024 * 1024 * 1024);
ftruncate(-1, (unsigned long long)10 * 1024 * 1024 * 1024);
stat(argv[1], &st);
printf("%llu\n", (unsigned long long)st.st_size);
readahead(-1, st.st_size, 1);
return 0;
}
$ gcc test.c -m32 -o a.out32 -Wall
$ ./strace -v ./a.out32 f
...
[ Process PID=3083 runs in 32 bit mode. ]
...
truncate64("f", 2147483648) = 0
ftruncate64(-1, 2147483648) = -1 EBADF (Bad file descriptor)
readahead(-1, 4289292220, 2) = -1 EBADF (Bad file descriptor)
...
but if i use strace compiled for x86_64 (64bit), it decodes fine.
-mike
-------------- 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/20130501/3447c250/attachment.bin>
More information about the Strace-devel
mailing list