Merge pull request #26608 from medhefgo/boot-arm

boot: Some ARM fixes
This commit is contained in:
Luca Boccassi
2023-02-28 18:48:45 +00:00
committed by GitHub
3 changed files with 21 additions and 9 deletions

View File

@@ -126,7 +126,7 @@ _gnu_printf_(2, 0) _warn_unused_result_ char16_t *xvasprintf_status(EFI_STATUS s
/* inttypes.h is provided by libc instead of the compiler and is not supposed to be used in freestanding
* environments. We could use clang __*_FMT*__ constants for this, bug gcc does not have them. :( */
# if defined(__ILP32__)
# if defined(__ILP32__) || defined(__arm__)
# define PRI64_PREFIX "ll"
# elif defined(__LP64__)
# define PRI64_PREFIX "l"

View File

@@ -5,12 +5,16 @@
static unsigned log_count = 0;
void efi_assert(const char *expr, const char *file, unsigned line, const char *function) {
log_error("systemd-boot assertion '%s' failed at %s:%u@%s. Halting.", expr, file, line, function);
_noreturn_ static void freeze(void) {
for (;;)
BS->Stall(60 * 1000 * 1000);
}
void efi_assert(const char *expr, const char *file, unsigned line, const char *function) {
log_error("systemd-boot assertion '%s' failed at %s:%u@%s. Halting.", expr, file, line, function);
freeze();
}
EFI_STATUS log_internal(EFI_STATUS status, const char *format, ...) {
assert(format);
@@ -39,3 +43,17 @@ void log_wait(void) {
BS->Stall(MIN(4u, log_count) * 2500 * 1000);
log_count = 0;
}
#if defined(__ARM_EABI__)
/* These override the (weak) div0 handlers from libgcc as they would otherwise call raise() instead. */
_used_ _noreturn_ int __aeabi_idiv0(int return_value) {
log_error("Division by zero.");
freeze();
}
_used_ _noreturn_ long long __aeabi_ldiv0(long long return_value) {
log_error("Division by zero.");
freeze();
}
#endif

View File

@@ -629,9 +629,3 @@ void *find_configuration_table(const EFI_GUID *guid) {
return NULL;
}
/* libgcc's __aeabi_ldiv0 intrinsic will call raise() on division by zero, so we
* need to provide one ourselves for now. */
_used_ _noreturn_ int raise(int sig) {
assert_not_reached();
}