This is the mail archive of the
libc-help@sourceware.org
mailing list for the glibc project.
Re: Get the real system call wrappers
- From: Yubin Ruan <ablacktshirt at gmail dot com>
- To: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- Cc: libc-help at sourceware dot org
- Date: Thu, 24 Aug 2017 09:31:48 +0800
- Subject: Re: Get the real system call wrappers
- Authentication-results: sourceware.org; auth=none
- References: <CAJYFCiO0zoupgsXOsgDbE0t=RkSbVF4UBXgg3PYwbab5=Zz9OA@mail.gmail.com> <f01f9578-182e-8d7b-405b-16e93c7f24ec@linaro.org>
2017-08-22 21:52 GMT+08:00 Adhemerval Zanella <adhemerval.zanella@linaro.org>:
>
>
> On 19/08/2017 11:34, Yubin Ruan wrote:
>> Hi,
>> How can I get the complete glibc system call wrappers?
>> I know that glibc implement most system call wrappers but they are not
>> exposed explicitly in the glibc source. Rather, the complete system
>> call wrappers are generated on the fly when glibc is built, probably
>> using some scripts. For example, the "open(2)" system call is now
>> defined in io/open.c:
>>
>> 29 __libc_open (const char *file, int oflag)
>> 30 {
>> 31 int mode;
>> 32
>> 33 if (file == NULL)
>> 34 {
>> 35 __set_errno (EINVAL);
>> 36 return -1;
>> 37 }
>> 38
>> 39 if (__OPEN_NEEDS_MODE (oflag))
>> 40 {
>> 41 va_list arg;
>> 42 va_start(arg, oflag);
>> 43 mode = va_arg(arg, int);
>> 44 va_end(arg);
>> 45 }
>> 46
>> 47 __set_errno (ENOSYS);
>> 48 return -1;
>> 49 }
>> 50 libc_hidden_def (__libc_open)
>> 51 weak_alias (__libc_open, __open)
>> 52 libc_hidden_weak (__open)
>> 53 weak_alias (__libc_open, open)
>> 54
>> 55 stub_warning (open)
>> 56
>> 57 /* __open_2 is a generic wrapper that calls __open.
>> 58 So give a stub warning for that symbol too. */
>> 59 stub_warning (__open_2)
>>
>> After some replacement (I guess), we will get a complete open(2)
>> system call wrapper.
>>
>> But all methods I found on the web to generate the complete wrappers
>> seem to be obsolete (can't find those scripts). Do I have to built the
>> whole glibc completely to obtain those? Or is there any lightweight
>> method?
>
> The syscall generation mechanism is described in this wiki entry [1],
> and although it would require some updates (which I intend to do after
> I finish my sysdep-cancel.h cleanup) it holds for current version.
>
> [1] https://sourceware.org/glibc/wiki/SyscallWrappers
Thanks. But as for the current version, the script that was used to generate
all the system call, as mentioned in [1], "sysdep/unix/make-syscalls.sh",
cannot be found any more.
I tried using a old release, but please do let me know once there are any
updates.
Thanks,
Yubin
[1] https://sourceware.org/glibc/wiki/SyscallWrappers