Hit reply too soon.

We should typedef these functions to prevent confusion:

typedef int (*odp_log_t)(odp_log_level_e level, const char *fmt, ...);
typedef void (odp_abort_t)(void);

so that the struct becomes:

typedef struct odp_init_t {
        odp_log_t *odp_log;
        odp_abort_t *odp_abort;
} odp_init_t;


Callers then define their functions as:

int *my_log_func(odp_log_level_e level, const char *fmt, ...)
{
}

and

void my_abort_func(void)
{
}




On Wed, Jan 7, 2015 at 11:17 AM, Bill Fischofer <[email protected]>
wrote:

> We should typedef these functions to prevent confusion:
>
> typedef int (*odp_log_t)(odp_log_level_e level, const char *fmt, ...);
> typedef void (*odp_abort_t)(void);
>
> so that the struct becomes:
>
> typedef struct odp_init_t {
>         odp_log_t odp_log;
>
> } odp_init_t;
>
> typedef void (_odp_buf_init_t)(odp_buffer_t buf, void *buf_init_arg);
>
> On Wed, Jan 7, 2015 at 8:18 AM, Savolainen, Petri (NSN - FI/Espoo) <
> [email protected]> wrote:
>
>> Hi,
>>
>> As agreed in the call today, it's better to remove API dependency to
>> non-standard weak symbol feature of GCC. Instead we'll define these two as
>> callback functions for odp_init_global()...
>>
>> typedef struct odp_init_t {
>>
>>  int (*odp_log)(odp_log_level_e level, const char *fmt, ...);
>>  void (*odp_abort)(void);
>>
>> } odp_init_t;
>>
>>
>> NULL would mean default log/abort implementation (with those user could
>> still override default implementation at his own risk of non-portability).
>>
>>
>> -Petri
>>
>>
>>
>>
>> > -----Original Message-----
>> > From: [email protected] [mailto:lng-odp-
>> > [email protected]] On Behalf Of ext Mike Holmes
>> > Sent: Tuesday, January 06, 2015 10:07 PM
>> > To: [email protected]
>> > Subject: [lng-odp] [PATCH] api: odp_debug: make ODP_ABORT a weak symbol
>> >
>> > Add a weak definition of ODP_ABORT so that it may be overridden by an
>> > application.
>> >
>> > Signed-off-by: Mike Holmes <[email protected]>
>> > ---
>> >  platform/linux-generic/include/api/odp_debug.h      | 14 ++++++++++++++
>> >  platform/linux-generic/include/api/odp_hints.h      |  5 +++++
>> >  platform/linux-generic/include/odp_debug_internal.h |  4 ++--
>> >  platform/linux-generic/odp_weak.c                   |  5 +++++
>> >  4 files changed, 26 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/platform/linux-generic/include/api/odp_debug.h
>> > b/platform/linux-generic/include/api/odp_debug.h
>> > index a4ce1d9..dd4eb89 100644
>> > --- a/platform/linux-generic/include/api/odp_debug.h
>> > +++ b/platform/linux-generic/include/api/odp_debug.h
>> > @@ -12,6 +12,7 @@
>> >  #ifndef ODP_DEBUG_H_
>> >  #define ODP_DEBUG_H_
>> >
>> > +#include <odp_hints.h>
>> >
>> >  #ifdef __cplusplus
>> >  extern "C" {
>> > @@ -75,6 +76,19 @@ typedef enum odp_log_level {
>> >   */
>> >  extern int odp_override_log(odp_log_level_e level, const char *fmt,
>> ...);
>> >
>> > +/**
>> > + * ODP abort function
>> > + *
>> > + * Where a fatal event can be identified within the ODP implementation
>> an
>> > + * ODP_ASSERT may used which can be controlled via ODP_DEBUG. In cases
>> > where
>> > + * an abort must always be called ODP_ABORT may be called directly. In
>> > + * both cases these macros will call odp_override_abort
>> > + * ODP platform MUST provide a default *weak* implementation of this
>> > function.
>> > + * Application MAY override the function if needed by providing a
>> strong
>> > + * function.
>> > + * @note This function must never return.
>> > + */
>> > +extern void odp_override_abort(void) ODP_NORETURN;
>> >
>> >
>> >  /**
>> > diff --git a/platform/linux-generic/include/api/odp_hints.h
>> > b/platform/linux-generic/include/api/odp_hints.h
>> > index 7f04886..7eb9e36 100644
>> > --- a/platform/linux-generic/include/api/odp_hints.h
>> > +++ b/platform/linux-generic/include/api/odp_hints.h
>> > @@ -32,6 +32,11 @@ extern "C" {
>> >  #define ODP_WEAK_SYMBOL __attribute__((__weak__))
>> >
>> >  /**
>> > + * Function never returns
>> > + */
>> > +#define ODP_NORETURN    __attribute__((__noreturn__))
>> > +
>> > +/**
>> >   * Hot code section
>> >   */
>> >  #define ODP_HOT_CODE    __attribute__((__hot__))
>> > diff --git a/platform/linux-generic/include/odp_debug_internal.h
>> > b/platform/linux-generic/include/odp_debug_internal.h
>> > index f6180d1..bbbe591 100644
>> > --- a/platform/linux-generic/include/odp_debug_internal.h
>> > +++ b/platform/linux-generic/include/odp_debug_internal.h
>> > @@ -53,7 +53,7 @@ extern "C" {
>> >  #define ODP_ASSERT(cond, msg) \
>> >       do { if ((ODP_DEBUG == 1) && (!(cond))) { \
>> >               ODP_ERR("%s\n", msg); \
>> > -             abort(); } \
>> > +             odp_override_abort(); } \
>> >       } while (0)
>> >
>> >  /**
>> > @@ -85,7 +85,7 @@ extern "C" {
>> >  #define ODP_ABORT(fmt, ...) \
>> >       do { \
>> >               ODP_LOG(ODP_LOG_ABORT, fmt, ##__VA_ARGS__); \
>> > -             abort(); \
>> > +             odp_override_abort(); \
>> >       } while (0)
>> >
>> >  /**
>> > diff --git a/platform/linux-generic/odp_weak.c b/platform/linux-
>> > generic/odp_weak.c
>> > index fccbc3f..ce87119 100644
>> > --- a/platform/linux-generic/odp_weak.c
>> > +++ b/platform/linux-generic/odp_weak.c
>> > @@ -21,3 +21,8 @@ ODP_WEAK_SYMBOL int odp_override_log(odp_log_level_e
>> > level ODP_UNUSED,
>> >
>> >       return r;
>> >  }
>> > +
>> > +ODP_WEAK_SYMBOL void odp_override_abort(void)
>> > +{
>> > +     abort();
>> > +}
>> > --
>> > 2.1.0
>> >
>> >
>> > _______________________________________________
>> > 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
>>
>
>
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to