Do not use this hacks on production systems!
Many system calls were deprecated in Solaris 11, access
seem to be deleted:
$ grep access /usr/include/sys/syscall.h
#define SYS_faccessat 45
Some of them are still accessible from Solaris 10 brand zones, some seem to be gone forever. Instead you have to use "at"-functions with AT_FDCWD
param, in your case it is faccessat
. That change was hidden by libc, but if Sybase brings their own libc things go bad, if they statically link with it, it is even worse.
If access
is a shared library function in their own libc, you can still workaround that by using LD_PRELOAD
hack. Write the following source:
#include <unistd.h>
#include <sys/fcntl.h>
int access(const char *fname, int amode) {
return (faccessat(AT_FDCWD, fname, amode, 0));
}
Compile it with GCC or Solaris Studio (depends on what Sybase used, probably Solaris Studio) into shared library:
$ gcc -shared -fPIC xaccess.c -o libaccess.so
Export LD_PRELOAD
variable:
$ export LD_PRELOAD=./libaccess.so
And pray for luck because it may fail at another system calls, or you used wrong compiler, etc. Note that Sybase binaries may not run correctly too!
Have I warned about hacks on production systems? Instead, use brand Solaris 10 zones or Solaris 10 LDoms/VMs