Browse Source

openat argument fix.

If argument passing to register case (ex. -mregparam=3).
This case set all parameters set to register from caller.
But callee refer to stack. So can't get parameter.

Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Yoshinori Sato 8 years ago
parent
commit
d42417f680
1 changed files with 14 additions and 1 deletions
  1. 14 1
      libc/sysdeps/linux/common/openat.c

+ 14 - 1
libc/sysdeps/linux/common/openat.c

@@ -8,11 +8,24 @@
 
 #include <sys/syscall.h>
 #include <fcntl.h>
+#include <stdarg.h>
 
 #ifdef __NR_openat
 # define __NR___syscall_openat __NR_openat
 static __inline__ _syscall4(int, __syscall_openat, int, fd, const char *, file, int, oflag, mode_t, mode)
-strong_alias_untyped(__syscall_openat,openat)
+
+int __openat(int fd, const char *file, int o_flag, ...)
+{
+	va_list ap;
+	mode_t mode;
+
+	va_start(ap, o_flag);
+	mode = va_arg(ap, int);
+	va_end(ap);
+	return __syscall_openat(fd, file, o_flag, mode);
+}
+
+strong_alias_untyped(__openat,openat)
 libc_hidden_def(openat)
 #else
 /* should add emulation with open() and /proc/self/fd/ ... */