On 08/04/2020 10:16, Sebastian Huber wrote:

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

The benefit of using weak functions is that

* the linker can garbage collect the weak functions if a strong implementation is provided and

* there is no global function pointer which must be changed and which can be overwritten.

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to