Re: syscall(2)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06 Mar 2017 12:01, Michael Kerrisk (man-pages) wrote:
> [Extending the CC for some other input. Changhee Han added the text
> that you are asking about; Mike F has done a lot of other work on the
> page. Perhaps they can comment.]
> 
> On 5 March 2017 at 09:08, Victor Khimenko <khim@xxxxxxxxxx> wrote:
> > syscall(2) example includes the following snippet which explains how to
> > call readahead on ARM:
> >
> >        syscall(SYS_readahead, fd, 0,
> >                    (unsigned int) (offset >> 32),
> >                    (unsigned int) (offset & 0xFFFFFFFF),
> >                    count);
> >
> > But ARM EABI specifies that "A double-word sized type is passed in two
> > consecutive registers (e.g., r0 and r1, or r2 and r3). The content of
> > the registers is as if the value had been loaded from memory representation
> > with a single LDM instruction."
> >
> > This would imply that arguments are swapped around in the man page, no?
> 
> So, I'm taking it that you mean the call should look like this:
> 
>        syscall(SYS_readahead, fd, 0,
>                    (unsigned int) (offset & 0xFFFFFFFF),
>                    (unsigned int) (offset >> 32),
>                   count);
> 
> Is that what you mean?
> 
> > I've tried to experiement and with ftruncate, at least, it works like
> > this...
> 
> Sounds plausible. I'm hoping that Mike or Changhee Han might comment.

it depends on the endianness.  the man page shows BE, and Victor's
suggestion changes it to LE.  we probably need to explain that and
not just swap the args in the example.
-mike

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux