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
This commit is contained in:
parent
401086186f
commit
d88765a7e2
|
@ -40,7 +40,7 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int debug_level = -1;
|
int debug_level = LOG_LVL_INFO;
|
||||||
|
|
||||||
static FILE *log_output;
|
static FILE *log_output;
|
||||||
static struct log_callback *log_callbacks;
|
static struct log_callback *log_callbacks;
|
||||||
|
@ -91,6 +91,14 @@ static void log_puts(enum log_levels level,
|
||||||
const char *string)
|
const char *string)
|
||||||
{
|
{
|
||||||
char *f;
|
char *f;
|
||||||
|
|
||||||
|
if (!log_output) {
|
||||||
|
/* log_init() not called yet; print on stderr */
|
||||||
|
fputs(string, stderr);
|
||||||
|
fflush(stderr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (level == LOG_LVL_OUTPUT) {
|
if (level == LOG_LVL_OUTPUT) {
|
||||||
/* do not prepend any headers, just print out what we were given and return */
|
/* do not prepend any headers, just print out what we were given and return */
|
||||||
fputs(string, log_output);
|
fputs(string, log_output);
|
||||||
|
@ -277,9 +285,6 @@ void log_init(void)
|
||||||
{
|
{
|
||||||
/* set defaults for daemon configuration,
|
/* set defaults for daemon configuration,
|
||||||
* if not set by cmdline or cfgfile */
|
* if not set by cmdline or cfgfile */
|
||||||
if (debug_level == -1)
|
|
||||||
debug_level = LOG_LVL_INFO;
|
|
||||||
|
|
||||||
char *debug_env = getenv("OPENOCD_DEBUG_LEVEL");
|
char *debug_env = getenv("OPENOCD_DEBUG_LEVEL");
|
||||||
if (NULL != debug_env) {
|
if (NULL != debug_env) {
|
||||||
int value;
|
int value;
|
||||||
|
|
Loading…
Reference in New Issue