sel4runtime: add CONFIG_SEL4RUNTIME_USE_BUILTINS to reduce code size
Bundled implementations of memcpy and memset yield larger code size
vs. using compiler builtins. Add a config flag to use the latter to
reduce memory footprint.
Bug: 264267056
Change-Id: I4710c62767844a4035511e678067224d74ea3dca
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1964501..1975581 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,6 +33,13 @@
16384
UNQUOTE
)
+config_option(
+ Sel4RuntimeUseBuiltins
+ SEL4RUNTIME_USE_BUILTINS
+ "Use compilter __builtin_* functions when possible to reduce code size"
+ DEFAULT
+ ON
+)
add_config_library(sel4runtime "${configure_string}")
list(APPEND crt_files crt/sel4_arch/${KernelSel4Arch}/crti.S crt/sel4_arch/${KernelSel4Arch}/crtn.S)
diff --git a/src/memcpy.c b/src/memcpy.c
index 672eaa1..757ab2a 100644
--- a/src/memcpy.c
+++ b/src/memcpy.c
@@ -22,10 +22,14 @@
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#include <sel4runtime/gen_config.h>
#include "util.h"
void *__sel4runtime_memcpy(void *restrict dest, const void *restrict src, sel4runtime_size_t n)
{
+#if CONFIG_SEL4RUNTIME_USE_BUILTINS
+ return __builtin_memcpy(dest, src, n);
+#else
unsigned char *d = dest;
const unsigned char *s = src;
@@ -172,4 +176,5 @@
*d++ = *s++;
}
return dest;
+#endif // CONFIG_SEL4RUNTIME_USE_BUILTINS
}
diff --git a/src/memset.c b/src/memset.c
index 94ecdc0..66e42f3 100644
--- a/src/memset.c
+++ b/src/memset.c
@@ -22,10 +22,14 @@
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#include <sel4runtime/gen_config.h>
#include "util.h"
void *__sel4runtime_memset(void *dest, int c, sel4runtime_size_t n)
{
+#if CONFIG_SEL4RUNTIME_USE_BUILTINS
+ return __builtin_memset(dest, c, n);
+#else
unsigned char *s = dest;
sel4runtime_size_t k;
@@ -120,4 +124,5 @@
#endif
return dest;
+#endif // CONFIG_SEL4RUNTIME_USE_BUILTINS
}