Make sure that unused symbols are dropped when using GCC

Add compiler and linker options to add each symbols in its own section
so unused one can be dropped.

Also adds missing noexcept

Change-Id: I9143ae5865c4a071c6e09d14eb08ce3069b4b2db
diff --git a/applications/message_handler/lib/freertos_allocator.cpp b/applications/message_handler/lib/freertos_allocator.cpp
index c7fdba6..883ada8 100644
--- a/applications/message_handler/lib/freertos_allocator.cpp
+++ b/applications/message_handler/lib/freertos_allocator.cpp
@@ -28,18 +28,18 @@
     return pvPortMalloc(size);
 }
 
-void operator delete(void *ptr) {
+void operator delete(void *ptr) noexcept {
     vPortFree(ptr);
 }
 
-void operator delete(void *ptr, std::size_t) {
+void operator delete(void *ptr, std::size_t) noexcept {
     vPortFree(ptr);
 }
 
-void operator delete[](void *ptr) {
+void operator delete[](void *ptr) noexcept {
     vPortFree(ptr);
 }
 
-void operator delete[](void *ptr, std::size_t) {
+void operator delete[](void *ptr, std::size_t) noexcept {
     vPortFree(ptr);
 }
diff --git a/cmake/toolchain/arm-none-eabi-gcc.cmake b/cmake/toolchain/arm-none-eabi-gcc.cmake
index ce54cd5..492abc5 100644
--- a/cmake/toolchain/arm-none-eabi-gcc.cmake
+++ b/cmake/toolchain/arm-none-eabi-gcc.cmake
@@ -52,7 +52,9 @@
     -mcpu=${GCC_CPU}
     -mthumb
     "$<$<CONFIG:DEBUG>:-gdwarf-3>"
-    "$<$<COMPILE_LANGUAGE:CXX>:-fno-unwind-tables;-fno-rtti;-fno-exceptions>")
+    "$<$<COMPILE_LANGUAGE:CXX>:-fno-unwind-tables;-fno-rtti;-fno-exceptions>"
+    -fdata-sections
+    -ffunction-sections)
 
 # Compile defines
 add_compile_definitions(
@@ -88,6 +90,8 @@
     add_link_options(-mfloat-abi=${FLOAT})
 endif()
 
+add_link_options(LINKER:--nmagic,--gc-sections)
+
 # Compilation warnings
 add_compile_options(
     -Wall