[PATCH v2] c-user: Document new clock manager directives

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Nov 9 12:06:51 UTC 2021


On 09/11/2021 08:50, Sebastian Huber wrote:
> On 09/11/2021 08:41, Chris Johns wrote:
>>> We could also use something like this:
>>>
>>> static inline struct timespec rtems_clock_get_realtime(void)
>>> {
>>>    struct timespec time_snapshot;
>>>
>>>    _Timecounter_Nanotime( &time_snapshot );
>>>
>>>    return time_snapshot;
>>> }
>>>
>>> Unfortunately GCC is not able to optimize this.
>>>
>> Ah OK. This can be fixed and the performance improved but once the API 
>> is set it
>> cannot change or do you think we can add a check later and not break 
>> the API?
> 
> I filed a GCC bug for this:
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103150
> 
> It seems I was not the only one noticing issues related to structure 
> returns:
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101926
> 
> However, if we want a foolproof API, then I would prefer the structure 
> return over the return status and pointer argument. Compilers may get 
> better in the future. clang has similar issues, so this is not only a 
> GCC problem.

We have at least three options for the API:

1. Use the existing FreeBSD implementation as is:

void rtems_clock_get_realtime(struct timespec *);

This is the easiest and most efficient approach.

2. Check for NULL and return a status:

rtems_status_code rtems_clock_get_realtime(struct timespec *);

This requires a wrapper function which is a bit less efficient and needs 
more code/testing:

rtems_status_code
rtems_clock_get_realtime(struct timespec *time_snapshot)
{
   if ( time_snapshot == NULL ) {
     return RTEMS_INVALID_ADDRESS;
   }

   _Timecounter_Nanotime( time_snapshot );
   return RTEMS_SUCCESSFUL;
}

3. Return the structure and use the existing implementation:

static inline struct timespec rtems_clock_get_realtime(void)
{
   struct timespec time_snapshot;

   _Timecounter_Nanotime( &time_snapshot );

   return time_snapshot;
}

This is currently not well supported by existing compilers:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103150

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101926

-- 
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/


More information about the devel mailing list