[Bug 220024] head -r319991 clang powerpc64 and powerpc toolchains (cross build target): boot1.o: In function `fsread_size': undefined reference to `__udivdi3' (INO64 involved)
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sat Jun 17 01:29:19 UTC 2017
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220024
Mark Millard <markmi at dsl-only.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|head -r319991 clang |head -r319991 clang
|powerpc64 and powerpc |powerpc64 and powerpc
|toolchains (cross build |toolchains (cross build
|target): boot1.o: In |target): boot1.o: In
|function `fsread_size': |function `fsread_size':
|undefined reference to |undefined reference to
|`__udivdi3' |`__udivdi3' (INO64
| |involved)
--- Comment #4 from Mark Millard <markmi at dsl-only.net> ---
Turns out clang is generating the __udivdi3
references because of the INO64 changes being
involved in fsread_size --at least if I
understand right.
And that explains why this was not a problem
in the likes of -r317820 (before INO64).
For reference: part of a note that I sent out
on the lists. . .
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 to ufs_ino_t in
sys/boot/common/ufsread.c 's fsread_size .
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list