On Thu, Sep 22, 2022, David Matlack wrote: > > +LIBKVM_STRING += lib/kvm_string.c > > Can this file be named lib/string.c instead? This file has nothing to do > with KVM per-se. Yes and no. I deliberately chose kvm_string to avoid confusion with tools/lib/string.c and tools/include/nolibc/string.h. The implementations themselves aren't KVM specific, but the reason the file _exists_ is 100% unique to KVM as there is no other environment where tools and/or selftests link to glibc but need to override the string ops. I'm not completely opposed to calling it string.c, but my preference is to keep it kvm_string.c so that it's slightly more obvious that KVM selftests are a special snowflake. > > diff --git a/tools/testing/selftests/kvm/lib/kvm_string.c b/tools/testing/selftests/kvm/lib/kvm_string.c > > new file mode 100644 > > index 000000000000..a60d56d4e5b8 > > --- /dev/null > > +++ b/tools/testing/selftests/kvm/lib/kvm_string.c > > @@ -0,0 +1,33 @@ > > +// SPDX-License-Identifier: GPL-2.0-only > > +#include "kvm_util.h" > > Is this include necesary? Nope, I added the include because I also added declarations in kvm_util_base.h, but that's unnecessary because stddef.h also provides the declarations, and those _must_ match the prototypes of the definitions. So yeah, this is better written as: // SPDX-License-Identifier: GPL-2.0-only #include <stddef.h> /* * Override the "basic" built-in string helpers so that they can be used in * guest code. KVM selftests don't support dynamic loading in guest code and * will jump into the weeds if the compiler decides to insert an out-of-line * call via the PLT. */ int memcmp(const void *cs, const void *ct, size_t count) { const unsigned char *su1, *su2; int res = 0; for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) { if ((res = *su1 - *su2) != 0) break; } return res; } void *memcpy(void *dest, const void *src, size_t count) { char *tmp = dest; const char *s = src; while (count--) *tmp++ = *s++; return dest; } void *memset(void *s, int c, size_t count) { char *xs = s; while (count--) *xs++ = c; return s; }