This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]