[PATCH v7] String: Add support for __memcmpeq() ABI on all targets
Noah Goldstein
goldstein.w.n@gmail.com
Thu Oct 21 20:23:02 GMT 2021
On Thu, Oct 21, 2021 at 3:02 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> >>> diff --git a/string/string.h b/string/string.h
> >>> index 04e1b7067d..d0b714f836 100644
> >>> --- a/string/string.h
> >>> +++ b/string/string.h
> >>> @@ -64,6 +64,22 @@ extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
> >>> extern int memcmp (const void *__s1, const void *__s2, size_t __n)
> >>> __THROW __attribute_pure__ __nonnull ((1, 2));
> >>>
> >>> +/* Compare N bytes of S1 and S2. Return zero if S1 and S2 are equal.
> >>> + Return some non-zero value otherwise.
> >>> +
> >>> + Essentially __memcmpeq has the exact same semantics as memcmp
> >>> + except the return value is less constrained. memcmp is always a
> >>> + correct implementation of __memcmpeq. As well !!memcmp, -memcmp,
> >>> + or bcmp are correct implementations.
> >>> +
> >>> + __memcmpeq is meant to be used by compilers when memcmp return is
> >>> + only used for its bolean value.
> >>> +
> >>> + __memcmpeq is declared only for use by compilers. Programs should
> >>> + continue to use memcmp. */
> >>> +extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n)
> >>> + __THROW __attribute_pure__ __nonnull ((1, 2));
> >>
> >> Please add an internal one in include/string.h so that it can be called
> >> within libc.so bypassing PLT. Find one place in glibc where __memcmpeq
> >> can be used and use it.
> >
> > Usage outside of a test? It is currently used directly in string/tester.c
>
>
> Add a libc_hidden_proto on include/string.h and a libc_hidden_def on
> each implementation to create a local alias that bypass PLT if we
> eventually need to call it from within glibc.
Does each place this patch does 'weak_alias(memcmp, __memcmpeq)`
need a 'libc_hidden_def' for '__memcmpeq'?
>
More information about the Libc-alpha
mailing list