Fix lookup of prototypes from non-leader threads
[platform/upstream/ltrace.git] / etc / libc.so.conf
index efa1b95..48b3b01 100644 (file)
@@ -1,5 +1,12 @@
 # See ltrace.conf(5) for description of syntax of this file.
 
+# XXX ltrace misses long double and long long support
+typedef ldouble = double;
+typedef llong = long;
+typedef ullong = ulong;
+
+void __libc_start_main(hide(void*), hide(int), array(string, arg2));
+
 # arpa/inet.h
 typedef in_addr = struct(hex(uint));
 int inet_aton(string, +in_addr*);
@@ -43,6 +50,7 @@ string tgoto(string, int, int);
 # POSIX always uses pointer to the structure, so it's fine.
 
 typedef DIR = struct(int);
+typedef FILE = addr;
 
 # XXX We can't represent the following portably without having either
 # uulong, or directly uint64_t.'
@@ -207,6 +215,7 @@ addr fgets(+string, int, file);
 int fileno(file);
 file fopen(string,string);
 file fopen64(string,string);
+file fdopen(int, string);
 int fprintf(file,format);
 int fputc(char,file);
 int fputs(string,file);
@@ -231,9 +240,22 @@ void setbuffer(file,addr,ulong);
 void setlinebuf(file);
 int rename(string,string);
 
+# xlocale.h
+typedef locale_t = void*;
+locale_t newlocale(hex(int), string, locale_t);
+
 # stdlib.h
-long __strtol_internal(string,addr,int);
-ulong __strtoul_internal(string,addr,int);
+long __strtol_internal(string, +string*, int);
+ulong __strtoul_internal(string, +string*, int);
+
+double strtod(string, +string*);
+float strtof(string, +string*);
+ldouble strtold(string, +string*);
+
+double strtod_l(string, +string*, locale_t);
+float strtof_l(string, +string*, locale_t);
+ldouble strtold_l(string, +string*, locale_t);
+
 int atexit(addr);
 addr bsearch(string, addr, ulong, ulong, addr);
 addr calloc(ulong, ulong);
@@ -341,6 +363,10 @@ addr gmtime(addr);
 addr localtime(addr);
 ulong strftime(+string2,ulong,string,addr);
 long time(addr);
+# XXX in fact (time_t, long), which may be (llong, long) on 32-bit
+# arches.  We don't have llong as of this writing.
+typedef timespec = struct(long, long);
+int nanosleep(timespec*, timespec*);
 
 # unistd.h
 void _exit(int);
@@ -400,7 +426,103 @@ addr getutent();
 void setutent();
 
 # wchar.h
-int fwide(addr, int);
+typedef wchar_t = string(uint);
+typedef wint_t = string(int);
+typedef wstring_t = string(array(uint, zero)*);
+typedef wstring2_t = string(array(uint, zero(arg2))*);
+typedef wstring3_t = string(array(uint, zero(arg3))*);
+
+int fwide(FILE*, int);
+wint_t btowc(int);
+
+wint_t getwc(FILE *);
+wint_t getwchar();
+wint_t fgetwc(FILE*);
+wstring_t fgetws(+wstring2_t, int, FILE*);
+wint_t ungetwc(wint_t, FILE*);
+
+wint_t fputwc(wchar_t, FILE*);
+int fputws(wstring_t, FILE*);
+wint_t putwc(wchar_t, FILE*);
+wint_t putwchar(wchar_t);
+
+int wprintf(format(wstring_t));
+int fwprintf(FILE*, format(wstring_t));
+int swprintf(+wstring2_t, ulong, format(wstring_t));
+int vfwprintf(FILE*, wstring_t, addr);
+int vwprintf(wstring_t, addr);
+int vswprintf(+wstring2_t, ulong, wstring_t, addr);
+
+; int wscanf(const wchar_t *restrict, ...);
+; int fwscanf(FILE *restrict, const wchar_t *restrict, ...);
+; int swscanf(const wchar_t *restrict, const wchar_t *restrict, ...);
+; int vfwscanf(FILE *restrict, const wchar_t *restrict, va_list);
+; int vswscanf(const wchar_t *restrict, const wchar_t *restrict, va_list);
+; int vwscanf(const wchar_t *restrict, va_list);
+
+int iswalnum(wint_t);
+int iswalpha(wint_t);
+int iswcntrl(wint_t);
+int iswdigit(wint_t);
+int iswgraph(wint_t);
+int iswlower(wint_t);
+int iswprint(wint_t);
+int iswpunct(wint_t);
+int iswspace(wint_t);
+int iswupper(wint_t);
+int iswxdigit(wint_t);
+uint wctype(string);
+int iswctype(wint_t, uint);
+
+ulong mbrlen(string, ulong, addr);
+ulong mbrtowc(+wchar_t*, string[arg3], ulong, addr);
+ulong mbsrtowcs(+wstring3_t, string*, ulong, addr);
+ulong wctomb(+string0, wchar_t);
+ulong wcrtomb(+string0, wchar_t, addr);
+ulong wcsrtombs(+string3, wstring_t*, ulong, addr);
+int mbsinit(addr);
+
+wint_t towlower(wint_t);
+wint_t towupper(wint_t);
+
+wstring_t wcscat(wstring_t, wstring_t);
+wstring_t wcsncat(wstring3_t, wstring_t, ulong);
+wstring_t wcschr(wstring_t, wchar_t);
+wstring_t wcsrchr(wstring_t, wchar_t);
+int wcscmp(wstring_t, wstring_t);
+int wcsncmp(wstring3_t, wstring3_t, ulong);
+int wcscoll(wstring_t, wstring_t);
+addr wcscpy(addr, wstring_t);
+addr wcsncpy(addr, wstring_t, ulong);
+ulong wcslen(wstring_t);
+
+wstring_t wcsstr(wstring_t, wstring_t);
+wstring_t wcswcs(wstring_t, wstring_t);
+
+ulong wcscspn(wstring_t, wstring_t);
+ulong wcsspn(wstring_t, wstring_t);
+wstring_t wcspbrk(wstring_t, wstring_t);
+wstring_t wcstok(wstring_t, wstring_t, +wstring_t*);
+
+ulong wcsftime(+wstring2_t, ulong, wstring_t, addr);
+
+double wcstod(wstring_t, +wstring_t*);
+float wcstof(wstring_t, +wstring_t*);
+ldouble wcstold(wstring_t, +wstring_t*);
+long wcstol(wstring_t, +wstring_t*, int);
+llong wcstoll(wstring_t, +wstring_t*, int);
+ulong wcstoul(wstring_t, +wstring_t*, int);
+ullong wcstoull(wstring_t, +wstring_t*, int);
+
+int wcwidth(wchar_t);
+int wcswidth(wstring2_t, ulong);
+
+wstring_t wmemchr(wstring3_t, wchar_t, ulong);
+int wmemcmp(wstring3_t, wstring3_t, ulong);
+int wctob(wint_t);
+wstring3_t wmemcpy(addr, wstring3_t, ulong);
+wstring3_t wmemmove(addr, wstring3_t, ulong);
+wstring3_t wmemset(addr, wchar_t, ulong);
 
 # sys/wait.h
 int wait(addr);