1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-29 21:55:36 +03:00

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.
This commit is contained in:
Jan Janssen 2022-06-10 15:20:01 +02:00
parent 67bca872ea
commit 2b0af8e76a

View File

@ -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