aboutsummaryrefslogtreecommitdiff
path: root/src/helper/log.c
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2020-04-24 00:28:49 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2020-08-16 11:49:31 +0100
commitd88765a7e2997c987ea7e5391378b3ae8b4fb59b (patch)
tree6776c098b839829ed467abd02c42c2cc53e9ee4f /src/helper/log.c
parent401086186f2560b7c45ea53c200a0558f84437be (diff)
downloadriscv-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.c13
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;