Date: Fri, 16 Jun 2017 18:59:05 -0700 From: Mark Millard <markmi@dsl-only.net> To: kib@FreeBSD.org, FreeBSD Current <freebsd-current@freebsd.org>, freebsd-hackers@freebsd.org, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org> Subject: Re: INO64 in head: Does sys/boot/common/ufsread.c need its "typedef uint32_t ufs_ino_t;" replaced? Message-ID: <700CC284-8750-448D-83DB-19C6F5CB6AE8@dsl-only.net> In-Reply-To: <3AF2C2DB-1A61-4EC3-BCB7-B05D99273561@dsl-only.net> References: <3AF2C2DB-1A61-4EC3-BCB7-B05D99273561@dsl-only.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Top post of context note: I should have noted up front that: /usr/src/sys/boot/powerpc/boot1.chrp/boot1.c does: #include "ufsread.c" and that is the context of the __udivdi3 use that is rejected at link time when clang is used to buildworld for powerpc or pwoerpc64. My original note might really trace back to boot1.c needing to be different even if ufsread.c stays the same. === Mark Millard markmi at dsl-only.net On 2017-Jun-16, at 5:01 PM, Mark Millard <markmi@dsl-only.net> wrote: buildworld via clang for powerpc64 and powerpc fails for lack of `__udivdi3' referenced in sys/boot/common/ufsread.c fsread_size code. But this lead to me looking around and I found a conceptually separate possible issue. . . sys/sys/_types.h : typedef __uint64_t __ino_t; /* inode number */ # find /usr/src/sys/ -exec grep __ino_t {} \; -print | more typedef __ino_t ino_t; /usr/src/sys/sys/stat.h typedef __ino_t ino_t; /* inode number */ /usr/src/sys/sys/types.h typedef __uint64_t __ino_t; /* inode number */ /usr/src/sys/sys/_types.h typedef __ino_t ino_t; /usr/src/sys/sys/dirent.h sys/boot/common/ufsread.c : . . . #include <ufs/ufs/dinode.h> #include <ufs/ufs/dir.h> #include <ufs/ffs/fs.h> . . . typedef uint32_t ufs_ino_t; . . . Note the 32-bit type above. The headers included have use of the 64-bit ino_t type as well, for example: sys/ufs/ufs/diniode.h : . . . #define UFS_ROOTINO ((ino_t)2) . . . #define UFS_WINO ((ino_t)1) . . . sys/ufs/ffs/fs.h : . . . #define ino_to_cg(fs, x) (((ino_t)(x)) / (fs)->fs_ipg) #define ino_to_fsba(fs, x) \ ((ufs2_daddr_t)(cgimin(fs, ino_to_cg(fs, (ino_t)(x))) + \ (blkstofrags((fs), ((((ino_t)(x)) % (fs)->fs_ipg) / INOPB(fs)))))) #define ino_to_fsbo(fs, x) (((ino_t)(x)) % INOPB(fs)) . . . I believe the powerpc64/powerpc issue gives evidence of ino_t being used in addition ot ufs_ino_t in sys/boot/common/ufsread.c 's fsread_size . Other things that look 32-bit inode-ish: (I do not claim to know that any of this matters.) sys/ufs/ufs/dir.h has: struct direct { u_int32_t d_ino; /* inode number of entry */ . . . struct dirtemplate { u_int32_t dot_ino; . . . u_int32_t dotdot_ino; . . . struct odirtemplate { u_int32_t dot_ino; . . . u_int32_t dotdot_ino; . . . sys/ufs/ffs/fs.h has: struct jrefrec { . . . uint32_t jr_ino; struct jmvrec { . . . uint32_t jm_ino; struct jblkrec { . . . uint32_t jb_ino; struct jtrncrec { . . . uint32_t jt_ino; === Mark Millard markmi at dsl-only.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?700CC284-8750-448D-83DB-19C6F5CB6AE8>