mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user