cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

string.h (1717B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _M68K_STRING_H_
      3#define _M68K_STRING_H_
      4
      5#include <linux/types.h>
      6#include <linux/compiler.h>
      7
      8#define __HAVE_ARCH_STRNLEN
      9static inline size_t strnlen(const char *s, size_t count)
     10{
     11	const char *sc = s;
     12
     13	asm volatile ("\n"
     14		"1:     subq.l  #1,%1\n"
     15		"       jcs     2f\n"
     16		"       tst.b   (%0)+\n"
     17		"       jne     1b\n"
     18		"       subq.l  #1,%0\n"
     19		"2:"
     20		: "+a" (sc), "+d" (count));
     21	return sc - s;
     22}
     23
     24#define __HAVE_ARCH_STRNCPY
     25static inline char *strncpy(char *dest, const char *src, size_t n)
     26{
     27	char *xdest = dest;
     28
     29	asm volatile ("\n"
     30		"	jra	2f\n"
     31		"1:	move.b	(%1),(%0)+\n"
     32		"	jeq	2f\n"
     33		"	addq.l	#1,%1\n"
     34		"2:	subq.l	#1,%2\n"
     35		"	jcc	1b\n"
     36		: "+a" (dest), "+a" (src), "+d" (n)
     37		: : "memory");
     38	return xdest;
     39}
     40
     41#ifndef CONFIG_COLDFIRE
     42#define __HAVE_ARCH_STRCMP
     43static inline int strcmp(const char *cs, const char *ct)
     44{
     45	char res;
     46
     47	asm ("\n"
     48		"1:	move.b	(%0)+,%2\n"	/* get *cs */
     49		"	cmp.b	(%1)+,%2\n"	/* compare a byte */
     50		"	jne	2f\n"		/* not equal, break out */
     51		"	tst.b	%2\n"		/* at end of cs? */
     52		"	jne	1b\n"		/* no, keep going */
     53		"	jra	3f\n"		/* strings are equal */
     54		"2:	sub.b	-(%1),%2\n"	/* *cs - *ct */
     55		"3:"
     56		: "+a" (cs), "+a" (ct), "=d" (res));
     57	return res;
     58}
     59#endif /* CONFIG_COLDFIRE */
     60
     61#define __HAVE_ARCH_MEMMOVE
     62extern void *memmove(void *, const void *, __kernel_size_t);
     63
     64#define memcmp(d, s, n) __builtin_memcmp(d, s, n)
     65
     66#define __HAVE_ARCH_MEMSET
     67extern void *memset(void *, int, __kernel_size_t);
     68#define memset(d, c, n) __builtin_memset(d, c, n)
     69
     70#define __HAVE_ARCH_MEMCPY
     71extern void *memcpy(void *, const void *, __kernel_size_t);
     72#define memcpy(d, s, n) __builtin_memcpy(d, s, n)
     73
     74#endif /* _M68K_STRING_H_ */