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:
parent
1fd29fb131
commit
7b2b283677
10 changed files with 141 additions and 33 deletions
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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
|
|
@ -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,
|
||||
};
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue