45 lines
1.4 KiB
C
45 lines
1.4 KiB
C
/* 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 */
|