Changeset 9cea6da in rtems-libbsd


Ignore:
Timestamp:
Oct 1, 2014, 11:19:35 AM (5 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, 46b3858b27d78e14a220f8d251fd7ab28a5244f4, freebsd-9.3, 792d56bd33346adadf8b95dea2d2ed09f9e347e7
Children:
d43544e
Parents:
454d682
git-author:
Sebastian Huber <sebastian.huber@…> (10/01/14 11:19:35)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/08/14 12:51:21)
Message:

Generalize linker sets

Add ability to create linker sets for items with an arbitrary type.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/sys/linker_set.h

    r454d682 r9cea6da  
    5252        __section("set_" #set) __used = &sym
    5353#else /* __rtems__ */
    54 #define RTEMS_BSD_DEFINE_SET(set, ptype)                                \
    55         ptype * const __CONCAT(_bsd__start_set_,set)[0]                 \
     54#define RTEMS_BSD_DEFINE_SET(set, type)                         \
     55        type const __CONCAT(_bsd__start_set_,set)[0]                    \
    5656        __section(".rtemsroset.bsd." __STRING(set) ".begin") __used;            \
    57         ptype * const __CONCAT(_bsd__stop_set_,set)[0]                  \
     57        type const __CONCAT(_bsd__stop_set_,set)[0]                     \
    5858        __section(".rtemsroset.bsd." __STRING(set) ".end") __used
    5959
     60#define RTEMS_BSD_DECLARE_SET(set, type)                                \
     61        extern type const __CONCAT(_bsd__start_set_,set)[0];            \
     62        extern type const __CONCAT(_bsd__stop_set_,set)[0]
     63
     64#define RTEMS_BSD_DEFINE_SET_ITEM(set, sym, type)                       \
     65        static type const __set_##set##_sym_##sym                       \
     66        __section(".rtemsroset.bsd." __STRING(set) ".content") __used
     67
    6068#define __MAKE_SET(set, sym)                                            \
    61         static const void * const __set_##set##_sym_##sym               \
    62         __section(".rtemsroset.bsd." __STRING(set) ".content") __used = &sym
     69        RTEMS_BSD_DEFINE_SET_ITEM(set, sym, const void *) = &sym
    6370
    64 #define RTEMS_BSD_DEFINE_RWSET(set, ptype)                              \
    65         ptype *__CONCAT(_bsd__start_set_,set)[0]                        \
     71#define RTEMS_BSD_DEFINE_RWSET(set, type)                               \
     72        type __CONCAT(_bsd__start_set_,set)[0]                  \
    6673        __section(".rtemsrwset.bsd." __STRING(set) ".begin") __used;            \
    67         ptype *__CONCAT(_bsd__stop_set_,set)[0]                         \
     74        type __CONCAT(_bsd__stop_set_,set)[0]                           \
    6875        __section(".rtemsrwset.bsd." __STRING(set) ".end") __used
    6976
     77#define RTEMS_BSD_DECLARE_RWSET(set, type)                              \
     78        extern type __CONCAT(_bsd__start_set_,set)[0];                  \
     79        extern type __CONCAT(_bsd__stop_set_,set)[0]
     80
     81#define RTEMS_BSD_DEFINE_RWSET_ITEM(set, sym, type)                     \
     82        static type __set_##set##_sym_##sym                             \
     83        __section(".rtemsrwset.bsd." __STRING(set) ".content") __used
     84
    7085#define __MAKE_RWSET(set, sym)                                          \
    71         static const void * __set_##set##_sym_##sym                     \
    72         __section(".rtemsrwset.bsd." __STRING(set) ".content") __used = &sym
     86        RTEMS_BSD_DEFINE_RWSET_ITEM(set, sym, const void *) = &sym
    7387#endif /* __rtems__ */
    7488#else /* !__GNUCLIKE___SECTION */
     
    105119#else /* __rtems__ */
    106120#define SET_DECLARE(set, ptype)                                         \
    107         extern ptype * const __CONCAT(_bsd__start_set_,set)[];          \
    108         extern ptype * const __CONCAT(_bsd__stop_set_,set)[]
     121        RTEMS_BSD_DECLARE_SET(set, ptype *)
    109122
    110123#define RWSET_DECLARE(set, ptype)                                       \
    111         extern ptype *__CONCAT(_bsd__start_set_,set)[];                 \
    112         extern ptype *__CONCAT(_bsd__stop_set_,set)[]
     124        RTEMS_BSD_DECLARE_RWSET(set, ptype *)
    113125
    114126#define SET_BEGIN(set)                                                  \
  • rtemsbsd/rtems/rtems-bsd-init.c

    r454d682 r9cea6da  
    5959SYSINIT_DRIVER_REFERENCE(nexus, root);
    6060
    61 RTEMS_BSD_DEFINE_SET(modmetadata_set, struct mod_metadata);
    62 RTEMS_BSD_DEFINE_SET(sysctl_set, struct sysctl_oid);
     61RTEMS_BSD_DEFINE_SET(modmetadata_set, struct mod_metadata *);
     62RTEMS_BSD_DEFINE_SET(sysctl_set, struct sysctl_oid *);
    6363
    64 RTEMS_BSD_DEFINE_RWSET(sysinit_set, struct sysinit);
     64RTEMS_BSD_DEFINE_RWSET(sysinit_set, struct sysinit *);
    6565
    6666/* In FreeBSD this is a local function */
Note: See TracChangeset for help on using the changeset viewer.