> It seems the correct thing to do here is to put the shared part in libc, > list the file in KSRCS in lib/libc/Makefile.inc, and make copy-to-libkern. > This allows for only one copy to need to be maintained, and avoids hard > build-time dependency tentacles between lib/ and sys/. > (If this is not correct, let me know what's better.) > > Unfortunately, libc and libkern haven't been kept in sync for many years > and I don't see a technical reason why not, so lets bring them together?
That's a slippery slope you're walking on. >From a theoretical point of view, the routines common to libc and libkern should be identical. >From a practical point of view, this is not always the case. I'll only cite the two most important reasons: 1. libc is a library, and is required to provide entry points for all its interfaces (such as htonl), so that their address may be used for function pointers, even if the function itself is a no-op or would better be an inline; libkern has no such constraints. 2. libc is intended to run in userland, and libkern, well, in the kernel; running in the kernel might require different code constructs and/or will allow for privileged instructions to be used (especially if address spaces are kept completely separate between kernel space and user space) > First, str{cat,cpy} were vehemently expunged from the kernel many years ago, > so stop trying to keep them around. > > Index: lib/libc/Makefile.inc Hello, this is libc you are butchering in. I'm afraid strcat and strcpy are still required to be in libc by the current C and POSIX standards. > Next, __P is dead. Theo just removed the mention of it from style(9), and > this happens to be the last one in libc. It was removed from the libkern > copy 9 years ago, but that change never made it "upstream" to libc. > > Index: lib/libc/quad/qdivrem.c This one I agree with. > bcmp(3) was cleaned up in libc, but that never propogated to libkern. > While here, remove a comment that doesn't belong in the MI version. > > This does change the functionality a bit, but anything relying on undefined > behavior or specific value of "non-zero" here is fundamentally broken, and > I didn't see anything making such assumptions on a quick grep through sys/. > > Index: sys/lib/libkern/bcmp.c This one brings bad memories, as memcmp() in the kernel used to map to bcmp() on vax, and this broke red-black trees. But having libkern here match libc (at least on the platforms where the kernel bcmp() is provided by this file) will not hurt. > {h,n}to{n,h}{l,s} and bswap32 have been broken up into different files in > libc, > but I'm not sure how to properly break that up into MI/MD components for > libkern > and include it in the right places without breaking anything, does somebody > else > want to take a look? See comment about different rules between libc and libkern. Kernels for platforms with the right byte order need not actually contain these symbols. > Also, for future reference, would these patches be preferred in separate > emails? Preferrably (and lines trimmed to the usual 72 columns). Although for simple diffs, this may be acceptable.