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
// 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 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] On Behalf Of EXT > Maxim Uvarov > Sent: Tuesday, April 19, 2016 9:57 AM > To: lng-odp-forward <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> > > > > 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> > > Signed-off-by: Anders Roxell <anders.rox...@linaro.org> > > Signed-off-by: Bill Fischofer <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 > https://lists.linaro.org/mailman/listinfo/lng-odp _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp