Bug 29703 - gettimeofda: compile error with gcc 12.2.0 (glibc 2.36)
Summary: gettimeofda: compile error with gcc 12.2.0 (glibc 2.36)
Status: RESOLVED NOTABUG
Alias: None
Product: glibc
Classification: Unclassified
Component: libc (show other bugs)
Version: 2.36
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-10-19 15:59 UTC by Felix von Leitner
Modified: 2022-10-20 16:17 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
my config.log (7.85 KB, text/plain)
2022-10-20 09:29 UTC, Felix von Leitner
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Felix von Leitner 2022-10-19 15:59:47 UTC
I'm trying to build glibc 2.36 with gcc 12.2.0 on x86_64-linux. Here's what happens:

make[2]: Entering directory '/tmp/glibc-2.36/time'
gcc ../sysdeps/unix/sysv/linux/x86/gettimeofday.c -c -std=gnu11 -fgnu89-inline  -pipe -O2 -Wall -Wwrite-strings -Wundef -Werror -fmerge-all-constants -frounding-math -fstack-protector -fno-common -Wstrict-prototypes -Wold-style-definition -fmath-errno    -fPIC -fcf-protection   -ftls-model=initial-exec      -I../include -I/tmp/glibc-2.36/build/time  -I/tmp/glibc-2.36/build  -I../sysdeps/unix/sysv/linux/x86_64/64  -I../sysdeps/unix/sysv/linux/x86_64  -I../sysdeps/unix/sysv/linux/x86/include -I../sysdeps/unix/sysv/linux/x86  -I../sysdeps/x86/nptl  -I../sysdeps/unix/sysv/linux/wordsize-64  -I../sysdeps/x86_64/nptl  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix/x86_64  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/x86_64/64  -I../sysdeps/x86_64/fpu  -I../sysdeps/x86/fpu  -I../sysdeps/x86_64  -I../sysdeps/x86/include -I../sysdeps/x86  -I../sysdeps/ieee754/float128  -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ieee754/ldbl-96  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754/flt-32  -I../sysdeps/wordsize-64  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I.  -D_LIBC_REENTRANT -include /tmp/glibc-2.36/build/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h  -DPIC -DSHARED     -DTOP_NAMESPACE=glibc -o /tmp/glibc-2.36/build/time/gettimeofday.os -MD -MP -MF /tmp/glibc-2.36/build/time/gettimeofday.os.dt -MT /tmp/glibc-2.36/build/time/gettimeofday.os
In file included from <command-line>:
../sysdeps/unix/sysv/linux/gettimeofday.c:56:29: error: ‘gettimeofday’ alias between functions of incompatible types ‘int(struct timeval * restrict,  void * restrict)’ and ‘int (*(void))(struct timeval *, void *)’ [-Werror=attribute-alias=]
   56 | weak_alias (__gettimeofday, gettimeofday)
      |                             ^~~~~~~~~~~~
./../include/libc-symbols.h:155:26: note: in definition of macro ‘_weak_alias’
  155 |   extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))) \
      |                          ^~~~~~~~~
../sysdeps/unix/sysv/linux/gettimeofday.c:56:1: note: in expansion of macro ‘weak_alias’
   56 | weak_alias (__gettimeofday, gettimeofday)
      | ^~~~~~~~~~
../sysdeps/unix/sysv/linux/gettimeofday.c:42:13: note: aliased declaration here
   42 | libc_ifunc (__gettimeofday,
      |             ^~~~~~~~~~~~~~
./../include/libc-symbols.h:737:25: note: in definition of macro ‘__ifunc_resolver’
  737 |   __typeof (type_name) *name##_ifunc (arg)                              \
      |                         ^~~~
./../include/libc-symbols.h:853:32: note: in expansion of macro ‘__ifunc’
  853 | #define libc_ifunc(name, expr) __ifunc (name, name, expr, void, INIT_ARCH)
      |                                ^~~~~~~
../sysdeps/unix/sysv/linux/gettimeofday.c:42:1: note: in expansion of macro ‘libc_ifunc’
   42 | libc_ifunc (__gettimeofday,
      | ^~~~~~~~~~
cc1: all warnings being treated as errors
make[2]: *** [/tmp/glibc-2.36/build/sysd-rules:93: /tmp/glibc-2.36/build/time/gettimeofday.os] Error 1
make[2]: Leaving directory '/tmp/glibc-2.36/time'
make[1]: *** [Makefile:484: time/subdir_lib] Error 2
make[1]: Leaving directory '/tmp/glibc-2.36'
make: *** [Makefile:9: all] Error 2
Comment 1 Andreas Schwab 2022-10-19 16:23:45 UTC
How did you configure it?  Please attach config.log.
Comment 2 Felix von Leitner 2022-10-20 09:29:45 UTC
Created attachment 14407 [details]
my config.log
Comment 3 Andreas Schwab 2022-10-20 10:13:06 UTC
Your compiler doesn't have the necessary support for indirect functions.
Comment 4 Felix von Leitner 2022-10-20 14:22:44 UTC
The following program compiles and runs on the same box:

$ cat ifunc.c
#include <stdio.h>

void my_test()
{
  puts("my_test called");
}

static void (*resolve_test (void)) (void)
{
  return my_test; // we'll just always select this routine
}

void test () __attribute__ ((ifunc ("resolve_test")));

int main() {
  test();
}
$ gcc -o ifunc ifunc.c
$ ./ifunc
my_test called
$
Comment 5 Felix von Leitner 2022-10-20 14:38:43 UTC
I debugged what configure does. Turns out it calls readelf which couldn't find a library on this system because of elfutils being to old so a newer shared library was missing.

Not your fault. Sorry for the noise.
Comment 6 Adhemerval Zanella 2022-10-20 16:17:40 UTC
As per comment #5.