libc: minimal: Use new ZRESTRICT macro
This lets the toolchain header files determine how to use "restrict" instead of having that decision down in the minimal libc library. Signed-off-by: Bradley Bolen <bbolen@lexmark.com>
This commit is contained in:
parent
c00b85b0e9
commit
6336cb26d8
10 changed files with 56 additions and 84 deletions
|
@ -21,8 +21,6 @@
|
|||
/* syscall generation ignores preprocessor, ensure this is defined to ensure
|
||||
* we don't have compile errors
|
||||
*/
|
||||
#define _MLIBC_RESTRICT
|
||||
|
||||
__syscall int zephyr_read_stdin(char *buf, int nbytes);
|
||||
|
||||
__syscall int zephyr_write_stdout(const void *buf, int nbytes);
|
||||
|
@ -32,8 +30,8 @@ __syscall int zephyr_write_stdout(const void *buf, int nbytes);
|
|||
|
||||
__syscall int zephyr_fputc(int c, FILE * stream);
|
||||
|
||||
__syscall size_t zephyr_fwrite(const void *_MLIBC_RESTRICT ptr, size_t size,
|
||||
size_t nitems, FILE *_MLIBC_RESTRICT stream);
|
||||
__syscall size_t zephyr_fwrite(const void *ZRESTRICT ptr, size_t size,
|
||||
size_t nitems, FILE *ZRESTRICT stream);
|
||||
#endif /* CONFIG_NEWLIB_LIBC */
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016 Wind River Systems, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief _MLIBC_RESTRICT definition
|
||||
*
|
||||
* The macro "_MLIBC_RESTRICT" is intended to be private to the minimal libc
|
||||
* library. It evaluates to the "restrict" keyword when a C99 compiler is
|
||||
* used, and to "__restrict__" when a C++ compiler is used.
|
||||
*/
|
||||
|
||||
#if !defined(_MLIBC_RESTRICT_defined)
|
||||
#define _MLIBC_RESTRICT_defined
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define _MLIBC_RESTRICT __restrict__
|
||||
#else
|
||||
#define _MLIBC_RESTRICT restrict
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
#include <toolchain.h>
|
||||
#include <stdarg.h> /* Needed to get definition of va_list */
|
||||
#include <bits/restrict.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -31,31 +30,31 @@ typedef int FILE;
|
|||
#define stdout ((FILE *) 2)
|
||||
#define stderr ((FILE *) 3)
|
||||
|
||||
int __printf_like(1, 2) printf(const char *_MLIBC_RESTRICT format, ...);
|
||||
int __printf_like(3, 4) snprintf(char *_MLIBC_RESTRICT str, size_t len,
|
||||
const char *_MLIBC_RESTRICT format, ...);
|
||||
int __printf_like(2, 3) sprintf(char *_MLIBC_RESTRICT str,
|
||||
const char *_MLIBC_RESTRICT format, ...);
|
||||
int __printf_like(2, 3) fprintf(FILE * _MLIBC_RESTRICT stream,
|
||||
const char *_MLIBC_RESTRICT format, ...);
|
||||
int __printf_like(1, 2) printf(const char *ZRESTRICT format, ...);
|
||||
int __printf_like(3, 4) snprintf(char *ZRESTRICT str, size_t len,
|
||||
const char *ZRESTRICT format, ...);
|
||||
int __printf_like(2, 3) sprintf(char *ZRESTRICT str,
|
||||
const char *ZRESTRICT format, ...);
|
||||
int __printf_like(2, 3) fprintf(FILE *ZRESTRICT stream,
|
||||
const char *ZRESTRICT format, ...);
|
||||
|
||||
|
||||
int __printf_like(1, 0) vprintf(const char *_MLIBC_RESTRICT format, va_list list);
|
||||
int __printf_like(3, 0) vsnprintf(char *_MLIBC_RESTRICT str, size_t len,
|
||||
const char *_MLIBC_RESTRICT format,
|
||||
int __printf_like(1, 0) vprintf(const char *ZRESTRICT format, va_list list);
|
||||
int __printf_like(3, 0) vsnprintf(char *ZRESTRICT str, size_t len,
|
||||
const char *ZRESTRICT format,
|
||||
va_list list);
|
||||
int __printf_like(2, 0) vsprintf(char *_MLIBC_RESTRICT str,
|
||||
const char *_MLIBC_RESTRICT format, va_list list);
|
||||
int __printf_like(2, 0) vfprintf(FILE * _MLIBC_RESTRICT stream,
|
||||
const char *_MLIBC_RESTRICT format,
|
||||
int __printf_like(2, 0) vsprintf(char *ZRESTRICT str,
|
||||
const char *ZRESTRICT format, va_list list);
|
||||
int __printf_like(2, 0) vfprintf(FILE *ZRESTRICT stream,
|
||||
const char *ZRESTRICT format,
|
||||
va_list ap);
|
||||
|
||||
int puts(const char *s);
|
||||
|
||||
int fputc(int c, FILE *stream);
|
||||
int fputs(const char *_MLIBC_RESTRICT s, FILE *_MLIBC_RESTRICT stream);
|
||||
size_t fwrite(const void *_MLIBC_RESTRICT ptr, size_t size, size_t nitems,
|
||||
FILE *_MLIBC_RESTRICT stream);
|
||||
int fputs(const char *ZRESTRICT s, FILE *ZRESTRICT stream);
|
||||
size_t fwrite(const void *ZRESTRICT ptr, size_t size, size_t nitems,
|
||||
FILE *ZRESTRICT stream);
|
||||
static inline int putc(int c, FILE *stream)
|
||||
{
|
||||
return fputc(c, stream);
|
||||
|
|
|
@ -10,14 +10,14 @@
|
|||
#define ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_STRING_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <bits/restrict.h>
|
||||
#include <toolchain.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern char *strcpy(char *_MLIBC_RESTRICT d, const char *_MLIBC_RESTRICT s);
|
||||
extern char *strncpy(char *_MLIBC_RESTRICT d, const char *_MLIBC_RESTRICT s,
|
||||
extern char *strcpy(char *ZRESTRICT d, const char *ZRESTRICT s);
|
||||
extern char *strncpy(char *ZRESTRICT d, const char *ZRESTRICT s,
|
||||
size_t n);
|
||||
extern char *strchr(const char *s, int c);
|
||||
extern char *strrchr(const char *s, int c);
|
||||
|
@ -26,9 +26,9 @@ extern size_t strnlen(const char *s, size_t maxlen);
|
|||
extern int strcmp(const char *s1, const char *s2);
|
||||
extern int strncmp(const char *s1, const char *s2, size_t n);
|
||||
extern char *strtok_r(char *str, const char *sep, char **state);
|
||||
extern char *strcat(char *_MLIBC_RESTRICT dest,
|
||||
const char *_MLIBC_RESTRICT src);
|
||||
extern char *strncat(char *_MLIBC_RESTRICT dest, const char *_MLIBC_RESTRICT src,
|
||||
extern char *strcat(char *ZRESTRICT dest,
|
||||
const char *ZRESTRICT src);
|
||||
extern char *strncat(char *ZRESTRICT dest, const char *ZRESTRICT src,
|
||||
size_t n);
|
||||
extern char *strstr(const char *s, const char *find);
|
||||
|
||||
|
@ -37,7 +37,7 @@ extern size_t strcspn(const char *s, const char *reject);
|
|||
|
||||
extern int memcmp(const void *m1, const void *m2, size_t n);
|
||||
extern void *memmove(void *d, const void *s, size_t n);
|
||||
extern void *memcpy(void *_MLIBC_RESTRICT d, const void *_MLIBC_RESTRICT s,
|
||||
extern void *memcpy(void *ZRESTRICT d, const void *ZRESTRICT s,
|
||||
size_t n);
|
||||
extern void *memset(void *buf, int c, size_t n);
|
||||
extern void *memchr(const void *s, int c, size_t n);
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
#define ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_TIME_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <toolchain.h>
|
||||
#include <sys/_types.h>
|
||||
#include <bits/restrict.h>
|
||||
#include <sys/_timespec.h>
|
||||
|
||||
/* Minimal time.h to fulfill the requirements of certain libraries
|
||||
|
@ -49,8 +49,8 @@ typedef _SUSECONDS_T_ suseconds_t;
|
|||
* require access to time zone information.
|
||||
*/
|
||||
struct tm *gmtime(const time_t *timep);
|
||||
struct tm *gmtime_r(const time_t *_MLIBC_RESTRICT timep,
|
||||
struct tm *_MLIBC_RESTRICT result);
|
||||
struct tm *gmtime_r(const time_t *ZRESTRICT timep,
|
||||
struct tm *ZRESTRICT result);
|
||||
|
||||
time_t time(time_t *tloc);
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#define DESC(d) ((void *)d)
|
||||
|
||||
int fprintf(FILE *_MLIBC_RESTRICT stream, const char *_MLIBC_RESTRICT format, ...)
|
||||
int fprintf(FILE *ZRESTRICT stream, const char *ZRESTRICT format, ...)
|
||||
{
|
||||
va_list vargs;
|
||||
int r;
|
||||
|
@ -24,7 +24,7 @@ int fprintf(FILE *_MLIBC_RESTRICT stream, const char *_MLIBC_RESTRICT format, ..
|
|||
return r;
|
||||
}
|
||||
|
||||
int vfprintf(FILE *_MLIBC_RESTRICT stream, const char *_MLIBC_RESTRICT format,
|
||||
int vfprintf(FILE *ZRESTRICT stream, const char *ZRESTRICT format,
|
||||
va_list vargs)
|
||||
{
|
||||
int r;
|
||||
|
@ -34,7 +34,7 @@ int vfprintf(FILE *_MLIBC_RESTRICT stream, const char *_MLIBC_RESTRICT format,
|
|||
return r;
|
||||
}
|
||||
|
||||
int printf(const char *_MLIBC_RESTRICT format, ...)
|
||||
int printf(const char *ZRESTRICT format, ...)
|
||||
{
|
||||
va_list vargs;
|
||||
int r;
|
||||
|
@ -46,7 +46,7 @@ int printf(const char *_MLIBC_RESTRICT format, ...)
|
|||
return r;
|
||||
}
|
||||
|
||||
int vprintf(const char *_MLIBC_RESTRICT format, va_list vargs)
|
||||
int vprintf(const char *ZRESTRICT format, va_list vargs)
|
||||
{
|
||||
int r;
|
||||
|
||||
|
|
|
@ -25,8 +25,8 @@ static int sprintf_out(int c, struct emitter *p)
|
|||
return 0; /* indicate keep going so we get the total count */
|
||||
}
|
||||
|
||||
int snprintf(char *_MLIBC_RESTRICT str, size_t len,
|
||||
const char *_MLIBC_RESTRICT format, ...)
|
||||
int snprintf(char *ZRESTRICT str, size_t len,
|
||||
const char *ZRESTRICT format, ...)
|
||||
{
|
||||
va_list vargs;
|
||||
|
||||
|
@ -49,7 +49,7 @@ int snprintf(char *_MLIBC_RESTRICT str, size_t len,
|
|||
return r;
|
||||
}
|
||||
|
||||
int sprintf(char *_MLIBC_RESTRICT str, const char *_MLIBC_RESTRICT format, ...)
|
||||
int sprintf(char *ZRESTRICT str, const char *ZRESTRICT format, ...)
|
||||
{
|
||||
va_list vargs;
|
||||
|
||||
|
@ -67,8 +67,8 @@ int sprintf(char *_MLIBC_RESTRICT str, const char *_MLIBC_RESTRICT format, ...)
|
|||
return r;
|
||||
}
|
||||
|
||||
int vsnprintf(char *_MLIBC_RESTRICT str, size_t len,
|
||||
const char *_MLIBC_RESTRICT format, va_list vargs)
|
||||
int vsnprintf(char *ZRESTRICT str, size_t len,
|
||||
const char *ZRESTRICT format, va_list vargs)
|
||||
{
|
||||
struct emitter p;
|
||||
int r;
|
||||
|
@ -87,7 +87,7 @@ int vsnprintf(char *_MLIBC_RESTRICT str, size_t len,
|
|||
return r;
|
||||
}
|
||||
|
||||
int vsprintf(char *_MLIBC_RESTRICT str, const char *_MLIBC_RESTRICT format,
|
||||
int vsprintf(char *ZRESTRICT str, const char *ZRESTRICT format,
|
||||
va_list vargs)
|
||||
{
|
||||
struct emitter p;
|
||||
|
|
|
@ -43,7 +43,7 @@ int fputc(int c, FILE *stream)
|
|||
return zephyr_fputc(c, stream);
|
||||
}
|
||||
|
||||
int fputs(const char *_MLIBC_RESTRICT s, FILE *_MLIBC_RESTRICT stream)
|
||||
int fputs(const char *ZRESTRICT s, FILE *ZRESTRICT stream)
|
||||
{
|
||||
int len = strlen(s);
|
||||
int ret;
|
||||
|
@ -53,8 +53,8 @@ int fputs(const char *_MLIBC_RESTRICT s, FILE *_MLIBC_RESTRICT stream)
|
|||
return len == ret ? 0 : EOF;
|
||||
}
|
||||
|
||||
size_t z_impl_zephyr_fwrite(const void *_MLIBC_RESTRICT ptr, size_t size,
|
||||
size_t nitems, FILE *_MLIBC_RESTRICT stream)
|
||||
size_t z_impl_zephyr_fwrite(const void *ZRESTRICT ptr, size_t size,
|
||||
size_t nitems, FILE *ZRESTRICT stream)
|
||||
{
|
||||
size_t i;
|
||||
size_t j;
|
||||
|
@ -84,20 +84,20 @@ done:
|
|||
}
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
static inline size_t z_vrfy_zephyr_fwrite(const void *_MLIBC_RESTRICT ptr,
|
||||
static inline size_t z_vrfy_zephyr_fwrite(const void *ZRESTRICT ptr,
|
||||
size_t size, size_t nitems,
|
||||
FILE *_MLIBC_RESTRICT stream)
|
||||
FILE *ZRESTRICT stream)
|
||||
{
|
||||
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_ARRAY_READ(ptr, nitems, size));
|
||||
return z_impl_zephyr_fwrite((const void *_MLIBC_RESTRICT)ptr, size,
|
||||
nitems, (FILE *_MLIBC_RESTRICT)stream);
|
||||
return z_impl_zephyr_fwrite((const void *ZRESTRICT)ptr, size,
|
||||
nitems, (FILE *ZRESTRICT)stream);
|
||||
}
|
||||
#include <syscalls/zephyr_fwrite_mrsh.c>
|
||||
#endif
|
||||
|
||||
size_t fwrite(const void *_MLIBC_RESTRICT ptr, size_t size, size_t nitems,
|
||||
FILE *_MLIBC_RESTRICT stream)
|
||||
size_t fwrite(const void *ZRESTRICT ptr, size_t size, size_t nitems,
|
||||
FILE *ZRESTRICT stream)
|
||||
{
|
||||
return zephyr_fwrite(ptr, size, nitems, stream);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* @return pointer to destination buffer <d>
|
||||
*/
|
||||
|
||||
char *strcpy(char *_MLIBC_RESTRICT d, const char *_MLIBC_RESTRICT s)
|
||||
char *strcpy(char *ZRESTRICT d, const char *ZRESTRICT s)
|
||||
{
|
||||
char *dest = d;
|
||||
|
||||
|
@ -39,7 +39,7 @@ char *strcpy(char *_MLIBC_RESTRICT d, const char *_MLIBC_RESTRICT s)
|
|||
* @return pointer to destination buffer <d>
|
||||
*/
|
||||
|
||||
char *strncpy(char *_MLIBC_RESTRICT d, const char *_MLIBC_RESTRICT s, size_t n)
|
||||
char *strncpy(char *ZRESTRICT d, const char *ZRESTRICT s, size_t n)
|
||||
{
|
||||
char *dest = d;
|
||||
|
||||
|
@ -209,13 +209,13 @@ char *strtok_r(char *str, const char *sep, char **state)
|
|||
return start;
|
||||
}
|
||||
|
||||
char *strcat(char *_MLIBC_RESTRICT dest, const char *_MLIBC_RESTRICT src)
|
||||
char *strcat(char *ZRESTRICT dest, const char *ZRESTRICT src)
|
||||
{
|
||||
strcpy(dest + strlen(dest), src);
|
||||
return dest;
|
||||
}
|
||||
|
||||
char *strncat(char *_MLIBC_RESTRICT dest, const char *_MLIBC_RESTRICT src,
|
||||
char *strncat(char *ZRESTRICT dest, const char *ZRESTRICT src,
|
||||
size_t n)
|
||||
{
|
||||
char *orig_dest = dest;
|
||||
|
@ -295,7 +295,7 @@ void *memmove(void *d, const void *s, size_t n)
|
|||
* @return pointer to start of destination buffer
|
||||
*/
|
||||
|
||||
void *memcpy(void *_MLIBC_RESTRICT d, const void *_MLIBC_RESTRICT s, size_t n)
|
||||
void *memcpy(void *ZRESTRICT d, const void *ZRESTRICT s, size_t n)
|
||||
{
|
||||
/* attempt word-sized copying only if buffers have identical alignment */
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ typedef time_t bigint_type;
|
|||
* @see http://howardhinnant.github.io/date_algorithms.html#civil_from_days
|
||||
*/
|
||||
static void time_civil_from_days(bigint_type z,
|
||||
struct tm *_MLIBC_RESTRICT tp)
|
||||
struct tm *ZRESTRICT tp)
|
||||
{
|
||||
tp->tm_wday = (z >= -4) ? ((z + 4) % 7) : ((z + 5) % 7 + 6);
|
||||
z += 719468;
|
||||
|
@ -77,8 +77,8 @@ static void time_civil_from_days(bigint_type z,
|
|||
* due to time zone, leap seconds, or a different epoch must be
|
||||
* applied to @p time before invoking this function.
|
||||
*/
|
||||
struct tm *gmtime_r(const time_t *_MLIBC_RESTRICT timep,
|
||||
struct tm *_MLIBC_RESTRICT result)
|
||||
struct tm *gmtime_r(const time_t *ZRESTRICT timep,
|
||||
struct tm *ZRESTRICT result)
|
||||
{
|
||||
time_t z = *timep;
|
||||
bigint_type days = (z >= 0 ? z : z - 86399) / 86400;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue