On 13 March 2013 17:58, Jan Stancek <[email protected]> wrote: > > > ----- Original Message ----- >> From: "Markos Chandras" <[email protected]> >> To: [email protected] >> Sent: Wednesday, 13 March, 2013 3:01:34 PM >> Subject: [LTP] [PATCH 1/2] syscalls/getdents: Use getdents64 if SYS_getdents >> is not defined >> >> From: Markos Chandras <[email protected]> >> >> New Linux Kernel architectures do not define NR_getdents so we >> try to use the getdents64 syscall instead >> >> Signed-off-by: Markos Chandras <[email protected]> >> --- >> testcases/kernel/syscalls/getdents/getdents.h | 15 +++++++++++++++ >> 1 files changed, 15 insertions(+), 0 deletions(-) >> >> diff --git a/testcases/kernel/syscalls/getdents/getdents.h >> b/testcases/kernel/syscalls/getdents/getdents.h >> index 1d5e584..12d2be4 100644 >> --- a/testcases/kernel/syscalls/getdents/getdents.h >> +++ b/testcases/kernel/syscalls/getdents/getdents.h >> @@ -38,12 +38,23 @@ >> * declare our own here. Wheeeeee. >> */ >> >> +#ifdef SYS_getdents >> struct linux_dirent { >> unsigned long d_ino; >> unsigned long d_off; >> unsigned short d_reclen; >> char d_name[]; >> }; >> +#else >> +/* Use the 64-bit definition */ >> +struct linux_dirent { >> + unsigned long long d_ino; >> + long long d_off; >> + unsigned short d_reclen; >> + unsigned char d_type; >> + char d_name[0]; >> +}; >> +#endif >> >> static inline int >> getdents(unsigned int fd, struct dirent *dirp, unsigned int count) >> @@ -57,7 +68,11 @@ getdents(unsigned int fd, struct dirent *dirp, >> unsigned int count) >> unsigned int i; >> >> ptrs.buf = buf; >> +#ifdef SYS_getdents >> ret = syscall(SYS_getdents, fd, buf, count); >> +#else >> + ret = syscall(SYS_getdents64, fd, buf, count); >> +#endif > > Just a thought.. What about turning it to runtime check? There could be > parameter to switch between > SYS_getdents/SYS_getdents64 and we can have both (with/without that > parameter) in runtest/syscalls. > If it's supported it runs, if not ends with TCONF. That way we could have > both version on arches > that support both syscalls. >
The problem is that for arches that don't have SYS_getdents defined, you will not be able to compile LTP on them so you really need to hide this codepath from them. A similar commit that changes the codepath based on whether a particular __NR_XX is defined is this https://github.com/linux-test-project/ltp/commit/75201f160b9aa49af70d8f46fb1f087e63d603dd I don't see an easy way to determine if __NR_XX is defined or not during runtime. -- Regards, Markos Chandras ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_mar _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
