/*
* Copyright (c) 2023 Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#pragma once
#include "types.h"
// Kernel ABI constants
#define SYS_EXIT_GROUP 94
#define SYS_MMAP 222
#define SYS_WRITE 64
#define SYS_MPROTECT 226
#define SYS_MUNMAP 215
// Some useful builtins
#define va_start(v,l) __builtin_va_start(v,l)
#define va_end(v) __builtin_va_end(v)
#define va_arg(v,l) __builtin_va_arg(v,l)
#define alloca(n) __builtin_alloca(n)
#define static_assert _Static_assert
#define offsetof(type, member) __builtin_offsetof(type, member)
#define alignof(type) _Alignof(type)
// Syscall wrappers
void exit(int code) __attribute__((noreturn));
ssize_t write(int fd, const void *buf, size_t count);
void *mmap(void *addr, size_t len, int prot, int flags);
int mprotect(void *addr, size_t len, int prot);
int munmap(void *addr, size_t len);
// Formatted output
int printf(const char *fmt, ...);
int sprintf(char *dst, const char *fmt, ...);
// String manipulation
size_t strlen(const char *str);
char *strcpy(char *dst, const char *src);
int strcmp(const char *lhs, const char *rhs);
void *memset(void *dst, int c, size_t len);
void *memcpy(void *dst, const void *src, size_t len);
// Init things
int init(const auxv_t *auxv, bool restricted);
// Auxv access
void *getauxptr(unsigned long id);
unsigned long getauxval(unsigned long id);
const char *getauxname(unsigned long id);
// Misc functions
size_t getpagesize();