Re: getdirentries_args and other kernel syscall structures

From: Daniel Rudy (dr2867_at_pacbell.net)
Date: 11/23/05

  • Next message: Daniel Rudy: "Re: getdirentries_args and other kernel syscall structures"
    Date: Wed, 23 Nov 2005 09:32:09 -0800
    To: rookie@gufi.org
    
    

    At about the time of 11/23/2005 3:23 AM, rookie stated the following:
    > 2005/11/23, Daniel Rudy <dr2867@pacbell.net>:
    >
    >>Ok, I'va got a little question here. In the structure
    >>getdirentries_args, there seems to be duplicated fields that I'm not
    >>entirely sure what they do. Here's the definition of a structure
    >>verbatim from sys/sysproto.h:
    >>
    >>struct getdirentries_args {
    >> char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
    >> char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)];
    >> char count_l_[PADL_(u_int)]; u_int count; char
    >>count_r_[PADR_(u_int)];
    >> char basep_l_[PADL_(long *)]; long * basep; char
    >>basep_r_[PADR_(long *)];
    >>};
    >>
    >>Now my question is what does the l and r variables do? It seems that
    >>they do something with padding the data based on the endian of the
    >>machine? I look through this header file, and I see all the structures
    >>have similar constructs. Is it something that can be safely ignored
    >
    >
    > It just pads in the right way (according with endianism) the structure
    > to the right word. For example, x86 gots sizeof(long *) == 4. If you
    > want to have a syscall structure like that:
    >
    > struct example_sys
    > {
    > char f;
    > short p;
    > int g;
    > };
    >
    > it is misaligned. In order to get a proper padded structure (all 32
    > bits entries) to speed-up accesses to the members, this little trick
    > is used.
    >
    > Attilio
    >
    > --
    > Peace can only be achieved by understanding - A. Einstein
    >

    Ah, a performance trick. I get it now. Thanks.

    -- 
    Daniel Rudy
    _______________________________________________
    freebsd-hackers@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
    To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
    

  • Next message: Daniel Rudy: "Re: getdirentries_args and other kernel syscall structures"

    Relevant Pages

    • Re: Code Review - is this code shit
      ... her unfinished book "the art of C programming". ... Under old K&R C, x would be int, which is correct type for the ... endian nature of the host computer (keep in mind that big endian and ...
      (comp.lang.c)
    • Re: Variation of bit-counting
      ... > These numbers appear as IP subnet masks. ... void initHighBitCount { ... int i, j; ... Of course, this all assumes you are little endian, and chars are 8 ...
      (comp.programming)
    • Re: Endian Independence
      ... int endian() { ... you assume that there are only two possible "endian" ... When the least-significant portion is stored first, ... you should first determine how "wide" your compiler makes ...
      (comp.lang.c)
    • Re: How to write integer in little endian order in java ?
      ... Can anyone give me a little help on how to switch short, int, float ... from short endian to big endian? ... Do as you do but flip the bytes yourself. ...
      (comp.lang.java.programmer)
    • Re: Detecting Intel / PowerPPC?
      ... executing on an Intel machine or a PowerPC? ... point numbers and then they need to be swapped (low / big endian) when they're ... int main ... bstevenson at remove this text dot apple dot com ...
      (comp.sys.mac.programmer.help)