diff mbox

[v2,1/4] linux-generic: debug: use global fn ptr for logging fn

Message ID 1421797078-14262-1-git-send-email-mike.holmes@linaro.org
State Accepted
Commit b776ca47c0d88758aac0dd6a1f0e591b045852ec
Headers show

Commit Message

Mike Holmes Jan. 20, 2015, 11:37 p.m. UTC
To allow init_global to replace the default logging function without
the need to use weak symbols a global location is needed to hold the
current logging function pointer.

Signed-off-by: Mike Holmes <mike.holmes@linaro.org>
---
 platform/linux-generic/include/api/odp_debug.h      | 2 ++
 platform/linux-generic/include/odp_debug_internal.h | 7 ++++---
 platform/linux-generic/include/odp_internal.h       | 5 +++++
 platform/linux-generic/odp_init.c                   | 2 ++
 4 files changed, 13 insertions(+), 3 deletions(-)

Comments

Maxim Uvarov Jan. 22, 2015, 11:42 a.m. UTC | #1
That is merged.

Maxim.

On 01/21/2015 02:37 AM, Mike Holmes wrote:
> To allow init_global to replace the default logging function without
> the need to use weak symbols a global location is needed to hold the
> current logging function pointer.
>
> Signed-off-by: Mike Holmes <mike.holmes@linaro.org>
> ---
>   platform/linux-generic/include/api/odp_debug.h      | 2 ++
>   platform/linux-generic/include/odp_debug_internal.h | 7 ++++---
>   platform/linux-generic/include/odp_internal.h       | 5 +++++
>   platform/linux-generic/odp_init.c                   | 2 ++
>   4 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/platform/linux-generic/include/api/odp_debug.h b/platform/linux-generic/include/api/odp_debug.h
> index a4ce1d9..4c32500 100644
> --- a/platform/linux-generic/include/api/odp_debug.h
> +++ b/platform/linux-generic/include/api/odp_debug.h
> @@ -76,6 +76,8 @@ typedef enum odp_log_level {
>   extern int odp_override_log(odp_log_level_e level, const char *fmt, ...);
>   
>   
> +/** Replaceable logging function */
> +typedef int (*odp_log_func_t)(odp_log_level_e level, const char *fmt, ...);
>   
>   /**
>    * @}
> diff --git a/platform/linux-generic/include/odp_debug_internal.h b/platform/linux-generic/include/odp_debug_internal.h
> index f6180d1..0b64fca 100644
> --- a/platform/linux-generic/include/odp_debug_internal.h
> +++ b/platform/linux-generic/include/odp_debug_internal.h
> @@ -20,6 +20,7 @@
>   #include <stdlib.h>
>   #include <stdarg.h>
>   #include <odp_debug.h>
> +#include <odp_internal.h>
>   #ifdef __cplusplus
>   extern "C" {
>   #endif
> @@ -60,7 +61,7 @@ extern "C" {
>    * This macro is used to indicate when a given function is not implemented
>    */
>   #define ODP_UNIMPLEMENTED() \
> -		odp_override_log(ODP_LOG_UNIMPLEMENTED, \
> +		odp_global_data.log_fn(ODP_LOG_UNIMPLEMENTED, \
>   			"%s:%d:The function %s() is not implemented\n", \
>   			__FILE__, __LINE__, __func__)
>   /**
> @@ -92,7 +93,7 @@ extern "C" {
>    * ODP LOG macro.
>    */
>   #define ODP_LOG(level, fmt, ...) \
> -	odp_override_log(level, "%s:%d:%s():" fmt, __FILE__, \
> +	odp_global_data.log_fn(level, "%s:%d:%s():" fmt, __FILE__, \
>   	__LINE__, __func__, ##__VA_ARGS__)
>   
>   /**
> @@ -100,7 +101,7 @@ extern "C" {
>    * specifically for dumping internal data.
>    */
>   #define ODP_PRINT(fmt, ...) \
> -	odp_override_log(ODP_LOG_PRINT, " " fmt, ##__VA_ARGS__)
> +	odp_global_data.log_fn(ODP_LOG_PRINT, " " fmt, ##__VA_ARGS__)
>   
>   #ifdef __cplusplus
>   }
> diff --git a/platform/linux-generic/include/odp_internal.h b/platform/linux-generic/include/odp_internal.h
> index 549d406..7401a30 100644
> --- a/platform/linux-generic/include/odp_internal.h
> +++ b/platform/linux-generic/include/odp_internal.h
> @@ -18,6 +18,11 @@
>   extern "C" {
>   #endif
>   
> +#include <odp_debug.h>
> +
> +struct odp_global_data {
> +	odp_log_func_t log_fn;
> +} odp_global_data;
>   
>   int odp_system_info_init(void);
>   
> diff --git a/platform/linux-generic/odp_init.c b/platform/linux-generic/odp_init.c
> index 77bfd09..4f152ac 100644
> --- a/platform/linux-generic/odp_init.c
> +++ b/platform/linux-generic/odp_init.c
> @@ -13,6 +13,8 @@
>   int odp_init_global(odp_init_t *params  ODP_UNUSED,
>   			odp_platform_init_t *platform_params ODP_UNUSED)
>   {
> +	odp_global_data.log_fn = odp_override_log;
> +
>   	odp_system_info_init();
>   
>   	if (odp_shm_init_global()) {
diff mbox

Patch

diff --git a/platform/linux-generic/include/api/odp_debug.h b/platform/linux-generic/include/api/odp_debug.h
index a4ce1d9..4c32500 100644
--- a/platform/linux-generic/include/api/odp_debug.h
+++ b/platform/linux-generic/include/api/odp_debug.h
@@ -76,6 +76,8 @@  typedef enum odp_log_level {
 extern int odp_override_log(odp_log_level_e level, const char *fmt, ...);
 
 
+/** Replaceable logging function */
+typedef int (*odp_log_func_t)(odp_log_level_e level, const char *fmt, ...);
 
 /**
  * @}
diff --git a/platform/linux-generic/include/odp_debug_internal.h b/platform/linux-generic/include/odp_debug_internal.h
index f6180d1..0b64fca 100644
--- a/platform/linux-generic/include/odp_debug_internal.h
+++ b/platform/linux-generic/include/odp_debug_internal.h
@@ -20,6 +20,7 @@ 
 #include <stdlib.h>
 #include <stdarg.h>
 #include <odp_debug.h>
+#include <odp_internal.h>
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -60,7 +61,7 @@  extern "C" {
  * This macro is used to indicate when a given function is not implemented
  */
 #define ODP_UNIMPLEMENTED() \
-		odp_override_log(ODP_LOG_UNIMPLEMENTED, \
+		odp_global_data.log_fn(ODP_LOG_UNIMPLEMENTED, \
 			"%s:%d:The function %s() is not implemented\n", \
 			__FILE__, __LINE__, __func__)
 /**
@@ -92,7 +93,7 @@  extern "C" {
  * ODP LOG macro.
  */
 #define ODP_LOG(level, fmt, ...) \
-	odp_override_log(level, "%s:%d:%s():" fmt, __FILE__, \
+	odp_global_data.log_fn(level, "%s:%d:%s():" fmt, __FILE__, \
 	__LINE__, __func__, ##__VA_ARGS__)
 
 /**
@@ -100,7 +101,7 @@  extern "C" {
  * specifically for dumping internal data.
  */
 #define ODP_PRINT(fmt, ...) \
-	odp_override_log(ODP_LOG_PRINT, " " fmt, ##__VA_ARGS__)
+	odp_global_data.log_fn(ODP_LOG_PRINT, " " fmt, ##__VA_ARGS__)
 
 #ifdef __cplusplus
 }
diff --git a/platform/linux-generic/include/odp_internal.h b/platform/linux-generic/include/odp_internal.h
index 549d406..7401a30 100644
--- a/platform/linux-generic/include/odp_internal.h
+++ b/platform/linux-generic/include/odp_internal.h
@@ -18,6 +18,11 @@ 
 extern "C" {
 #endif
 
+#include <odp_debug.h>
+
+struct odp_global_data {
+	odp_log_func_t log_fn;
+} odp_global_data;
 
 int odp_system_info_init(void);
 
diff --git a/platform/linux-generic/odp_init.c b/platform/linux-generic/odp_init.c
index 77bfd09..4f152ac 100644
--- a/platform/linux-generic/odp_init.c
+++ b/platform/linux-generic/odp_init.c
@@ -13,6 +13,8 @@ 
 int odp_init_global(odp_init_t *params  ODP_UNUSED,
 			odp_platform_init_t *platform_params ODP_UNUSED)
 {
+	odp_global_data.log_fn = odp_override_log;
+
 	odp_system_info_init();
 
 	if (odp_shm_init_global()) {