summaryrefslogtreecommitdiff
path: root/include/libsharedobjs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libsharedobjs.h')
-rw-r--r--include/libsharedobjs.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/include/libsharedobjs.h b/include/libsharedobjs.h
new file mode 100644
index 0000000000..3801ccaca0
--- /dev/null
+++ b/include/libsharedobjs.h
@@ -0,0 +1,44 @@
+/* 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 */