summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatryk Duda <pdk@semihalf.com>2020-08-28 14:22:30 +0200
committerCommit Bot <commit-bot@chromium.org>2020-10-01 14:48:02 +0000
commit7230958db0d3dff50643cfb9960c6fecfc967e3b (patch)
tree800b05b57df18680a69bce20d230f345c0d5a38c
parentb95c5c31c0b0f9082f9bfbe5ec6eaaa24c1e3294 (diff)
downloadchrome-ec-7230958db0d3dff50643cfb9960c6fecfc967e3b.tar.gz
common/panic_output: Use newly introduced functions for panic info dump
This patch adds use of function that provides pointer to the beginning of panic data in panic info host command. It also adds use of panic_get_data() in panicinfo command to get pointer that can be safely dereferenced. BUG=b:165773837, b:162254118 BRANCH=none TEST=make -j buildall Signed-off-by: Patryk Duda <pdk@semihalf.com> Change-Id: I403300f796fc2add4fae06728d7da4e43616ef2d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2379847 Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r--common/panic_output.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/common/panic_output.c b/common/panic_output.c
index 2482da09c3..75c94223ce 100644
--- a/common/panic_output.c
+++ b/common/panic_output.c
@@ -172,6 +172,14 @@ uintptr_t get_panic_data_start(void)
- pdata_ptr->struct_size);
}
+static uint32_t get_panic_data_size(void)
+{
+ if (pdata_ptr->magic != PANIC_DATA_MAGIC)
+ return 0;
+
+ return pdata_ptr->struct_size;
+}
+
/*
* Returns pointer to panic_data structure that can be safely written.
* Please note that this function can move jump data and jump tags.
@@ -350,7 +358,9 @@ DECLARE_CONSOLE_COMMAND(crash, command_crash,
static int command_panicinfo(int argc, char **argv)
{
- if (pdata_ptr->magic == PANIC_DATA_MAGIC) {
+ struct panic_data * const pdata_ptr = panic_get_data();
+
+ if (pdata_ptr) {
ccprintf("Saved panic data:%s\n",
(pdata_ptr->flags & PANIC_DATA_FLAG_OLD_CONSOLE ?
"" : " (NEW)"));
@@ -360,7 +370,8 @@ static int command_panicinfo(int argc, char **argv)
/* Data has now been printed */
pdata_ptr->flags |= PANIC_DATA_FLAG_OLD_CONSOLE;
} else {
- ccprintf("No saved panic data available.\n");
+ ccprintf("No saved panic data available "
+ "or panic data can't be safely interpreted.\n");
}
return EC_SUCCESS;
}
@@ -373,13 +384,20 @@ DECLARE_CONSOLE_COMMAND(panicinfo, command_panicinfo,
enum ec_status host_command_panic_info(struct host_cmd_handler_args *args)
{
- if (pdata_ptr->magic == PANIC_DATA_MAGIC) {
- ASSERT(pdata_ptr->struct_size <= args->response_max);
- memcpy(args->response, pdata_ptr, pdata_ptr->struct_size);
- args->response_size = pdata_ptr->struct_size;
-
- /* Data has now been returned */
- pdata_ptr->flags |= PANIC_DATA_FLAG_OLD_HOSTCMD;
+ uint32_t pdata_size = get_panic_data_size();
+ uintptr_t pdata_start = get_panic_data_start();
+ struct panic_data * pdata;
+
+ if (pdata_start && pdata_size > 0) {
+ ASSERT(pdata_size <= args->response_max);
+ memcpy(args->response, (void *)pdata_start, pdata_size);
+ args->response_size = pdata_size;
+
+ pdata = panic_get_data();
+ if (pdata) {
+ /* Data has now been returned */
+ pdata->flags |= PANIC_DATA_FLAG_OLD_HOSTCMD;
+ }
}
return EC_RES_SUCCESS;