Hi, with kdump, file offsets are printed as two ints on 32-bit systems. This diff should fix that and print a single long long.
Tested on vax and hppa. Strange things is that hppa prints a trailing int for lseek(2). Have to dig into that. This has nothing to do with fancy mode, since it is also printed with -n. Here a sample of the test I used: #include <sys/mman.h> #include <unistd.h> main() { mmap(1,2,3,4,5,0x8000000090000000LL); lseek(3,0x12345678abcdef12LL,1); } Hope I got the tricky sign-extends all covered. -Otto Index: kdump.c =================================================================== RCS file: /cvs/src/usr.bin/kdump/kdump.c,v retrieving revision 1.51 diff -u -p -r1.51 kdump.c --- kdump.c 20 Jun 2011 17:54:48 -0000 1.51 +++ kdump.c 21 Jun 2011 09:39:55 -0000 @@ -325,6 +325,40 @@ ioctldecode(u_long cmd) c = ','; \ } while (0); +#ifdef __LP64__ +#define print_llnumber(i, n, c) print_number(i, n, c) +#elif _BYTE_ORDER == _LITTLE_ENDIAN +#define print_llnumber(i, n, c) do { \ + long long val = ((long long)*i) & 0xffffffff; \ + i++; \ + val |= ((long long)*i) << 32; \ + i++; \ + n -= 2; \ + if (c) \ + (void)putchar(c); \ + if (decimal) \ + (void)printf("%lld", val); \ + else \ + (void)printf("%#llx", val); \ + c = ','; \ +} while (0); +#else +#define print_llnumber(i, n, c) do { \ + long long val = ((long long)*i) << 32; \ + i++; \ + val |= ((long long)*i) & 0xffffffff; \ + i++; \ + n -= 2; \ + if (c) \ + (void)putchar(c); \ + if (decimal) \ + (void)printf("%lld", val); \ + else \ + (void)printf("%#llx", val); \ + c = ','; \ +} while (0); +#endif + static void ktrsyscall(struct ktr_syscall *ktr) { @@ -484,7 +518,7 @@ ktrsyscall(struct ktr_syscall *ktr) /* skip padding */ ap++; narg--; - print_number(ap, narg, c); + print_llnumber(ap, narg, c); (void)putchar(','); whencename((int)*ap); ap++; @@ -526,6 +560,7 @@ ktrsyscall(struct ktr_syscall *ktr) /* skip padding */ ap++; narg--; + print_llnumber(ap, narg, c); break; case SYS_mprotect: print_number(ap, narg, c); @@ -550,6 +585,7 @@ ktrsyscall(struct ktr_syscall *ktr) /* skip padding */ ap++; narg--; + print_llnumber(ap, narg, c); break; case SYS_msync: print_number(ap, narg, c); @@ -588,6 +624,7 @@ ktrsyscall(struct ktr_syscall *ktr) /* skip padding */ ap++; narg--; + print_llnumber(ap, narg, c); break; case SYS_recvmsg: case SYS_sendmsg: @@ -686,6 +723,7 @@ ktrsyscall(struct ktr_syscall *ktr) /* skip padding */ ap++; narg--; + print_llnumber(ap, narg, c); break; case SYS_wait4: print_number(ap, narg, c);