1
0
Fork 0
mirror of https://github.com/Atmosphere-NX/Atmosphere.git synced 2024-11-10 06:01:52 +00:00

fusee-cpp: setup exception handlers during crt0

This commit is contained in:
Michael Scire 2021-08-21 11:17:16 -07:00 committed by SciresM
parent 5f60bc7186
commit 3e81796db7
2 changed files with 22 additions and 1 deletions

View file

@ -14,14 +14,35 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <exosphere.hpp> #include <exosphere.hpp>
#include "fusee_exception_handler.hpp"
extern "C" void __libc_init_array(); extern "C" void __libc_init_array();
namespace ams::nxboot::crt0 { namespace ams::nxboot::crt0 {
namespace {
ALWAYS_INLINE void SetExceptionVector(u32 which, uintptr_t impl) {
reg::Write(secmon::MemoryRegionPhysicalDeviceExceptionVectors.GetAddress() + 0x200 + sizeof(u32) * which, static_cast<u32>(impl));
}
}
void Initialize(uintptr_t bss_start, uintptr_t bss_end) { void Initialize(uintptr_t bss_start, uintptr_t bss_end) {
/* TODO: Collect timing information? */ /* TODO: Collect timing information? */
/* Setup exception vectors. */
{
SetExceptionVector(0, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler0));
SetExceptionVector(1, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler1));
SetExceptionVector(2, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler2));
SetExceptionVector(3, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler3));
SetExceptionVector(4, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler4));
SetExceptionVector(5, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler5));
SetExceptionVector(6, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler6));
SetExceptionVector(7, reinterpret_cast<uintptr_t>(::ams::nxboot::ExceptionHandler7));
}
/* Clear bss. */ /* Clear bss. */
std::memset(reinterpret_cast<void *>(bss_start), 0, bss_end - bss_start); std::memset(reinterpret_cast<void *>(bss_start), 0, bss_end - bss_start);

View file

@ -16,7 +16,7 @@
#include <exosphere.hpp> #include <exosphere.hpp>
#pragma once #pragma once
namespace ams::nxboot::loader { namespace ams::nxboot {
NORETURN void ExceptionHandler(); NORETURN void ExceptionHandler();