include "config/public_api.td" include "spec/linux.td" include "spec/posix.td" include "spec/stdc.td" def SizeT : TypeDecl<"size_t"> { let Decl = [{ #define __need_size_t #include }]; } def OffT : TypeDecl<"off_t"> { let Decl = [{ #define __need_off_t #include <__posix-types.h> }]; } def NullMacro : MacroDef<"NULL"> { let Defn = [{ #define __need_NULL #include }]; } def ErrnoMacro : MacroDef<"errno"> { let Defn = [{ int *__errno_location(); #define errno (*__errno_location()) }]; } def MathAPI : PublicAPI<"math.h"> { let Functions = [ "acos", "acosl", ]; } def StringAPI : PublicAPI<"string.h"> { let Functions = [ "memcpy", "memmove", "memcmp", "memchr", "memset", "strcpy", "strncpy", "strcat", "strncat", "strcmp", "strcoll", "strncmp", "strxfrm", "strchr", "strcspn", "strpbrk", "strrchr", "strspn", "strstr", "strtok", "strerror", "strlen", ]; let TypeDeclarations = [ SizeT, ]; let Macros = [ NullMacro, ]; } def StdIOAPI : PublicAPI<"stdio.h"> { let TypeDeclarations = [ SizeT, ]; let Functions = [ "snprintf", ]; } def ErrnoAPI : PublicAPI<"errno.h"> { let Macros = [ ErrnoMacro, // We largely depend on linux/errno.h to give us the // various error macro definitions. However, some libc // implementations have chosen to provide definitions // for some of the error macros to account for the ones // missing in linux/errno.h. There is no harm in doing // the same here if we define the macros only when they // are not already defined. MacroDefineIfNot<"ENOTSUP", "EOPNOTSUPP">, MacroDefineIfNot<"ECANCELED", "125">, MacroDefineIfNot<"EOWNERDEAD", "130">, MacroDefineIfNot<"ENOTRECOVERABLE", "131">, MacroDefineIfNot<"ERFKILL", "132">, MacroDefineIfNot<"EHWPOISON", "133">, ]; } def SysMManAPI : PublicAPI<"sys/mman.h"> { let Macros = [ SimpleMacroDef<"PROT_NONE", "0">, SimpleMacroDef<"PROT_READ", "1">, SimpleMacroDef<"PROT_WRITE", "2">, SimpleMacroDef<"PROT_EXEC", "4">, SimpleMacroDef<"MAP_FIXED", "1">, SimpleMacroDef<"MAP_PRIVATE", "2">, SimpleMacroDef<"MAP_SHARED", "4">, SimpleMacroDef<"MAP_FAILED", "((void*)-1)">, // TODO: The value of 0x20 is good for x86_64, but has to be extended // in some manner to accommodate other machine architectures. SimpleMacroDef<"MAP_ANONYMOUS", "0x20"> // TODO: Add other MAP_* macros used by Linux. ]; let TypeDeclarations = [ SizeT, OffT, ]; let Functions = [ "mmap", "munmap", ]; }