From 4eac1ce4a5624e6c21f426a9338d213667b84dde Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 23 Jul 2009 07:57:25 +0000 Subject: NetBSD does not have support for symbol versioning, so updated systen functions need to be given a new name, and the header files contain some __asm hackery in order to let the program call the correct function. This mean that you need to use the header files in order to call the correct system functions, which prevents things like "foreign import ccall" from working. Ghc solves this with wrapper functions for some of the renamed functions, but it has not been updated for newer versions of NetBSD that has recently versioned some more functions. The attached patches introduces wrapper functions for all currently NetBSD-versioned functions used in libraries/unix. Solves ~20 testsuite failures. Contributed by: Krister Walfridsson --- include/HsUnix.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'include') diff --git a/include/HsUnix.h b/include/HsUnix.h index d460698..cb8d466 100644 --- a/include/HsUnix.h +++ b/include/HsUnix.h @@ -127,6 +127,37 @@ int __hsunix_lstat(const char *path, struct stat *buf); // lstat is a macro on some platforms, so we need a wrapper: int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev); +#ifdef HAVE_GETPWENT +// getpwent is a macro on some platforms, so we need a wrapper: +struct passwd *__hsunix_getpwent(void); +#endif + +#if HAVE_GETPWNAM_R +// getpwnam_r is a macro on some platforms, so we need a wrapper: +int __hsunix_getpwnam_r(const char *, struct passwd *, char *, size_t, + struct passwd **); +#endif + +#ifdef HAVE_GETPWUID_R +// getpwuid_r is a macro on some platforms, so we need a wrapper: +int __hsunix_getpwuid_r(uid_t, struct passwd *, char *, size_t, + struct passwd **); +#endif + +#ifdef HAVE_NANOSLEEP +// nanosleep is a macro on some platforms, so we need a wrapper: +int __hsunix_nanosleep(const struct timespec *, struct timespec *); +#endif + +// opendir is a macro on some platforms, so we need a wrapper: +DIR *__hsunix_opendir(const char *); + +// time is a macro on some platforms, so we need a wrapper: +time_t __hsunix_time(time_t *); + +// times is a macro on some platforms, so we need a wrapper: +clock_t __hsunix_times(struct tms *); + #ifdef HAVE_PTSNAME // I cannot figure out how to make the definitions of the following // functions visible in on Linux. But these definitions -- cgit v1.2.3