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 }