This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Whacky ia64: linux_proc_xfer_partial and lseek vs pread64
On Fri, Feb 10, 2006 at 05:15:36PM +0000, David Lecomber wrote:
> Dear Dan and all,
>
> It's great that these days we use file access to get at the memory via
> the /proc filesystem - but there's an interesting sighting on the ia64
> (suse 9) in linux_proc_xfer_partial.
>
> #ifdef HAVE_PREAD64
> if (pread64 (fd, readbuf, len, offset) != len)
> #else
> if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) !=
> len)
> #endif
> ret = 0;
> else
> ret = len;
>
>
> So, Mr Itanium has pread64, it calls pread64.. it seems to fail
> regularly.. As the strace log shows.
> open("/proc/21785/mem", O_RDONLY) = 4
> pread(4, 0x60000fffffffa040, 64, 11529215046068469760) = -1 EINVAL
> (Invalid argument)
> close(4) = 0
Are there any warnings when compiling this file? Is the prototype
for pread64 not in scope, maybe? Failing that, put a breakpoint at
*pread64 and make sure the arguments in registers are really sane.
But I doubt it's either of those; the values look reasonable.
That offset is $1 = 0xa000000000000000. Maybe the kernel is rejecting
that for pread because it thinks it's unacceptable for some reason.
> Anyone any idea what's going on? I'd be happy to let someone else
> formulate the rather obvious patch, as I don't know the behaviour on
> other platforms.
The code appears to be fine and your pread appears to be busted,
unfortunately.
--
Daniel Jacobowitz
CodeSourcery