From: EXT Mike Holmes [mailto:mike.hol...@linaro.org]
Sent: Tuesday, April 19, 2016 2:13 PM
To: Bill Fischofer <bill.fischo...@linaro.org>
Cc: Savolainen, Petri (Nokia - FI/Espoo) <petri.savolai...@nokia.com>; 
lng-odp-forward <lng-odp@lists.linaro.org>
Subject: Re: [lng-odp] [API-NEXT PATCHv6] api: make only the API visible



On 19 April 2016 at 06:39, Bill Fischofer 
<bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org>> wrote:


On Tue, Apr 19, 2016 at 2:42 AM, Savolainen, Petri (Nokia - FI/Espoo) 
<petri.savolai...@nokia.com<mailto:petri.savolai...@nokia.com>> wrote:
I think we should not add #include odp/api/abi_begin.h/_end.h speculatively. I 
think that abi definition will go into their own spec files parallel to API 
spec, like this

Do you have a definitive reason to not use the ABI begin approach, we have 
differing ideas so we need to specify the facts supporting the proposals I 
think.

Some things that strike me in this proposal of keeping it down in the reference 
implementation.

  *   It creates more work to maintain, more files
  *   Other implementers must also take on the burden of maintaining it
  *   It less clear what functions are part of the ABI since a developer now 
needs to look not in a specification but in the reference implementation to 
understand what is part of the ABI, that is much harder to follow.

Why you think abi_begin.h/abi_end.h in spec file would provide the best way for 
any implementation to provide ABI compatibility? It’s waste for an 
implementation, if it cannot use those.

Please, check the example below. Next we’ll need to specify these files …

include/odp/api/spec/abi/x86-64/foo.h
include/odp/api/spec/abi/aarch-64/foo.h
include/odp/api/spec/abi/arm-v7/foo.h
include/odp/api/spec/abi/mips/foo.h
include/odp/api/spec/abi/ppc64/foo.h
etc

… and include those only in binary compatibility mode.

The #include abi_begin.h and abi_end.h stuff can go into 
platform/linux-generic/include/odp/api/foo.h in exactly the same effort as into 
the spec file. The difference is that the spec file remain pure spec and the 
build system file (platform/linux-generic/include/odp/api/foo.h) is there for 
the build system (as it has been so far). The example under could look like 
this, if it’s preferred:

// API and ABI files are tied together by the build system
// which is platform specific
//
platform/linux-generic/include/odp/api/foo.h

...

#include < abi_begin.h>
#include <odp/api/spec/foo.h>

#if BINARY_COMP_MODE == x86-64
#include <odp/api/spec/abi/x86-64/foo.h>
#endif

  #include < abi_end.h>


-Petri





// Current API spec file
// - Misses some typedefs e.g. odp_foo_t
include/odp/api/spec/foo.h

// ABI specification for 64bit x86
// - Defines the missing types e.g. typedef int odp_foo_t
Include/odp/api/spec/abi/x86-64/foo.h

// API and ABI files are tied together by the build system
// which is platform specific
//
platform/linux-generic/include/odp/api/foo.h

...

+#if __GNUC__ >= 4
+#pragma GCC visibility push(default)
+#endif
 #include <odp/api/spec/foo.h>

#if BINARY_COMP_MODE == x86-64
 #include <odp/api/spec/abi/x86-64/foo.h>
#endif

+#if __GNUC__ >= 4
+#pragma GCC visibility pop
+#endif


This adds a lot of machinery that needs to be included in every platform API 
file.  The advantage of the abi_begin/end files is that they simply put this in 
a common (platform-dependent) separate set of files which can be maintained in 
one place rather than being distributed over many files that all need to be 
kept in sync.

Note that ODP does not specify what needs to be in those files, so additional 
#includes based on specific architecture can similarly be in one place rather 
than many.  For now the #pragmas seem to be all that we need but we can add to 
that if we determine that more is needed.



So, I suggest to merge Ander's v5 patch for now, and work on ABI support in 
separate patches. It may turn out that ABI support does not need extra 
includes/pragmas/ifdefs in API spec header ... like in the example above.


-Petri



> -----Original Message-----
> From: lng-odp 
> [mailto:lng-odp-boun...@lists.linaro.org<mailto:lng-odp-boun...@lists.linaro.org>]
>  On Behalf Of EXT
> Maxim Uvarov
> Sent: Tuesday, April 19, 2016 9:57 AM
> To: lng-odp-forward 
> <lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org>>
> Subject: Re: [lng-odp] [API-NEXT PATCHv6] api: make only the API visible
>
> I'm happy with that changes. Petri?
>
> small note that it will be much more easy to review if this patch will
> be slitted on 2 parts:
> 1. new functional (abi_begin.h, abi_end.h,  makefiles and configure.) 2.
> All other files instructed
> with begin and end. So I had to apply patch to find proper things.
>
> Thank you,
> Maxim.
>
> On 19.04.2016 01:36, Bill Fischofer wrote:
> > From: Anders Roxell 
> > <anders.rox...@linaro.org<mailto:anders.rox...@linaro.org>>
> >
> > Internal functions should not be part of symbols that are visible
> > outside the library. Using -fvisibility=hidden hides all internal
> > functions from the public ABI.
> >
> > Suggested-by: Ricardo Salveti 
> > <ricardo.salv...@linaro.org<mailto:ricardo.salv...@linaro.org>>
> > Signed-off-by: Anders Roxell 
> > <anders.rox...@linaro.org<mailto:anders.rox...@linaro.org>>
> > Signed-off-by: Bill Fischofer 
> > <bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org>>
> > ---
> > Changes for v6:
> > - Include abi_begin/end.h in platform/linux-generic/Makefile.am
> >
> > Changes for v5:
> > - Switch to use of odp/api/abi_begin/end.h to isolate #pragmas
> >
> >   include/odp/api/spec/align.h                       |  2 ++
> >   include/odp/api/spec/atomic.h                      |  2 ++
> >   include/odp/api/spec/barrier.h                     |  2 ++
> >   include/odp/api/spec/buffer.h                      |  3 ++-
> >   include/odp/api/spec/byteorder.h                   |  2 ++
> >   include/odp/api/spec/classification.h              |  3 ++-
> >   include/odp/api/spec/compiler.h                    |  2 ++
> >   include/odp/api/spec/config.h                      |  2 ++
> >   include/odp/api/spec/cpu.h                         |  2 ++
> >   include/odp/api/spec/cpumask.h                     |  2 ++
> >   include/odp/api/spec/crypto.h                      |  2 ++
> >   include/odp/api/spec/debug.h                       |  3 ++-
> >   include/odp/api/spec/errno.h                       |  2 ++
> >   include/odp/api/spec/event.h                       |  3 ++-
> >   include/odp/api/spec/hash.h                        |  2 ++
> >   include/odp/api/spec/hints.h                       |  2 ++
> >   include/odp/api/spec/init.h                        |  4 ++--
> >   include/odp/api/spec/packet.h                      |  2 ++
> >   include/odp/api/spec/packet_flags.h                |  2 ++
> >   include/odp/api/spec/packet_io.h                   |  2 ++
> >   include/odp/api/spec/packet_io_stats.h             |  2 ++
> >   include/odp/api/spec/pool.h                        |  4 ++--
> >   include/odp/api/spec/queue.h                       |  2 ++
> >   include/odp/api/spec/random.h                      |  3 ++-
> >   include/odp/api/spec/rwlock.h                      |  2 ++
> >   include/odp/api/spec/rwlock_recursive.h            |  2 ++
> >   include/odp/api/spec/schedule.h                    |  3 ++-
> >   include/odp/api/spec/schedule_types.h              |  2 ++
> >   include/odp/api/spec/shared_memory.h               |  3 ++-
> >   include/odp/api/spec/spinlock.h                    |  2 ++
> >   include/odp/api/spec/spinlock_recursive.h          |  2 ++
> >   include/odp/api/spec/std_clib.h                    |  2 ++
> >   include/odp/api/spec/std_types.h                   |  3 ++-
> >   include/odp/api/spec/sync.h                        |  2 ++
> >   include/odp/api/spec/system_info.h                 |  3 ++-
> >   include/odp/api/spec/thread.h                      |  2 ++
> >   include/odp/api/spec/thrmask.h                     |  2 ++
> >   include/odp/api/spec/ticketlock.h                  |  2 ++
> >   include/odp/api/spec/time.h                        |  3 ++-
> >   include/odp/api/spec/timer.h                       |  2 ++
> >   include/odp/api/spec/traffic_mngr.h                |  2 ++
> >   include/odp/api/spec/version.h                     |  2 ++
> >   platform/Makefile.inc                              |  1 +
> >   platform/linux-generic/Makefile.am                 |  2 ++
> >   platform/linux-generic/include/odp/api/abi_begin.h |  3 +++
> >   platform/linux-generic/include/odp/api/abi_end.h   |  3 +++
> >   platform/linux-generic/m4/configure.m4             | 12 ++++++++++++
> >   47 files changed, 105 insertions(+), 14 deletions(-)
> >   create mode 100644 platform/linux-generic/include/odp/api/abi_begin.h
> >   create mode 100644 platform/linux-generic/include/odp/api/abi_end.h
> >
> > diff --git a/include/odp/api/spec/align.h b/include/odp/api/spec/align.h
> > index 677ff12..e9e34b6 100644
> > --- a/include/odp/api/spec/align.h
> > +++ b/include/odp/api/spec/align.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_ALIGN_H_
> >   #define ODP_API_ALIGN_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -74,4 +75,5 @@ extern "C" {
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/atomic.h
> b/include/odp/api/spec/atomic.h
> > index a16d90b..46db1e1 100644
> > --- a/include/odp/api/spec/atomic.h
> > +++ b/include/odp/api/spec/atomic.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_ATOMIC_H_
> >   #define ODP_API_ATOMIC_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -628,4 +629,5 @@ int odp_atomic_lock_free_u64(odp_atomic_op_t
> *atomic_op);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/barrier.h
> b/include/odp/api/spec/barrier.h
> > index 823eae6..d389690 100644
> > --- a/include/odp/api/spec/barrier.h
> > +++ b/include/odp/api/spec/barrier.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_BARRIER_H_
> >   #define ODP_API_BARRIER_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -63,4 +64,5 @@ void odp_barrier_wait(odp_barrier_t *barr);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/buffer.h
> b/include/odp/api/spec/buffer.h
> > index 6631f47..c51d2c7 100644
> > --- a/include/odp/api/spec/buffer.h
> > +++ b/include/odp/api/spec/buffer.h
> > @@ -13,12 +13,12 @@
> >
> >   #ifndef ODP_API_BUFFER_H_
> >   #define ODP_API_BUFFER_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   /** @defgroup odp_buffer ODP BUFFER
> >    *  Operations on a buffer.
> >    *  @{
> > @@ -167,4 +167,5 @@ uint64_t odp_buffer_to_u64(odp_buffer_t hdl);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/byteorder.h
> b/include/odp/api/spec/byteorder.h
> > index a12a729..9a9cfbd 100644
> > --- a/include/odp/api/spec/byteorder.h
> > +++ b/include/odp/api/spec/byteorder.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_BYTEORDER_H_
> >   #define ODP_API_BYTEORDER_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -177,4 +178,5 @@ odp_u64le_t odp_cpu_to_le_64(uint64_t cpu64);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/classification.h
> b/include/odp/api/spec/classification.h
> > index 076b3de..2c2981e 100644
> > --- a/include/odp/api/spec/classification.h
> > +++ b/include/odp/api/spec/classification.h
> > @@ -13,12 +13,12 @@
> >
> >   #ifndef ODP_API_CLASSIFY_H_
> >   #define ODP_API_CLASSIFY_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   /** @defgroup odp_classification ODP CLASSIFICATION
> >    *  Classification operations.
> >    *  @{
> > @@ -396,4 +396,5 @@ uint64_t odp_pmr_to_u64(odp_pmr_t hdl);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/compiler.h
> b/include/odp/api/spec/compiler.h
> > index 5a24bfb..35cf684 100644
> > --- a/include/odp/api/spec/compiler.h
> > +++ b/include/odp/api/spec/compiler.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_COMPILER_H_
> >   #define ODP_API_COMPILER_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -48,4 +49,5 @@ extern "C" {
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/config.h
> b/include/odp/api/spec/config.h
> > index c9879d6..2608948 100644
> > --- a/include/odp/api/spec/config.h
> > +++ b/include/odp/api/spec/config.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_CONFIG_H_
> >   #define ODP_API_CONFIG_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -161,4 +162,5 @@ int odp_config_shm_blocks(void);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/cpu.h b/include/odp/api/spec/cpu.h
> > index f0e20c4..277edeb 100644
> > --- a/include/odp/api/spec/cpu.h
> > +++ b/include/odp/api/spec/cpu.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_CPU_H_
> >   #define ODP_CPU_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -176,4 +177,5 @@ void odp_cpu_pause(void);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/cpumask.h
> b/include/odp/api/spec/cpumask.h
> > index 42098c2..92405d0 100644
> > --- a/include/odp/api/spec/cpumask.h
> > +++ b/include/odp/api/spec/cpumask.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_CPUMASK_H_
> >   #define ODP_API_CPUMASK_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -251,4 +252,5 @@ int odp_cpumask_all_available(odp_cpumask_t *mask);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/crypto.h
> b/include/odp/api/spec/crypto.h
> > index 7c6f9bc..07ce470 100644
> > --- a/include/odp/api/spec/crypto.h
> > +++ b/include/odp/api/spec/crypto.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_CRYPTO_H_
> >   #define ODP_API_CRYPTO_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -371,4 +372,5 @@ uint64_t odp_crypto_compl_to_u64(odp_crypto_compl_t
> hdl);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/debug.h b/include/odp/api/spec/debug.h
> > index 247b0c0..73b8660 100644
> > --- a/include/odp/api/spec/debug.h
> > +++ b/include/odp/api/spec/debug.h
> > @@ -11,7 +11,7 @@
> >
> >   #ifndef ODP_API_DEBUG_H_
> >   #define ODP_API_DEBUG_H_
> > -
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -32,4 +32,5 @@ extern "C" {
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/errno.h b/include/odp/api/spec/errno.h
> > index 33998b6..92b2ae9 100644
> > --- a/include/odp/api/spec/errno.h
> > +++ b/include/odp/api/spec/errno.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_ERRNO_H_
> >   #define ODP_ERRNO_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -82,4 +83,5 @@ const char *odp_errno_str(int errnum);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/event.h b/include/odp/api/spec/event.h
> > index 29547f3..e998686 100644
> > --- a/include/odp/api/spec/event.h
> > +++ b/include/odp/api/spec/event.h
> > @@ -13,12 +13,12 @@
> >
> >   #ifndef ODP_API_EVENT_H_
> >   #define ODP_API_EVENT_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   /** @defgroup odp_event ODP EVENT
> >    *  Operations on an event.
> >    *  @{
> > @@ -83,4 +83,5 @@ void odp_event_free(odp_event_t event);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/hash.h b/include/odp/api/spec/hash.h
> > index a6bc753..85de7bf 100644
> > --- a/include/odp/api/spec/hash.h
> > +++ b/include/odp/api/spec/hash.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_API_HASH_H_
> >   #define ODP_API_HASH_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -95,4 +96,5 @@ int odp_hash_crc_gen64(const void *data, uint32_t
> data_len,
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/hints.h b/include/odp/api/spec/hints.h
> > index ea67fc4..189e247 100644
> > --- a/include/odp/api/spec/hints.h
> > +++ b/include/odp/api/spec/hints.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_HINTS_H_
> >   #define ODP_API_HINTS_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -113,4 +114,5 @@ extern "C" {
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/init.h b/include/odp/api/spec/init.h
> > index 8560663..573961b 100644
> > --- a/include/odp/api/spec/init.h
> > +++ b/include/odp/api/spec/init.h
> > @@ -21,13 +21,12 @@
> >
> >   #ifndef ODP_API_INIT_H_
> >   #define ODP_API_INIT_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> > -
> >   #include <odp/api/std_types.h>
> >   #include <odp/api/hints.h>
> >   #include <odp/api/thread.h>
> > @@ -278,4 +277,5 @@ int odp_term_local(void);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/packet.h
> b/include/odp/api/spec/packet.h
> > index 094e846..564975a 100644
> > --- a/include/odp/api/spec/packet.h
> > +++ b/include/odp/api/spec/packet.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_PACKET_H_
> >   #define ODP_API_PACKET_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -1181,4 +1182,5 @@ uint64_t odp_packet_seg_to_u64(odp_packet_seg_t
> hdl);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/packet_flags.h
> b/include/odp/api/spec/packet_flags.h
> > index 35d44e1..92844cc 100644
> > --- a/include/odp/api/spec/packet_flags.h
> > +++ b/include/odp/api/spec/packet_flags.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_PACKET_FLAGS_H_
> >   #define ODP_API_PACKET_FLAGS_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -493,4 +494,5 @@ void odp_packet_has_ts_clr(odp_packet_t pkt);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/packet_io.h
> b/include/odp/api/spec/packet_io.h
> > index 466cab6..7df387a 100644
> > --- a/include/odp/api/spec/packet_io.h
> > +++ b/include/odp/api/spec/packet_io.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_PACKET_IO_H_
> >   #define ODP_API_PACKET_IO_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -1038,4 +1039,5 @@ odp_time_t odp_pktin_ts_from_ns(odp_pktio_t pktio,
> uint64_t ns);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/packet_io_stats.h
> b/include/odp/api/spec/packet_io_stats.h
> > index 148ad8d..cddc0a1 100644
> > --- a/include/odp/api/spec/packet_io_stats.h
> > +++ b/include/odp/api/spec/packet_io_stats.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_API_PACKET_IO_STATS_H_
> >   #define ODP_API_PACKET_IO_STATS_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -138,4 +139,5 @@ int odp_pktio_stats_reset(odp_pktio_t pktio);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/pool.h b/include/odp/api/spec/pool.h
> > index 94a302e..755d1be 100644
> > --- a/include/odp/api/spec/pool.h
> > +++ b/include/odp/api/spec/pool.h
> > @@ -13,13 +13,12 @@
> >
> >   #ifndef ODP_API_POOL_H_
> >   #define ODP_API_POOL_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> > -
> >   #include <odp/api/std_types.h>
> >
> >   /** @defgroup odp_pool ODP POOL
> > @@ -210,4 +209,5 @@ void odp_pool_param_init(odp_pool_param_t *param);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/queue.h b/include/odp/api/spec/queue.h
> > index 51d94a2..fb38c91 100644
> > --- a/include/odp/api/spec/queue.h
> > +++ b/include/odp/api/spec/queue.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_QUEUE_H_
> >   #define ODP_API_QUEUE_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -374,4 +375,5 @@ int odp_queue_info(odp_queue_t queue,
> odp_queue_info_t *info);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/random.h
> b/include/odp/api/spec/random.h
> > index 435783a..8c9499f 100644
> > --- a/include/odp/api/spec/random.h
> > +++ b/include/odp/api/spec/random.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_RANDOM_H_
> >   #define ODP_API_RANDOM_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -22,7 +23,6 @@ extern "C" {
> >    *  @{
> >    */
> >
> > -
> >   /**
> >    * Generate random byte data
> >    *
> > @@ -45,4 +45,5 @@ int32_t odp_random_data(uint8_t *buf, int32_t size,
> odp_bool_t use_entropy);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/rwlock.h
> b/include/odp/api/spec/rwlock.h
> > index 9ca8872..9601e38 100644
> > --- a/include/odp/api/spec/rwlock.h
> > +++ b/include/odp/api/spec/rwlock.h
> > @@ -6,6 +6,7 @@
> >
> >   #ifndef ODP_API_RWLOCK_H_
> >   #define ODP_API_RWLOCK_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   /**
> >    * @file
> > @@ -99,4 +100,5 @@ void odp_rwlock_write_unlock(odp_rwlock_t *rwlock);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif /* ODP_RWLOCK_H_ */
> > diff --git a/include/odp/api/spec/rwlock_recursive.h
> b/include/odp/api/spec/rwlock_recursive.h
> > index 965fcc0..0ae0347 100644
> > --- a/include/odp/api/spec/rwlock_recursive.h
> > +++ b/include/odp/api/spec/rwlock_recursive.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_API_RWLOCK_RECURSIVE_H_
> >   #define ODP_API_RWLOCK_RECURSIVE_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -117,4 +118,5 @@ void
> odp_rwlock_recursive_write_unlock(odp_rwlock_recursive_t *lock);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/schedule.h
> b/include/odp/api/spec/schedule.h
> > index cd1325a..83e8689 100644
> > --- a/include/odp/api/spec/schedule.h
> > +++ b/include/odp/api/spec/schedule.h
> > @@ -13,12 +13,12 @@
> >
> >   #ifndef ODP_API_SCHEDULE_H_
> >   #define ODP_API_SCHEDULE_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   #include <odp/api/std_types.h>
> >   #include <odp/api/event.h>
> >   #include <odp/api/queue.h>
> > @@ -375,4 +375,5 @@ void odp_schedule_order_unlock(unsigned lock_index);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/schedule_types.h
> b/include/odp/api/spec/schedule_types.h
> > index 34046af..a9c8649 100644
> > --- a/include/odp/api/spec/schedule_types.h
> > +++ b/include/odp/api/spec/schedule_types.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_API_SCHEDULE_TYPES_H_
> >   #define ODP_API_SCHEDULE_TYPES_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -156,4 +157,5 @@ typedef struct odp_schedule_param_t {
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/shared_memory.h
> b/include/odp/api/spec/shared_memory.h
> > index 5d851ce..2c9eda5 100644
> > --- a/include/odp/api/spec/shared_memory.h
> > +++ b/include/odp/api/spec/shared_memory.h
> > @@ -13,12 +13,12 @@
> >
> >   #ifndef ODP_API_SHARED_MEMORY_H_
> >   #define ODP_API_SHARED_MEMORY_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   /** @defgroup odp_shared_memory ODP SHARED MEMORY
> >    *  Operations on shared memory.
> >    *  @{
> > @@ -152,4 +152,5 @@ uint64_t odp_shm_to_u64(odp_shm_t hdl);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/spinlock.h
> b/include/odp/api/spec/spinlock.h
> > index a73359d..9587463 100644
> > --- a/include/odp/api/spec/spinlock.h
> > +++ b/include/odp/api/spec/spinlock.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_SPINLOCK_H_
> >   #define ODP_API_SPINLOCK_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -88,4 +89,5 @@ int odp_spinlock_is_locked(odp_spinlock_t *splock);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/spinlock_recursive.h
> b/include/odp/api/spec/spinlock_recursive.h
> > index d98f2bb..deaa8ee 100644
> > --- a/include/odp/api/spec/spinlock_recursive.h
> > +++ b/include/odp/api/spec/spinlock_recursive.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_API_SPINLOCK_RECURSIVE_H_
> >   #define ODP_API_SPINLOCK_RECURSIVE_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -82,4 +83,5 @@ int
> odp_spinlock_recursive_is_locked(odp_spinlock_recursive_t *lock);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/std_clib.h
> b/include/odp/api/spec/std_clib.h
> > index 791b72f..0e2ca76 100644
> > --- a/include/odp/api/spec/std_clib.h
> > +++ b/include/odp/api/spec/std_clib.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_API_STD_CLIB_H_
> >   #define ODP_API_STD_CLIB_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -79,4 +80,5 @@ int odp_memcmp(const void *ptr1, const void *ptr2,
> size_t num);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/std_types.h
> b/include/odp/api/spec/std_types.h
> > index 7558c64..9006ed5 100644
> > --- a/include/odp/api/spec/std_types.h
> > +++ b/include/odp/api/spec/std_types.h
> > @@ -14,12 +14,12 @@
> >
> >   #ifndef ODP_API_STD_TYPES_H_
> >   #define ODP_API_STD_TYPES_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   /** @addtogroup odp_system ODP SYSTEM
> >    *  @{
> >    */
> > @@ -39,4 +39,5 @@ extern "C" {
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/sync.h b/include/odp/api/spec/sync.h
> > index c6f790c..79bf861 100644
> > --- a/include/odp/api/spec/sync.h
> > +++ b/include/odp/api/spec/sync.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_SYNC_H_
> >   #define ODP_API_SYNC_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -87,4 +88,5 @@ void odp_mb_full(void);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/system_info.h
> b/include/odp/api/spec/system_info.h
> > index bde3a60..1af12f0 100644
> > --- a/include/odp/api/spec/system_info.h
> > +++ b/include/odp/api/spec/system_info.h
> > @@ -13,12 +13,12 @@
> >
> >   #ifndef ODP_API_SYSTEM_INFO_H_
> >   #define ODP_API_SYSTEM_INFO_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   /** @defgroup odp_system ODP SYSTEM
> >    *  @{
> >    */
> > @@ -52,4 +52,5 @@ int odp_sys_cache_line_size(void);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/thread.h
> b/include/odp/api/spec/thread.h
> > index 3720249..f0becb6 100644
> > --- a/include/odp/api/spec/thread.h
> > +++ b/include/odp/api/spec/thread.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_THREAD_H_
> >   #define ODP_API_THREAD_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -109,4 +110,5 @@ odp_thread_type_t odp_thread_type(void);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/thrmask.h
> b/include/odp/api/spec/thrmask.h
> > index a22da8c..11ae884 100644
> > --- a/include/odp/api/spec/thrmask.h
> > +++ b/include/odp/api/spec/thrmask.h
> > @@ -12,6 +12,7 @@
> >
> >   #ifndef ODP_API_THRMASK_H_
> >   #define ODP_API_THRMASK_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -236,4 +237,5 @@ int odp_thrmask_control(odp_thrmask_t *mask);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/ticketlock.h
> b/include/odp/api/spec/ticketlock.h
> > index 3f0e3f5..a240aaf 100644
> > --- a/include/odp/api/spec/ticketlock.h
> > +++ b/include/odp/api/spec/ticketlock.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_TICKETLOCK_H_
> >   #define ODP_API_TICKETLOCK_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -87,4 +88,5 @@ int odp_ticketlock_is_locked(odp_ticketlock_t
> *tklock);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/time.h b/include/odp/api/spec/time.h
> > index 85692ec..f2d37ce 100644
> > --- a/include/odp/api/spec/time.h
> > +++ b/include/odp/api/spec/time.h
> > @@ -13,12 +13,12 @@
> >
> >   #ifndef ODP_API_TIME_H_
> >   #define ODP_API_TIME_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> >   #endif
> >
> > -
> >   /** @defgroup odp_time ODP TIME
> >    *  @{
> >    */
> > @@ -178,4 +178,5 @@ uint64_t odp_time_to_u64(odp_time_t time);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/timer.h b/include/odp/api/spec/timer.h
> > index 435c004..93ccfc7 100644
> > --- a/include/odp/api/spec/timer.h
> > +++ b/include/odp/api/spec/timer.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_TIMER_H_
> >   #define ODP_API_TIMER_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -412,4 +413,5 @@ uint64_t odp_timeout_to_u64(odp_timeout_t hdl);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/traffic_mngr.h
> b/include/odp/api/spec/traffic_mngr.h
> > index ce124a8..6787ce9 100644
> > --- a/include/odp/api/spec/traffic_mngr.h
> > +++ b/include/odp/api/spec/traffic_mngr.h
> > @@ -6,6 +6,7 @@
> >
> >   #ifndef ODP_TRAFFIC_MNGR_H_
> >   #define ODP_TRAFFIC_MNGR_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -1371,4 +1372,5 @@ void odp_tm_stats_print(odp_tm_t odp_tm);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/include/odp/api/spec/version.h
> b/include/odp/api/spec/version.h
> > index 642831c..dfd306e 100644
> > --- a/include/odp/api/spec/version.h
> > +++ b/include/odp/api/spec/version.h
> > @@ -13,6 +13,7 @@
> >
> >   #ifndef ODP_API_VERSION_H_
> >   #define ODP_API_VERSION_H_
> > +#include <odp/api/abi_begin.h>
> >
> >   #ifdef __cplusplus
> >   extern "C" {
> > @@ -102,4 +103,5 @@ const char *odp_version_impl_str(void);
> >   }
> >   #endif
> >
> > +#include <odp/api/abi_end.h>
> >   #endif
> > diff --git a/platform/Makefile.inc b/platform/Makefile.inc
> > index 1cb7a71..5aa3fed 100644
> > --- a/platform/Makefile.inc
> > +++ b/platform/Makefile.inc
> > @@ -15,6 +15,7 @@ AM_LDFLAGS += -version-number '$(ODP_LIBSO_VERSION)'
> >   GIT_DESC = `$(top_srcdir)/scripts/get_impl_str.sh $(top_srcdir)`
> >   AM_CFLAGS += "-DGIT_HASH=$(GIT_DESC)"
> >   AM_CFLAGS += -DPLATFORM=${with_platform}
> > +AM_CFLAGS += $(VISIBILITY_CFLAGS)
> >
> >   #The implementation will need to retain the deprecated implementation
> >   AM_CFLAGS += -Wno-deprecated-declarations
> > diff --git a/platform/linux-generic/Makefile.am b/platform/linux-
> generic/Makefile.am
> > index 5eb8cbc..952f6e8 100644
> > --- a/platform/linux-generic/Makefile.am
> > +++ b/platform/linux-generic/Makefile.am
> > @@ -15,6 +15,8 @@ include_HEADERS = \
> >
> >   odpapiincludedir= $(includedir)/odp/api
> >   odpapiinclude_HEADERS = \
> > +             $(srcdir)/include/odp/api/abi_begin.h \
> > +             $(srcdir)/include/odp/api/abi_end.h \
> >               $(srcdir)/include/odp/api/align.h \
> >               $(srcdir)/include/odp/api/atomic.h \
> >               $(srcdir)/include/odp/api/barrier.h \
> > diff --git a/platform/linux-generic/include/odp/api/abi_begin.h
> b/platform/linux-generic/include/odp/api/abi_begin.h
> > new file mode 100644
> > index 0000000..38d169c
> > --- /dev/null
> > +++ b/platform/linux-generic/include/odp/api/abi_begin.h
> > @@ -0,0 +1,3 @@
> > +#if __GNUC__ >= 4
> > +#pragma GCC visibility push(default)
> > +#endif
> > diff --git a/platform/linux-generic/include/odp/api/abi_end.h
> b/platform/linux-generic/include/odp/api/abi_end.h
> > new file mode 100644
> > index 0000000..ac9df04
> > --- /dev/null
> > +++ b/platform/linux-generic/include/odp/api/abi_end.h
> > @@ -0,0 +1,3 @@
> > +#if __GNUC__ >= 4
> > +#pragma GCC visibility pop
> > +#endif
> > diff --git a/platform/linux-generic/m4/configure.m4 b/platform/linux-
> generic/m4/configure.m4
> > index f80c66c..75a3797 100644
> > --- a/platform/linux-generic/m4/configure.m4
> > +++ b/platform/linux-generic/m4/configure.m4
> > @@ -1,3 +1,15 @@
> > +# Enable -fvisibility=hidden if using a gcc that supports it
> > +OLD_CFLAGS="$CFLAGS"
> > +AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
> > +VISIBILITY_CFLAGS="-fvisibility=hidden"
> > +CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
> > +AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
> > +       [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
> > +
> > +AC_SUBST(VISIBILITY_CFLAGS)
> > +# Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
> > +CFLAGS=$OLD_CFLAGS
> > +
> >   AC_MSG_CHECKING(for GCC atomic builtins)
> >   AC_LINK_IFELSE(
> >       [AC_LANG_SOURCE(
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org>
> https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org>
https://lists.linaro.org/mailman/listinfo/lng-odp


_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org>
https://lists.linaro.org/mailman/listinfo/lng-odp



--
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org<http://www.linaro.org/> │ Open source software for ARM SoCs
"Work should be fun and collaborative, the rest follows"

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to