/* Copyright 2015 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Helper macros for shared objects library. */ #ifndef __CROS_EC_LIBSHAREDOBJS_H #define __CROS_EC_LIBSHAREDOBJS_H #include "common.h" #ifdef CONFIG_SHAREDLIB /* * The shared library currently only works with those platforms in which both * the RO and RW images are loaded simultaneously in some executable memory. * * NOTE: I know that this doesn't cover all possible cases, but it will catch * an obvious case. */ #if (CONFIG_RO_MEM_OFF == CONFIG_RW_MEM_OFF) #error "The shared library is NOT compatible with this EC." #endif /* * All of the objects in the shared library will be placed into the '.roshared' * section. The SHAREDLIB() macro simply adds this attribute and prevents the * RW image from compiling them in. */ #undef SHAREDLIB #ifdef SHAREDLIB_IMAGE #define SHAREDLIB(...) __attribute__ ((section(".roshared"))) __VA_ARGS__ #else /* !defined(SHAREDLIB_IMAGE) */ #define SHAREDLIB(...) #endif /* defined(SHAREDLIB_IMAGE) */ #define SHAREDLIB_FUNC(...) \ extern __VA_ARGS__ __attribute__ ((section(".roshared.text"))) #else /* !defined(CONFIG_SHAREDLIB) */ /* By default, the SHAREDLIB() macro maps to its contents. */ #define SHAREDLIB(...) __VA_ARGS__ #define SHAREDLIB_FUNC(...) __VA_ARGS__ #endif /* defined(CONFIG_SHAREDLIB) */ #endif /* __CROS_EC_LIBSHAREDOBJS_H */