blob: 3801ccaca06c7bcd78ae016f97fea2e3f47b4567 [file] [log] [blame]
/* 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 */