Use weak functions in the RTEMS core?
Sebastian Huber
sebastian.huber at embedded-brains.de
Wed Apr 8 08:16:46 UTC 2020
Hello,
weak functions are already used in several places in RTEMS, but not in
RTEMS core components. In <rtems/score/basedefs.h> we have currently
only a RTEMS_WEAK_ALIAS() macro:
testsuites/sptests/spmisc01/init.c:int weak_alias_func(void)
RTEMS_WEAK_ALIAS(noinline_func);
cpukit/libfs/src/defaults/default_mmap.c:) RTEMS_WEAK_ALIAS(
rtems_filesystem_default_mmap );
cpukit/libfs/src/defaults/default_poll.c:) RTEMS_WEAK_ALIAS(
rtems_filesystem_default_poll );
cpukit/libfs/src/defaults/default_kqfilter.c:) RTEMS_WEAK_ALIAS(
rtems_filesystem_default_kqfilter );
cpukit/include/rtems/score/basedefs.h: #define RTEMS_WEAK_ALIAS(
_target ) __attribute__((__weak__, __alias__(#_target)))
cpukit/include/rtems/score/basedefs.h: #define RTEMS_WEAK_ALIAS( _target )
It was introduced to allow libbsd to override implementations.
I would like to use weak functions in two places. Firstly, the thread
creation which has a dependency on thread deletion. Secondly, the C
Program Heap allocation which has a dependency on deallocation (free).
These dependencies could be satisfied by weak default implementations
which do nothing. In case the application actually deletes threads or
deallocates memory, then the dependencies can be satisfy by a strong
implementation which actually performs the necessary work.
An alternative to weak functions would be to use a global function
pointer which is initialized to the default implementation (or NULL). In
case the application actually deletes threads or deallocates memory,
then a system initialization handler could set the function pointer to
the proper implementations.
What do you think about adding this to basedefs.h?
/**
* @brief Instructs the compiler to define a weak function.
*
* Use this attribute for function definitions. Do not use it for function
* declarations.
*/
#if defined(__GNUC__)
#define RTEMS_WEAK __attribute__((__weak__))
#else
#define RTEMS_WEAK
#endif
More information about the devel
mailing list