fix the stupid symbol attribute mess, pt. 1

This commit is contained in:
anna 2021-02-28 18:08:08 +01:00
parent af8210da4a
commit 298433e15f
Signed by: fef
GPG key ID: EC22E476DC2D3D84
10 changed files with 65 additions and 59 deletions

View file

@ -5,7 +5,7 @@
#include <ardix/types.h> #include <ardix/types.h>
int memcmp(const void *s1, const void *s2, size_t n); #include <toolchain.h>
/** /**
* Copy `n` bytes from `src` to `dest`. * Copy `n` bytes from `src` to `dest`.
@ -15,7 +15,7 @@ int memcmp(const void *s1, const void *s2, size_t n);
* @param n: The amount of bytes to copy. * @param n: The amount of bytes to copy.
* @returns A pointer to `dest`. * @returns A pointer to `dest`.
*/ */
void *memcpy(void *dest, const void *src, size_t n); __shared void *memcpy(void *dest, const void *src, size_t n);
/** /**
* Starting from `ptr`, fill `n` bytes with the constant byte `c`. * Starting from `ptr`, fill `n` bytes with the constant byte `c`.
@ -25,7 +25,7 @@ void *memcpy(void *dest, const void *src, size_t n);
* @param n: The amount of bytes to write. * @param n: The amount of bytes to write.
* @returns A pointer to `ptr`. * @returns A pointer to `ptr`.
*/ */
void *memset(void *ptr, int c, size_t n); __shared void *memset(void *ptr, int c, size_t n);
/** /**
* Copy a memory area. * Copy a memory area.
@ -37,7 +37,7 @@ void *memset(void *ptr, int c, size_t n);
* @param n: The amount of bytes to copy. * @param n: The amount of bytes to copy.
* @return a pointer to dest. * @return a pointer to dest.
*/ */
void *memmove(void *dest, const void *src, size_t n); __shared void *memmove(void *dest, const void *src, size_t n);
/** /**
* Compare the two strings `s1` and `s2`. * Compare the two strings `s1` and `s2`.
@ -47,7 +47,7 @@ void *memmove(void *dest, const void *src, size_t n);
* @returns `0` if both strings are equal, a positive value f `s1` is greater * @returns `0` if both strings are equal, a positive value f `s1` is greater
* than `s2`, and a negative value if `s1` is less than `s2`. * than `s2`, and a negative value if `s1` is less than `s2`.
*/ */
int strcmp(const char *s1, const char *s2); __shared int strcmp(const char *s1, const char *s2);
/** /**
* Copy a `NUL` terminated string from `src` to `dest`. * Copy a `NUL` terminated string from `src` to `dest`.
@ -57,7 +57,7 @@ int strcmp(const char *s1, const char *s2);
* @param src: The original string to copy from. * @param src: The original string to copy from.
* @returns A pointer to the destination string. * @returns A pointer to the destination string.
*/ */
char *strcpy(char *dest, const char *src); __shared char *strcpy(char *dest, const char *src);
/** /**
* Copy a `NUL` terminated string from `src` to `dest`, but at most `n` * Copy a `NUL` terminated string from `src` to `dest`, but at most `n`
@ -69,7 +69,7 @@ char *strcpy(char *dest, const char *src);
* @param n: The amount of characters to copy at most. * @param n: The amount of characters to copy at most.
* @returns A pointer to the destination string. * @returns A pointer to the destination string.
*/ */
char *strncpy(char *dest, const char *src, size_t n); __shared char *strncpy(char *dest, const char *src, size_t n);
/** /**
* Compute the length of the `NUL` terminated string `s`. * Compute the length of the `NUL` terminated string `s`.
@ -77,7 +77,7 @@ char *strncpy(char *dest, const char *src, size_t n);
* @param s: The string. * @param s: The string.
* @returns The length of `s` without the `NUL` terminator. * @returns The length of `s` without the `NUL` terminator.
*/ */
size_t strlen(const char *s); __shared size_t strlen(const char *s);
/* /*
* This file is part of Ardix. * This file is part of Ardix.

View file

@ -7,7 +7,7 @@
#if CONFIG_SCHED_MAXPROC < 128 #if CONFIG_SCHED_MAXPROC < 128
#define _PID_TYPE_ int8_t #define _PID_TYPE_ int8_t
#elif CONFIG_SCHED_MAXPROC < 32767 #elif CONFIG_SCHED_MAXPROC < 32768
#define _PID_TYPE_ int16_t #define _PID_TYPE_ int16_t
#else #else
#define _PID_TYPE_ int32_t #define _PID_TYPE_ int32_t
@ -16,10 +16,6 @@
/** Process identifier. */ /** Process identifier. */
typedef _PID_TYPE_ pid_t; typedef _PID_TYPE_ pid_t;
#ifndef __SIG_ATOMIC_TYPE__
#define __SIG_ATOMIC_TYPE__ int
#endif /* __SIG_ATOMIC_TYPE__ */
/** Simple atomic reference counter */ /** Simple atomic reference counter */
typedef struct { typedef struct {
int count; int count;

View file

@ -11,7 +11,7 @@
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is an alphabetic character, zero if not. * @returns A nonzero value if `c` is an alphabetic character, zero if not.
*/ */
int isalpha(int c); __const __shared int isalpha(int c);
/** /**
* Return whether `c` is a control character. * Return whether `c` is a control character.
@ -19,7 +19,7 @@ int isalpha(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is a control character, zero if not. * @returns A nonzero value if `c` is a control character, zero if not.
*/ */
int iscntrl(int c); __const __shared int iscntrl(int c);
/** /**
* Return whether `c` is a digit. * Return whether `c` is a digit.
@ -27,7 +27,7 @@ int iscntrl(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is a digit, zero if not. * @returns A nonzero value if `c` is a digit, zero if not.
*/ */
int isdigit(int c); __const __shared int isdigit(int c);
/** /**
* Return whether `c` is a printable character except space. * Return whether `c` is a printable character except space.
@ -36,7 +36,7 @@ int isdigit(int c);
* @returns A nonzero value if `c` is a printable character and not space, * @returns A nonzero value if `c` is a printable character and not space,
* zero if not. * zero if not.
*/ */
int isgraph(int c); __const __shared int isgraph(int c);
/** /**
* Return whether `c` is a lowercase letter. * Return whether `c` is a lowercase letter.
@ -44,7 +44,7 @@ int isgraph(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is lowercase, zero if not. * @returns A nonzero value if `c` is lowercase, zero if not.
*/ */
int islower(int c); __const __shared int islower(int c);
/** /**
* Return whether `c` is a printable character including space. * Return whether `c` is a printable character including space.
@ -52,7 +52,7 @@ int islower(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is a printable character, zero if not. * @returns A nonzero value if `c` is a printable character, zero if not.
*/ */
int isprint(int c); __const __shared int isprint(int c);
/** /**
* Return whether `c` is a printable character * Return whether `c` is a printable character
@ -61,7 +61,7 @@ int isprint(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is a punctuation character, zero if not. * @returns A nonzero value if `c` is a punctuation character, zero if not.
*/ */
int ispunct(int c); __const __shared int ispunct(int c);
/** /**
* Return whether `c` is a white-space character. * Return whether `c` is a white-space character.
@ -71,7 +71,7 @@ int ispunct(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is a white-space character, zero if not. * @returns A nonzero value if `c` is a white-space character, zero if not.
*/ */
int isspace(int c); __const __shared int isspace(int c);
/** /**
* Return whether `c` is an uppercase letter. * Return whether `c` is an uppercase letter.
@ -79,7 +79,7 @@ int isspace(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is uppercase, zero if not. * @returns A nonzero value if `c` is uppercase, zero if not.
*/ */
int isupper(int c); __const __shared int isupper(int c);
/** /**
* Return whether `c` is a hexadecimal digit. * Return whether `c` is a hexadecimal digit.
@ -88,7 +88,7 @@ int isupper(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is a blaank character, zero if not. * @returns A nonzero value if `c` is a blaank character, zero if not.
*/ */
int isxdigit(int c); __const __shared int isxdigit(int c);
/** /**
* Return whether `c` is a 7-bit unsigned char. * Return whether `c` is a 7-bit unsigned char.
@ -96,7 +96,7 @@ int isxdigit(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is an ASCII character, zero if not. * @returns A nonzero value if `c` is an ASCII character, zero if not.
*/ */
int isascii(int c); __const __shared int isascii(int c);
/** /**
* Return whether `c` is a space or a tab character. * Return whether `c` is a space or a tab character.
@ -104,7 +104,7 @@ int isascii(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if `c` is a blank character, zero if not. * @returns A nonzero value if `c` is a blank character, zero if not.
*/ */
int isblank(int c); __const __shared int isblank(int c);
/** /**
* Check whether `c` is an alphanumeric character. * Check whether `c` is an alphanumeric character.
@ -113,10 +113,7 @@ int isblank(int c);
* @param c: The character, cast to an `int`. * @param c: The character, cast to an `int`.
* @returns A nonzero value if the character is alphanumeric, zero if not. * @returns A nonzero value if the character is alphanumeric, zero if not.
*/ */
__always_inline int isalnum(int c) __const __shared int isalnum(int c);
{
return isalpha(c) || isdigit(c);
}
/* /*
* This file is part of Ardix. * This file is part of Ardix.

View file

@ -3,6 +3,8 @@
#pragma once #pragma once
#include <toolchain.h>
#define EPERM 1 #define EPERM 1
#define ENOENT 2 #define ENOENT 2
#define ESRCH 3 #define ESRCH 3
@ -145,7 +147,7 @@
* @param errnum: POSIX error number * @param errnum: POSIX error number
* @returns an immutable human-readable string briefly describing the error * @returns an immutable human-readable string briefly describing the error
*/ */
char *strerror(int errnum); __shared char *strerror(int errnum);
/* TODO: actually define errno */ /* TODO: actually define errno */

View file

@ -51,6 +51,16 @@
#define __rodata __section(.rodata#) #define __rodata __section(.rodata#)
#endif #endif
#ifndef __pure
/** Declare a function is pure so gcc can do some common subexpression elimination. */
#define __pure __attribute__((pure))
#endif
#ifndef __const
/** Like `__pure`, and the fuction does not access any memory except its stack. */
#define __const __attribute__((const))
#endif
#ifndef __user #ifndef __user
/** Denote a pointer to user space (this will be used for static code checks later) */ /** Denote a pointer to user space (this will be used for static code checks later) */
#define __user #define __user

View file

@ -5,8 +5,8 @@
#include <stdint.h> #include <stdint.h>
ssize_t read(int fildes, void *buf, size_t nbyte); __shared ssize_t read(int fildes, void *buf, size_t nbyte);
ssize_t write(int fildes, const void *buf, size_t nbyte); __shared ssize_t write(int fildes, const void *buf, size_t nbyte);
/* /*
* This file is part of Ardix. * This file is part of Ardix.

View file

@ -2,72 +2,76 @@
/* See the end of this file for copyright, license, and warranty information. */ /* See the end of this file for copyright, license, and warranty information. */
#include <ctype.h> #include <ctype.h>
#include <toolchain.h>
__shared int isalpha(int c) int isalpha(int c)
{ {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
} }
__shared int isblank(int c) int isblank(int c)
{ {
return c == ' ' || c == '\t'; return c == ' ' || c == '\t';
} }
__shared int iscntrl(int c) int iscntrl(int c)
{ {
return c == 0x7F || (c >= 0 && c <= 0x1F); return c == 0x7F || (c >= 0 && c <= 0x1F);
} }
__shared int isdigit(int c) int isdigit(int c)
{ {
return c >= '0' && c <= '9'; return c >= '0' && c <= '9';
} }
__shared int isgraph(int c) int isgraph(int c)
{ {
/* space *not* included */ /* space *not* included */
return c > 0x20 && c <= 0x7E; return c > 0x20 && c <= 0x7E;
} }
__shared int islower(int c) int islower(int c)
{ {
return c >= 'a' && c <= 'z'; return c >= 'a' && c <= 'z';
} }
__shared int isprint(int c) int isprint(int c)
{ {
/* space *is* included */ /* space *is* included */
return c >= 0x20 && c <= 0x7E; return c >= 0x20 && c <= 0x7E;
} }
__shared int ispunct(int c) int ispunct(int c)
{ {
return isprint(c) && !isalnum(c); return isprint(c) && !isalnum(c);
} }
__shared int isspace(int c) int isspace(int c)
{ {
return c == ' ' || (c >= '\n' && c <= '\r'); return c == ' ' || (c >= '\n' && c <= '\r');
} }
__shared int isupper(int c) int isupper(int c)
{ {
return c >= 'A' && c <= 'Z'; return c >= 'A' && c <= 'Z';
} }
__shared int isxdigit(int c) int isxdigit(int c)
{ {
return (c >= '0' && c <= '9') return (c >= '0' && c <= '9')
|| (c >= 'A' && c <= 'F') || (c >= 'A' && c <= 'F')
|| (c >= 'a' && c <= 'f'); || (c >= 'a' && c <= 'f');
} }
__shared int isascii(int c) int isascii(int c)
{ {
return c & 0x7F; return c & 0x7F;
} }
int isalnum(int c)
{
return isalpha(c) || isdigit(c);
}
/* /*
* This file is part of Ardix. * This file is part of Ardix.
* Copyright (c) 2020, 2021 Felix Kopp <owo@fef.moe>. * Copyright (c) 2020, 2021 Felix Kopp <owo@fef.moe>.

View file

@ -103,7 +103,7 @@ __rodata static const char *error_messages[] = {
[ESOCKTNOSUPPORT] "Socket type not supported", [ESOCKTNOSUPPORT] "Socket type not supported",
}; };
__shared char *strerror(int errnum) char *strerror(int errnum)
{ {
if (errnum < 0) if (errnum < 0)
errnum = -errnum; errnum = -errnum;

View file

@ -8,7 +8,7 @@
#include <stdbool.h> #include <stdbool.h>
#ifndef __HAVE_ASM_MEMCMP #ifndef __HAVE_ASM_MEMCMP
__shared int memcmp(const void *s1, const void *s2, size_t n) int memcmp(const void *s1, const void *s2, size_t n)
{ {
int delta = 0; int delta = 0;
@ -23,7 +23,7 @@ __shared int memcmp(const void *s1, const void *s2, size_t n)
#endif /* __HAVE_ASM_MEMCMP */ #endif /* __HAVE_ASM_MEMCMP */
#ifndef __HAVE_ASM_MEMCPY #ifndef __HAVE_ASM_MEMCPY
__shared void *memcpy(void *dest, const void *src, size_t n) void *memcpy(void *dest, const void *src, size_t n)
{ {
uint8_t *tmp = (uint8_t *)dest; uint8_t *tmp = (uint8_t *)dest;
@ -35,7 +35,7 @@ __shared void *memcpy(void *dest, const void *src, size_t n)
#endif /* __HAVE_ASM_MEMCPY */ #endif /* __HAVE_ASM_MEMCPY */
#ifndef __HAVE_ASM_MEMSET #ifndef __HAVE_ASM_MEMSET
__shared void *memset(void *ptr, int c, size_t n) void *memset(void *ptr, int c, size_t n)
{ {
char *tmp = (char *)ptr; char *tmp = (char *)ptr;
@ -47,7 +47,7 @@ __shared void *memset(void *ptr, int c, size_t n)
#endif /* __HAVE_ASM_MEMSET */ #endif /* __HAVE_ASM_MEMSET */
#ifndef __HAVE_ASM_MEMMOVE #ifndef __HAVE_ASM_MEMMOVE
__shared void *memmove(void *dest, const void *src, size_t n) void *memmove(void *dest, const void *src, size_t n)
{ {
char *tmp = (char *)dest; char *tmp = (char *)dest;
const char *s = (const char *)src; const char *s = (const char *)src;
@ -70,7 +70,7 @@ __shared void *memmove(void *dest, const void *src, size_t n)
#endif /* __HAVE_ASM_MEMMOVE */ #endif /* __HAVE_ASM_MEMMOVE */
#ifndef __HAVE_ASM_STRCMP #ifndef __HAVE_ASM_STRCMP
__shared int strcmp(const char *s1, const char *s2) int strcmp(const char *s1, const char *s2)
{ {
while (*s1++ == *s2++) { while (*s1++ == *s2++) {
if (*s1 == '\0' || *s2 == '\0') if (*s1 == '\0' || *s2 == '\0')
@ -82,7 +82,7 @@ __shared int strcmp(const char *s1, const char *s2)
#endif /* __HAVE_ASM_STRCMP */ #endif /* __HAVE_ASM_STRCMP */
#ifndef __HAVE_ASM_STRCPY #ifndef __HAVE_ASM_STRCPY
__shared char *strcpy(char *dest, const char *src) char *strcpy(char *dest, const char *src)
{ {
char *tmp = dest; char *tmp = dest;
@ -94,7 +94,7 @@ __shared char *strcpy(char *dest, const char *src)
#endif /* __HAVE_ASM_STRCPY */ #endif /* __HAVE_ASM_STRCPY */
#ifndef __HAVE_ASM_STRNCPY #ifndef __HAVE_ASM_STRNCPY
__shared char *strncpy(char *dest, const char *src, size_t n) char *strncpy(char *dest, const char *src, size_t n)
{ {
char *tmp = dest; char *tmp = dest;
@ -108,7 +108,7 @@ __shared char *strncpy(char *dest, const char *src, size_t n)
#endif /* __HAVE_ASM_STRNCPY */ #endif /* __HAVE_ASM_STRNCPY */
#ifndef __HAVE_ASM_STRLEN #ifndef __HAVE_ASM_STRLEN
__shared size_t strlen(const char *s) size_t strlen(const char *s)
{ {
const char *tmp = s; const char *tmp = s;

View file

@ -1,19 +1,16 @@
/* SPDX-License-Identifier: GPL-3.0-or-later */ /* SPDX-License-Identifier: GPL-3.0-or-later */
/* See the end of this file for copyright, license, and warranty information. */ /* See the end of this file for copyright, license, and warranty information. */
#include <stdarg.h>
#include <ardix/syscall.h> #include <ardix/syscall.h>
#include <toolchain.h>
#include <unistd.h> #include <unistd.h>
__shared ssize_t read(int fildes, void *buf, size_t nbyte) ssize_t read(int fildes, void *buf, size_t nbyte)
{ {
return syscall(SYSCALL_READ, (sysarg_t)fildes, (sysarg_t)buf, (sysarg_t)nbyte); return syscall(SYSCALL_READ, (sysarg_t)fildes, (sysarg_t)buf, (sysarg_t)nbyte);
} }
__shared ssize_t write(int fildes, const void *buf, size_t nbyte) ssize_t write(int fildes, const void *buf, size_t nbyte)
{ {
return syscall(SYSCALL_WRITE, (sysarg_t)fildes, (sysarg_t)buf, (sysarg_t)nbyte); return syscall(SYSCALL_WRITE, (sysarg_t)fildes, (sysarg_t)buf, (sysarg_t)nbyte);
} }