Skip site navigation (1)Skip section navigation (2)
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>