diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2020-04-24 00:28:49 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2020-08-16 11:49:31 +0100 |
commit | d88765a7e2997c987ea7e5391378b3ae8b4fb59b (patch) | |
tree | 6776c098b839829ed467abd02c42c2cc53e9ee4f /src/helper/log.c | |
parent | 401086186f2560b7c45ea53c200a0558f84437be (diff) | |
download | riscv-openocd-d88765a7e2997c987ea7e5391378b3ae8b4fb59b.zip riscv-openocd-d88765a7e2997c987ea7e5391378b3ae8b4fb59b.tar.gz riscv-openocd-d88765a7e2997c987ea7e5391378b3ae8b4fb59b.tar.bz2 |
log: handle LOG_*() before calling to log_init()
There are cases where LOG_*() functions are called before the logs
are initialized with log_init().
E.g. in transport_register() that is executed in gcc constructors,
thus called even before main().
With debug_level set to LOG_LVL_USER=-1 all the LOG_ERROR() get
dropped.
Properly initializing debug_level cause segmentation fault due to
log_output still not initialized.
Initialize debug_level to LOG_LVL_INFO so errors get printed.
Handle separately the case of log_output still NULL, meaning that
log_init() is not called yet.
Change-Id: I2ea32c87a4955fb44e79b38131c456e25dfbc327
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5602
Tested-by: jenkins
Diffstat (limited to 'src/helper/log.c')
-rw-r--r-- | src/helper/log.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/helper/log.c b/src/helper/log.c index 3112255..b05850d 100644 --- a/src/helper/log.c +++ b/src/helper/log.c @@ -40,7 +40,7 @@ #endif #endif -int debug_level = -1; +int debug_level = LOG_LVL_INFO; static FILE *log_output; static struct log_callback *log_callbacks; @@ -91,6 +91,14 @@ static void log_puts(enum log_levels level, const char *string) { char *f; + + if (!log_output) { + /* log_init() not called yet; print on stderr */ + fputs(string, stderr); + fflush(stderr); + return; + } + if (level == LOG_LVL_OUTPUT) { /* do not prepend any headers, just print out what we were given and return */ fputs(string, log_output); @@ -277,9 +285,6 @@ void log_init(void) { /* set defaults for daemon configuration, * if not set by cmdline or cfgfile */ - if (debug_level == -1) - debug_level = LOG_LVL_INFO; - char *debug_env = getenv("OPENOCD_DEBUG_LEVEL"); if (NULL != debug_env) { int value; |