On 11 March 2013 13:21, Vineet Gupta <[email protected]> wrote: > sys/time.h has libc_hidden_proto(utimes) which generates the hidden > "__GI_utimes" symbol reference, and common/utimes.c has a > libc_hidden_def(utimes) which generates the exported "utimes" alias. > > As part of no-legacy-syscall kernel ABI, Commit 80dc2ed05 > "utimes: Use utimensat if arch does not have the utimes syscall" > introduced a new wrapper, but missed the corresponding libc_hidden_def, > causing Busybox (1.20.0) link to fail (for ARC). > > ---------------->8------------------- > .... > touch.c:(.text.touch_main+0xdc): undefined reference to `utimes' > touch.c:(.text.touch_main+0x114): undefined reference to `utimes' > libbb/lib.a(copy_file.o): In function `copy_file': > copy_file.c:(.text.copy_file+0x446): undefined reference to `utimes' > collect2: ld returned 1 exit status > ---------------->8------------------- > > Signed-off-by: Vineet Gupta <[email protected]> > Cc: Markos Chandras <[email protected]> > --- > libc/sysdeps/linux/common/utimes.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/libc/sysdeps/linux/common/utimes.c > b/libc/sysdeps/linux/common/utimes.c > index a459d15..b5e76cc 100644 > --- a/libc/sysdeps/linux/common/utimes.c > +++ b/libc/sysdeps/linux/common/utimes.c > @@ -51,6 +51,6 @@ int utimes(const char *file, const struct timeval tvp[2]) > } > #endif > > -#if defined __NR_utimes || defined __NR_utime > +#if defined __NR_utimensat || defined __NR_utimes || defined __NR_utime > libc_hidden_def(utimes) > #endif > -- > 1.7.4.1 > > _______________________________________________ > uClibc mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/uclibc
Well, yeah your fix is correct but the linking problem is not because we don't have libc_hidden_def(utimes) for new arches. You most likely build uClibc without __UCLIBC_HAS_STUBS__ and this is why you are seeing the linking problems. We currently have the following code in libc/sysdeps/linux/common/stubs.c #if !defined __NR_utime && !defined __NR_utimes /*make_stub(utime) obsoleted */ make_stub(utimes) #endif So, if __UCLIBC_HAS_STUBS__ is enabled, you will have a utimes symbol in your libc but it will actually return ENOSYS. So whilst we provide a utimes function for new architectures, we never actually use it and we create a stub instead. This is wrong so I believe your patch needs to fix the libc/sysdeps/linux/common/stubs.c entry as well. -- Regards, Markos Chandras _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
