diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-04 15:38:28 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-16 15:34:46 +0100 |
commit | 5084ad89e4690c1a375172c6a28c738530c5c4c2 (patch) | |
tree | afe7848f223cba02c6ded9336fca0f90efc45694 /freebsd/sys/sys | |
parent | Add support for M68K (diff) | |
download | rtems-libbsd-5084ad89e4690c1a375172c6a28c738530c5c4c2.tar.bz2 |
Simplify linker set handling
Diffstat (limited to 'freebsd/sys/sys')
-rw-r--r-- | freebsd/sys/sys/kernel.h | 2 | ||||
-rw-r--r-- | freebsd/sys/sys/linker_set.h | 31 |
2 files changed, 28 insertions, 5 deletions
diff --git a/freebsd/sys/sys/kernel.h b/freebsd/sys/sys/kernel.h index e276f8ee..c3e83022 100644 --- a/freebsd/sys/sys/kernel.h +++ b/freebsd/sys/sys/kernel.h @@ -255,7 +255,7 @@ struct sysinit { func, \ (ident) \ }; \ - DATA_SET(sysinit_set,SYSINIT_ENTRY_NAME(uniquifier)) + RWDATA_SET(sysinit_set,SYSINIT_ENTRY_NAME(uniquifier)) #define SYSINIT_REFERENCE(uniquifier) \ extern struct sysinit SYSINIT_ENTRY_NAME(uniquifier); \ static struct sysinit const * const \ diff --git a/freebsd/sys/sys/linker_set.h b/freebsd/sys/sys/linker_set.h index b915302f..47957816 100644 --- a/freebsd/sys/sys/linker_set.h +++ b/freebsd/sys/sys/linker_set.h @@ -51,9 +51,25 @@ 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] \ + __section(".rtemsroset.bsd." __STRING(set) ".begin") __used; \ + ptype * const __CONCAT(_bsd__stop_set_,set)[0] \ + __section(".rtemsroset.bsd." __STRING(set) ".end") __used + #define __MAKE_SET(set, sym) \ - static void const * const __set_##set##_sym_##sym \ - __section("_bsd_set_" #set) __used = &sym + static const void * const __set_##set##_sym_##sym \ + __section(".rtemsroset.bsd." __STRING(set) ".content") __used = &sym + +#define RTEMS_BSD_DEFINE_RWSET(set, ptype) \ + ptype *__CONCAT(_bsd__start_set_,set)[0] \ + __section(".rtemsrwset.bsd." __STRING(set) ".begin") __used; \ + ptype *__CONCAT(_bsd__stop_set_,set)[0] \ + __section(".rtemsrwset.bsd." __STRING(set) ".end") __used + +#define __MAKE_RWSET(set, sym) \ + static const void * __set_##set##_sym_##sym \ + __section(".rtemsrwset.bsd." __STRING(set) ".content") __used = &sym #endif /* __rtems__ */ #else /* !__GNUCLIKE___SECTION */ #ifndef lint @@ -70,6 +86,9 @@ #define BSS_SET(set, sym) __MAKE_SET(set, sym) #define ABS_SET(set, sym) __MAKE_SET(set, sym) #define SET_ENTRY(set, sym) __MAKE_SET(set, sym) +#ifdef __rtems__ +#define RWDATA_SET(set, sym) __MAKE_RWSET(set, sym) +#endif /* __rtems__ */ /* * Initialize before referring to a given linker set. @@ -85,8 +104,12 @@ (&__CONCAT(__stop_set_,set)) #else /* __rtems__ */ #define SET_DECLARE(set, ptype) \ - extern ptype *__CONCAT(_bsd__start_set_,set) []; \ - extern ptype *__CONCAT(_bsd__stop_set_,set) [] + extern ptype * const __CONCAT(_bsd__start_set_,set)[]; \ + extern ptype * const __CONCAT(_bsd__stop_set_,set)[] + +#define RWSET_DECLARE(set, ptype) \ + extern ptype *__CONCAT(_bsd__start_set_,set)[]; \ + extern ptype *__CONCAT(_bsd__stop_set_,set)[] #define SET_BEGIN(set) \ (__CONCAT(_bsd__start_set_,set)) |