* [PATCH] support: Use __utimensat64 to set file access and modification times @ 2021-03-17 15:38 Lukasz Majewski 2021-03-17 18:05 ` Florian Weimer 0 siblings, 1 reply; 5+ messages in thread From: Lukasz Majewski @ 2021-03-17 15:38 UTC (permalink / raw) To: Joseph Myers, Adhemerval Zanella Cc: Paul Eggert, Arnd Bergmann, GNU C Library, Florian Weimer, Carlos O'Donell, Lukasz Majewski Before this patch the ARM port required the __libc_do_syscall function to be able to call utimensat_time64 syscall required to check if file system supports 64 bit time. This patch fixes the following error on ARM 32 bit port: y2038-glibc/support/support_path_support_time64.c:34: undefined reference to `__libc_do_syscall' collect2: error: ld returned 1 exit status As it now calls the __utimensat64 glibc exported function, which supports 64 bit time. --- support/support_path_support_time64.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/support/support_path_support_time64.c b/support/support_path_support_time64.c index 74af7d4973..e42350fa43 100644 --- a/support/support_path_support_time64.c +++ b/support/support_path_support_time64.c @@ -24,17 +24,6 @@ #include <sysdep.h> #endif -#ifdef __linux__ -static int -utimesat_call (const char *path, const struct __timespec64 tsp[2]) -{ -# ifndef __NR_utimensat_time64 -# define __NR_utimensat_time64 __NR_utimensat -# endif - return INLINE_SYSCALL_CALL (utimensat_time64, AT_FDCWD, path, &tsp[0], 0); -} -#endif - bool support_path_support_time64 (const char *path) { @@ -49,8 +38,9 @@ support_path_support_time64 (const char *path) { 0x80000001ULL, 0 }, { 0x80000002ULL, 0 } }; - /* Return is kernel does not support __NR_utimensat_time64. */ - if (utimesat_call (path, tsp) == -1) + + /* Return if kernel does not support __NR_utimensat_time64. */ + if (__utimensat64 (AT_FDCWD, path, &tsp[0], 0) == -1) return false; /* Verify if the last access and last modification time match the ones @@ -67,7 +57,7 @@ support_path_support_time64 (const char *path) { ostx.stx_atime.tv_sec, ostx.stx_atime.tv_nsec }, { ostx.stx_mtime.tv_sec, ostx.stx_mtime.tv_nsec }, }; - TEST_VERIFY_EXIT (utimesat_call (path, otsp) == 0); + TEST_VERIFY_EXIT (__utimensat64 (AT_FDCWD, path, &otsp[0], 0) == 0); return support; #else -- 2.20.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] support: Use __utimensat64 to set file access and modification times 2021-03-17 15:38 [PATCH] support: Use __utimensat64 to set file access and modification times Lukasz Majewski @ 2021-03-17 18:05 ` Florian Weimer 2021-03-17 18:38 ` Adhemerval Zanella 0 siblings, 1 reply; 5+ messages in thread From: Florian Weimer @ 2021-03-17 18:05 UTC (permalink / raw) To: Lukasz Majewski Cc: Joseph Myers, Adhemerval Zanella, Paul Eggert, Arnd Bergmann, GNU C Library, Carlos O'Donell * Lukasz Majewski: > @@ -49,8 +38,9 @@ support_path_support_time64 (const char *path) > { 0x80000001ULL, 0 }, > { 0x80000002ULL, 0 } > }; > - /* Return is kernel does not support __NR_utimensat_time64. */ > - if (utimesat_call (path, tsp) == -1) > + > + /* Return if kernel does not support __NR_utimensat_time64. */ > + if (__utimensat64 (AT_FDCWD, path, &tsp[0], 0) == -1) > return false; > > /* Verify if the last access and last modification time match the ones > @@ -67,7 +57,7 @@ support_path_support_time64 (const char *path) > { ostx.stx_atime.tv_sec, ostx.stx_atime.tv_nsec }, > { ostx.stx_mtime.tv_sec, ostx.stx_mtime.tv_nsec }, > }; > - TEST_VERIFY_EXIT (utimesat_call (path, otsp) == 0); > + TEST_VERIFY_EXIT (__utimensat64 (AT_FDCWD, path, &otsp[0], 0) == 0); > > return support; > #else I don't see how this can work given that __utimensat64 is currently a symbol exported from libc.so.6. Doesn't this result in link failures on, say, i386? Thanks, Florian ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] support: Use __utimensat64 to set file access and modification times 2021-03-17 18:05 ` Florian Weimer @ 2021-03-17 18:38 ` Adhemerval Zanella 2021-03-17 18:53 ` Florian Weimer 2021-03-17 22:32 ` Lukasz Majewski 0 siblings, 2 replies; 5+ messages in thread From: Adhemerval Zanella @ 2021-03-17 18:38 UTC (permalink / raw) To: Florian Weimer, Lukasz Majewski; +Cc: Joseph Myers, GNU C Library On 17/03/2021 15:05, Florian Weimer wrote: > * Lukasz Majewski: > >> @@ -49,8 +38,9 @@ support_path_support_time64 (const char *path) >> { 0x80000001ULL, 0 }, >> { 0x80000002ULL, 0 } >> }; >> - /* Return is kernel does not support __NR_utimensat_time64. */ >> - if (utimesat_call (path, tsp) == -1) >> + >> + /* Return if kernel does not support __NR_utimensat_time64. */ >> + if (__utimensat64 (AT_FDCWD, path, &tsp[0], 0) == -1) >> return false; >> >> /* Verify if the last access and last modification time match the ones >> @@ -67,7 +57,7 @@ support_path_support_time64 (const char *path) >> { ostx.stx_atime.tv_sec, ostx.stx_atime.tv_nsec }, >> { ostx.stx_mtime.tv_sec, ostx.stx_mtime.tv_nsec }, >> }; >> - TEST_VERIFY_EXIT (utimesat_call (path, otsp) == 0); >> + TEST_VERIFY_EXIT (__utimensat64 (AT_FDCWD, path, &otsp[0], 0) == 0); >> >> return support; >> #else > > I don't see how this can work given that __utimensat64 is currently a > symbol exported from libc.so.6. Doesn't this result in link failures > on, say, i386? It does not, it either fail with an invalid linking for legacy ABIs: /libsupport_nonshared.a(support_path_support_time64.oS): in function `support_path_support_time64': /home/azanella/glibc/glibc-git/support/support_path_support_time64.c:43: undefined reference to `__utimensat64' /home/azanella/toolchain/install/compilers/arm-linux-gnueabihf/lib/gcc/arm-glibc-linux-gnueabihf/10.2.1/../../../../arm-glibc-linux-gnueabihf/bin/ld: /home/azanella/glibc/glibc-git/support/support_path_su pport_time64.c:60: undefined reference to `__utimensat64' Or with the following for abi with default 64 bit support: In file included from ../sysdeps/generic/hp-timing.h:23, from ../nptl/descr.h:27, from ../sysdeps/aarch64/nptl/tls.h:44, from ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:29, from support_path_support_time64.c:24: support_path_support_time64.c: In function ‘support_path_support_time64’: ../include/time.h:180:24: error: implicit declaration of function ‘__utimensat’; did you mean ‘utimensat’? [-Werror=implicit-function-declaration] 180 | # define __utimensat64 __utimensat | ^~~~~~~~~~~ support_path_support_time64.c:43:7: note: in expansion of macro ‘__utimensat64’ 43 | if (__utimensat64 (AT_FDCWD, path, &tsp[0], 0) == -1) I will commit the following fix: diff --git a/support/support_path_support_time64.c b/support/support_path_support_time64.c index 74af7d4973..452fedcde5 100644 --- a/support/support_path_support_time64.c +++ b/support/support_path_support_time64.c @@ -31,7 +31,7 @@ utimesat_call (const char *path, const struct __timespec64 tsp[2]) # ifndef __NR_utimensat_time64 # define __NR_utimensat_time64 __NR_utimensat # endif - return INLINE_SYSCALL_CALL (utimensat_time64, AT_FDCWD, path, &tsp[0], 0); + return syscall (__NR_utimensat_time64, AT_FDCWD, path, &tsp[0], 0); } #endif ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] support: Use __utimensat64 to set file access and modification times 2021-03-17 18:38 ` Adhemerval Zanella @ 2021-03-17 18:53 ` Florian Weimer 2021-03-17 22:32 ` Lukasz Majewski 1 sibling, 0 replies; 5+ messages in thread From: Florian Weimer @ 2021-03-17 18:53 UTC (permalink / raw) To: Adhemerval Zanella; +Cc: Lukasz Majewski, Joseph Myers, GNU C Library * Adhemerval Zanella: > I will commit the following fix: > > diff --git a/support/support_path_support_time64.c b/support/support_path_support_time64.c > index 74af7d4973..452fedcde5 100644 > --- a/support/support_path_support_time64.c > +++ b/support/support_path_support_time64.c > @@ -31,7 +31,7 @@ utimesat_call (const char *path, const struct __timespec64 tsp[2]) > # ifndef __NR_utimensat_time64 > # define __NR_utimensat_time64 __NR_utimensat > # endif > - return INLINE_SYSCALL_CALL (utimensat_time64, AT_FDCWD, path, &tsp[0], 0); > + return syscall (__NR_utimensat_time64, AT_FDCWD, path, &tsp[0], 0); > } > #endif > Thanks, that looks okay to me. Florian ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] support: Use __utimensat64 to set file access and modification times 2021-03-17 18:38 ` Adhemerval Zanella 2021-03-17 18:53 ` Florian Weimer @ 2021-03-17 22:32 ` Lukasz Majewski 1 sibling, 0 replies; 5+ messages in thread From: Lukasz Majewski @ 2021-03-17 22:32 UTC (permalink / raw) To: Adhemerval Zanella; +Cc: Florian Weimer, Joseph Myers, GNU C Library [-- Attachment #1: Type: text/plain, Size: 3656 bytes --] Hi Adhemerval, > On 17/03/2021 15:05, Florian Weimer wrote: > > * Lukasz Majewski: > > > >> @@ -49,8 +38,9 @@ support_path_support_time64 (const char *path) > >> { 0x80000001ULL, 0 }, > >> { 0x80000002ULL, 0 } > >> }; > >> - /* Return is kernel does not support __NR_utimensat_time64. */ > >> - if (utimesat_call (path, tsp) == -1) > >> + > >> + /* Return if kernel does not support __NR_utimensat_time64. */ > >> + if (__utimensat64 (AT_FDCWD, path, &tsp[0], 0) == -1) > >> return false; > >> > >> /* Verify if the last access and last modification time match > >> the ones @@ -67,7 +57,7 @@ support_path_support_time64 (const char > >> *path) { ostx.stx_atime.tv_sec, ostx.stx_atime.tv_nsec }, > >> { ostx.stx_mtime.tv_sec, ostx.stx_mtime.tv_nsec }, > >> }; > >> - TEST_VERIFY_EXIT (utimesat_call (path, otsp) == 0); > >> + TEST_VERIFY_EXIT (__utimensat64 (AT_FDCWD, path, &otsp[0], 0) > >> == 0); > >> return support; > >> #else > > > > I don't see how this can work given that __utimensat64 is currently > > a symbol exported from libc.so.6. Doesn't this result in link > > failures on, say, i386? > > It does not, it either fail with an invalid linking for legacy ABIs: > > /libsupport_nonshared.a(support_path_support_time64.oS): in function > `support_path_support_time64': > /home/azanella/glibc/glibc-git/support/support_path_support_time64.c:43: > undefined reference to `__utimensat64' > /home/azanella/toolchain/install/compilers/arm-linux-gnueabihf/lib/gcc/arm-glibc-linux-gnueabihf/10.2.1/../../../../arm-glibc-linux-gnueabihf/bin/ld: > /home/azanella/glibc/glibc-git/support/support_path_su > pport_time64.c:60: undefined reference to `__utimensat64' > > Or with the following for abi with default 64 bit support: > > In file included from ../sysdeps/generic/hp-timing.h:23, > from ../nptl/descr.h:27, > from ../sysdeps/aarch64/nptl/tls.h:44, > from ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:29, > from support_path_support_time64.c:24: > support_path_support_time64.c: In function > ‘support_path_support_time64’: ../include/time.h:180:24: error: > implicit declaration of function ‘__utimensat’; did you mean > ‘utimensat’? [-Werror=implicit-function-declaration] 180 | # define > __utimensat64 __utimensat | ^~~~~~~~~~~ > support_path_support_time64.c:43:7: note: in expansion of macro > ‘__utimensat64’ 43 | if (__utimensat64 (AT_FDCWD, path, &tsp[0], 0) > == -1) > > > I will commit the following fix: > > diff --git a/support/support_path_support_time64.c > b/support/support_path_support_time64.c index 74af7d4973..452fedcde5 > 100644 --- a/support/support_path_support_time64.c > +++ b/support/support_path_support_time64.c > @@ -31,7 +31,7 @@ utimesat_call (const char *path, const struct > __timespec64 tsp[2]) # ifndef __NR_utimensat_time64 > # define __NR_utimensat_time64 __NR_utimensat > # endif > - return INLINE_SYSCALL_CALL (utimensat_time64, AT_FDCWD, path, > &tsp[0], 0); > + return syscall (__NR_utimensat_time64, AT_FDCWD, path, &tsp[0], 0); > } > #endif > I've checked it with ARM 32 bit. It works without issues. Thanks for providing this proper fix. Tested-by: Lukasz Majewski <lukma@denx.de> Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-03-17 22:33 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-03-17 15:38 [PATCH] support: Use __utimensat64 to set file access and modification times Lukasz Majewski 2021-03-17 18:05 ` Florian Weimer 2021-03-17 18:38 ` Adhemerval Zanella 2021-03-17 18:53 ` Florian Weimer 2021-03-17 22:32 ` Lukasz Majewski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).