diff mbox

[API-NEXT,PATCHv6] api: make only the API visible

Message ID 1461018976-17361-1-git-send-email-bill.fischofer@linaro.org
State Superseded
Headers show

Commit Message

Bill Fischofer April 18, 2016, 10:36 p.m. UTC
From: Anders Roxell <anders.roxell@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.salveti@linaro.org>
Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
Signed-off-by: Bill Fischofer <bill.fischofer@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

Comments

Maxim Uvarov April 19, 2016, 6:56 a.m. UTC | #1
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.roxell@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.salveti@linaro.org>
> Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
> Signed-off-by: Bill Fischofer <bill.fischofer@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(
Bill Fischofer April 19, 2016, 10:39 a.m. UTC | #2
On Tue, Apr 19, 2016 at 2:42 AM, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolainen@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

>

> // 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-bounces@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.roxell@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.salveti@linaro.org>

> > > Signed-off-by: Anders Roxell <anders.roxell@linaro.org>

> > > Signed-off-by: Bill Fischofer <bill.fischofer@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

>
Mike Holmes April 19, 2016, 11:12 a.m. UTC | #3
On 19 April 2016 at 06:39, Bill Fischofer <bill.fischofer@linaro.org> wrote:

>

>

> On Tue, Apr 19, 2016 at 2:42 AM, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@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.




>

>> // 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-bounces@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.roxell@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.salveti@linaro.org>

>> > > Signed-off-by: Anders Roxell <anders.roxell@linaro.org>

>> > > Signed-off-by: Bill Fischofer <bill.fischofer@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

>>

>

>

> _______________________________________________

> lng-odp mailing list

> 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"
Mike Holmes April 19, 2016, 3:39 p.m. UTC | #4
This topic has had a good discussion in calls.

Petri has reservations that putting this in the spec file will prove to be
insufficient when we take on the bigger ABI issues beyond the packaging
problems we are solving here. But Petri agreed that the API white list for
what symbols appear in the library can be in the spec file for v1.9

Bill agreed to send an updated patch that does not use the term ABI in the
marking macro as this was contentious.

Mike

On 19 April 2016 at 07:41, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolainen@nokia.com> wrote:

>

>

>

>

> *From:* EXT Mike Holmes [mailto:mike.holmes@linaro.org]

> *Sent:* Tuesday, April 19, 2016 2:13 PM

> *To:* Bill Fischofer <bill.fischofer@linaro.org>

> *Cc:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@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.fischofer@linaro.org>

> wrote:

>

>

>

>

>

> On Tue, Apr 19, 2016 at 2:42 AM, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@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-bounces@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.roxell@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.salveti@linaro.org>

> > > Signed-off-by: Anders Roxell <anders.roxell@linaro.org>

> > > Signed-off-by: Bill Fischofer <bill.fischofer@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

>

>

>

>

> _______________________________________________

> lng-odp mailing list

> 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"

>

>

>




-- 
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"
Bill Fischofer April 19, 2016, 4:16 p.m. UTC | #5
v7 of the patch has been posted that does this.  The #includes are now
visibility_begin.h and visibility_end.h

On Tue, Apr 19, 2016 at 10:39 AM, Mike Holmes <mike.holmes@linaro.org>
wrote:

> This topic has had a good discussion in calls.

>

> Petri has reservations that putting this in the spec file will prove to be

> insufficient when we take on the bigger ABI issues beyond the packaging

> problems we are solving here. But Petri agreed that the API white list for

> what symbols appear in the library can be in the spec file for v1.9

>

> Bill agreed to send an updated patch that does not use the term ABI in the

> marking macro as this was contentious.

>

> Mike

>

> On 19 April 2016 at 07:41, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@nokia.com> wrote:

>

>>

>>

>>

>>

>> *From:* EXT Mike Holmes [mailto:mike.holmes@linaro.org]

>> *Sent:* Tuesday, April 19, 2016 2:13 PM

>> *To:* Bill Fischofer <bill.fischofer@linaro.org>

>> *Cc:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@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.fischofer@linaro.org>

>> wrote:

>>

>>

>>

>>

>>

>> On Tue, Apr 19, 2016 at 2:42 AM, Savolainen, Petri (Nokia - FI/Espoo) <

>> petri.savolainen@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-bounces@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.roxell@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.salveti@linaro.org>

>> > > Signed-off-by: Anders Roxell <anders.roxell@linaro.org>

>> > > Signed-off-by: Bill Fischofer <bill.fischofer@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

>>

>>

>>

>>

>> _______________________________________________

>> lng-odp mailing list

>> 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"

>>

>>

>>

>

>

>

> --

> 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"

>

>

>
diff mbox

Patch

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(