#include void* memmove(void* dest, const void* src, unsigned long n) { unsigned char* d = (unsigned char*)dest; const unsigned char* s = (const unsigned char*)src; if (d < s) { while (n--) *d++ = *s++; } else { d += n; s += n; while (n--) *--d = *--s; } return dest; } void* memcpy(void* dest, const void* src, unsigned long n) { return memmove(dest, src, n); } void* memset(void* dest, int c, unsigned long n) { unsigned char* d = (unsigned char*)dest; while (n--) *d++ = (unsigned char)c; return dest; } // Stack protection long __stack_chk_guard = (long)0xDEADBEEFCAFEBABEULL; void __stack_chk_fail(void) { while (1); } // Swift embedded uses putchar for print(); stub so it links but does nothing int putchar(int c) { return c; } // Swift runtime allocator stubs — should never be called in embedded mode int posix_memalign(void** ptr, unsigned long align, unsigned long size) { (void)ptr; (void)align; (void)size; while (1); } void free(void* ptr) { (void)ptr; }