This article <http://unwiredben.livejournal.com/297826.html> seems relevant to Maxim's question.
On Mon, Nov 24, 2014 at 6:05 AM, Maxim Uvarov <[email protected]> wrote: > Do weak symbols work also for dynamic linking? > > Maxim. > > > On 11/24/2014 02:13 PM, Taras Kondratiuk wrote: > >> Move additional functionality out of ODP_LOG. Move abort() call to >> odp_override_log(), so application will be able to implement custom >> abort handling. >> >> Signed-off-by: Taras Kondratiuk <[email protected]> >> --- >> platform/linux-generic/include/api/odp_debug.h | 37 >> ++++---------------- >> .../linux-generic/include/odp_debug_internal.h | 6 ++-- >> platform/linux-generic/odp_weak.c | 5 ++- >> 3 files changed, 14 insertions(+), 34 deletions(-) >> >> diff --git a/platform/linux-generic/include/api/odp_debug.h >> b/platform/linux-generic/include/api/odp_debug.h >> index cb5bc83..0fbd6b9 100644 >> --- a/platform/linux-generic/include/api/odp_debug.h >> +++ b/platform/linux-generic/include/api/odp_debug.h >> @@ -99,36 +99,8 @@ extern int odp_override_log(odp_log_level_e level, >> const char *fmt, ...); >> * ODP LOG macro. >> */ >> #define ODP_LOG(level, fmt, ...) \ >> -do { \ >> - switch (level) { \ >> - case ODP_LOG_ERR: \ >> - odp_override_log(level, "%s:%d:%s():" fmt, __FILE__, \ >> - __LINE__, __func__, ##__VA_ARGS__); \ >> - break; \ >> - case ODP_LOG_DBG: \ >> - if (ODP_DEBUG_PRINT == 1) \ >> - odp_override_log(level, "%s:%d:%s():" fmt, >> __FILE__, \ >> - __LINE__, __func__, ##__VA_ARGS__); \ >> - break; \ >> - case ODP_LOG_PRINT: \ >> - odp_override_log(level, "%s:%d:%s():" fmt, __FILE__, \ >> - __LINE__, __func__, ##__VA_ARGS__); \ >> - break; \ >> - case ODP_LOG_ABORT: \ >> - odp_override_log(level, "%s:%d:%s(): " fmt, __FILE__, \ >> - __LINE__, __func__, ##__VA_ARGS__); \ >> - abort(); \ >> - break; \ >> - case ODP_LOG_UNIMPLEMENTED: \ >> - odp_override_log(level, \ >> - "%s:%d:The function %s() is not implemented\n" \ >> - fmt, __FILE__, __LINE__, __func__, >> ##__VA_ARGS__); \ >> - break; \ >> - default: \ >> - odp_override_log(level, "Unknown LOG level"); \ >> - break;\ >> - } \ >> -} while (0) >> + odp_override_log(level, "%s:%d:%s():" fmt, __FILE__, \ >> + __LINE__, __func__, ##__VA_ARGS__) >> /** >> * Log print message when the application calls one of the ODP APIs >> @@ -141,7 +113,10 @@ do { \ >> * Log debug message if DEBUG flag is set. >> */ >> #define ODP_DBG(fmt, ...) \ >> - ODP_LOG(ODP_LOG_DBG, fmt, ##__VA_ARGS__) >> + do { \ >> + if (ODP_DEBUG_PRINT == 1) \ >> + ODP_LOG(ODP_LOG_DBG, fmt, ##__VA_ARGS__);\ >> + } while (0) >> /** >> * Log error message. >> diff --git a/platform/linux-generic/include/odp_debug_internal.h >> b/platform/linux-generic/include/odp_debug_internal.h >> index a87552f..006e8ab 100644 >> --- a/platform/linux-generic/include/odp_debug_internal.h >> +++ b/platform/linux-generic/include/odp_debug_internal.h >> @@ -25,8 +25,10 @@ extern "C" { >> /** >> * This macro is used to indicate when a given function is not >> implemented >> */ >> -#define ODP_UNIMPLEMENTED(fmt, ...) \ >> - ODP_LOG(ODP_LOG_UNIMPLEMENTED, fmt, ##__VA_ARGS__) >> +#define ODP_UNIMPLEMENTED() \ >> + odp_override_log(ODP_LOG_UNIMPLEMENTED, \ >> + "%s:%d:The function %s() is not implemented\n" \ >> + __FILE__, __LINE__, __func__) >> #ifdef __cplusplus >> } >> diff --git a/platform/linux-generic/odp_weak.c >> b/platform/linux-generic/odp_weak.c >> index fccbc3f..3cc3d45 100644 >> --- a/platform/linux-generic/odp_weak.c >> +++ b/platform/linux-generic/odp_weak.c >> @@ -9,7 +9,7 @@ >> #include <odp_debug_internal.h> >> #include <odp_hints.h> >> -ODP_WEAK_SYMBOL int odp_override_log(odp_log_level_e level ODP_UNUSED, >> +ODP_WEAK_SYMBOL int odp_override_log(odp_log_level_e level, >> const char *fmt, ...) >> { >> va_list args; >> @@ -19,5 +19,8 @@ ODP_WEAK_SYMBOL int odp_override_log(odp_log_level_e >> level ODP_UNUSED, >> r = vfprintf(stderr, fmt, args); >> va_end(args); >> + if (level == ODP_LOG_ABORT) >> + abort(); >> + >> 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
