From 2b0af8e76a81935f0a7e23bd6c61ca56761fb014 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Fri, 10 Jun 2022 15:20:01 +0200 Subject: [PATCH] boot: Mark memcmp/memcpy/memset aliases as used The compiler may emit calls to these but also optimize the function away somehow, breaking at link stage. Marking them as used prevents this. --- src/boot/efi/efi-string.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c index b9ef1548ca2..f5b671c7be8 100644 --- a/src/boot/efi/efi-string.c +++ b/src/boot/efi/efi-string.c @@ -294,9 +294,11 @@ void *efi_memset(void *p, int c, size_t n) { # undef memcmp # undef memcpy # undef memset -/* Provide the actual implementation for the builtins. To prevent a linker error, we mark memcpy/memset as - * weak, because gnu-efi is currently providing them. */ -__attribute__((alias("efi_memcmp"))) int memcmp(const void *p1, const void *p2, size_t n); -__attribute__((weak, alias("efi_memcpy"))) void *memcpy(void * restrict dest, const void * restrict src, size_t n); -__attribute__((weak, alias("efi_memset"))) void *memset(void *p, int c, size_t n); +/* Provide the actual implementation for the builtins by providing aliases. These need to be marked as used, + * as otherwise the compiler might remove them but still emit calls, which would break when linking. + * To prevent a different linker error, we mark memcpy/memset as weak, because gnu-efi is currently + * providing them. */ +__attribute__((used, alias("efi_memcmp"))) int memcmp(const void *p1, const void *p2, size_t n); +__attribute__((used, weak, alias("efi_memcpy"))) void *memcpy(void * restrict dest, const void * restrict src, size_t n); +__attribute__((used, weak, alias("efi_memset"))) void *memset(void *p, int c, size_t n); #endif