Merge branch 'elf-move'

Conflicts:
	debug/backtracesymsfd.c
	sysdeps/generic/elf/backtracesymsfd.c
	sysdeps/i386/configure.in
This commit is contained in:
Andreas Jaeger 2012-03-27 21:35:36 +02:00
commit 1e3cdfda74
21 changed files with 836 additions and 882 deletions

117
ChangeLog
View File

@ -1,3 +1,120 @@
2012-03-27 David S. Miller <davem@davemloft.net>
* sysdeps/sparc/sparc64/Makefile (ASFLAGS-.os): Move before
have-as-vis3 check.
2012-03-27 Andreas Jaeger <aj@suse.de>
* sysdeps/x86_64/elf/configure.in: Moved to ...
* sysdeps/x86_64/configure.in: ... here.
* sysdeps/x86_64/elf/start.S: Moved to ...
* sysdeps/x86_64/start.S: ... here.
* sysdeps/x86_64/elf/configure: Delete.
* sysdeps/x86_64/configure.in: Merge contents from
sysdeps/i386/configure.in (without i686 check).
* sysdeps/i386/elf/Versions: Merge into ...
* sysdeps/i386/Versions: ... this.
* sysdeps/i386/elf/Versions: Delete file.
* sysdeps/i386/elf/start.S: Moved to ...
* sysdeps/i386/start.S: ...here.
* sysdeps/i386/elf/configure.in: Merge into...
* sysdeps/i386/configure.in: ...here.
* sysdeps/i386/elf/configure.in: Delete file.
* sysdeps/i386/elf/configure: Delete file.
* sysdeps/generic/elf/backtracesyms.c: Moved to ...
* debug/backtracesyms.c: ... here.
* sysdeps/generic/elf/backtracesymsfd.c: Moved to ...
* debug/backtracesymsfd.c: ... here.
* sysdeps/generic/elf/ifunc-sel.h: Moved to ...
* sysdeps/generic/ifunc-sel.h: ... here.
* sysdeps/unix/i386/start.c: Delete file.
* sysdeps/unix/sparc/start.c: Delete file.
* sysdeps/unix/start.c: Delete file.
* sysdeps/sh/elf/configure.in: Moved to ...
* sysdeps/sh/configure.in: ... here.
* sysdeps/sh/elf/start.S: Moved to ...
* sysdeps/sh/start.S: ... here.
* sysdeps/sh/elf/configure: Delete file.
* sysdeps/powerpc/powerpc64/elf/bzero.S: Moved to ...
* sysdeps/powerpc/powerpc64/bzero.S: ... here.
* sysdeps/powerpc/powerpc64/elf/entry.h: Moved to ...
* sysdeps/powerpc/powerpc64/entry.h: ... here.
* sysdeps/powerpc/powerpc64/elf/start.S: Moved to ...
* sysdeps/powerpc/powerpc64/start.S: here.
* sysdeps/powerpc/powerpc64/elf/Makefile: Merge into ...
* sysdeps/powerpc/powerpc64/Makefile: ... this.
* sysdeps/powerpc/powerpc64/elf/configure.in: Merge into ...
* sysdeps/powerpc/powerpc64/configure.in: ... this.
* sysdeps/powerpc/powerpc64/elf/configure: Delete file.
* sysdeps/powerpc/powerpc32/elf/bzero.S: Moved to ...
* sysdeps/powerpc/powerpc32/bzero.S: ... here.
* sysdeps/powerpc/powerpc32/elf/start.S: Moved to ...
* sysdeps/powerpc/powerpc32/start.S: ... here.
* sysdeps/powerpc/powerpc32/elf/configure.in: Merge into ...
* sysdeps/powerpc/powerpc32/configure.in: ... this.
* sysdeps/powerpc/powerpc32/elf/configure: Delete file.
* sysdeps/powerpc/elf/ifunc-sel.h: Moved to ...
* sysdeps/powerpc/ifunc-sel.h: ... here.
* sysdeps/powerpc/elf/rtld-global-offsets.sym: Moved to ...
* sysdeps/powerpc/rtld-global-offsets.sym: ... here.
* sysdeps/sparc/elf/configure.in: Moved to ...
* sysdeps/sparc/configure.in: ... here.
* sysdeps/sparc/elf/configure: Delete file.
* sysdeps/sparc/sparc32/elf/start.S: Moved to ...
* sysdeps/sparc/sparc32/start.S: ... here.
* sysdeps/sparc/sparc64/elf/start.S: Moved to ...
* sysdeps/sparc/sparc64/start.S: ... here.
* sysdeps/sparc/sparc32/elf/Makefile: Merged into ...
* sysdeps/sparc/sparc32/Makefile: ... this.
* sysdeps/sparc/sparc64/elf/Makefile: Merged into ...
* sysdeps/sparc/sparc64/Makefile: ... this.
* sysdeps/s390/s390-32/elf/bsd-_setjmp.S: Moved to ...
* sysdeps/s390/s390-32/bsd-_setjmp.S: ... here.
* sysdeps/s390/s390-32/elf/bsd-setjmp.S: Moved to ...
* sysdeps/s390/s390-32/bsd-setjmp.S: ... here.
* sysdeps/s390/s390-32/elf/setjmp.S: Moved to ...
* sysdeps/s390/s390-32/setjmp.S: ... here.
* sysdeps/s390/s390-32/elf/configure.in: Moved to ...
* sysdeps/s390/s390-32/configure.in: ... here.
* sysdeps/s390/s390-32/elf/configure: Delete file.
* sysdeps/s390/s390-32/elf/start.S: Moved to ...
* sysdeps/s390/s390-32/start.S: ... here.
* sysdeps/s390/s390-64/elf/bsd-_setjmp.S: Moved to ...
* sysdeps/s390/s390-64/bsd-_setjmp.S: ... here.
* sysdeps/s390/s390-64/elf/bsd-setjmp.S: Moved to ...
* sysdeps/s390/s390-64/bsd-setjmp.S: ... here.
* sysdeps/s390/s390-64/elf/setjmp.S: Moved to ...
* sysdeps/s390/s390-64/setjmp.S: ... here.
* sysdeps/s390/s390-64/elf/configure.in: Moved to ...
* sysdeps/s390/s390-64/configure.in: ... here
* sysdeps/s390/s390-64/elf/configure: Delete file.
* sysdeps/s390/s390-64/elf/start.S: Moved to ...
* sysdeps/s390/s390-64/start.S: ... here.
* sysdeps/s390/s390-64/elf/configure: Delete.
* configure.in: Remove support for elf directories in sysdeps.
* configure: Regenerated.
* sysdeps/i386/configure: Regenerated.
* sysdeps/powerpc/powerpc32/configure: Regenerated.
* sysdeps/powerpc/powerpc64/configure: Regenerated.
* sysdeps/s390/s390-32/configure: Regenerated.
* sysdeps/s390/s390-64/configure: Regenerated.
* sysdeps/sh/configure: Regenerated.
* sysdeps/sparc/configure: Regenerated.
* sysdeps/x86_64/configure: Regenerated.
2012-03-26 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/powerpc/fpu/libm-test-ulps: Update.

View File

@ -1,5 +1,5 @@
/* Return list with names for address in backtrace.
Copyright (C) 1998, 2000 Free Software Foundation, Inc.
Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -17,13 +17,20 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <assert.h>
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ldsodefs.h>
/* Assume the worst for the width of an address. */
#define WORD_WIDTH 16
#if __ELF_NATIVE_CLASS == 32
# define WORD_WIDTH 8
#else
/* We assyme 64bits. */
# define WORD_WIDTH 16
#endif
char **
@ -31,16 +38,37 @@ __backtrace_symbols (array, size)
void *const *array;
int size;
{
Dl_info info[size];
int status[size];
int cnt;
size_t total = 0;
char **result;
/* We can compute the text size needed for the symbols since we print
them all as "[+0x<addr>]". */
total = size * (WORD_WIDTH + 6);
/* Fill in the information we can get from `dladdr'. */
for (cnt = 0; cnt < size; ++cnt)
{
struct link_map *map;
status[cnt] = _dl_addr (array[cnt], &info[cnt], &map, NULL);
if (status[cnt] && info[cnt].dli_fname && info[cnt].dli_fname[0] != '\0')
{
/* We have some info, compute the length of the string which will be
"<file-name>(<sym-name>+offset) [address]. */
total += (strlen (info[cnt].dli_fname ?: "")
+ strlen (info[cnt].dli_sname ?: "")
+ 3 + WORD_WIDTH + 3 + WORD_WIDTH + 5);
/* The load bias is more useful to the user than the load
address. The use of these addresses is to calculate an
address in the ELF file, so its prelinked bias is not
something we want to subtract out. */
info[cnt].dli_fbase = (void *) map->l_addr;
}
else
total += 5 + WORD_WIDTH;
}
/* Allocate memory for the result. */
result = malloc (size * sizeof (char *) + total);
result = (char **) malloc (size * sizeof (char *) + total);
if (result != NULL)
{
char *last = (char *) (result + size);
@ -48,8 +76,45 @@ __backtrace_symbols (array, size)
for (cnt = 0; cnt < size; ++cnt)
{
result[cnt] = last;
last += 1 + sprintf (last, "[+%p]", array[cnt]);
if (status[cnt]
&& info[cnt].dli_fname != NULL && info[cnt].dli_fname[0] != '\0')
{
if (info[cnt].dli_sname == NULL)
/* We found no symbol name to use, so describe it as
relative to the file. */
info[cnt].dli_saddr = info[cnt].dli_fbase;
if (info[cnt].dli_sname == NULL && info[cnt].dli_saddr == 0)
last += 1 + sprintf (last, "%s(%s) [%p]",
info[cnt].dli_fname ?: "",
info[cnt].dli_sname ?: "",
array[cnt]);
else
{
char sign;
ptrdiff_t offset;
if (array[cnt] >= (void *) info[cnt].dli_saddr)
{
sign = '+';
offset = array[cnt] - info[cnt].dli_saddr;
}
else
{
sign = '-';
offset = info[cnt].dli_saddr - array[cnt];
}
last += 1 + sprintf (last, "%s(%s%c%#tx) [%p]",
info[cnt].dli_fname ?: "",
info[cnt].dli_sname ?: "",
sign, offset, array[cnt]);
}
}
else
last += 1 + sprintf (last, "[%p]", array[cnt]);
}
assert (last <= (char *) result + size * sizeof (char *) + total);
}
return result;

View File

@ -1,5 +1,5 @@
/* Write formatted list with names for addresses in backtrace to a file.
Copyright (C) 1998, 2003, 2005 Free Software Foundation, Inc.
Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -22,7 +22,7 @@
#include <sys/uio.h>
#include <_itoa.h>
#include <not-cancel.h>
#include <ldsodefs.h>
#if __ELF_NATIVE_CLASS == 32
# define WORD_WIDTH 8
@ -38,25 +38,87 @@ __backtrace_symbols_fd (array, size, fd)
int size;
int fd;
{
struct iovec iov[3];
struct iovec iov[9];
int cnt;
for (cnt = 0; cnt < size; ++cnt)
{
char buf[WORD_WIDTH];
char buf2[WORD_WIDTH];
Dl_info info;
struct link_map *map;
size_t last = 0;
iov[0].iov_base = (void *) "[0x";
iov[0].iov_len = 3;
if (_dl_addr (array[cnt], &info, &map, NULL)
&& info.dli_fname != NULL && info.dli_fname[0] != '\0')
{
/* Name of the file. */
iov[0].iov_base = (void *) info.dli_fname;
iov[0].iov_len = strlen (info.dli_fname);
last = 1;
iov[1].iov_base = _itoa_word ((unsigned long int) array[cnt],
&buf[WORD_WIDTH], 16, 0);
iov[1].iov_len = &buf[WORD_WIDTH] - (char *) iov[1].iov_base;
if (info.dli_sname != NULL || map->l_addr != 0)
{
size_t diff;
iov[2].iov_base = (void *) "]\n";
iov[2].iov_len = 2;
iov[last].iov_base = (void *) "(";
iov[last].iov_len = 1;
++last;
/* We prefer to use the non-cancelable interface if it is available. */
writev_not_cancel_no_status (fd, iov, 3);
if (info.dli_sname != NULL)
{
/* We have a symbol name. */
iov[last].iov_base = (void *) info.dli_sname;
iov[last].iov_len = strlen (info.dli_sname);
++last;
}
else
/* We have no symbol, so describe it as relative to the file.
The load bias is more useful to the user than the load
address. The use of these addresses is to calculate an
address in the ELF file, so its prelinked bias is not
something we want to subtract out. */
info.dli_saddr = (void *) map->l_addr;
if (array[cnt] >= (void *) info.dli_saddr)
{
iov[last].iov_base = (void *) "+0x";
diff = array[cnt] - info.dli_saddr;
}
else
{
iov[last].iov_base = (void *) "-0x";
diff = info.dli_saddr - array[cnt];
}
iov[last].iov_len = 3;
++last;
iov[last].iov_base = _itoa_word ((unsigned long int) diff,
&buf2[WORD_WIDTH], 16, 0);
iov[last].iov_len = (&buf2[WORD_WIDTH]
- (char *) iov[last].iov_base);
++last;
iov[last].iov_base = (void *) ")";
iov[last].iov_len = 1;
++last;
}
}
iov[last].iov_base = (void *) "[0x";
iov[last].iov_len = 3;
++last;
iov[last].iov_base = _itoa_word ((unsigned long int) array[cnt],
&buf[WORD_WIDTH], 16, 0);
iov[last].iov_len = &buf[WORD_WIDTH] - (char *) iov[last].iov_base;
++last;
iov[last].iov_base = (void *) "]\n";
iov[last].iov_len = 2;
++last;
__writev (fd, iov, last);
}
}
weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd)

View File

@ -1,122 +0,0 @@
/* Return list with names for address in backtrace.
Copyright (C) 1998,1999,2000,2001,2003,2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <assert.h>
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ldsodefs.h>
#if __ELF_NATIVE_CLASS == 32
# define WORD_WIDTH 8
#else
/* We assyme 64bits. */
# define WORD_WIDTH 16
#endif
char **
__backtrace_symbols (array, size)
void *const *array;
int size;
{
Dl_info info[size];
int status[size];
int cnt;
size_t total = 0;
char **result;
/* Fill in the information we can get from `dladdr'. */
for (cnt = 0; cnt < size; ++cnt)
{
struct link_map *map;
status[cnt] = _dl_addr (array[cnt], &info[cnt], &map, NULL);
if (status[cnt] && info[cnt].dli_fname && info[cnt].dli_fname[0] != '\0')
{
/* We have some info, compute the length of the string which will be
"<file-name>(<sym-name>+offset) [address]. */
total += (strlen (info[cnt].dli_fname ?: "")
+ strlen (info[cnt].dli_sname ?: "")
+ 3 + WORD_WIDTH + 3 + WORD_WIDTH + 5);
/* The load bias is more useful to the user than the load
address. The use of these addresses is to calculate an
address in the ELF file, so its prelinked bias is not
something we want to subtract out. */
info[cnt].dli_fbase = (void *) map->l_addr;
}
else
total += 5 + WORD_WIDTH;
}
/* Allocate memory for the result. */
result = (char **) malloc (size * sizeof (char *) + total);
if (result != NULL)
{
char *last = (char *) (result + size);
for (cnt = 0; cnt < size; ++cnt)
{
result[cnt] = last;
if (status[cnt]
&& info[cnt].dli_fname != NULL && info[cnt].dli_fname[0] != '\0')
{
if (info[cnt].dli_sname == NULL)
/* We found no symbol name to use, so describe it as
relative to the file. */
info[cnt].dli_saddr = info[cnt].dli_fbase;
if (info[cnt].dli_sname == NULL && info[cnt].dli_saddr == 0)
last += 1 + sprintf (last, "%s(%s) [%p]",
info[cnt].dli_fname ?: "",
info[cnt].dli_sname ?: "",
array[cnt]);
else
{
char sign;
ptrdiff_t offset;
if (array[cnt] >= (void *) info[cnt].dli_saddr)
{
sign = '+';
offset = array[cnt] - info[cnt].dli_saddr;
}
else
{
sign = '-';
offset = info[cnt].dli_saddr - array[cnt];
}
last += 1 + sprintf (last, "%s(%s%c%#tx) [%p]",
info[cnt].dli_fname ?: "",
info[cnt].dli_sname ?: "",
sign, offset, array[cnt]);
}
}
else
last += 1 + sprintf (last, "[%p]", array[cnt]);
}
assert (last <= (char *) result + size * sizeof (char *) + total);
}
return result;
}
weak_alias (__backtrace_symbols, backtrace_symbols)

View File

@ -1,125 +0,0 @@
/* Write formatted list with names for addresses in backtrace to a file.
Copyright (C) 1998,2000,2003,2005,2009,2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <execinfo.h>
#include <string.h>
#include <sys/uio.h>
#include <_itoa.h>
#include <ldsodefs.h>
#if __ELF_NATIVE_CLASS == 32
# define WORD_WIDTH 8
#else
/* We assume 64bits. */
# define WORD_WIDTH 16
#endif
void
__backtrace_symbols_fd (array, size, fd)
void *const *array;
int size;
int fd;
{
struct iovec iov[9];
int cnt;
for (cnt = 0; cnt < size; ++cnt)
{
char buf[WORD_WIDTH];
char buf2[WORD_WIDTH];
Dl_info info;
struct link_map *map;
size_t last = 0;
if (_dl_addr (array[cnt], &info, &map, NULL)
&& info.dli_fname != NULL && info.dli_fname[0] != '\0')
{
/* Name of the file. */
iov[0].iov_base = (void *) info.dli_fname;
iov[0].iov_len = strlen (info.dli_fname);
last = 1;
if (info.dli_sname != NULL || map->l_addr != 0)
{
size_t diff;
iov[last].iov_base = (void *) "(";
iov[last].iov_len = 1;
++last;
if (info.dli_sname != NULL)
{
/* We have a symbol name. */
iov[last].iov_base = (void *) info.dli_sname;
iov[last].iov_len = strlen (info.dli_sname);
++last;
}
else
/* We have no symbol, so describe it as relative to the file.
The load bias is more useful to the user than the load
address. The use of these addresses is to calculate an
address in the ELF file, so its prelinked bias is not
something we want to subtract out. */
info.dli_saddr = (void *) map->l_addr;
if (array[cnt] >= (void *) info.dli_saddr)
{
iov[last].iov_base = (void *) "+0x";
diff = array[cnt] - info.dli_saddr;
}
else
{
iov[last].iov_base = (void *) "-0x";
diff = info.dli_saddr - array[cnt];
}
iov[last].iov_len = 3;
++last;
iov[last].iov_base = _itoa_word ((unsigned long int) diff,
&buf2[WORD_WIDTH], 16, 0);
iov[last].iov_len = (&buf2[WORD_WIDTH]
- (char *) iov[last].iov_base);
++last;
iov[last].iov_base = (void *) ")";
iov[last].iov_len = 1;
++last;
}
}
iov[last].iov_base = (void *) "[0x";
iov[last].iov_len = 3;
++last;
iov[last].iov_base = _itoa_word ((unsigned long int) array[cnt],
&buf[WORD_WIDTH], 16, 0);
iov[last].iov_len = &buf[WORD_WIDTH] - (char *) iov[last].iov_base;
++last;
iov[last].iov_base = (void *) "]\n";
iov[last].iov_len = 2;
++last;
__writev (fd, iov, last);
}
}
weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd)
libc_hidden_def (__backtrace_symbols_fd)

View File

@ -1,3 +1,9 @@
ld {
GLIBC_2.3 {
# The alternative i386 runtime interface to TLS.
___tls_get_addr;
}
}
libc {
GLIBC_2.0 {
# Functions from libgcc.

View File

@ -348,3 +348,47 @@ fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_novzeroupper" >&5
$as_echo "$libc_cv_cc_novzeroupper" >&6; }
# Check for support of thread-local storage handling in assembler and
# linker.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for i386 TLS support" >&5
$as_echo_n "checking for i386 TLS support... " >&6; }
if ${libc_cv_386_tls+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .long 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 4
.text
baz: leal bar@TLSLDM(%ebx), %eax
leal bar@DTPOFF(%eax), %edx
subl foo@GOTTPOFF(%edx), %eax
subl $bar@TPOFF, %eax
movl foo@GOTNTPOFF(%edx), %ecx
movl %gs:(%ecx), %eax
movl %gs:bar@NTPOFF, %eax
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_386_tls=yes
else
libc_cv_386_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_386_tls" >&5
$as_echo "$libc_cv_386_tls" >&6; }
if test $libc_cv_386_tls = no; then
as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

View File

@ -85,3 +85,37 @@ LIBC_TRY_CC_OPTION([-mno-vzeroupper],
[libc_cv_cc_novzeroupper=yes],
[libc_cv_cc_novzeroupper=no])
])
# Check for support of thread-local storage handling in assembler and
# linker.
AC_CACHE_CHECK(for i386 TLS support, libc_cv_386_tls, [dnl
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .long 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 4
.text
baz: leal bar@TLSLDM(%ebx), %eax
leal bar@DTPOFF(%eax), %edx
subl foo@GOTTPOFF(%edx), %eax
subl $bar@TPOFF, %eax
movl foo@GOTNTPOFF(%edx), %ecx
movl %gs:(%ecx), %eax
movl %gs:bar@NTPOFF, %eax
EOF
dnl
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
libc_cv_386_tls=yes
else
libc_cv_386_tls=no
fi
rm -f conftest*])
if test $libc_cv_386_tls = no; then
AC_MSG_ERROR([the assembler must support TLS])
fi
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)

View File

@ -1,6 +0,0 @@
ld {
GLIBC_2.3 {
# The alternative i386 runtime interface to TLS.
___tls_get_addr;
}
}

View File

@ -1,128 +0,0 @@
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
as_lineno_1=$LINENO as_lineno_1a=$LINENO
as_lineno_2=$LINENO as_lineno_2a=$LINENO
eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
# Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
' <$as_myself |
sed '
s/[$]LINENO.*/&-/
t lineno
b
:lineno
N
:loop
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
. "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/i386/elf.
# Check for support of thread-local storage handling in assembler and
# linker.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for i386 TLS support" >&5
$as_echo_n "checking for i386 TLS support... " >&6; }
if ${libc_cv_386_tls+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .long 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 4
.text
baz: leal bar@TLSLDM(%ebx), %eax
leal bar@DTPOFF(%eax), %edx
subl foo@GOTTPOFF(%edx), %eax
subl $bar@TPOFF, %eax
movl foo@GOTNTPOFF(%edx), %ecx
movl %gs:(%ecx), %eax
movl %gs:bar@NTPOFF, %eax
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_386_tls=yes
else
libc_cv_386_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_386_tls" >&5
$as_echo "$libc_cv_386_tls" >&6; }
if test $libc_cv_386_tls = no; then
as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

View File

@ -1,36 +0,0 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/i386/elf.
# Check for support of thread-local storage handling in assembler and
# linker.
AC_CACHE_CHECK(for i386 TLS support, libc_cv_386_tls, [dnl
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .long 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 4
.text
baz: leal bar@TLSLDM(%ebx), %eax
leal bar@DTPOFF(%eax), %edx
subl foo@GOTTPOFF(%edx), %eax
subl $bar@TPOFF, %eax
movl foo@GOTNTPOFF(%edx), %ecx
movl %gs:(%ecx), %eax
movl %gs:bar@NTPOFF, %eax
EOF
dnl
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
libc_cv_386_tls=yes
else
libc_cv_386_tls=no
fi
rm -f conftest*])
if test $libc_cv_386_tls = no; then
AC_MSG_ERROR([the assembler must support TLS])
fi
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)

View File

@ -1,6 +1,5 @@
/* Startup code compliant to the ELF i386 ABI.
Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
Copyright (C) 1995-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or

View File

@ -1,2 +0,0 @@
#define DUMMIES dummy0
#include <sysdeps/unix/start.c>

View File

@ -1,186 +0,0 @@
/* Copyright (C) 1991-1997,2004,2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
In addition to the permissions in the GNU Lesser General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file with other
programs, and to distribute those programs without any restriction
coming from the use of this file. (The GNU Lesser General Public
License restrictions do apply in other respects; for example, they
cover modification of the file, and distribution when not linked
into another program.)
Note that people who make modified versions of this file are not
obligated to grant this special exception for their modified
versions; it is their choice whether to do so. The GNU Lesser
General Public License gives permission to release a modified
version without this exception; this exception also makes it
possible to release a modified version which carries forward this
exception.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#ifndef NO_SHLIB
#include <sys/exec.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <link.h>
#include <syscall.h>
#endif
#if !defined (__GNUC__) || __GNUC__ < 2
#error This file uses GNU C extensions; you must compile with GCC version 2.
#endif
/* The first piece of initialized data. */
int __data_start = 0;
weak_alias (__data_start, data_start)
extern void __libc_init (int argc, char **argv, char **envp) __THROW;
extern int main (int argc, char **argv, char **envp) __THROW;
register long int sp asm("%sp"), fp asm("%fp");
#ifndef NO_SHLIB
static void init_shlib (void) __THROW;
#endif
#ifndef NO_EXPLICIT_START
/* Declare _start with an explicit assembly symbol name of `start'
(note no leading underscore). This is the name Sun's crt0.o uses,
and programs are often linked with `ld -e start'. */
void _start (void) asm ("start");
#endif
void
_start (void)
{
/* It is important that these be declared `register'.
Otherwise, when compiled without optimization, they are put on the
stack, which loses completely after we zero the FP. */
register int argc;
register char **argv, **envp;
/* Unwind the frame built when we entered the function. */
asm("restore");
/* And clear the frame pointer. */
fp = 0;
/* The argument info starts after one register
window (64 bytes) past the SP. */
argc = ((int *) sp)[16];
argv = (char **) &((int *) sp)[17];
envp = &argv[argc + 1];
__environ = envp;
#ifndef NO_SHLIB
init_shlib ();
#endif
/* Allocate 24 bytes of stack space for the register save area. */
sp -= 24;
__libc_init (argc, argv, envp);
exit (main (argc, argv, envp));
}
#ifndef NO_SHLIB
/* System calls for use by the bootstrap routine.
These are defined here since the usual calls may be dynamically linked. */
int syscall (int sysno, ...) asm ("init_syscall");
asm ("init_syscall:\n"
" clr %g1\n"
" ta 0\n"
" bcc 1f\n"
" sethi %hi(_errno), %g1\n"
" st %o0, [%g1 + %lo(_errno)]\n"
" sub %g0, 1, %o0\n"
"1:retl\n"
" nop");
static void
init_shlib ()
{
extern struct link_dynamic _DYNAMIC;
int so, zf;
caddr_t somap;
caddr_t sodmap;
caddr_t sobssmap;
void (*ldstart) (int, int);
struct exec soexec;
struct
{
caddr_t crt_ba;
int crt_dzfd;
int crt_ldfd;
struct link_dynamic *crt_dp;
char **crt_ep;
caddr_t crt_bp;
} soarg;
/* If not dynamically linked, do nothing. */
if (&_DYNAMIC == 0)
return;
/* Map in the dynamic linker. */
so = syscall (SYS_open, "/usr/lib/ld.so", O_RDONLY);
if (syscall (SYS_read, so, &soexec, sizeof (soexec)) != sizeof (soexec)
|| soexec.a_magic != ZMAGIC)
{
static const char emsg[] = "crt0: no /usr/lib/ld.so\n";
syscall (SYS_write, 2, emsg, sizeof (emsg) - 1);
syscall (SYS_exit, 127);
}
somap = (caddr_t) syscall (SYS_mmap, 0,
soexec.a_text + soexec.a_data + soexec.a_bss,
PROT_READ | PROT_EXEC, _MAP_NEW | MAP_PRIVATE,
so, 0);
sodmap = (caddr_t) syscall (SYS_mmap, somap + soexec.a_text, soexec.a_data,
PROT_READ | PROT_WRITE | PROT_EXEC,
_MAP_NEW | MAP_FIXED | MAP_PRIVATE,
so, soexec.a_text);
zf = syscall (SYS_open, "/dev/zero", O_RDONLY);
if (soexec.a_bss != 0)
sobssmap = (caddr_t) syscall (SYS_mmap,
somap + soexec.a_text + soexec.a_data,
soexec.a_bss,
PROT_READ | PROT_WRITE | PROT_EXEC,
_MAP_NEW | MAP_FIXED | MAP_PRIVATE,
zf, 0);
/* Call the entry point of the dynamic linker. */
soarg.crt_ba = somap;
soarg.crt_dzfd = zf;
soarg.crt_ldfd = so;
soarg.crt_dp = &_DYNAMIC;
soarg.crt_ep = __environ;
soarg.crt_bp = (caddr_t) &&retaddr;
ldstart = (__typeof (ldstart)) (somap + soexec.a_entry);
(*ldstart) (1, (char *) &soarg - (char *) sp);
retaddr:
}
#endif

View File

@ -1,95 +0,0 @@
/* Copyright (C) 1991, 93, 1995-1998, 2000, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
In addition to the permissions in the GNU Lesser General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file with other
programs, and to distribute those programs without any restriction
coming from the use of this file. (The GNU Lesser General Public
License restrictions do apply in other respects; for example, they
cover modification of the file, and distribution when not linked
into another program.)
Note that people who make modified versions of this file are not
obligated to grant this special exception for their modified
versions; it is their choice whether to do so. The GNU Lesser
General Public License gives permission to release a modified
version without this exception; this exception also makes it
possible to release a modified version which carries forward this
exception.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sysdep.h> /* In case it wants to define anything. */
/* The first piece of initialized data. */
int __data_start = 0;
weak_alias (__data_start, data_start)
#ifdef DUMMIES
#define ARG_DUMMIES DUMMIES,
#define DECL_DUMMIES int DUMMIES;
#else
#define ARG_DUMMIES
#define DECL_DUMMIES
#endif
extern void __libc_init (int argc, char **argv, char **envp);
extern int main (int argc, char **argv, char **envp);
/* Not a prototype because it gets called strangely. */
static void start1();
#ifndef HAVE__start
/* N.B.: It is important that this be the first function.
This file is the first thing in the text section. */
void
_start ()
{
start1 ();
}
#endif
/* ARGSUSED */
static void
start1 (ARG_DUMMIES argc, argp)
DECL_DUMMIES
int argc;
char *argp;
{
char **argv = &argp;
/* The environment starts just after ARGV. */
__environ = &argv[argc + 1];
/* If the first thing after ARGV is the arguments
themselves, there is no environment. */
if ((char *) __environ == *argv)
/* The environment is empty. Make __environ
point at ARGV[ARGC], which is NULL. */
--__environ;
/* Do C library initializations. */
__libc_init (argc, argv, __environ);
/* Call the user program. */
exit (main (argc, argv, __environ));
}

View File

@ -1,3 +1,366 @@
# The i386 fragment also works for x86_64.
. $srcdir/sysdeps/i386/configure
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
as_lineno_1=$LINENO as_lineno_1a=$LINENO
as_lineno_2=$LINENO as_lineno_2a=$LINENO
eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
# Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
' <$as_myself |
sed '
s/[$]LINENO.*/&-/
t lineno
b
:lineno
N
:loop
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
. "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
# ac_fn_c_try_compile LINENO
# --------------------------
# Try to compile conftest.$ac_ext, and return whether this succeeded.
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
rm -f conftest.$ac_objext
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then :
ac_retval=0
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_compile
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
# INCLUDES, setting the cache variable VAR accordingly.
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
eval "$3=yes"
else
eval "$3=no"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
eval ac_res=\$$3
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/x86_64.
ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes. */
"
if test "x$ac_cv_header_cpuid_h" = xyes; then :
else
as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if -g produces usable source locations for assembler-with-cpp" >&5
$as_echo_n "checking if -g produces usable source locations for assembler-with-cpp... " >&6; }
if ${libc_cv_cpp_asm_debuginfo+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.S <<EOF
#include "confdefs.h"
/* comment on
two lines */
${libc_cv_dot_text}
${libc_cv_asm_global_directive} foo
foo:
/* Unfortunately this test only works for a real instruction,
not for any of the machine-independent pseudo-ops.
So we just have to assume everybody has a "nop". */
nop
/* comment */
nop
/* comment */
nop
EOF
if { ac_try='${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; } && {
ac_pattern='conftest\.S'
{ ac_try='readelf --debug-dump=line conftest.o |
grep $ac_pattern 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }
}; then
libc_cv_cpp_asm_debuginfo=yes
else
libc_cv_cpp_asm_debuginfo=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cpp_asm_debuginfo" >&5
$as_echo "$libc_cv_cpp_asm_debuginfo" >&6; }
if test $libc_cv_cpp_asm_debuginfo = yes; then
$as_echo "#define HAVE_CPP_ASM_DEBUGINFO 1" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSE4 support" >&5
$as_echo_n "checking for SSE4 support... " >&6; }
if ${libc_cv_cc_sse4+:} false; then :
$as_echo_n "(cached) " >&6
else
if { ac_try='${CC-cc} -msse4 -xc /dev/null -S -o /dev/null'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_cc_sse4=yes
else
libc_cv_cc_sse4=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse4" >&5
$as_echo "$libc_cv_cc_sse4" >&6; }
if test $libc_cv_cc_sse4 = yes; then
$as_echo "#define HAVE_SSE4_SUPPORT 1" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5
$as_echo_n "checking for AVX support... " >&6; }
if ${libc_cv_cc_avx+:} false; then :
$as_echo_n "(cached) " >&6
else
if { ac_try='${CC-cc} -mavx -xc /dev/null -S -o /dev/null'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_cc_avx=yes
else
libc_cv_cc_avx=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_avx" >&5
$as_echo "$libc_cv_cc_avx" >&6; }
if test $libc_cv_cc_avx = yes; then
$as_echo "#define HAVE_AVX_SUPPORT 1" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX encoding of SSE instructions" >&5
$as_echo_n "checking for AVX encoding of SSE instructions... " >&6; }
if ${libc_cv_cc_sse2avx+:} false; then :
$as_echo_n "(cached) " >&6
else
if { ac_try='${CC-cc} -msse2avx -xc /dev/null -S -o /dev/null'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_cc_sse2avx=yes
else
libc_cv_cc_sse2avx=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse2avx" >&5
$as_echo "$libc_cv_cc_sse2avx" >&6; }
if test $libc_cv_cc_sse2avx = yes; then
$as_echo "#define HAVE_SSE2AVX_SUPPORT 1" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FMA4 support" >&5
$as_echo_n "checking for FMA4 support... " >&6; }
if ${libc_cv_cc_fma4+:} false; then :
$as_echo_n "(cached) " >&6
else
if { ac_try='${CC-cc} -mfma4 -xc /dev/null -S -o /dev/null'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_cc_fma4=yes
else
libc_cv_cc_fma4=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_fma4" >&5
$as_echo "$libc_cv_cc_fma4" >&6; }
if test $libc_cv_cc_fma4 = yes; then
$as_echo "#define HAVE_FMA4_SUPPORT 1" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mno-vzeroupper support" >&5
$as_echo_n "checking for -mno-vzeroupper support... " >&6; }
if ${libc_cv_cc_novzeroupper+:} false; then :
$as_echo_n "(cached) " >&6
else
if { ac_try='${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_cc_novzeroupper=yes
else
libc_cv_cc_novzeroupper=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_novzeroupper" >&5
$as_echo "$libc_cv_cc_novzeroupper" >&6; }
# Check for support of thread-local storage handling in assembler and linker.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86-64 TLS support" >&5
$as_echo_n "checking for x86-64 TLS support... " >&6; }
if ${libc_cv_x86_64_tls+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .quad 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 8
.text
baz: leaq bar@TLSLD(%rip), %rdi
leaq bar@DTPOFF(%rax), %rcx
addq foo@GOTTPOFF(%rip), %rax
movq $bar@TPOFF, %rdx
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_x86_64_tls=yes
else
libc_cv_x86_64_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x86_64_tls" >&5
$as_echo "$libc_cv_x86_64_tls" >&6; }
if test $libc_cv_x86_64_tls = no; then
as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# work around problem with autoconf and empty lines at the end of files

122
sysdeps/x86_64/configure.in Normal file
View File

@ -0,0 +1,122 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/x86_64.
AC_CHECK_HEADER([cpuid.h], ,
[AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
[/* No default includes. */])
AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
libc_cv_cpp_asm_debuginfo, [dnl
cat > conftest.S <<EOF
#include "confdefs.h"
/* comment on
two lines */
${libc_cv_dot_text}
${libc_cv_asm_global_directive} foo
foo:
/* Unfortunately this test only works for a real instruction,
not for any of the machine-independent pseudo-ops.
So we just have to assume everybody has a "nop". */
nop
/* comment */
nop
/* comment */
nop
EOF
if AC_TRY_COMMAND([${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&AS_MESSAGE_LOG_FD]) && {
ac_pattern='conftest\.S'
AC_TRY_COMMAND([readelf --debug-dump=line conftest.o |
grep $ac_pattern 1>&AS_MESSAGE_LOG_FD])
}; then
libc_cv_cpp_asm_debuginfo=yes
else
libc_cv_cpp_asm_debuginfo=no
fi
rm -f conftest*])AC_SUBST(libc_cv_cpp_asm_debuginfo)
if test $libc_cv_cpp_asm_debuginfo = yes; then
AC_DEFINE(HAVE_CPP_ASM_DEBUGINFO)
fi
dnl Check if -msse4 works.
AC_CACHE_CHECK(for SSE4 support, libc_cv_cc_sse4, [dnl
if AC_TRY_COMMAND([${CC-cc} -msse4 -xc /dev/null -S -o /dev/null]); then
libc_cv_cc_sse4=yes
else
libc_cv_cc_sse4=no
fi])
if test $libc_cv_cc_sse4 = yes; then
AC_DEFINE(HAVE_SSE4_SUPPORT)
fi
dnl Check if -mavx works.
AC_CACHE_CHECK(for AVX support, libc_cv_cc_avx, [dnl
if AC_TRY_COMMAND([${CC-cc} -mavx -xc /dev/null -S -o /dev/null]); then
libc_cv_cc_avx=yes
else
libc_cv_cc_avx=no
fi])
if test $libc_cv_cc_avx = yes; then
AC_DEFINE(HAVE_AVX_SUPPORT)
fi
dnl Check if -msse2avx works.
AC_CACHE_CHECK(for AVX encoding of SSE instructions, libc_cv_cc_sse2avx, [dnl
if AC_TRY_COMMAND([${CC-cc} -msse2avx -xc /dev/null -S -o /dev/null]); then
libc_cv_cc_sse2avx=yes
else
libc_cv_cc_sse2avx=no
fi])
if test $libc_cv_cc_sse2avx = yes; then
AC_DEFINE(HAVE_SSE2AVX_SUPPORT)
fi
dnl Check if -mfma4 works.
AC_CACHE_CHECK(for FMA4 support, libc_cv_cc_fma4, [dnl
if AC_TRY_COMMAND([${CC-cc} -mfma4 -xc /dev/null -S -o /dev/null]); then
libc_cv_cc_fma4=yes
else
libc_cv_cc_fma4=no
fi])
if test $libc_cv_cc_fma4 = yes; then
AC_DEFINE(HAVE_FMA4_SUPPORT)
fi
dnl Check if -mno-vzeroupper works.
AC_CACHE_CHECK(for -mno-vzeroupper support, libc_cv_cc_novzeroupper, [dnl
if AC_TRY_COMMAND([${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null]); then
libc_cv_cc_novzeroupper=yes
else
libc_cv_cc_novzeroupper=no
fi])
# Check for support of thread-local storage handling in assembler and linker.
AC_CACHE_CHECK(for x86-64 TLS support, libc_cv_x86_64_tls, [dnl
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .quad 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 8
.text
baz: leaq bar@TLSLD(%rip), %rdi
leaq bar@DTPOFF(%rax), %rcx
addq foo@GOTTPOFF(%rip), %rax
movq $bar@TPOFF, %rdx
EOF
dnl
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
libc_cv_x86_64_tls=yes
else
libc_cv_x86_64_tls=no
fi
rm -f conftest*])
if test $libc_cv_x86_64_tls = no; then
AC_MSG_ERROR([the assembler must support TLS])
fi
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# work around problem with autoconf and empty lines at the end of files

View File

@ -1,125 +0,0 @@
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
as_lineno_1=$LINENO as_lineno_1a=$LINENO
as_lineno_2=$LINENO as_lineno_2a=$LINENO
eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
# Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
' <$as_myself |
sed '
s/[$]LINENO.*/&-/
t lineno
b
:lineno
N
:loop
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
. "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/x86_64/elf.
# Check for support of thread-local storage handling in assembler and linker.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86-64 TLS support" >&5
$as_echo_n "checking for x86-64 TLS support... " >&6; }
if ${libc_cv_x86_64_tls+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .quad 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 8
.text
baz: leaq bar@TLSLD(%rip), %rdi
leaq bar@DTPOFF(%rax), %rcx
addq foo@GOTTPOFF(%rip), %rax
movq $bar@TPOFF, %rdx
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
libc_cv_x86_64_tls=yes
else
libc_cv_x86_64_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x86_64_tls" >&5
$as_echo "$libc_cv_x86_64_tls" >&6; }
if test $libc_cv_x86_64_tls = no; then
as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# work around problem with autoconf and empty lines at the end of files

View File

@ -1,33 +0,0 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/x86_64/elf.
# Check for support of thread-local storage handling in assembler and linker.
AC_CACHE_CHECK(for x86-64 TLS support, libc_cv_x86_64_tls, [dnl
cat > conftest.s <<\EOF
.section ".tdata", "awT", @progbits
.globl foo
foo: .quad 1
.section ".tbss", "awT", @nobits
.globl bar
bar: .skip 8
.text
baz: leaq bar@TLSLD(%rip), %rdi
leaq bar@DTPOFF(%rax), %rcx
addq foo@GOTTPOFF(%rip), %rax
movq $bar@TPOFF, %rdx
EOF
dnl
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
libc_cv_x86_64_tls=yes
else
libc_cv_x86_64_tls=no
fi
rm -f conftest*])
if test $libc_cv_x86_64_tls = no; then
AC_MSG_ERROR([the assembler must support TLS])
fi
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# work around problem with autoconf and empty lines at the end of files