123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- // SPDX-License-Identifier: GPL-2.0+
- /*
- * Library for freestanding binary
- *
- * Copyright 2019, Heinrich Schuchardt <xypron.glpk@gmx.de>
- *
- * GCC requires that freestanding programs provide memcpy(), memmove(),
- * memset(), and memcmp().
- */
- #include <common.h>
- /**
- * memcmp() - compare memory areas
- *
- * @s1: pointer to first area
- * @s2: pointer to second area
- * @n: number of bytes to compare
- * Return: 0 if both memory areas are the same, otherwise the sign of the
- * result value is the same as the sign of the difference between
- * the first differing pair of bytes taken as u8.
- */
- int memcmp(const void *s1, const void *s2, size_t n)
- {
- const u8 *pos1 = s1;
- const u8 *pos2 = s2;
- for (; n; --n) {
- if (*pos1 != *pos2)
- return *pos1 - *pos2;
- ++pos1;
- ++pos2;
- }
- return 0;
- }
- /**
- * memcpy() - copy memory area
- *
- * @dest: destination buffer
- * @src: source buffer
- * @n: number of bytes to copy
- * Return: pointer to destination buffer
- */
- void *memmove(void *dest, const void *src, size_t n)
- {
- u8 *d = dest;
- const u8 *s = src;
- if (d <= s) {
- for (; n; --n)
- *d++ = *s++;
- } else {
- d += n;
- s += n;
- for (; n; --n)
- *--d = *--s;
- }
- return dest;
- }
- /**
- * memcpy() - copy memory area
- *
- * @dest: destination buffer
- * @src: source buffer
- * @n: number of bytes to copy
- * Return: pointer to destination buffer
- */
- void *memcpy(void *dest, const void *src, size_t n)
- {
- return memmove(dest, src, n);
- }
- /**
- * memset() - fill memory with a constant byte
- *
- * @s: destination buffer
- * @c: byte value
- * @n: number of bytes to set
- * Return: pointer to destination buffer
- */
- void *memset(void *s, int c, size_t n)
- {
- u8 *d = s;
- for (; n; --n)
- *d++ = c;
- return s;
- }
- /**
- * __cyg_profile_func_enter() - record function entry
- *
- * This is called on every function entry when compiling with
- * -finstrument-functions.
- *
- * We do nothing here.
- *
- * @param func_ptr Pointer to function being entered
- * @param caller Pointer to function which called this function
- */
- void __attribute__((no_instrument_function))
- __cyg_profile_func_enter(void *func_ptr, void *caller)
- {
- }
- /**
- * __cyg_profile_func_exit() - record function exit
- *
- * This is called on every function exit when compiling with
- * -finstrument-functions.
- *
- * We do nothing here.
- *
- * @param func_ptr Pointer to function being entered
- * @param caller Pointer to function which called this function
- */
- void __attribute__((no_instrument_function))
- __cyg_profile_func_exit(void *func_ptr, void *caller)
- {
- }
|