Re: nvme.c:2012:2: error: call to undeclared function 'memmove'

From: Ian Freislich <ianfreislich_at_gmail.com>
Date: Thu, 20 Nov 2025 02:12:46 UTC
On November 19, 2025 21:04:28 Minsoo Choo <minsoochoo0122@proton.me> wrote:

> On Wednesday, November 19th, 2025 at 5:24 PM, Ian FREISLICH 
> <ianfreislich@gmail.com> wrote:
>
>> On 11/19/25 15:42, Minsoo Choo wrote:
>>
>>> On Wednesday, November 19th, 2025 at 2:51 PM, Ian FREISLICH 
>>> ianfreislich@gmail.com wrote:
>>>
>>>> On 11/19/25 14:24, Minsoo Choo wrote:
>>>>
>>>>> On Wednesday, November 19th, 2025 at 2:19 PM, Ian FREISLICH 
>>>>> ianfreislich@gmail.com wrote:
>>>>>
>>>>>> My kernel build started failing recently with the following error. I use
>>>>>> a custom kernel config but looking at NOTES, it's not clear that I've
>>>>>> missed an option that would make it compile.
>>>>>>
>>>>>> In file included from /usr/src/sys/dev/nvme/nvme_util.c:34:
>>>>>> /usr/src/sys/dev/nvme/nvme.h:2012:2: error: call to undeclared function
>>>>>> 'memmove'; ISO C99 and later do not support implicit function
>>>>>> declarations [-Werror,-Wimplicit-function-declaration]
>>>>>> 2012 | memmove(sn, cdata->sn, NVME_SERIAL_NUMBER_LENGTH);
>>>>>>
>>>>>> | ^
>>>>>> 1 error generated.
>>>>>> *** Error code 1
>>>>>>
>>>>>> I've also tried compiling after blowing away usr/obj.
>>>>>>
>>>>>> Ian
>>>>>
>>>>> memmove is declared in systm.h, but I don't see include statement for 
>>>>> systm.h in nvme.h. Could you try including <sys/systm.h> in 
>>>>> sys/dev/nvme/nvme.h and build again?
>>>>
>>>> It builds with that, but coincidentally GENERIC builds without that change.
>>>>
>>>> Ian
>>>
>>> Could you send your kernel config? Maybe sys/systm.h is included under 
>>> GENERIC but not under some configs.
>>
>>
>> --X--
>> cpu HAMMER
>> ident ROUTER
>>
>> makeoptions DEBUG=-g # Build kernel with gdb(1) debug
>> symbols
>>
>> options SCHED_ULE # ULE scheduler
>> options NUMA # Non-Uniform Memory
>> Architecture support
>> options PREEMPTION # Enable kernel thread preemption
>>
>> options INET # IPv6 communications protocols
>> options INET6 # IPv6 communications protocols
>> options IPSEC
>> options IPSEC_OFFLOAD # Inline ipsec offload infra
>> options ROUTE_MPATH # Multipath routing support
>> options FIB_ALGO # Modular fib lookups
>> options TCP_OFFLOAD # TCP offload
>> options TCP_BLACKBOX # Enhanced TCP event logging
>> options TCP_HHOOK # hhook(9) framework for TCP
>> options TCP_RFC7413 # TCP Fast Open
>> options SCTP_SUPPORT # Allow kldload of SCTP
>> options KERN_TLS # TLS transmit & receive offload
>> options MAC
>> options MAC_NTPD
>> options MAC_PORTACL
>>
>> options FFS # Berkeley Fast Filesystem
>> options SOFTUPDATES # Enable FFS soft updates support
>> options UFS_ACL # Support for access control lists
>> options UFS_DIRHASH # Improve performance on big
>> directories
>> options UFS_GJOURNAL # Enable gjournal-based UFS
>> journaling
>> options ZFS
>> options ZSTDIO
>> options PROCFS # Process filesystem (requires
>> PSEUDOFS)
>> options PSEUDOFS # Pseudo-filesystem framework
>> options TMPFS # Efficient memory filesystem
>> options GEOM_LABEL # Provides labelization
>> options GEOM_PART_GPT
>> options EFIRT # EFI Runtime Services support
>> options COMPAT_FREEBSD32 # Compatible with i386 binaries
>> options COMPAT_FREEBSD4 # Compatible with FreeBSD4
>> options COMPAT_FREEBSD5 # Compatible with FreeBSD5
>> options COMPAT_FREEBSD6 # Compatible with FreeBSD6
>> options COMPAT_FREEBSD7 # Compatible with FreeBSD7
>> options COMPAT_FREEBSD9 # Compatible with FreeBSD9
>> options COMPAT_FREEBSD10 # Compatible with FreeBSD10
>> options COMPAT_FREEBSD11 # Compatible with FreeBSD11
>> options COMPAT_FREEBSD12 # Compatible with FreeBSD12
>> options COMPAT_FREEBSD13 # Compatible with FreeBSD13
>> options COMPAT_FREEBSD14 # Compatible with FreeBSD14
>> #options COMPAT_FREEBSD15 # Compatible with FreeBSD15
>> options KTRACE # ktrace(1) support
>> options STACK # stack(9) support
>> options SYSVSHM # SYSV-style shared memory
>> options SYSVMSG # SYSV-style message queues
>> options SYSVSEM # SYSV-style semaphores
>>
>> options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time
>> extensions
>> options PRINTF_BUFR_SIZE=128 # Prevent printf output being
>> interspersed.
>> options KBD_INSTALL_CDEV # install a CDEV entry in /dev
>> options HWPMC_HOOKS # Necessary kernel hooks for
>> hwpmc(4)
>> options INCLUDE_CONFIG_FILE # Include this file in kernel
>>
>> # Debugging support. Always need this:
>> options KDB
>> options KDB_UNATTENDED
>> options DDB
>> options GDB
>> options KDB_TRACE
>> options ALT_BREAK_TO_DEBUGGER
>>
>> # Kernel dump features.
>> options EKCD # Support for encrypted kernel dumps
>> options GZIO # gzip-compressed kernel and
>> user dumps
>> options ZSTDIO # zstd-compressed kernel and
>> user dumps
>> options DEBUGNET # debugnet networking
>> options NETDUMP # netdump(4) client support
>> options NETGDB # netgdb(4) client support
>>
>> device pf
>> device pflog
>> device pfsync
>>
>> # Make an SMP-capable kernel by default
>> options SMP # Symmetric MultiProcessor Kernel
>> device cpufreq
>>
>> # Bus support.
>> device acpi
>> device acpi_wmi
>> device smbios
>> device smbus
>> device ichsmb
>> device iicbus
>> device ig4
>> options IOMMU
>> device pci
>> options PCI_HP # PCI-Express native HotPlug
>> options PCI_IOV # PCI SR-IOV support
>>
>>
>> # ATA controllers
>> device ahci # AHCI-compatible SATA controllers
>> device scbus # SCSI bus (required for ATA/SCSI)
>> device ch # SCSI media changers
>> device da # Direct Access (disks)
>> device sa # Sequential Access (tape etc)
>> device cd # CD
>> device pass # Passthrough device (direct
>> ATA/SCSI access)
>> device ses # Enclosure Services (SES and
>> SAF-TE)
>>
>> # NVM Express (NVMe) support
>> device nvme # base NVMe driver
>> device nvd # expose NVMe namespaces as
>> disks, depends on nvme
>>
>> # atkbdc0 controls both the keyboard and the PS/2 mouse
>> device atkbdc # AT keyboard controller
>> device atkbd # AT keyboard
>> device kbdmux # keyboard multiplexer
>>
>> # syscons is the legacy console driver, resembling an SCO console
>> #device vga # VGA video card driver
>> #device splash # Splash screen and screen saver
>> support
>> #device sc
>> #options SC_PIXEL_MODE # add support for the raster
>> text mode
>>
>> # vt is the default video console driver
>> device vt
>> device vt_vga
>> device vt_efifb
>> device vt_vbefb
>>
>> device agp # support several AGP chipsets
>>
>> options PPS_SYNC
>> device uart # Generic UART driver
>>
>> device superio
>> device gpio
>> device gpiopps
>>
>> # PCI/PCI-X/PCIe Ethernet NICs that use iflib infrastructure
>> device iflib
>> device igc # Intel I225 2.5G Ethernet
>> device ix # Intel PRO/10GbE PCIE PF Ethernet
>>
>> # Pseudo devices.
>> device crypto # core crypto support
>> device cryptodev
>> device aesni # AES-NI OpenCrypto module
>> device ossl
>> device loop # Network loopback
>> device rdrand_rng # Intel Bull Mountain RNG
>> device ether # Ethernet support
>> device vlan # 802.1Q VLAN support
>> device tuntap # Packet tunnel.
>> device md # Memory "disks"
>> device gif # IPv6 and IPv4 tunneling
>> device firmware # firmware assist module
>> device xz # lzma decompression
>>
>> options EVDEV_SUPPORT
>> device evdev
>> device uinput
>>
>> # The `bpf' device enables the Berkeley Packet Filter.
>> # Be aware of the administrative consequences of enabling this!
>> # Note that 'bpf' is required for DHCP.
>> device bpf # Berkeley packet filter
>>
>> # USB support
>> options USB_DEBUG # enable debug msgs
>> device uhci # UHCI PCI->USB interface
>>
>> device ohci # OHCI PCI->USB interface
>>
>> device ehci # EHCI PCI->USB interface (USB 2.0)
>>
>> device xhci # XHCI PCI->USB interface (USB 3.0)
>>
>> device usb # USB Bus (required)
>> device usbhid # USB HID Transport
>> device hkbd # HID Keyboard
>> device ukbd # USB Keyboard
>> device umass # Disks/Mass storage - Requires
>> scbus and da
>>
>> # Sound support
>> device sound # Generic sound driver (required)
>> device snd_hda # Intel High Definition Audio
>>
>> # Netmap provides direct access to TX/RX rings on supported NICs
>> device netmap # netmap(4) support
>>
>> device hid # Generic HID support
>> device hidbus # Generic HID Bus
>>
>> # EFI devices
>> device efidev # EFI pseudo-device
>> device efirtc # EFI RTC
>> --X--
>
> Could you `make cleankernel` and run `make buildkernel` again? And if it 
> fails for the same reason, could you add `#include <sys/systm.h>` and `make 
> cleankernel` then `make buildkernel` again?

I did rm -rf /usr/obj/* and rebuilt before reporting.