diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-10-01 13:19:35 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-10-08 14:51:21 +0200 |
commit | 9cea6da7806c9b096f44b9180e170a42381318e8 (patch) | |
tree | 155f5992727a93ec499ab39f05e654aea61c3c5c /freebsd | |
parent | Delete obsolete _bsd_nexus_devices (diff) | |
download | rtems-libbsd-9cea6da7806c9b096f44b9180e170a42381318e8.tar.bz2 |
Generalize linker sets
Add ability to create linker sets for items with an arbitrary type.
Diffstat (limited to 'freebsd')
-rw-r--r-- | freebsd/sys/sys/linker_set.h | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/freebsd/sys/sys/linker_set.h b/freebsd/sys/sys/linker_set.h index 47957816..35baa895 100644 --- a/freebsd/sys/sys/linker_set.h +++ b/freebsd/sys/sys/linker_set.h @@ -51,25 +51,39 @@ static void const * const __set_##set##_sym_##sym \ __section("set_" #set) __used = &sym #else /* __rtems__ */ -#define RTEMS_BSD_DEFINE_SET(set, ptype) \ - ptype * const __CONCAT(_bsd__start_set_,set)[0] \ +#define RTEMS_BSD_DEFINE_SET(set, type) \ + type const __CONCAT(_bsd__start_set_,set)[0] \ __section(".rtemsroset.bsd." __STRING(set) ".begin") __used; \ - ptype * const __CONCAT(_bsd__stop_set_,set)[0] \ + type const __CONCAT(_bsd__stop_set_,set)[0] \ __section(".rtemsroset.bsd." __STRING(set) ".end") __used +#define RTEMS_BSD_DECLARE_SET(set, type) \ + extern type const __CONCAT(_bsd__start_set_,set)[0]; \ + extern type const __CONCAT(_bsd__stop_set_,set)[0] + +#define RTEMS_BSD_DEFINE_SET_ITEM(set, sym, type) \ + static type const __set_##set##_sym_##sym \ + __section(".rtemsroset.bsd." __STRING(set) ".content") __used + #define __MAKE_SET(set, sym) \ - static const void * const __set_##set##_sym_##sym \ - __section(".rtemsroset.bsd." __STRING(set) ".content") __used = &sym + RTEMS_BSD_DEFINE_SET_ITEM(set, sym, const void *) = &sym -#define RTEMS_BSD_DEFINE_RWSET(set, ptype) \ - ptype *__CONCAT(_bsd__start_set_,set)[0] \ +#define RTEMS_BSD_DEFINE_RWSET(set, type) \ + type __CONCAT(_bsd__start_set_,set)[0] \ __section(".rtemsrwset.bsd." __STRING(set) ".begin") __used; \ - ptype *__CONCAT(_bsd__stop_set_,set)[0] \ + type __CONCAT(_bsd__stop_set_,set)[0] \ __section(".rtemsrwset.bsd." __STRING(set) ".end") __used +#define RTEMS_BSD_DECLARE_RWSET(set, type) \ + extern type __CONCAT(_bsd__start_set_,set)[0]; \ + extern type __CONCAT(_bsd__stop_set_,set)[0] + +#define RTEMS_BSD_DEFINE_RWSET_ITEM(set, sym, type) \ + static type __set_##set##_sym_##sym \ + __section(".rtemsrwset.bsd." __STRING(set) ".content") __used + #define __MAKE_RWSET(set, sym) \ - static const void * __set_##set##_sym_##sym \ - __section(".rtemsrwset.bsd." __STRING(set) ".content") __used = &sym + RTEMS_BSD_DEFINE_RWSET_ITEM(set, sym, const void *) = &sym #endif /* __rtems__ */ #else /* !__GNUCLIKE___SECTION */ #ifndef lint @@ -104,12 +118,10 @@ (&__CONCAT(__stop_set_,set)) #else /* __rtems__ */ #define SET_DECLARE(set, ptype) \ - extern ptype * const __CONCAT(_bsd__start_set_,set)[]; \ - extern ptype * const __CONCAT(_bsd__stop_set_,set)[] + RTEMS_BSD_DECLARE_SET(set, ptype *) #define RWSET_DECLARE(set, ptype) \ - extern ptype *__CONCAT(_bsd__start_set_,set)[]; \ - extern ptype *__CONCAT(_bsd__stop_set_,set)[] + RTEMS_BSD_DECLARE_RWSET(set, ptype *) #define SET_BEGIN(set) \ (__CONCAT(_bsd__start_set_,set)) |