On 21 November 2014 04:11, Taras Kondratiuk <[email protected]
<mailto:[email protected]>> wrote:
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]
<mailto:[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
I favor odp_weak.c this is not an init function so I don't think
odp_init.c is the right place. odp_log might be good but we know we will
be adding a weak symbol for odp_abort, so we can group them I think.