[trusty][libc] more c++ support for keymaster

Added following symbols.
__aeabi_atexit
__cxa_pure_virtual
__dso_handle

Change-Id: I8ccb438edc425e19ecbaaee794d04404d712ae4d
diff --git a/lib/libc-trusty/arch/arm/crtbegin.c b/lib/libc-trusty/arch/arm/crtbegin.c
index 556697c..677d7a0 100644
--- a/lib/libc-trusty/arch/arm/crtbegin.c
+++ b/lib/libc-trusty/arch/arm/crtbegin.c
@@ -37,6 +37,9 @@
 __attribute__ ((section (".fini_array")))
 void (*__FINI_ARRAY__)(void) = (void (*)(void)) -1;
 
+__attribute__ ((section (".bss")))
+void *__dso_handle = (void *) 0;
+
 /* Arguments are supplied in memory pointed by r0 */
 void _start(void *args) {
   structors_array_t array;
diff --git a/lib/libc-trusty/atexit.c b/lib/libc-trusty/atexit.c
index 81dd5e9..2df714a 100644
--- a/lib/libc-trusty/atexit.c
+++ b/lib/libc-trusty/atexit.c
@@ -30,7 +30,9 @@
  */
 
 #include <string.h>
+#include <stdio.h>
 #include <stdlib.h>
+#include <trusty_std.h>
 
 #include "atexit.h"
 
@@ -130,3 +132,13 @@
 	}
 }
 
+void __cxa_pure_virtual(void)
+{
+	fprintf(stderr, "Pure virtual function called.\n");
+	exit(1);
+}
+
+int __attribute__((weak))
+__aeabi_atexit(void *object, void (*destructor) (void *)) {
+	return __cxa_atexit(destructor, object);
+}
diff --git a/lib/libc-trusty/atexit.h b/lib/libc-trusty/atexit.h
index 882b2cd..137ded7 100644
--- a/lib/libc-trusty/atexit.h
+++ b/lib/libc-trusty/atexit.h
@@ -48,3 +48,4 @@
 
 int	__cxa_atexit(void (*)(void *), void *);
 void	__cxa_finalize(void);
+void	__cxa_pure_virtual(void);
\ No newline at end of file