On 2019-07-25 01:00, Peter wrote:
Trying to compile my custom kernel in Rel. 11.3 results in this:-- kernel.full --- linking kernel.full atomic.o: In function `atomic_add_64': /usr/obj/usr/src/sys/E1R11V1/./machine/atomic.h:629: multiple definition of `atomic_add_64' opensolaris_atomic.o:/usr/src/sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S:71: first defined here *** [kernel.full] Error code 1 Same config worked with 11.2 The offending feature is either options ZFS or device dtrace (Adding any of these to the GENERIC config gives the same error.) This happens only when building for i386. Building amd64 with these options works.Trying to analyze the issue: The problem appears with SVN 334762 in 11.3: This change adds two new functions to sys/i386/include/atomic.h: atomic_add_64() atomic_subtract_64() [I don't really understand why this goes into a headerfile, but, well, nevermind] Also, this change deactivates two functions (only in case *i386*) from sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c atomic_add_64() atomic_del_64() [Now, there seems to be a slight strangeness here: if we *deactivate* atomic_del_64(), and *insert* atomic_subtract_64(), then these two names are not the same, and I might suppose that the atomic_del_64() is then somehow missing. But, well, nevermind] Now, the strange thing: this file sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c from which now two functions get excluded *only in case i386*, is not even compiled for i386:/usr/src/sys/conf$ grep opensolaris_atomic.c * files.arm:cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs | dtrace compile-with "${CDDL_C}" files.mips:cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs | dtrace compile-with "${CDDL_C}" files.powerpc:cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs powerpc | dtrace powerpc compile-with "${ZFS_C}" files.riscv:cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs | dtrace compile-with "${CDDL_C}"[So maybe that's the reason why the now lack of atomic_del_64() is not complained? Or maybe it's not used, or maybe I didn't find some definition whereever. Well, nevermind] Anyway, the actual name clash happens between sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S, because that one *is* compiled:/usr/src/sys/conf$ grep i386/opensolaris_atomic.S * files.i386:cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S optional zfs | dtrace compile-with "${ZFS_S}"I tried to move out the changes from SVN 334762. Sadly, that didn't work, because something does already use these atomic_add_64() stuff, So instead, I did this one: --- sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S (revision 350287) +++ sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S (working copy) @@ -66,8 +66,7 @@ * specific mapfile and remove the NODYNSORT attribute * from atomic_add_64_nv. */ - ENTRY(atomic_add_64) - ALTENTRY(atomic_add_64_nv) + ENTRY(atomic_add_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi // %edi = target address @@ -87,7 +86,6 @@ popl %edi ret SET_SIZE(atomic_add_64_nv) - SET_SIZE(atomic_add_64)ENTRY(atomic_or_8_nv)movl 4(%esp), %edx // %edx = target address And at least it compiles now. If it actually runs, that remains to be found out.
Can you attach your kernel configuration file? --HPS _______________________________________________ [email protected] mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-stable To unsubscribe, send any mail to "[email protected]"
