diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-07-31 05:15:48 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-07-31 05:15:48 +0000 |
commit | 3d558f4ec7fecbac0dddb4d321a1ec10f14e8e03 (patch) | |
tree | 03f30bc95d97fe7f240c01644ca564a814bf542b /configure.in | |
parent | 94ffedf6e607675b0eeb7dfec020d722a0b94230 (diff) | |
download | glibc-3d558f4ec7fecbac0dddb4d321a1ec10f14e8e03.tar.gz glibc-3d558f4ec7fecbac0dddb4d321a1ec10f14e8e03.tar.xz glibc-3d558f4ec7fecbac0dddb4d321a1ec10f14e8e03.zip |
Update.
* configure.in: Add test for local label subtraction. * config.h.in: Ad HAVE_SUBTRACT_LOCAL_LABELS. * stdio-common/vfprintf.c (vfprintf): Use subtraction of local labels to reduce number of runtime relocations and move jump tables in read-only seciton.
Diffstat (limited to 'configure.in')
-rw-r--r-- | configure.in | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/configure.in b/configure.in index e6b2dacf1d..6203266658 100644 --- a/configure.in +++ b/configure.in @@ -1050,6 +1050,36 @@ if test "$libc_cv_gcc_builtin_expect" = yes; then AC_DEFINE(HAVE_BUILTIN_EXPECT) fi +dnl Check whether the compiler supports subtraction of local labels. +AC_CACHE_CHECK(for local label subtraction, libc_cv_gcc_subtract_local_labels, +[cat > conftest.c <<EOF +changequote(,)dnl +#line __oline__ "configure" +int foo (int a) +{ + static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 }; + void *p = &&l1 + ar[a]; + goto *p; + l1: + return 1; + l2: + return 2; +} +changequote([,])dnl +EOF +dnl No \ in command here because it ends up inside ''. +if AC_TRY_COMMAND([${CC-cc} $CFLAGS -nostdlib -nostartfiles + -o conftest conftest.c -lgcc >&AC_FD_CC]); then + libc_cv_gcc_subtract_local_labels=yes +else + libc_cv_gcc_subtract_local_labels=no +fi +rm -f conftest*]) +if test "$libc_cv_gcc_subtract_local_labels" = yes; then + AC_DEFINE(HAVE_SUBTRACT_LOCAL_LABELS) +fi + + ### End of automated tests. ### Now run sysdeps configure fragments. |