[rtems-libbsd commit] rtemsbsd: Add linkersets.h from current rtems 4.12.

Sebastian Huber sebh at rtems.org
Wed Aug 3 12:44:14 UTC 2016


Module:    rtems-libbsd
Branch:    4.11
Commit:    89534427935d3982294a61ddefb0a135358be351
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=89534427935d3982294a61ddefb0a135358be351

Author:    Christian Mauderer <Christian.Mauderer at embedded-brains.de>
Date:      Wed Aug  3 08:38:14 2016 +0200

rtemsbsd: Add linkersets.h from current rtems 4.12.

---

 rtemsbsd/include/rtems/linkersets.h | 104 ++++++++++++++++++++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/rtemsbsd/include/rtems/linkersets.h b/rtemsbsd/include/rtems/linkersets.h
new file mode 100644
index 0000000..47c210d
--- /dev/null
+++ b/rtemsbsd/include/rtems/linkersets.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2015 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems at embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _RTEMS_LINKERSET_H
+#define _RTEMS_LINKERSET_H
+
+#include <rtems/score/basedefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define RTEMS_LINKER_SET_BEGIN( set ) \
+  _Linker_set_##set##_begin
+
+#define RTEMS_LINKER_SET_END( set ) \
+  _Linker_set_##set##_end
+
+#define RTEMS_LINKER_SET_SIZE( set ) \
+  ( (size_t) ( _Linker_set_##set##_end - _Linker_set_##set##_begin ) )
+
+#define RTEMS_LINKER_ROSET_DECLARE( set, type ) \
+  extern type volatile const RTEMS_LINKER_SET_BEGIN( set )[0]; \
+  extern type volatile const RTEMS_LINKER_SET_END( set )[0]
+
+#define RTEMS_LINKER_ROSET( set, type ) \
+  type volatile const RTEMS_LINKER_SET_BEGIN( set )[0] \
+  RTEMS_SECTION( ".rtemsroset." #set ".begin" ) RTEMS_USED; \
+  type volatile const RTEMS_LINKER_SET_END( set )[0] \
+  RTEMS_SECTION( ".rtemsroset." #set ".end" ) RTEMS_USED
+
+#define RTEMS_LINKER_ROSET_ITEM_DECLARE( set, type, item ) \
+  extern type volatile const _Linker_set_##set##_##item
+
+#define RTEMS_LINKER_ROSET_ITEM_REFERENCE( set, type, item ) \
+  static type volatile const * const _Set_reference_##set##_##item \
+  RTEMS_SECTION( ".rtemsroset.reference" ) RTEMS_USED = \
+  &_Linker_set_##set##_##item
+
+#define RTEMS_LINKER_ROSET_ITEM_ORDERED( set, type, item, order ) \
+  type volatile const _Linker_set_##set##_##item \
+  RTEMS_SECTION( ".rtemsroset." #set ".content.0." RTEMS_XSTRING( order ) ) \
+  RTEMS_USED
+
+#define RTEMS_LINKER_ROSET_ITEM( set, type, item ) \
+  type volatile const _Linker_set_##set##_##item \
+  RTEMS_SECTION( ".rtemsroset." #set ".content.1" ) RTEMS_USED
+
+#define RTEMS_LINKER_ROSET_CONTENT( set, decl ) \
+  decl \
+  RTEMS_SECTION( ".rtemsroset." #set ".content" )
+
+#define RTEMS_LINKER_RWSET_DECLARE( set, type ) \
+  extern type volatile RTEMS_LINKER_SET_BEGIN( set )[0]; \
+  extern type volatile RTEMS_LINKER_SET_END( set )[0]
+
+#define RTEMS_LINKER_RWSET( set, type ) \
+  type volatile RTEMS_LINKER_SET_BEGIN( set )[0] \
+  RTEMS_SECTION( ".rtemsrwset." #set ".begin" ) RTEMS_USED; \
+  type volatile RTEMS_LINKER_SET_END( set )[0] \
+  RTEMS_SECTION( ".rtemsrwset." #set ".end" ) RTEMS_USED
+
+#define RTEMS_LINKER_RWSET_ITEM_DECLARE( set, type, item ) \
+  extern type volatile _Linker_set_##set##_##item
+
+/*
+ * The .rtemsroset is here not a typo.  We must ensure that the references are
+ * not a victim of the garbage collection of the linker.  Thus, we place them
+ * in a dedicated area of the RTEMS read-only linker set section.
+ */
+#define RTEMS_LINKER_RWSET_ITEM_REFERENCE( set, type, item ) \
+  static type volatile * const _Set_reference_##set##_##item \
+  RTEMS_SECTION( ".rtemsroset.reference" ) RTEMS_USED = \
+  &_Linker_set_##set##_##item
+
+#define RTEMS_LINKER_RWSET_ITEM_ORDERED( set, type, item, order ) \
+  type volatile _Linker_set_##set##_##item \
+  RTEMS_SECTION( ".rtemsrwset." #set ".content.0." RTEMS_XSTRING( order ) ) \
+  RTEMS_USED
+
+#define RTEMS_LINKER_RWSET_ITEM( set, type, item ) \
+  type volatile _Linker_set_##set##_##item \
+  RTEMS_SECTION( ".rtemsrwset." #set ".content.1" ) RTEMS_USED
+
+#define RTEMS_LINKER_RWSET_CONTENT( set, decl ) \
+  decl \
+  RTEMS_SECTION( ".rtemsrwset." #set ".content" )
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _RTEMS_LINKERSET_H */



More information about the vc mailing list