This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On Wed, Dec 16, 2015 at 07:01:39AM -0800, H.J. Lu wrote: > X32 syscall() may return 64-bit integer as lseek, time and times. Its > return type should be __syscall_slong_t instead of long int. We need > to properly return 64-bit error value. [...] > +#include <sysdep.h> > + > +/* Return -1LL in a full 64 bits. */ > +#undef SYSCALL_ERROR_HANDLER > +#define SYSCALL_ERROR_HANDLER \ > +0: \ > + SYSCALL_SET_ERRNO; \ > + orq $-1, %rax; \ > + ret; > + > +/* Always use our own error handler. */ > +#undef SYSCALL_ERROR_LABEL > +#define SYSCALL_ERROR_LABEL 0f > + > +#include <sysdeps/unix/sysv/linux/x86_64/syscall.S> While this looks technically OK, I don't understand why RAX_LP is used at all in default SYSCALL_ERROR_HANDLER in place for rax. Everything would be simpler if glibc finally admitted that return code of any x32 linux syscall is stored in %rax and not in %eax. Also, I wish this and times bugs were fixed long time ago. Now I have to apply workarounds like this: https://github.com/strace/strace/commit/b6b38fa73b9e0810c68a19dcb3ade2974db20f8c -- ldv
Attachment:
pgpKYKIcVtwSH.pgp
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |