extern void abort (void); extern int inside_main; typedef __SIZE_TYPE__ size_t; #define TEST_ABORT if (inside_main) abort() /* LTO code is at the present to able to track that asm alias my_bcopy on builtin actually refers to this function. See PR47181. */ __attribute__ ((used)) void * my_memcpy (void *d, const void *s, size_t n) { char *dst = (char *) d; const char *src = (const char *) s; while (n--) *dst++ = *src++; return (char *) d; } /* LTO code is at the present to able to track that asm alias my_bcopy on builtin actually refers to this function. See PR47181. */ __attribute__ ((used)) void my_bcopy (const void *s, void *d, size_t n) { char *dst = (char *) d; const char *src = (const char *) s; if (src >= dst) while (n--) *dst++ = *src++; else { dst += n; src += n; while (n--) *--dst = *--src; } } /* LTO code is at the present to able to track that asm alias my_bcopy on builtin actually refers to this function. See PR47181. */ __attribute__ ((used)) void * my_memset (void *d, int c, size_t n) { char *dst = (char *) d; while (n--) *dst++ = c; return (char *) d; } /* LTO code is at the present to able to track that asm alias my_bcopy on builtin actually refers to this function. See PR47181. */ __attribute__ ((used)) void my_bzero (void *d, size_t n) { char *dst = (char *) d; while (n--) *dst++ = '\0'; } void * memcpy (void *d, const void *s, size_t n) { void *result = my_memcpy (d, s, n); TEST_ABORT; return result; } void bcopy (const void *s, void *d, size_t n) { my_bcopy (s, d, n); TEST_ABORT; } void * memset (void *d, int c, size_t n) { void *result = my_memset (d, c, n); TEST_ABORT; return result; } void bzero (void *d, size_t n) { my_bzero (d, n); TEST_ABORT; } #ifdef __vxworks /* The RTP C library uses bfill, which is defined in the same file as bzero and bcopy. */ #include "lib/bfill.c" #endif