Index: fusl/src/env/__stack_chk_fail.c |
diff --git a/fusl/src/env/__stack_chk_fail.c b/fusl/src/env/__stack_chk_fail.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4de82fd9d2f39bd19bf71269b9530eae82552c4e |
--- /dev/null |
+++ b/fusl/src/env/__stack_chk_fail.c |
@@ -0,0 +1,23 @@ |
+#include <string.h> |
+#include <stdint.h> |
+#include "pthread_impl.h" |
+ |
+uintptr_t __stack_chk_guard; |
+ |
+void __init_ssp(void *entropy) |
+{ |
+ if (entropy) memcpy(&__stack_chk_guard, entropy, sizeof(uintptr_t)); |
+ else __stack_chk_guard = (uintptr_t)&__stack_chk_guard * 1103515245; |
+ |
+ __pthread_self()->CANARY = __stack_chk_guard; |
+} |
+ |
+void __stack_chk_fail(void) |
+{ |
+ a_crash(); |
+} |
+ |
+__attribute__((__visibility__("hidden"))) |
+void __stack_chk_fail_local(void); |
+ |
+weak_alias(__stack_chk_fail, __stack_chk_fail_local); |