X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fhelper%2Flog.c;h=549d71279d9a8f38b226f39ff796920f545a21dc;hb=35d8b2bf77645cfc4bc89666640a2907449451ff;hp=1a0f677d06695127a2188ff1d14a4582d967edd4;hpb=9b6853bc4c8957dd3ebc5b69846cef09306d3155;p=openocd.git diff --git a/src/helper/log.c b/src/helper/log.c index 1a0f677d06..549d71279d 100644 --- a/src/helper/log.c +++ b/src/helper/log.c @@ -2,9 +2,12 @@ * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * - * Copyright (C) 2007,2008 Øyvind Harboe * + * Copyright (C) 2007,2008 Øyvind Harboe * * oyvind.harboe@zylin.com * * * + * Copyright (C) 2008 by Spencer Oliver * + * spen@spen-soft.co.uk * + * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * @@ -25,18 +28,18 @@ #endif #include "log.h" -#include "configuration.h" #include "time_support.h" -#include "command.h" +// @todo the inclusion of server.h here is a layering violation +#include "server.h" -#include -#include -#include #include -#define PRINT_MEM() 0 -#if PRINT_MEM() +#ifdef _DEBUG_FREE_SPACE_ +#ifdef HAVE_MALLOC_H #include +#else +#error "malloc.h is required to use --enable-malloc-logging" +#endif #endif int debug_level = -1; @@ -51,13 +54,14 @@ static long long start; static char *log_strings[5] = { - "User: ", - "Error: ", - "Warning:", - "Info: ", - "Debug: " + "User : ", + "Error: ", + "Warn : ", /* want a space after each colon, all same width, colons aligned */ + "Info : ", + "Debug: " }; + static int count = 0; /* The log_puts() serves to somewhat different goals: @@ -91,23 +95,25 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch { /* print with count and time information */ int t=(int)(timeval_ms()-start); -#if PRINT_MEM() +#ifdef _DEBUG_FREE_SPACE_ struct mallinfo info; info = mallinfo(); #endif - fprintf(log_output, "%s %d %d %s:%d %s()" -#if PRINT_MEM() + fprintf(log_output, "%s%d %d %s:%d %s()" +#ifdef _DEBUG_FREE_SPACE_ " %d" #endif ": %s", log_strings[level+1], count, t, file, line, function, -#if PRINT_MEM() +#ifdef _DEBUG_FREE_SPACE_ info.fordblks, #endif string); } - else + else if(server_use_pipes == 0) { - if (strcmp(string, "\n")!=0) + /* if we are using gdb through pipes then we do not want any output + * to the pipe otherwise we get repeated strings */ + if (strcmp(string, "\n") != 0) { /* print human readable output - but skip empty lines */ fprintf(log_output, "%s%s", @@ -200,6 +206,18 @@ int handle_debug_level_command(struct command_context_s *cmd_ctx, char *cmd, cha if (debug_level > 3) debug_level = 3; + if (debug_level >= LOG_LVL_DEBUG && server_use_pipes == 1) + { + /* if we are enabling debug info then we need to write to a log file + * otherwise the pipe will get full and cause issues with gdb */ + FILE* file = fopen("openocd.log", "w"); + if (file) + { + log_output = file; + LOG_WARNING("enabling log output as we are using pipes"); + } + } + return ERROR_OK; } @@ -367,7 +385,19 @@ void keep_alive() current_time=timeval_ms(); if (current_time-last_time>1000) { - LOG_WARNING("BUG: keep_alive() was not invoked in the 1000ms timelimit. GDB alive packet not sent! (%lld)", current_time-last_time); + extern int gdb_actual_connections; + + if (gdb_actual_connections) + LOG_WARNING("keep_alive() was not invoked in the " + "1000ms timelimit. GDB alive packet not " + "sent! (%lld). Workaround: increase " + "\"set remotetimeout\" in GDB", + current_time-last_time); + else + LOG_DEBUG("keep_alive() was not invoked in the " + "1000ms timelimit (%lld). This may cause " + "trouble with GDB connections.", + current_time-last_time); } if (current_time-last_time>500) { @@ -397,15 +427,25 @@ void kept_alive() void alive_sleep(int ms) { int i; - for (i=0; i500) + if (sleep_a_bit>napTime) { - sleep_a_bit=500; + sleep_a_bit=napTime; } - keep_alive(); usleep(sleep_a_bit*1000); keep_alive(); } } + +void busy_sleep(int ms) +{ + long long then; + then=timeval_ms(); + while ((timeval_ms()-then)