* [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).