On 11/20/2014 08:42 PM, Maxim Uvarov wrote:
On 11/20/2014 09:36 PM, Maxim Uvarov wrote:
On 11/20/2014 08:27 PM, Taras Kondratiuk wrote:
ODP application may want to override default ODP logging behaviour
and use custom logging function. Add a weak odp_override_log() function
for this purpose instead of default fprintf().

Signed-off-by: Taras Kondratiuk <[email protected]>
---
  platform/linux-generic/include/api/odp_debug.h |   24
++++++++++++++----------
  platform/linux-generic/odp_init.c              |   14 ++++++++++++++
  2 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/platform/linux-generic/include/api/odp_debug.h
b/platform/linux-generic/include/api/odp_debug.h
index c9b2edd..be73318 100644
--- a/platform/linux-generic/include/api/odp_debug.h
+++ b/platform/linux-generic/include/api/odp_debug.h
@@ -14,6 +14,7 @@
    #include <stdio.h>
  #include <stdlib.h>
+#include <stdarg.h>
    #ifdef __cplusplus
  extern "C" {
@@ -79,6 +80,9 @@ typedef enum odp_log_level {
      ODP_LOG_ABORT
  } odp_log_level_e;
  +
+extern int odp_override_log(odp_log_level_e level, const char *fmt,
...);
+
  /**
   * ODP default LOG macro.
   */
@@ -86,45 +90,45 @@ typedef enum odp_log_level {
  do { \
      switch (level) { \
      case ODP_LOG_ERR: \
-        fprintf(stderr, "%s:%d:%s():" fmt, __FILE__, \
+        odp_override_log(level, "%s:%d:%s():" fmt, __FILE__, \
          __LINE__, __func__, ##__VA_ARGS__); \
          break; \
      case ODP_LOG_DBG: \
          if (ODP_DEBUG_PRINT == 1) \
-            fprintf(stderr, "%s:%d:%s():" fmt, __FILE__, \
-            __LINE__, __func__, ##__VA_ARGS__); \
+            odp_override_log(level, "%s:%d:%s():" fmt, __FILE__, \
+                __LINE__, __func__, ##__VA_ARGS__); \
          break; \
      case ODP_LOG_ABORT: \
-        fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \
+        odp_override_log(level, "%s:%d:%s(): " fmt, __FILE__, \
          __LINE__, __func__, ##__VA_ARGS__); \
          abort(); \
          break; \
      case ODP_LOG_UNIMPLEMENTED: \
-        fprintf(stderr, \
+        odp_override_log(level, \
              "%s:%d:The function %s() is not implemented\n" \
              fmt, __FILE__, __LINE__, __func__, ##__VA_ARGS__); \
          break; \
      default: \
-        fprintf(stderr, "Unknown LOG level"); \
+        odp_override_log(level, "Unknown LOG level"); \
          break;\
      } \
  } while (0)
    /**
- * Debug printing macro, which prints output when DEBUG flag is set.
+ * Log debug message if DEBUG flag is set.
   */
  #define ODP_DBG(fmt, ...) \
          ODP_LOG(ODP_LOG_DBG, fmt, ##__VA_ARGS__)
    /**
- * Print output to stderr (file, line and function).
+ * Log error message.
   */
  #define ODP_ERR(fmt, ...) \
          ODP_LOG(ODP_LOG_ERR, fmt, ##__VA_ARGS__)
    /**
- * Print output to stderr (file, line and function),
- * then abort.
+ * Log abort message and then stop execution (by default call abort()).
+ * This function should not return.
   */
  #define ODP_ABORT(fmt, ...) \
          ODP_LOG(ODP_LOG_ABORT, fmt, ##__VA_ARGS__)
diff --git a/platform/linux-generic/odp_init.c
b/platform/linux-generic/odp_init.c
index 672b3d6..7fbfe36 100644
--- a/platform/linux-generic/odp_init.c
+++ b/platform/linux-generic/odp_init.c
@@ -8,6 +8,7 @@
  #include <odp_internal.h>
  #include <odp_debug.h>
  #include <odp_debug_internal.h>
+#include <odp_hints.h>
      int odp_init_global(odp_init_t *params  ODP_UNUSED,
@@ -89,3 +90,16 @@ int odp_term_local(void)
      ODP_UNIMPLEMENTED();
      return 0;
  }
+
+ODP_WEAK_SYMBOL int odp_override_log(odp_log_level_e level,
+                     const char *fmt, ...)
+{
+    va_list args;
+    int r;
+    (void)level;
+    va_start(args, fmt);
+    r = vfprintf(stdout, fmt, args);

don't like stdout here. It might be stderr or file descriptor.

Maxim.

Ah, it's weak function. And you provided level also. Withdraw my note.

That actually was stderr first. But for testing I've changed it to
stdout and forget to change it back. Will update in the next version.

Is odp_init.c a good place for this function or it should be in a
separate file? Like odp_log.c or odp_weaks.c


Maxim.

+    va_end(args);
+
+    return r;
+}



_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp


_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to