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:
Bradley Bolen 2021-08-30 10:36:05 -04:00 committed by Carles Cufí
commit 6336cb26d8
10 changed files with 56 additions and 84 deletions

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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);
}

View file

@ -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 */

View file

@ -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;