[Bug 276961] buildworld artifacts not reproducible between native and cross build

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 05 May 2024 19:56:45 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276961

--- Comment #3 from Dimitry Andric <dim@FreeBSD.org> ---
I did the analysis again on 15-CURRENT with clang 18.1.5, and this is now the
list, when excluding host binaries (i.e. those that file(1) shows as ELF 64-bit
binaries on a amd64 host):

usr.cross/src/i386.i386/cddl/lib/libzfs/libzfs.a
usr.cross/src/i386.i386/cddl/lib/libzfs/libzfs.so
usr.cross/src/i386.i386/cddl/lib/libzfs/libzfs.so.4
usr.cross/src/i386.i386/cddl/lib/libzfs/libzfs.so.4.debug
usr.cross/src/i386.i386/cddl/lib/libzfs/libzfs.so.4.full
usr.cross/src/i386.i386/cddl/lib/libzfs/zfs_fletcher_sse.o
usr.cross/src/i386.i386/cddl/lib/libzfs/zfs_fletcher_sse.pico
usr.cross/src/i386.i386/cddl/lib/libzpool/libzpool.a
usr.cross/src/i386.i386/cddl/lib/libzpool/libzpool.so
usr.cross/src/i386.i386/cddl/lib/libzpool/libzpool.so.2
usr.cross/src/i386.i386/cddl/lib/libzpool/libzpool.so.2.debug
usr.cross/src/i386.i386/cddl/lib/libzpool/libzpool.so.2.full
usr.cross/src/i386.i386/cddl/lib/libzpool/zfs_fletcher_sse.o
usr.cross/src/i386.i386/cddl/lib/libzpool/zfs_fletcher_sse.pico
usr.cross/src/i386.i386/lib/clang/liblldb/Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD_x86_64.o
usr.cross/src/i386.i386/lib/clang/liblldb/liblldb.a
usr.cross/src/i386.i386/lib/libarchive/archive_write_set_format_7zip.pico
usr.cross/src/i386.i386/lib/libarchive/libarchive.so
usr.cross/src/i386.i386/lib/libarchive/libarchive.so.7
usr.cross/src/i386.i386/lib/libarchive/libarchive.so.7.debug
usr.cross/src/i386.i386/lib/libarchive/libarchive.so.7.full
usr.cross/src/i386.i386/rescue/rescue/bectl.lo
usr.cross/src/i386.i386/rescue/rescue/rescue
usr.cross/src/i386.i386/rescue/rescue/zdb.lo
usr.cross/src/i386.i386/rescue/rescue/zfs.lo
usr.cross/src/i386.i386/rescue/rescue/zfsbootcfg.lo
usr.cross/src/i386.i386/rescue/rescue/zpool.lo
usr.cross/src/i386.i386/sbin/ipf/ipmon/ipmon
usr.cross/src/i386.i386/sbin/ipf/ipmon/ipmon.debug
usr.cross/src/i386.i386/sbin/ipf/ipmon/ipmon.full
usr.cross/src/i386.i386/sbin/ipf/ipmon/ipmon.o
usr.cross/src/i386.i386/stand/ficl/softcore.c
usr.cross/src/i386.i386/stand/i386/loader_4th/loader_4th
usr.cross/src/i386.i386/stand/i386/loader_4th/loader_4th.bin
usr.cross/src/i386.i386/stand/i386/loader_4th/loader_4th.sym
usr.cross/src/i386.i386/stand/i386/loader_4th/vers.c
usr.cross/src/i386.i386/stand/i386/loader_4th/vers.o
usr.cross/src/i386.i386/stand/i386/loader_lua/loader_lua
usr.cross/src/i386.i386/stand/i386/loader_lua/loader_lua.bin
usr.cross/src/i386.i386/stand/i386/loader_lua/loader_lua.sym
usr.cross/src/i386.i386/stand/i386/loader_lua/vers.c
usr.cross/src/i386.i386/stand/i386/loader_lua/vers.o
usr.cross/src/i386.i386/stand/i386/loader_simp/loader_simp
usr.cross/src/i386.i386/stand/i386/loader_simp/loader_simp.bin
usr.cross/src/i386.i386/stand/i386/loader_simp/loader_simp.sym
usr.cross/src/i386.i386/stand/i386/loader_simp/vers.c
usr.cross/src/i386.i386/stand/i386/loader_simp/vers.o
usr.cross/src/i386.i386/stand/i386/pxeldr/loader
usr.cross/src/i386.i386/stand/i386/pxeldr/pxeboot
usr.cross/src/i386.i386/toolchain-metadata.mk
usr.cross/src/i386.i386/usr.bin/clang/lld/ELF/SyntheticSections.o
usr.cross/src/i386.i386/usr.bin/clang/lld/ld.lld
usr.cross/src/i386.i386/usr.bin/clang/lld/ld.lld.debug
usr.cross/src/i386.i386/usr.bin/clang/lld/ld.lld.full
usr.cross/src/i386.i386/usr.bin/clang/lldb-server/lldb-server
usr.cross/src/i386.i386/usr.bin/clang/lldb-server/lldb-server.debug
usr.cross/src/i386.i386/usr.bin/clang/lldb-server/lldb-server.full

Note that the differences in .a or .so files, or executables, is due to one or
more object files differing.

Also, the stand/i386/loader files differ because vers.c contains a build date
and hostname, but I assume that would go away if you use
WITH_REPRODUCIBLE_BUILD?

So the list of interesting files can be reduced to (grouped by
library/program):

usr.cross/src/i386.i386/cddl/lib/libzfs/zfs_fletcher_sse.o
usr.cross/src/i386.i386/cddl/lib/libzfs/zfs_fletcher_sse.pico

usr.cross/src/i386.i386/cddl/lib/libzpool/zfs_fletcher_sse.o
usr.cross/src/i386.i386/cddl/lib/libzpool/zfs_fletcher_sse.pico

usr.cross/src/i386.i386/lib/clang/liblldb/Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD_x86_64.o

usr.cross/src/i386.i386/lib/libarchive/archive_write_set_format_7zip.pico

usr.cross/src/i386.i386/rescue/rescue/bectl.lo
usr.cross/src/i386.i386/rescue/rescue/zdb.lo
usr.cross/src/i386.i386/rescue/rescue/zfs.lo
usr.cross/src/i386.i386/rescue/rescue/zfsbootcfg.lo
usr.cross/src/i386.i386/rescue/rescue/zpool.lo

usr.cross/src/i386.i386/sbin/ipf/ipmon/ipmon.o

usr.cross/src/i386.i386/usr.bin/clang/lld/ELF/SyntheticSections.o

Of these, most don't have differences in their assembly, but readelf shows that
due to slightly larger or smaller sections, various offsets are different.

The left overs are:

usr.cross/src/i386.i386/lib/clang/liblldb/Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD_x86_64.o
usr.cross/src/i386.i386/lib/libarchive/archive_write_set_format_7zip.pico
usr.cross/src/i386.i386/usr.bin/clang/lld/ELF/SyntheticSections.o

I'm going to spend some time looking at the ways these get compiled.

-- 
You are receiving this mail because:
You are the assignee for the bug.