[libc] Add implementation of errno and define the other macros of errno.h.
[lldb.git] / libc / config / linux / api.td
1 include "config/public_api.td"
2
3 include "spec/linux.td"
4 include "spec/posix.td"
5 include "spec/stdc.td"
6
7 def FloatT : TypeDecl<"float_t"> {
8   let Decl = [{
9     #if __FLT_EVAL_METHOD__ == 1
10       typedef float float_t
11     #elif __FLT_EVAL_METHOD__ == 2
12       ...
13     #else
14       ...
15     #endif
16   }]; // This is only an example and not exactly how it will appear
17 }
18
19 def SizeT : TypeDecl<"size_t"> {
20   let Decl = [{
21     #define __need_size_t
22     #include <stddef.h>
23   }];
24 }
25
26 def NullMacro : MacroDef<"NULL"> {
27   let Defn = [{
28     #define __need_NULL
29     #include <stddef.h>
30   }];
31 }
32
33 def ErrnoMacro : MacroDef<"errno"> {
34   let Defn = [{
35     int *__errno_location();
36     #define errno (*__errno_location())
37   }];
38 }
39
40 def MathAPI : PublicAPI<"math.h"> {
41   let Functions = [
42    "acos",
43    "acosl",
44   ];
45
46   let TypeDeclarations = [
47     FloatT,
48   ];
49 }
50
51 def StringAPI : PublicAPI<"string.h"> {
52   let Functions = [
53     "memcpy",
54     "memmove",
55     "memcmp",
56     "memchr",
57     "memset",
58     "strcpy",
59     "strncpy",
60     "strcat",
61     "strncat",
62     "strcmp",
63     "strcoll",
64     "strncmp",
65     "strxfrm",
66     "strchr",
67     "strcspn",
68     "strpbrk",
69     "strrchr",
70     "strspn",
71     "strstr",
72     "strtok",
73     "strerror",
74     "strlen",
75   ];
76
77   let TypeDeclarations = [
78     SizeT,
79   ];
80
81   let Macros = [
82     NullMacro,
83   ];
84 }
85
86 def StdIOAPI : PublicAPI<"stdio.h"> {
87   let TypeDeclarations = [
88     SizeT,
89   ];
90
91   let Functions = [
92     "snprintf",
93   ];
94 }
95
96 def ErrnoAPI : PublicAPI<"errno.h"> {
97   let Macros = [
98     ErrnoMacro,
99     // We largely depend on linux/errno.h to give us the
100     // various error macro definitions. However, some libc
101     // implementations have chosen to provide definitions
102     // for some of the error macros to account for the ones
103     // missing in linux/errno.h. There is no harm in doing
104     // the same here if we define the macros only when they
105     // are not already defined.
106     MacroDefineIfNot<"ENOTSUP", "EOPNOTSUPP">,
107     MacroDefineIfNot<"ECANCELED", "125">,
108     MacroDefineIfNot<"EOWNERDEAD", "130">,
109     MacroDefineIfNot<"ENOTRECOVERABLE", "131">,
110     MacroDefineIfNot<"ERFKILL", "132">,
111     MacroDefineIfNot<"EHWPOISON", "133">,
112   ];
113 }