/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/debug/coredump.h>

#ifdef CONFIG_COVERAGE_DUMP
#include <zephyr/debug/gcov.h>
#endif


void k_sys_fatal_error_handler(unsigned int reason, const z_arch_esf_t *pEsf)
{
	ARG_UNUSED(pEsf);

	printk("%s is expected; reason = %u; halting ...\n", __func__, reason);

#ifdef CONFIG_COVERAGE_DUMP
	gcov_coverage_dump();  /* LCOV_EXCL_LINE */
#endif
	k_fatal_halt(reason);
}

/* Turn off optimizations to prevent the compiler from optimizing this away
 * due to the null pointer dereference.
 */
__no_optimization void func_3(uint32_t *addr)
{
#if defined(CONFIG_BOARD_M2GL025_MIV) || \
	defined(CONFIG_BOARD_HIFIVE1) || \
	defined(CONFIG_BOARD_HIFIVE_UNLEASHED) || \
	defined(CONFIG_BOARD_HIFIVE_UNMATCHED) || \
	defined(CONFIG_BOARD_LONGAN_NANO) || \
	defined(CONFIG_BOARD_QEMU_XTENSA) || \
	defined(CONFIG_BOARD_RISCV32_VIRTUAL) || \
	defined(CONFIG_SOC_FAMILY_INTEL_ADSP)
	ARG_UNUSED(addr);
	/* Call k_panic() directly so Renode doesn't pause execution.
	 * Needed on ADSP as well, since null pointer derefence doesn't
	 * fault as the lowest memory region is writable. SOF uses k_panic
	 * a lot, so it's good to check that it causes a coredump.
	 */
	k_panic();
#elif !defined(CONFIG_CPU_CORTEX_M)
	/* For null pointer reference */
	*addr = 0;
#else
	ARG_UNUSED(addr);
	/* Dereferencing null-pointer in TrustZone-enabled
	 * builds may crash the system, so use, instead an
	 * undefined instruction to trigger a CPU fault.
	 */
	__asm__ volatile("udf #0" : : : );
#endif
}

void func_2(uint32_t *addr)
{
	func_3(addr);
}

void func_1(uint32_t *addr)
{
	func_2(addr);
}

int main(void)
{
	printk("Coredump: %s\n", CONFIG_BOARD);

	func_1(0);
	return 0;
}
