673521f4eff92513fc6bf8e1262e3be65ea077a9
[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 SizeT : TypeDecl<"size_t"> {
8   let Decl = [{
9     #define __need_size_t
10     #include <stddef.h>
11   }];
12 }
13
14 def OffT : TypeDecl<"off_t"> {
15   let Decl = [{
16     #define __need_off_t
17     #include <__posix-types.h>
18   }];
19 }
20
21 def NullMacro : MacroDef<"NULL"> {
22   let Defn = [{
23     #define __need_NULL
24     #include <stddef.h>
25   }];
26 }
27
28 def ErrnoMacro : MacroDef<"errno"> {
29   let Defn = [{
30     #ifdef __cplusplus
31     extern "C"
32     #endif
33     int *__errno_location();
34     #define errno (*__errno_location())
35   }];
36 }
37
38 def MathAPI : PublicAPI<"math.h"> {
39   let Functions = [
40    "acos",
41    "acosl",
42   ];
43 }
44
45 def StringAPI : PublicAPI<"string.h"> {
46   let Functions = [
47     "memcpy",
48     "memmove",
49     "memcmp",
50     "memchr",
51     "memset",
52     "strcpy",
53     "strncpy",
54     "strcat",
55     "strncat",
56     "strcmp",
57     "strcoll",
58     "strncmp",
59     "strxfrm",
60     "strchr",
61     "strcspn",
62     "strpbrk",
63     "strrchr",
64     "strspn",
65     "strstr",
66     "strtok",
67     "strerror",
68     "strlen",
69   ];
70
71   let TypeDeclarations = [
72     SizeT,
73   ];
74
75   let Macros = [
76     NullMacro,
77   ];
78 }
79
80 def StdIOAPI : PublicAPI<"stdio.h"> {
81   let TypeDeclarations = [
82     SizeT,
83   ];
84
85   let Functions = [
86     "snprintf",
87   ];
88 }
89
90 def StdlibAPI : PublicAPI<"stdlib.h"> {
91   let Functions = [
92     "_Exit",
93     "abort",
94   ];
95 }
96
97 def ErrnoAPI : PublicAPI<"errno.h"> {
98   let Macros = [
99     ErrnoMacro,
100     // We largely depend on linux/errno.h to give us the
101     // various error macro definitions. However, some libc
102     // implementations have chosen to provide definitions
103     // for some of the error macros to account for the ones
104     // missing in linux/errno.h. There is no harm in doing
105     // the same here if we define the macros only when they
106     // are not already defined.
107     MacroDefineIfNot<"ENOTSUP", "EOPNOTSUPP">,
108     MacroDefineIfNot<"ECANCELED", "125">,
109     MacroDefineIfNot<"EOWNERDEAD", "130">,
110     MacroDefineIfNot<"ENOTRECOVERABLE", "131">,
111     MacroDefineIfNot<"ERFKILL", "132">,
112     MacroDefineIfNot<"EHWPOISON", "133">,
113   ];
114 }
115
116 def SysMManAPI : PublicAPI<"sys/mman.h"> {
117   let Macros = [
118     SimpleMacroDef<"PROT_NONE", "0">,
119     SimpleMacroDef<"PROT_READ", "1">,
120     SimpleMacroDef<"PROT_WRITE", "2">,
121     SimpleMacroDef<"PROT_EXEC", "4">,
122
123     SimpleMacroDef<"MAP_FIXED", "1">,
124     SimpleMacroDef<"MAP_PRIVATE", "2">,
125     SimpleMacroDef<"MAP_SHARED", "4">,
126
127     SimpleMacroDef<"MAP_FAILED", "((void*)-1)">,
128
129     // TODO: The value of 0x20 is good for x86_64, but has to be extended
130     // in some manner to accommodate other machine architectures.
131     SimpleMacroDef<"MAP_ANONYMOUS", "0x20">
132
133     // TODO: Add other MAP_* macros used by Linux.
134   ];
135
136   let TypeDeclarations = [
137     SizeT,
138     OffT,
139   ];
140
141   let Functions = [
142     "mmap",
143     "munmap",
144   ];
145 }
146
147 def SignalAPI : PublicAPI<"signal.h"> {
148   let Functions = [
149     "raise",
150     "sigprocmask",
151     "sigemptyset",
152     "sigaddset",
153   ];
154 }
155
156 def ThreadsAPI : PublicAPI<"threads.h"> {
157   let Enumerations = [
158     "mtx_plain",
159     "mtx_recursive",
160     "mtx_timed",
161     "thrd_timedout",
162     "thrd_success",
163     "thrd_busy",
164     "thrd_error",
165     "thrd_nomem",
166   ];
167 }