diff options
author | Doug Evans <dje@google.com> | 2015-11-19 15:57:23 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-01-07 01:46:35 -0800 |
commit | 58cb8c532b0909edb34d17c7fd32b0559b917eb9 (patch) | |
tree | 6aa5c6bf58273c1109a9553932fdc08d8e716282 /firmware/stub | |
parent | 7e0728dfca6d4f27c07434c9a6af468c966046a4 (diff) | |
download | vboot-58cb8c532b0909edb34d17c7fd32b0559b917eb9.tar.gz |
Port to musl: musl doesn't have execinfo.h.
Change-Id: Idc2f18880581d3a2e67185becee8b77cfa5cdf04
Reviewed-on: https://chromium-review.googlesource.com/313388
Commit-Ready: Doug Evans <dje@google.com>
Tested-by: Doug Evans <dje@google.com>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'firmware/stub')
-rw-r--r-- | firmware/stub/vboot_api_stub_sf.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/firmware/stub/vboot_api_stub_sf.c b/firmware/stub/vboot_api_stub_sf.c index 3c5ec85a..76d45ee8 100644 --- a/firmware/stub/vboot_api_stub_sf.c +++ b/firmware/stub/vboot_api_stub_sf.c @@ -5,7 +5,12 @@ * Stub implementations of firmware-provided API functions. */ +/* Musl doesn't have execinfo.h. + TODO(dje): Add a replacement (libunwind) if/when fnl needs it. */ +#ifdef HAVE_EXECINFO_H #include <execinfo.h> +#endif + #include <stdint.h> #define _STUB_IMPLEMENTATION_ @@ -26,12 +31,15 @@ struct alloc_node { struct alloc_node *next; void *ptr; size_t size; +#ifdef HAVE_EXECINFO_H void *bt_buffer[MAX_STACK_LEVELS]; int bt_levels; +#endif }; static struct alloc_node *alloc_head; +#ifdef HAVE_EXECINFO_H static void print_stacktrace(void) { void *buffer[MAX_STACK_LEVELS]; @@ -40,6 +48,7 @@ static void print_stacktrace(void) // print to stderr (fd = 2), and remove this function from the trace backtrace_symbols_fd(buffer + 1, levels - 1, 2); } +#endif void *VbExMalloc(size_t size) { @@ -57,7 +66,9 @@ void *VbExMalloc(size_t size) node->next = alloc_head; node->ptr = p; node->size = size; +#ifdef HAVE_EXECINFO_H node->bt_levels = backtrace(node->bt_buffer, MAX_STACK_LEVELS); +#endif alloc_head = node; return p; @@ -86,7 +97,9 @@ void VbExFree(void *ptr) } else { fprintf(stderr, "\n>>>>>> Invalid VbExFree() %p\n", ptr); fflush(stderr); +#ifdef HAVE_EXECINFO_H print_stacktrace(); +#endif /* * Fall through and do the free() so we get normal error * handling. @@ -118,8 +131,10 @@ int vboot_api_stub_check_memory(void) next = node->next; fprintf(stderr, "\nptr=%p, size=%zd\n", node->ptr, node->size); fflush(stderr); +#ifdef HAVE_EXECINFO_H backtrace_symbols_fd(node->bt_buffer + 1, node->bt_levels - 1, 2); +#endif free(node); } |