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
_______________________________________________
freebsd-stable@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"