Libatomic support
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Oct 2 05:50:34 UTC 2014
On 01/10/14 16:20, Daniel Cederman wrote:
> I'm looking at GCC's libatomic, which provides software emulation of atomic
> operations that are not supported by hardware. It does this by using a
> compare-and-swap loop, or, failing that, using locks. At the moment it is not
> selected for compilation for RTEMS since it requires operating system (or
> architecture) support for the locks. It needs support for two types of
> lock/unlock operations. Here is a cut-and-paste from the libatomic_i.h file in
> libatomic:
>
> >/* Locking for a "small" operation. In the bare-metal single processor
> > cases this could be implemented by disabling interrupts. Thus the extra
> > word passed between the two functions, saving the interrupt level.
> > It is assumed that the object being locked does not cross the locking
> > granularity.
> >
> > Not actually declared here so that they can be defined static inline
> > in a target-specfic <host-config.h>.
> >
> >UWORD protect_start (void *ptr);
> >void protect_end (void *ptr, UWORD);
> >*/
> >
> >/* Locking for a "large' operation. This should always be some sort of
> > test-and-set operation, as we assume that the interrupt latency would
> > be unreasonably large. */
> >void libat_lock_n (void *ptr, size_t n);
> >void libat_unlock_n (void *ptr, size_t n);
Yes, libatomic is for targets lacking proper hardware atomic operations. So
protect_start/end() should use rtems_interrupt_disable/enable(). For
libat_lock_n/unlock_n() you can simply use the allocator lock for example.
I would not put too much time into this. Who needs this stuff?
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list