134 changes: 126 additions & 8 deletions model/libc-ns3.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,12 @@ DCE_WITH_ALIAS2 (strtol, __strtol_internal)
DCET (long long int, strtoll)
DCE (strtoul)
DCE (strtoull)
NATIVE (strtof)
NATIVE (strtold)
DCET (double, strtod)
DCE (getenv)
#ifdef HAVE___SECURE_GETENV
NATIVE (__secure_getenv)
#ifdef HAVE_SECURE_GETENV
NATIVE_WITH_ALIAS2 (secure_getenv, __secure_getenv)
#endif
DCE (putenv)
DCE (setenv)
Expand All @@ -110,21 +112,31 @@ DCE (__stack_chk_fail)
DCE (mkstemp)
DCE (tmpfile)
DCE (rename)
NATIVE (mblen)
NATIVE (mbstowcs)
NATIVE (mbtowc)
NATIVE (mbsrtowcs)
NATIVE (mkostemp)

// STRING.H
NATIVE (bzero)
#ifdef HAVE___EXPLICIT_BZERO
NATIVE_WITH_ALIAS2 (explicit_bzero, __explicit_bzero_chk)
#endif /* HAVE___EXPLICIT_BZERO */
NATIVE (strerror)
NATIVE (strerror_r)
NATIVE (strcoll)
NATIVE (memset)
NATIVE (memcpy)
DCE (__memcpy_chk)
NATIVE (bcopy)
NATIVE (memcmp)
NATIVE (memmove)
NATIVE_EXPLICIT (memchr, void * (*)(void *, int, size_t))
NATIVE_EXPLICIT (memrchr, void * (*)(void *, int, size_t))
NATIVE (strcpy)
NATIVE (strncpy)
NATIVE (__stpncpy)
NATIVE (strcat)
NATIVE (strncat)
NATIVE (strcmp)
Expand All @@ -137,24 +149,43 @@ NATIVE_EXPLICIT (strchr, char* (*)(char *, int))
NATIVE_EXPLICIT (strrchr, const char * (*)(const char *, int))
NATIVE (strcasecmp)
NATIVE (strncasecmp)
NATIVE_EXPLICIT (strcasestr, char *(*)(char *, const char *))
DCE_WITH_ALIAS (strdup) // because C++ defines both const and non-const functions
DCE (strndup)
NATIVE_EXPLICIT (index, char * (*)(char *, int))
NATIVE_EXPLICIT (rindex, char * (*)(char *, int))
NATIVE_EXPLICIT (strtok, char * (*)(char *, const char *))
NATIVE_EXPLICIT (strtok_r, char * (*)(char *, const char *, char **))
NATIVE (strsep)
NATIVE (strsignal)


// LOCALE.H
DCE (setlocale)
NATIVE_WITH_ALIAS (newlocale)
NATIVE_WITH_ALIAS (uselocale)
NATIVE_WITH_ALIAS (localeconv)

// WCHAR.H
NATIVE (wctob)
NATIVE (btowc)
NATIVE (mbrlen)
NATIVE (mbrtowc)
NATIVE (wcscmp)
NATIVE (wcscoll)
NATIVE (wcsrtombs)
NATIVE (wcslen)
NATIVE (wcsdup)
NATIVE (wcsncmp)
NATIVE_EXPLICIT (wcschr, wchar_t * (*)(wchar_t *, wchar_t))
NATIVE (wctype)
NATIVE (wcwidth)
NATIVE (wcrtomb)
NATIVE (iswalnum)
NATIVE (iswprint)
NATIVE (mbsinit)
NATIVE (towlower)
NATIVE (towupper)

// ARPA/INET.H
NATIVE (htonl)
Expand All @@ -172,6 +203,7 @@ NATIVE (inet_netof)
DCE (inet_ntop)
NATIVE (inet_pton)
NATIVE (inet6_opt_find)
NATIVE (inet_nsap_ntoa)

// SYS/SOCKET.H
DCE (socket)
Expand All @@ -188,6 +220,8 @@ DCE (shutdown)
DCE (send)
DCE (sendto)
DCE (sendmsg)
/* XXX */
NATIVE_WITH_ALIAS (sendmmsg)
DCE (recv)
DCE (recvfrom)
DCE (recvmsg)
Expand Down Expand Up @@ -220,7 +254,7 @@ DCE (unlink)
DCE (rmdir)
DCE (select)
DCE (isatty)
DCE (exit)
DCE_WITH_ALIAS2 (exit, _exit)
DCE (getcwd)
DCE (getwd)
DCE (get_current_dir_name)
Expand All @@ -244,6 +278,12 @@ DCE (getgid)
DCE (getegid)
DCE (gethostname)
DCE (getpgrp)
NATIVE (setpgrp)
NATIVE (setpgid)
NATIVE (setsid)
NATIVE (tcgetpgrp)
NATIVE (tcsetpgrp)
NATIVE (tcflow)
DCE (lseek)
DCE (lseek64)
DCE (euidaccess)
Expand All @@ -260,6 +300,17 @@ DCE (readlink)
DCE (chown)
DCE (initgroups)
DCE (fsync)
NATIVE (chroot)
NATIVE (popen)
NATIVE (pclose)
NATIVE (getgroups)
NATIVE (setgroups)
NATIVE (confstr)
NATIVE (sync)
NATIVE (link)
NATIVE (symlink)
NATIVE (nice)
NATIVE (fchown)

// SYS/UIO.H
DCE (readv)
Expand Down Expand Up @@ -313,10 +364,12 @@ DCE_WITH_ALIAS2 (feof,feof_unlocked)
DCE_WITH_ALIAS2 (fileno,fileno_unlocked)
DCE (perror)
DCE (remove)
//NATIVE (sscanf)
NATIVE_WITH_ALIAS2 (fscanf, __isoc99_fscanf)
NATIVE_WITH_ALIAS2 (sscanf, __isoc99_sscanf)
NATIVE (flockfile)
NATIVE (funlockfile)
NATIVE (getline)
NATIVE (__fsetlocking)

// STDARG.H
DCE (vprintf)
Expand All @@ -336,7 +389,7 @@ NATIVE (asctime_r)
DCE (ctime)
NATIVE (ctime_r)
DCE_WITH_ALIAS2 (gmtime, localtime)
NATIVE_WITH_ALIAS2 (gmtime_r, localtime_r)
NATIVE_WITH_ALIAS (gmtime_r)
NATIVE (mktime)
NATIVE (strftime)
NATIVE (strptime)
Expand Down Expand Up @@ -366,18 +419,26 @@ DCE (mmap)
DCE (mmap64)
DCE (munmap)

// sys/mman.h
NATIVE (madvise)

// SYS/STAT/H
DCE (mkdir)
DCE (umask)
NATIVE (chmod)

// SYS/IOCTL.H
DCE (ioctl)

// SCHED.H
DCE (sched_yield)
NATIVE (unshare)
NATIVE (setns)

// POLL.H
DCE (poll)
//DCE (poll)
DCE_WITH_ALIAS2 (poll, __poll)
DCE_EXPLICIT (__poll_chk, int, struct pollfd *, long unsigned int, int, long unsigned int)

// SIGNAL.H
DCE (signal)
Expand All @@ -391,6 +452,7 @@ DCE (sigprocmask)
DCE (sigwait)
DCE (kill)
NATIVE (sys_siglist)
NATIVE (killpg)

// PTHREAD.H
DCE (pthread_create)
Expand Down Expand Up @@ -467,10 +529,12 @@ NATIVE (getservbyname)
NATIVE (getservbyport)
NATIVE (setservent)
NATIVE (endservent)
NATIVE (gethostbyaddr)

// CTYPE.H
NATIVE (toupper)
NATIVE (tolower)
NATIVE (iswlower)
NATIVE (isdigit)
NATIVE (isxdigit)
NATIVE (isalnum)
Expand All @@ -483,6 +547,8 @@ DCE (timerfd_gettime)
// NET/IF.H
DCE (if_nametoindex)
DCE (if_indextoname)
NATIVE (if_nameindex)
NATIVE (if_freenameindex)

// DIRENT.H
DCE (opendir)
Expand Down Expand Up @@ -511,6 +577,9 @@ NATIVE (__xpg_basename)

// GRP.H
NATIVE (getgrnam)
NATIVE (endgrent)
NATIVE (getgrent)
NATIVE (setgrent)

// SYS/RESOURCE.H
NATIVE (getrusage) // not sure if native call will give stats about the requested process..
Expand All @@ -535,9 +604,13 @@ NATIVE (textdomain)
NATIVE (gettext)
NATIVE (catopen)
NATIVE (catgets)
NATIVE (dgettext)
NATIVE (ngettext)

// PWD.H
NATIVE (getpwnam)
NATIVE (setpwent)
NATIVE (getpwent)
DCE (getpwuid)
DCE (endpwent)

Expand Down Expand Up @@ -575,13 +648,18 @@ DCE (fstatvfs)
// TERMIO.H
DCE (tcgetattr)
DCE (tcsetattr)
NATIVE (tcflush)
NATIVE (cfgetospeed)

///////////////////// END OF INVENTAIRE //////////////////////////////////////////////////

// ctype.h
NATIVE (__ctype_b_loc)
NATIVE_WITH_ALIAS (wctype_l)
NATIVE (__ctype_tolower_loc)
NATIVE (__ctype_toupper_loc)
NATIVE (iswctype)
NATIVE (iswupper)

// stdlib.h
NATIVE (__ctype_get_mb_cur_max)
Expand Down Expand Up @@ -611,12 +689,52 @@ NATIVE (__cmsg_nxthdr)
// math.h
NATIVE (lrintl)
NATIVE (llrintl)
NATIVE (ceil)
NATIVE (floor)
NATIVE_EXPLICIT (ceil, double(*)(double))
NATIVE_EXPLICIT (floor, double(*)(double))
NATIVE_EXPLICIT (trunc, double(*)(double))
NATIVE_EXPLICIT (sqrt, double(*)(double))
NATIVE_EXPLICIT (exp, double(*)(double))
NATIVE_EXPLICIT (pow, double(*)(double, double))
NATIVE_EXPLICIT (log, double(*)(double))
NATIVE_EXPLICIT (log10, double(*)(double))

// dlfcn.h
DCE_WITH_ALIAS2 (dlopen, __dlopen)
DCE (dlsym)
DCE (dlclose)
NATIVE (dlerror)

// execinfo.h
NATIVE (backtrace)
NATIVE (backtrace_symbols)
NATIVE (backtrace_symbols_fd)

// sys/mount.h
NATIVE (mount)
NATIVE (umount2)

// sys/inotify.h
NATIVE (inotify_init)
NATIVE (inotify_add_watch)

// regex.h
NATIVE (regfree)
NATIVE (regcomp)
NATIVE (regexec)
NATIVE (regerror)

// iconv.h
NATIVE (iconv_open)

// glob.h
NATIVE (glob)
NATIVE (globfree)

// malloc.h
NATIVE (mallinfo)

// error.h
NATIVE (error)

NATIVE (dl_iterate_phdr)
NATIVE (__libc_start_main)
Expand Down
56 changes: 56 additions & 0 deletions model/libc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -140,11 +140,67 @@ int snprintf (char *s, size_t si, const char *f, ...)

return r;
}
int __snprintf (char *s, size_t si, const char *f, ...)
{
va_list vl;
va_start (vl, f);
int r = g_libc.vsnprintf_fn (s, si, f, vl);
va_end (vl);

return r;
}
int __sprintf_chk (char *s, int len, const char *f, ...)
{
va_list vl;
va_start (vl, f);
int r = g_libc.vsnprintf_fn (s, len, f, vl);
va_end (vl);

return r;
}
int vsnprintf (char *s, size_t si, const char *f, va_list v)
{
return g_libc.vsnprintf_fn (s, si, f, v);
}

// XXX
int __libc_alloca_cutoff (size_t size)
{
return 0;
}

// glibc's resolv.h
void __res_iclose (void *statp, int free_addr)
{
}

struct resolv_context;
struct __res_state;
struct resolv_context *__resolv_context_get_preinit (void)
{
return 0;
}

struct resolv_context *__resolv_context_get_override (struct __res_state *)
{
return 0;
}

struct resolv_context *__resolv_context_get (void)
{
return 0;
}

void __resolv_context_put (struct resolv_context *ctx)
{
}

void *rawmemchr(const void *s, int c);
void *__rawmemchr(const void *s, int c)
{
return rawmemchr(s, c);
}

#include "libc-globals.h"

void LIBSETUP (const struct Libc *fn)
Expand Down
3 changes: 2 additions & 1 deletion wscript
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ def configure(conf):
conf.env.append_value('LINKFLAGS', '-pthread')
conf.check (lib='dl', mandatory = True)
conf.check_cc(fragment='int main() {__get_cpu_features();}\n', msg='Checking for glibc get_cpu_features', define_name='HAVE_GETCPUFEATURES', mandatory=False)
conf.check_cc(fragment='int main() {__secure_getenv("test");}\n', msg='Checking for glibc __secure_getenv', define_name='HAVE___SECURE_GETENV', mandatory=False)
conf.check_cc(fragment='int main() {secure_getenv("test");}\n', msg='Checking for glibc secure_getenv', define_name='HAVE_SECURE_GETENV', mandatory=False)
conf.check_cc(fragment='int main() {explicit_bzero("test", 1, 1);}\n', msg='Checking for glibc explicit_bzero', define_name='HAVE___EXPLICIT_BZERO', mandatory=False)

vg_h = conf.check(header_name='valgrind/valgrind.h', mandatory=False)
vg_memcheck_h = conf.check(header_name='valgrind/memcheck.h', mandatory=False)
Expand Down