| // SPDX-License-Identifier: GPL-2.0+ |
| /* |
| * Copyright (c) 2011 The Chromium OS Authors. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include <common.h> |
| #include <efi_loader.h> |
| #include <irq_func.h> |
| #include <os.h> |
| #include <asm-generic/signal.h> |
| #include <asm/u-boot-sandbox.h> |
| |
| DECLARE_GLOBAL_DATA_PTR; |
| |
| int interrupt_init(void) |
| { |
| return 0; |
| } |
| |
| void enable_interrupts(void) |
| { |
| return; |
| } |
| int disable_interrupts(void) |
| { |
| return 0; |
| } |
| |
| void os_signal_action(int sig, unsigned long pc) |
| { |
| efi_restore_gd(); |
| |
| switch (sig) { |
| case SIGILL: |
| printf("\nIllegal instruction\n"); |
| break; |
| case SIGBUS: |
| printf("\nBus error\n"); |
| break; |
| case SIGSEGV: |
| printf("\nSegmentation violation\n"); |
| break; |
| default: |
| break; |
| } |
| printf("pc = 0x%lx, ", pc); |
| printf("pc_reloc = 0x%lx\n\n", pc - gd->reloc_off); |
| efi_print_image_infos((void *)pc); |
| |
| if (IS_ENABLED(CONFIG_SANDBOX_CRASH_RESET)) { |
| printf("resetting ...\n\n"); |
| sandbox_reset(); |
| } else { |
| sandbox_exit(); |
| } |
| } |