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