debug: coredump: allow for coredump backends to be defined outside of tree

Move coredump_backend_api struct to public header so that custom backends
for coredump can be defined out of tree. Create simple backend in test
directory for verification.

Signed-off-by: Mark Holden <mholden@fb.com>
This commit is contained in:
Mark Holden 2022-01-07 13:02:19 -08:00 committed by Anas Nashif
commit 7b2b283677
10 changed files with 141 additions and 33 deletions

View file

@ -6,3 +6,8 @@ find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(hello_world)
target_sources(app PRIVATE src/main.c)
zephyr_library_sources_ifdef(
CONFIG_DEBUG_COREDUMP_BACKEND_OTHER
src/coredump_backend_empty.c
)

View file

@ -0,0 +1,6 @@
CONFIG_ZTEST=y
CONFIG_DEBUG_COREDUMP=y
CONFIG_DEBUG_COREDUMP_BACKEND_OTHER=y
CONFIG_MP_NUM_CPUS=1
CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_LINKER_RAM=n

View file

@ -0,0 +1,83 @@
/*
* Copyright Meta Platforms, Inc. and its affiliates.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <errno.h>
#include <debug/coredump.h>
static int error;
static bool is_valid;
static void coredump_empty_backend_start(void)
{
/* Reset error, is_valid */
error = 0;
is_valid = false;
}
static void coredump_empty_backend_end(void)
{
is_valid = true;
}
static void coredump_empty_backend_buffer_output(uint8_t *buf, size_t buflen)
{
/* no-op */
}
static int coredump_empty_backend_query(enum coredump_query_id query_id,
void *arg)
{
int ret;
switch (query_id) {
case COREDUMP_QUERY_GET_ERROR:
ret = error;
break;
case COREDUMP_QUERY_HAS_STORED_DUMP:
ret = 0;
if (is_valid) {
ret = 1;
}
break;
default:
ret = -ENOTSUP;
break;
}
return ret;
}
static int coredump_empty_backend_cmd(enum coredump_cmd_id cmd_id,
void *arg)
{
int ret;
switch (cmd_id) {
case COREDUMP_CMD_CLEAR_ERROR:
error = 0;
ret = 0;
break;
case COREDUMP_CMD_VERIFY_STORED_DUMP:
ret = 0;
if (is_valid) {
ret = 1;
}
break;
default:
ret = -ENOTSUP;
break;
}
return ret;
}
struct coredump_backend_api coredump_backend_other = {
.start = coredump_empty_backend_start,
.end = coredump_empty_backend_end,
.buffer_output = coredump_empty_backend_buffer_output,
.query = coredump_empty_backend_query,
.cmd = coredump_empty_backend_cmd,
};

View file

@ -15,3 +15,8 @@ tests:
filter: CONFIG_ARCH_SUPPORTS_COREDUMP
extra_args: CONF_FILE=prj_flash_partition.conf
platform_allow: qemu_x86
coredump.backends.other:
tags: ignore_faults ignore_qemu_crash
filter: CONFIG_ARCH_SUPPORTS_COREDUMP
extra_args: CONF_FILE=prj_backend_other.conf
platform_exclude: acrn_ehl_crb