9ns: Align struct dirtab to 64 bytes
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 31 Mar 2017 00:08:11 +0000 (20:08 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 31 Mar 2017 00:08:11 +0000 (20:08 -0400)
commit633a69e363f625c0034d513f3bb87d7ca58b598a
tree44870bb62d6fe1ce367508e542498fdfe8d22337
parent4d07df833ebbf808f6365cdc96929ed7bf2dad9d
9ns: Align struct dirtab to 64 bytes

devvars puts struct dirtabs into a linker table.  Those tables are all
64 byte aligned, and the objects within the table will be laid out with
64 byte alignment.

This was probably the cause of the intermittent startup assertion
failure in vars_init() (couldn't find ".").  "." is at the end of the
vars table, and any confusion regarding the length, size, or alignment
of the tables and objects could result in not memcpying that item.

I noticed this when changing the KNAMELEN, which increased the size of
the dirtab to 0x120 bytes.  That's 32-byte aligned, not 64.  However,
the objects within the table were laid out (by the linker) in 0x140 byte
strides: 0x120 rounded up to 64.  Additionally, before I fixed this
alignment, vars_init() had a hard time doing pointer arithmetic on the
struct dirtab *s, and would come up with a really large number.  Doing
the math manually worked.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/ns.h