1# See ltrace.conf(5) for description of syntax of this file.
2
3# XXX ltrace misses long double and long long support
4typedef ldouble = double;
5typedef llong = long;
6typedef ullong = ulong;
7
8void __libc_start_main(hide(void*), hide(int), array(string, arg2));
9
10# arpa/inet.h
11typedef in_addr = struct(hex(uint));
12int inet_aton(string, +in_addr*);
13hex(uint) inet_addr(string);
14hex(uint) inet_network(string);
15string inet_ntoa(in_addr);
16in_addr inet_makeaddr(hex(int), hex(int));
17hex(uint) inet_lnaof(in_addr);
18hex(uint) inet_netof(in_addr);
19
20# bfd.h
21void bfd_init();
22int bfd_set_default_target(string);
23addr bfd_scan_vma(string, addr, int);
24addr bfd_openr(string,string);
25int bfd_check_format(addr,int);
26
27# ctype.h
28char tolower(char);
29char toupper(char);
30addr __ctype_b_loc();
31addr __ctype_tolower_loc();
32addr __ctype_toupper_loc();
33ulong __ctype_get_mb_cur_max();
34
35# curses.h
36int waddch(addr, char);
37int mvprintw(int, int, format);
38int wmove(addr, int, int);
39int waddnstr(addr, string, int);
40string tgoto(string, int, int);
41
42# dirent.h
43
44# We can't portably rely on DIR internals at all.  Ideally this would
45# be implemented in a per-OS config file, but even on Linux, we don't
46# know whether there's a lock in the structure or not.  Luckily the
47# one interesting datum, file descriptor, we can access reliably.
48# Having the structure half-defined like this is potentially
49# problematic as structure size influences parameter passing.  But
50# POSIX always uses pointer to the structure, so it's fine.
51
52typedef DIR = struct(int);
53typedef FILE = addr;
54
55# XXX We can't represent the following portably without having either
56# uulong, or directly uint64_t.'
57
58typedef ino_t = ulong;
59typedef ino_t64 = ulong;
60typedef off_t = ulong;
61typedef off_t64 = ulong;
62
63typedef dirent = struct(ino_t, hide(off_t), hide(ushort), hide(char), string(array(char, zero(256))));
64typedef dirent64 = struct(ino_t64, hide(off_t64), hide(ushort), hide(char), string(array(char, zero(256))));
65
66dirent *readdir(DIR *);
67dirent64 *readdir64(DIR *);
68int closedir(DIR *);
69DIR *opendir(string);
70DIR *fdopendir(int);
71int dirfd(DIR *);
72void rewinddir(DIR *);
73long telldir(DIR *);
74void seekdir(DIR *, long);
75
76# dlfcn.h
77addr  dlopen(string, int);
78string dlerror();
79addr  dlsym(addr, string);
80int dlclose(addr);
81
82# errno.h
83addr __errno_location();
84
85# fcntl.h
86int open(string,int,octal);		; WARNING: 3rd argument may not be there
87int open64(string,int,octal);		; WARNING: 3rd argument may not be there
88
89# fnmatch.h
90int fnmatch(string, string, int);
91
92# getopt.h
93int getopt_long(int,addr,string,addr,int*);
94int getopt_long_only(int,addr,string,addr,addr);
95
96# grp.h
97void endgrent();
98addr getgrnam(string);
99void setgrent();
100addr getgrent();
101
102# libintl.h
103string __dcgettext(string,string,int);
104string bindtextdomain(string, string);
105string textdomain(string);
106
107# libio.h
108char _IO_getc(file);
109int _IO_putc(char,file);
110
111# locale.h
112string setlocale(enum(LC_CTYPE=0, LC_NUMERIC=1, LC_TIME=2, LC_COLLATE=3, LC_MONETARY=4, LC_MESSAGES=5, LC_ALL=6, LC_PAPER=7, LC_NAME=8, LC_ADDRESS=9, LC_TELEPHONE=10, LC_MEASUREMENT=11, LC_IDENTIFICATION=12), string);
113
114# mcheck.h
115void mtrace();
116void muntrace();
117
118# mqueue.h
119int mq_open(string, int, octal, addr);  ; WARNING: 3rd and 4th arguments may not be there
120int mq_close(int);
121int mq_unlink(string);
122int mq_getattr(int, addr);
123int mq_setattr(int, addr, addr);
124int mq_notify(int, addr);
125int mq_send(int, string3, ulong, uint);
126int mq_timedsend(int, string3, ulong, uint, addr);
127long mq_receive(int, +string0, ulong, addr);
128long mq_timedreceive(int, +string0, ulong, addr, addr);
129
130# netdb.h
131void endhostent();
132void endnetent();
133void endnetgrent();
134void endprotoent();
135void endservent();
136void freeaddrinfo(addr);
137string gai_strerror(int);
138int getaddrinfo(string, string, addr, addr);
139addr gethostbyaddr(string, uint, int);
140addr gethostbyname(string);
141addr gethostent();
142int getnameinfo(addr, uint, string, uint, string, uint, uint);
143addr getnetbyaddr(uint, int);
144addr getnetbyname(string);
145addr getnetent();
146int getnetgrent(addr, addr, addr);
147addr getprotobyname(string);
148addr getprotobynumber(int);
149addr getprotoent();
150addr getservbyname(string, string);
151addr getservbyport(int, string);
152addr getservent();
153void herror(string);
154string hstrerror(int);
155int rcmd(addr, ushort, string, string, string, addr);
156int rcmd_af(addr, ushort, string, string, string, addr, int);
157int rexec(addr, int, string, string, string, addr);
158int rexec_af(addr, int, string, string, string, addr, int);
159int rresvport (addr);
160int rresvport_af (addr, int);
161int ruserok(string, int, string, string);
162int ruserok_af(string, int, string, string, int);
163void sethostent(int);
164void setnetent(int);
165int setnetgrent(string);
166void setprotoent(int);
167void setservent(int);
168
169# netinet/in.h
170uint ntohs(uint);
171
172# pcap.h
173string pcap_lookupdev(addr);
174addr pcap_open_live(string, int, int, int, addr);
175int pcap_snapshot(addr);
176int pcap_lookupnet(string, addr, addr, addr);
177int pcap_compile(addr, addr, string, int, addr);
178
179# pwd.h
180string getpass(string);
181void endpwent();
182addr getpwnam(string);
183void setpwent();
184
185# readline/readline.h
186string readline(string);
187
188# signal.h
189typedef signum = enum(SIGHUP=1, SIGINT=2, SIGQUIT=3, SIGILL=4, SIGTRAP=5, SIGABRT=6, SIGBUS=7, SIGFPE=8, SIGKILL=9, SIGUSR1=10, SIGSEGV=11, SIGUSR2=12, SIGPIPE=13, SIGALRM=14, SIGTERM=15, SIGSTKFLT=16, SIGCHLD=17, SIGCONT=18, SIGSTOP=19, SIGTSTP=20, SIGTTIN=21, SIGTTOU=22, SIGURG=23, SIGXCPU=24, SIGXFSZ=25, SIGVTALRM=26, SIGPROF=27, SIGWINCH=28, SIGIO=29, SIGPWR=30, SIGSYS=31, SIGRTMIN_0=32, SIGRTMIN_1=33, SIGRTMIN_2=34, SIGRTMIN_3=35, SIGRTMIN_4=36, SIGRTMIN_5=37, SIGRTMIN_6=38, SIGRTMIN_7=39, SIGRTMIN_8=40, SIGRTMIN_9=41, SIGRTMIN_10=42, SIGRTMIN_11=43, SIGRTMIN_12=44, SIGRTMIN_13=45, SIGRTMIN_14=46, SIGRTMIN_15=47, SIGRTMIN_16=48, SIGRTMIN_17=49, SIGRTMIN_18=50, SIGRTMIN_19=51, SIGRTMIN_20=52, SIGRTMIN_21=53, SIGRTMIN_22=54, SIGRTMIN_23=55, SIGRTMIN_24=56, SIGRTMIN_25=57, SIGRTMIN_26=58, SIGRTMIN_27=59, SIGRTMIN_28=60, SIGRTMIN_29=61, SIGRTMIN_30=62, SIGRTMIN_31=63);
190typedef sigset_t = bitvec(ulong);
191# elm3 should be flags
192typedef sigaction = struct(addr, sigset_t, hex(int), addr);
193int kill(int, signum);
194int sigemptyset(+sigset_t*);
195int sigaddset(+sigset_t*, signum);
196int sigdelset(+sigset_t*, signum);
197int sigfillset(+sigset_t*);
198int sigismember(sigset_t*, signum);
199addr signal(signum,addr);
200int sigaction(signum, sigaction*, +sigaction*);
201int sigprocmask(enum(SIG_BLOCK=1, SIG_UNBLOCK=2, SIG_SETMASK=3), sigset_t*, +sigset_t*);
202int sigpending(+sigset_t*);
203int sigsuspend(sigset_t*);
204int sigisemptyset(sigset_t*);
205int sigorset(+sigset_t*, sigset_t*, sigset_t*);
206int sigandset(+sigset_t*, sigset_t*, sigset_t*);
207
208# stdio.h
209int fclose(file);
210int feof(file);
211int ferror(file);
212int fflush(file);
213char fgetc(file);
214addr fgets(+string, int, file);
215int fileno(file);
216file fopen(string,string);
217file fopen64(string,string);
218file fdopen(int, string);
219int fprintf(file,format);
220int fputc(char,file);
221int fputs(string,file);
222ulong fread(addr,ulong,ulong,file);
223ulong fread_unlocked(addr,ulong,ulong,file);
224ulong fwrite(string,ulong,ulong,file);
225ulong fwrite_unlocked(string,ulong,ulong,file);
226int pclose(addr);
227void perror(string);
228addr popen(string, string);
229int printf(format);
230int puts(string);
231int remove(string);
232int snprintf(+string2,ulong,format);
233int sprintf(+string,format);
234string tempnam(string,string);
235int vfprintf(file,string,addr);
236int vsnprintf(+string2,ulong,string,addr);
237int setvbuf(file,addr,int,ulong);
238void setbuf(file,addr);
239void setbuffer(file,addr,ulong);
240void setlinebuf(file);
241int rename(string,string);
242
243# xlocale.h
244typedef locale_t = void*;
245locale_t newlocale(hex(int), string, locale_t);
246
247# stdlib.h
248long __strtol_internal(string, +string*, int);
249ulong __strtoul_internal(string, +string*, int);
250
251double strtod(string, +string*);
252float strtof(string, +string*);
253ldouble strtold(string, +string*);
254
255double strtod_l(string, +string*, locale_t);
256float strtof_l(string, +string*, locale_t);
257ldouble strtold_l(string, +string*, locale_t);
258
259int atexit(addr);
260addr bsearch(string, addr, ulong, ulong, addr);
261addr calloc(ulong, ulong);
262void exit(int);
263void free(addr);
264string getenv(string);
265int putenv(string);
266int setenv(string,string,int);
267void unsetenv(string);
268addr malloc(ulong);
269void qsort(addr,ulong,ulong,addr);
270addr realloc(addr,ulong);
271int system(string);
272
273int rand();
274int rand_r(uint*);
275void srand(uint);
276long random();
277void srandom(uint);
278void* initstate(uint, void*, ulong);
279void* setstate(void*);
280int random_r(void*, +int*);
281int srandom_r(uint, void*);
282int initstate_r(uint, void*, ulong, void*);
283int setstate_r(void*, void*);
284double drand48();
285double erand48(+array(ushort,3)*);
286long lrand48();
287long nrand48(+array(ushort,3)*);
288long mrand48();
289long jrand48(+array(ushort,3)*);
290void srand48(long);
291array(ushort,3)* seed48(array(ushort,3)*);
292void lcong48(array(ushort,7)*);
293
294# string.h
295void bcopy(addr,addr,ulong);
296void bzero(addr,ulong);
297string basename(string);
298string index(string,char);
299addr memchr(string,char,ulong);
300addr memcpy(addr,string(array(char, arg3)*),ulong);
301addr memmove(addr,string(array(char, arg3)*),ulong);
302addr memset(addr,char,long);
303string rindex(string,char);
304addr stpcpy(addr,string);
305int strcasecmp(string, string);
306string strcat(string, string);
307string strchr(string,char);
308int strcoll(string,string);
309ulong strlen(string);
310int strcmp(string,string);
311addr strcpy(addr,string);
312addr strdup(string);
313string strerror(int);
314int strncmp(string,string,ulong);
315addr strncpy(addr,string3,ulong);
316string strrchr(string,char);
317string strsep(addr,string);
318ulong strspn(string,string);
319ulong strcspn(string,string);
320string strstr(string,string);
321string strtok(string, string);
322
323# sys/ioctl.h
324int ioctl(int, int, addr);
325
326# sys/socket.h
327int socket(int,int,int);
328
329# sys/stat.h
330int __fxstat(int,int,addr);
331int __xstat(int,string,addr);
332int __lxstat(int,string,addr);
333int __fxstat64(int,int,addr);
334int __xstat64(int,string,addr);
335int __lxstat64(int,string,addr);
336int chmod(string,octal);
337int fchmod(int,octal);
338int mkfifo(string,octal);
339octal umask(octal);
340
341# sys/utsname.h
342int uname(addr);
343
344# sys/vfs.h
345int statfs(string,addr);
346
347# syslog.h
348void closelog();
349void openlog(string,int,int);
350void syslog(int,format);
351
352# term.h
353int tputs(string, int, addr);
354
355# termios.h
356int tcgetattr(int,addr);
357int tcsetattr(int,int,addr);
358
359# time.h
360string ctime(addr);
361int gettimeofday(addr, addr);
362addr gmtime(addr);
363addr localtime(addr);
364ulong strftime(+string2,ulong,string,addr);
365long time(addr);
366# XXX in fact (time_t, long), which may be (llong, long) on 32-bit
367# arches.  We don't have llong as of this writing.
368typedef timespec = struct(long, long);
369int nanosleep(timespec*, timespec*);
370
371# unistd.h
372void _exit(int);
373int access(string, int);
374uint alarm(uint);
375int chdir(string);
376int chown(string,int,int);
377int close(int);
378string crypt(string,string);
379int dup2(int,int);
380int execlp(string,string,addr,addr,addr);
381int execv(string,addr);
382int fchdir(int);
383int fork();
384int ftruncate(int,ulong);
385string2 getcwd(addr,ulong);
386int getdomainname(+string2,ulong);
387int geteuid();
388int getegid();
389int getgid();
390int gethostname(+string2,ulong);
391string getlogin();
392int getopt(int,addr,string);
393int getpid();
394int getppid();
395int getuid();
396int getpgrp();
397int setpgrp();
398int getpgid(int);
399int isatty(int);
400int link(string,string);
401int mkdir(string,octal);
402long read(int, +string[retval], ulong);
403int rmdir(string);
404int seteuid(uint);
405int setgid(int);
406int sethostname(+string2,ulong);
407int setpgid(int,int);
408int setreuid(uint, uint);
409int setuid(int);
410uint sleep(uint);
411int symlink(string,string);
412int sync();
413int truncate(string,ulong);
414string ttyname(int);
415int unlink(string);
416void usleep(uint);
417long write(int, string3, ulong);
418addr sbrk(long);
419int getpagesize();
420long lseek(int,long,int);
421int pipe(addr);
422
423# utmp.h
424void endutent();
425addr getutent();
426void setutent();
427
428# wchar.h
429typedef wchar_t = string(uint);
430typedef wint_t = string(int);
431typedef wstring_t = string(array(uint, zero)*);
432typedef wstring2_t = string(array(uint, zero(arg2))*);
433typedef wstring3_t = string(array(uint, zero(arg3))*);
434
435int fwide(FILE*, int);
436wint_t btowc(int);
437
438wint_t getwc(FILE *);
439wint_t getwchar();
440wint_t fgetwc(FILE*);
441wstring_t fgetws(+wstring2_t, int, FILE*);
442wint_t ungetwc(wint_t, FILE*);
443
444wint_t fputwc(wchar_t, FILE*);
445int fputws(wstring_t, FILE*);
446wint_t putwc(wchar_t, FILE*);
447wint_t putwchar(wchar_t);
448
449int wprintf(format(wstring_t));
450int fwprintf(FILE*, format(wstring_t));
451int swprintf(+wstring2_t, ulong, format(wstring_t));
452int vfwprintf(FILE*, wstring_t, addr);
453int vwprintf(wstring_t, addr);
454int vswprintf(+wstring2_t, ulong, wstring_t, addr);
455
456; int wscanf(const wchar_t *restrict, ...);
457; int fwscanf(FILE *restrict, const wchar_t *restrict, ...);
458; int swscanf(const wchar_t *restrict, const wchar_t *restrict, ...);
459; int vfwscanf(FILE *restrict, const wchar_t *restrict, va_list);
460; int vswscanf(const wchar_t *restrict, const wchar_t *restrict, va_list);
461; int vwscanf(const wchar_t *restrict, va_list);
462
463int iswalnum(wint_t);
464int iswalpha(wint_t);
465int iswcntrl(wint_t);
466int iswdigit(wint_t);
467int iswgraph(wint_t);
468int iswlower(wint_t);
469int iswprint(wint_t);
470int iswpunct(wint_t);
471int iswspace(wint_t);
472int iswupper(wint_t);
473int iswxdigit(wint_t);
474uint wctype(string);
475int iswctype(wint_t, uint);
476
477ulong mbrlen(string, ulong, addr);
478ulong mbrtowc(+wchar_t*, string[arg3], ulong, addr);
479ulong mbsrtowcs(+wstring3_t, string*, ulong, addr);
480ulong wctomb(+string0, wchar_t);
481ulong wcrtomb(+string0, wchar_t, addr);
482ulong wcsrtombs(+string3, wstring_t*, ulong, addr);
483int mbsinit(addr);
484
485wint_t towlower(wint_t);
486wint_t towupper(wint_t);
487
488wstring_t wcscat(wstring_t, wstring_t);
489wstring_t wcsncat(wstring3_t, wstring_t, ulong);
490wstring_t wcschr(wstring_t, wchar_t);
491wstring_t wcsrchr(wstring_t, wchar_t);
492int wcscmp(wstring_t, wstring_t);
493int wcsncmp(wstring3_t, wstring3_t, ulong);
494int wcscoll(wstring_t, wstring_t);
495addr wcscpy(addr, wstring_t);
496addr wcsncpy(addr, wstring_t, ulong);
497ulong wcslen(wstring_t);
498
499wstring_t wcsstr(wstring_t, wstring_t);
500wstring_t wcswcs(wstring_t, wstring_t);
501
502ulong wcscspn(wstring_t, wstring_t);
503ulong wcsspn(wstring_t, wstring_t);
504wstring_t wcspbrk(wstring_t, wstring_t);
505wstring_t wcstok(wstring_t, wstring_t, +wstring_t*);
506
507ulong wcsftime(+wstring2_t, ulong, wstring_t, addr);
508
509double wcstod(wstring_t, +wstring_t*);
510float wcstof(wstring_t, +wstring_t*);
511ldouble wcstold(wstring_t, +wstring_t*);
512long wcstol(wstring_t, +wstring_t*, int);
513llong wcstoll(wstring_t, +wstring_t*, int);
514ulong wcstoul(wstring_t, +wstring_t*, int);
515ullong wcstoull(wstring_t, +wstring_t*, int);
516
517int wcwidth(wchar_t);
518int wcswidth(wstring2_t, ulong);
519
520wstring_t wmemchr(wstring3_t, wchar_t, ulong);
521int wmemcmp(wstring3_t, wstring3_t, ulong);
522int wctob(wint_t);
523wstring3_t wmemcpy(addr, wstring3_t, ulong);
524wstring3_t wmemmove(addr, wstring3_t, ulong);
525wstring3_t wmemset(addr, wchar_t, ulong);
526
527# sys/wait.h
528int wait(addr);
529int waitpid(int,addr,int);
530
531# other symbols not included above
532long a64l(string);
533string l64a(long);
534void abort();
535int abs(int);
536long labs(long);
537
538typedef mntent = struct(string, string, string, string, int, int);
539int addmntent(file, mntent*);
540int endmntent(file);
541int __endmntent(file);
542file setmntent(string,string);
543file __setmntent(string,string);
544mntent *getmntent(addr);
545mntent *getmntent_r(file, +mntent*, string, int);
546mntent *__getmntent_r(file, +mntent*, string, int);
547string hasmntopt(mntent*, string);
548