Libc.txt.templ 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. MODULE LinLibc ["libc.so%%libver%%"];
  2. (*
  3. %%osname%%
  4. %%machine%%
  5. *)
  6. CONST
  7. NULL* = 0H;
  8. FALSE* = 0;
  9. TRUE* = 1;
  10. CLOCKS_PER_SEC* = %%clockspersec%%;
  11. MAP_FAILED* = -1;
  12. (* MAP_PRIVATE, MAP_ANON (intFlags) *)
  13. %%defs-map%%
  14. (* PROT_READ, PROT_WRITE, PROT_EXEC (intFlags) *)
  15. %%defs-prot%%
  16. (* SIG_UNBLOCK, SIG_SETMASK (int) *)
  17. %%defs-sigmask%%
  18. (* FPE_INTDIV, FPE_INTOVF, FPE_FLTDIV, FPE_FLTOVF, FPE_FLTUND, FPE_FLTRES, FPE_FLTINV, FPE_FLTSUB (int) *)
  19. %%defs-fpe%%
  20. (* SA_SIGINFO (intFlags) *)
  21. %%defs-sa%%
  22. (* SIGINT, SIGILL, SIGFPE, SIGSEGV, SIGKILL, SIGSTOP, SIGWINCH, SIGTHR (int) *)
  23. %%defs-signo%%
  24. _NSIG* = %%nsig%%;
  25. (* SIG_DFL, SIG_IGN, SIG_ERR *)
  26. %%defs-sig%%
  27. (*
  28. PAGE_SIZE* = 4096;
  29. *)
  30. %%defs-sc%%
  31. SIGSTKSZ* = %%sigstksz%%;
  32. (* ENOENT, EEXIST, EACCES, ENOMEM, EDQUOT, EMFILE, ENOTDIR (int) *)
  33. %%defs-errno%%
  34. %%defs-wait%%
  35. NAME_MAX* = %%namemax%%;
  36. SEEK_SET* = 0;
  37. SEEK_CUR* = 1;
  38. SEEK_END* = 2;
  39. STDIN_FILENO* = 0;
  40. STDOUT_FILENO* = 1;
  41. STDERR_FILENO* = 2;
  42. P_tmpdir* = "/tmp";
  43. (* O_RDWR, O_NONBLOCK (intFlags) *)
  44. %%defs-fcntlo%%
  45. %%defs-clockid%%
  46. %%defs-rlimit%%
  47. %%defs-utime%%
  48. TYPE
  49. StrArray* = POINTER TO ARRAY [untagged] OF PtrSTR;
  50. PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
  51. (* PtrVoid, int, long, size_t, ssize_t, off_t, time_t, clock_t, sigjmp_buf *)
  52. (* mode_t, rlim_t, intFlags, sigset_t (set) *)
  53. %%defs-basictypes%%
  54. tm* = POINTER TO tmDesc;
  55. tmDesc* = RECORD [untagged]
  56. (* NOTE: check record size *)
  57. (* tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday [ , tm_gmtoff ] *)
  58. %%fields-tm%%
  59. END;
  60. Ptrsiginfo_t* = POINTER TO siginfo_t;
  61. siginfo_t = RECORD [untagged]
  62. (* si_code, fault address *)
  63. %%fields-siginfo%%
  64. END;
  65. Ptrucontext_t* = POINTER TO ucontext_t;
  66. ucontext_t = RECORD [untagged]
  67. (* IP, SP, FP *)
  68. %%fields-ucontext%%
  69. END;
  70. sa_sigaction_t* = PROCEDURE [ccall] (sig: int; siginfo: Ptrsiginfo_t; context: Ptrucontext_t);
  71. sigaction_t* = RECORD [untagged]
  72. (*
  73. sa_sigaction*: sa_sigaction_t,
  74. sa_flags*: intFlags, sa_mask*: sigset_t
  75. *)
  76. %%fields-sigaction%%
  77. END;
  78. stack_t* = RECORD [untagged]
  79. (*
  80. ss_sp*: PtrVoid, ss_size*: size_t, ss_flags*: intFlags
  81. *)
  82. %%fields-stack%%
  83. END;
  84. stat_t* = RECORD [untagged]
  85. (*
  86. NOTE: check record size
  87. st_mode*: mode_t, st_size*: off_t, st_mtime*: time_t
  88. *)
  89. %%fields-stat%%
  90. END;
  91. PtrFILE* = PtrVoid;
  92. PtrDIR* = PtrVoid;
  93. PtrDirent* = POINTER TO Dirent;
  94. Dirent = RECORD [untagged]
  95. (*
  96. d_name*: ARRAY [untagged] NAME_MAX + 1 OF SHORTCHAR
  97. *)
  98. %%fields-dirent%%
  99. END;
  100. timespec_t* = RECORD [untagged]
  101. %%fields-timespec%%
  102. END;
  103. rlimit* = RECORD [untagged]
  104. rlim_cur*, rlim_max*: rlim_t
  105. END;
  106. TVP* = RECORD [untagged] access*, modification*: timespec_t END;
  107. (*
  108. VAR
  109. stdin*: INTEGER;
  110. timezone*: INTEGER; (* or tm.tm_gmtoff *)
  111. *)
  112. (*
  113. PROCEDURE [ccall] __errno_location* (): PtrVoid;
  114. *)
  115. (*
  116. (* POSIX.1 *)
  117. PROCEDURE [ccall] stat* (path: PtrSTR; VAR sp: stat_t): int;
  118. *)
  119. %%custom%%
  120. (* ANSI C 89 *)
  121. PROCEDURE [ccall] clock* (): clock_t;
  122. (* POSIX.1 *)
  123. PROCEDURE [ccall] clock_gettime* (clock_id: clockid_t; VAR tp: timespec_t): int;
  124. (* AT&T UNIX *)
  125. PROCEDURE [ccall] time* (VAR [nil] tloc: time_t): time_t;
  126. (* AT&T UNIX *)
  127. PROCEDURE [ccall] gmtime* (VAR [nil] clock: time_t): tm;
  128. PROCEDURE [ccall] localtime* (VAR [nil] clock: time_t): tm;
  129. PROCEDURE [ccall] mktime* (VAR tm: tmDesc): time_t;
  130. PROCEDURE [ccall] mmap* (adr: PtrVoid; len: size_t; prot: intFlags; flags: intFlags; fd: int; offset: off_t): PtrVoid;
  131. (* BSD *)
  132. PROCEDURE [ccall] munmap* (adr: PtrVoid; len: size_t): int;
  133. PROCEDURE [ccall] mprotect* (adr: PtrVoid; len: size_t; prot: intFlags): int;
  134. PROCEDURE [ccall] calloc* (nmemb: size_t; size: size_t): PtrVoid;
  135. (* (* ANSI C 89 *)
  136. PROCEDURE [ccall] malloc* (size: size_t): PtrVoid;
  137. *)
  138. PROCEDURE [ccall] free* (ptr: PtrVoid);
  139. (* POSIX.1 *)
  140. (*
  141. PROCEDURE [ccall] sigsetjmp* (VAR env: sigjmp_buf; savemask: int): int;
  142. *)
  143. PROCEDURE [ccall] siglongjmp* (VAR env: sigjmp_buf; val: int);
  144. (* POSIX.1 *)
  145. PROCEDURE [ccall] sigemptyset* (set: PtrSigset_t): int;
  146. PROCEDURE [ccall] sigfillset* (set: PtrSigset_t): int;
  147. PROCEDURE [ccall] sigaddset* (set: PtrSigset_t; signo: int): int;
  148. PROCEDURE [ccall] sigprocmask* (how: int; set: PtrSigset_t; oset: PtrSigset_t): int;
  149. (* POSIX.1 *)
  150. PROCEDURE [ccall] sigaction* (sig: int; VAR [nil] act: sigaction_t; VAR [nil] oact: sigaction_t): int;
  151. (* BSD *)
  152. PROCEDURE [ccall] sigaltstack* (VAR [nil] ss: stack_t; VAR [nil] oss: stack_t): int;
  153. (* ANSI C 89 *)
  154. PROCEDURE [ccall] getenv* (s: PtrSTR): PtrSTR;
  155. (* ANSI C 89 *)
  156. PROCEDURE [ccall] fopen* (path, mode: PtrSTR): PtrFILE;
  157. PROCEDURE [ccall] fdopen* (fildes: int; mode: PtrSTR): PtrFILE;
  158. PROCEDURE [ccall] fclose* (stream: PtrFILE): int;
  159. PROCEDURE [ccall] fread* (ptr: PtrVoid; size: size_t; nmemb: size_t; stream: PtrFILE): size_t;
  160. PROCEDURE [ccall] fwrite* (ptr: PtrVoid; size: size_t; nmemb: size_t; stream: PtrFILE): size_t;
  161. PROCEDURE [ccall] fflush* (s: PtrFILE): int;
  162. PROCEDURE [ccall] printf* (s: PtrSTR): int;
  163. (* ANSI C 89, XPG4 *)
  164. PROCEDURE [ccall] fseek* (stream: PtrFILE; offset: long; whence: int): int;
  165. (* POSIX.1 *)
  166. PROCEDURE [ccall] fileno* (stream: PtrFILE): int;
  167. (* POSIX.1 *)
  168. PROCEDURE [ccall] rename* (from, to: PtrSTR): int;
  169. PROCEDURE [ccall] mkdir* (path: PtrSTR; mode: mode_t): int;
  170. PROCEDURE [ccall] opendir* (filename: PtrSTR): PtrDIR;
  171. PROCEDURE [ccall] readdir* (dirp: PtrDIR): PtrDirent;
  172. PROCEDURE [ccall] closedir* (dirp: PtrDIR): int;
  173. (* ANSI C 89, XPG4.2 *)
  174. PROCEDURE [ccall] remove* (path: PtrSTR): int;
  175. PROCEDURE [ccall] canonicalize_file_name* (path: PtrSTR): PtrSTR;
  176. (* POSIX.1 *)
  177. PROCEDURE [ccall] getcwd* (buf: PtrSTR; size: size_t): PtrSTR;
  178. (* ANSI C 99 *)
  179. PROCEDURE [ccall] exit* (status: int);
  180. (* ANSI C 89 *)
  181. PROCEDURE [ccall] strftime* (buf: PtrSTR; maxsize: size_t; format: PtrSTR; timeptr: tm): size_t;
  182. (* XXX: use fread instead *)
  183. PROCEDURE [ccall] fgets* (str: PtrSTR; size: int; stream: PtrFILE): PtrSTR;
  184. (* POSIX.1 *)
  185. PROCEDURE [ccall] open* (path: PtrSTR; flags: intFlags; mode: mode_t): int;
  186. PROCEDURE [ccall] write* (d: int; buf: PtrVoid; nbytes: size_t): ssize_t;
  187. PROCEDURE [ccall] read* (d: int; buf: PtrVoid; nbytes: size_t): ssize_t;
  188. PROCEDURE [ccall] close* (d: int): int;
  189. (* POSIX.1 *)
  190. PROCEDURE [ccall] chmod* (path: PtrSTR; mode: mode_t): int;
  191. PROCEDURE [ccall] fchmod* (fd: int; mode: mode_t): int;
  192. (* POSIX.1 *)
  193. PROCEDURE [ccall] fork* (): pid_t;
  194. PROCEDURE [ccall] waitpid* (wpid: pid_t; VAR [nil] status: int; options: intFlags): pid_t;
  195. (* POSIX.1 *)
  196. PROCEDURE [ccall] execv* (path: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
  197. PROCEDURE [ccall] execvp* (file: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
  198. (* POSIX.2 *)
  199. PROCEDURE [ccall] system* (string: PtrSTR): int;
  200. (* POSIX.1 *)
  201. PROCEDURE [ccall] sysconf* (name: int): long;
  202. (* POSIX.1 *)
  203. PROCEDURE [ccall] popen* (command, type: PtrSTR): PtrFILE;
  204. PROCEDURE [ccall] pclose* (stream: PtrFILE): int;
  205. (* POSIX.1 *)
  206. PROCEDURE [ccall] getrlimit* (resource: int; VAR rlim: rlimit): int;
  207. (* POSIX.1 *)
  208. PROCEDURE [ccall] utimensat* (fd: int; path: PtrSTR; VAR times: TVP; flag: intFlags): int;
  209. (* Linux only *)
  210. PROCEDURE [ccall] sendfile* (out_fd: int; in_fd: int; VAR [nil] offset: off_t; count: size_t): ssize_t;
  211. END LinLibc.