summaryrefslogtreecommitdiffstats
path: root/cpukit/libdl/rtl-allocator.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2019-02-18 11:46:22 +1100
committerChris Johns <chrisj@rtems.org>2019-02-20 09:08:14 +1100
commit22afb03411133bcf928aeb85233648a94f259b44 (patch)
treee03f9e303646d3efbbce250db37d9566d50ec1c6 /cpukit/libdl/rtl-allocator.c
parentbsps/arm: Move device tree copy (diff)
downloadrtems-22afb03411133bcf928aeb85233648a94f259b44.tar.bz2
libdl/alloc: Add a locking interface to the allocator.
- Allow an allocator to lock the allocations. This is needed to lock the heap allocator so the text and trampoline table are as close together as possible to allow for the largest possible object file size. - Update the default heap allocator to lock the heap allocator. - Update ELF loading to lock the allocator. Updates #3685
Diffstat (limited to 'cpukit/libdl/rtl-allocator.c')
-rw-r--r--cpukit/libdl/rtl-allocator.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/cpukit/libdl/rtl-allocator.c b/cpukit/libdl/rtl-allocator.c
index 01ce9e580f..0dca6b2f9a 100644
--- a/cpukit/libdl/rtl-allocator.c
+++ b/cpukit/libdl/rtl-allocator.c
@@ -108,6 +108,40 @@ rtems_rtl_alloc_wr_enable (rtems_rtl_alloc_tag tag, void* address)
}
void
+rtems_rtl_alloc_lock (void)
+{
+ rtems_rtl_data* rtl = rtems_rtl_lock ();
+
+ if (rtems_rtl_trace (RTEMS_RTL_TRACE_ALLOCATOR))
+ printf ("rtl: alloc: lock\n");
+
+ if (rtl != NULL)
+ rtl->allocator.allocator (RTEMS_RTL_ALLOC_LOCK,
+ RTEMS_RTL_ALLOC_OBJECT, /* should be ignored */
+ NULL,
+ 0);
+
+ rtems_rtl_unlock ();
+}
+
+
+void
+rtems_rtl_alloc_unlock (void)
+{
+ rtems_rtl_data* rtl = rtems_rtl_lock ();
+
+ if (rtems_rtl_trace (RTEMS_RTL_TRACE_ALLOCATOR))
+ printf ("rtl: alloc: unlock\n");
+
+ if (rtl != NULL)
+ rtl->allocator.allocator (RTEMS_RTL_ALLOC_UNLOCK,
+ RTEMS_RTL_ALLOC_OBJECT, /* should be ignored */
+ NULL,
+ 0);
+
+ rtems_rtl_unlock ();
+}
+void
rtems_rtl_alloc_wr_disable (rtems_rtl_alloc_tag tag, void* address)
{
rtems_rtl_data* rtl = rtems_rtl_lock ();