Compare commits

..
16314 changed files with 557701 additions and 1224609 deletions
-1
View File
@@ -1,2 +1 @@
ChangeLog merge=merge-changelog
timezone/* -whitespace
-5
View File
@@ -36,11 +36,6 @@ TODO.html
autom4te*.cache
core
.gdb_history
.gdbinit
/linuxthreads
/linuxthreads_db
/rtkaio
*.pyc
+495
View File
@@ -0,0 +1,495 @@
_IO_default_finish
_IO_default_pbackfail
_IO_default_xsgetn
_IO_fgets
_IO_file_open
_IO_file_read
_IO_fprintf
_IO_free_backup_area
_IO_free_wbackup_area
_IO_ftell
_IO_getc
_IO_getline
_IO_getline_info
_IO_gets
_IO_peekc_locked
_IO_printf
_IO_seekoff
_IO_seekpos
_IO_sprintf
_IO_sscanf
_IO_str_pbackfail
_IO_unsave_markers
_IO_unsave_wmarkers
_IO_vfprintf
_IO_vfscanf
_IO_vsprintf
_IO_wdefault_finish
_IO_wdefault_pbackfail
_IO_wdefault_xsgetn
_IO_wfile_seekoff
_IO_wfile_underflow
__asprintf
__assert
__assert_fail
__assert_perror_fail
__backtrace_symbols
__backtrace_symbols_fd
__close
__connect
__dcgettext
__deregister_frame
__deregister_frame_info
__deregister_frame_info_bases
__dgettext
__endmntent
__fork
__fpurge
__freelocale
__getdelim
__getmntent_r
__gmtime_r
__internal_endnetgrent
__internal_getnetgrent_r
__libc_accept
__libc_close
__libc_connect
__libc_fork
__libc_free
__libc_freeres
__libc_fsync
__libc_memalign
__libc_msgrcv
__libc_msgsnd
__libc_msync
__libc_nanosleep
__libc_open
__libc_pause
__libc_pread
__libc_pwrite
__libc_read
__libc_readv
__libc_realloc
__libc_recv
__libc_recvfrom
__libc_recvmsg
__libc_send
__libc_sendmsg
__libc_sendto
__libc_start_main
__libc_system
__libc_tcdrain
__libc_valloc
__libc_wait
__libc_waitpid
__libc_write
__libc_writev
__mbrlen
__mbrtowc
__nanosleep
__newlocale
__nss_group_lookup
__nss_hostname_digits_dots
__nss_hosts_lookup
__nss_lookup_function
__nss_next
__nss_passwd_lookup
__open
__open_catalog
__poll
__printf_fp
__pselect
__read
__res_init
__res_ninit
__select
__send
__setmntent
__sigsuspend
__sigtimedwait
__sigwait
__sigwaitinfo
__strcoll_l
__strerror_r
__strfmon_l
__strftime_l
__strxfrm_l
__uflow
__underflow
__vfscanf
__vsnprintf
__vsscanf
__wait
__waitid
__waitpid
__wcscoll_l
__wcsftime_l
__wcsxfrm_l
__write
__wuflow
__wunderflow
_dl_close
_dl_open
accept
addmntent
addseverity
alphasort
argp_error
argp_failure
argp_state_help
argp_usage
argz_add
argz_add_sep
argz_append
argz_create_sep
argz_delete
argz_insert
argz_replace
asctime
asctime_r
asprintf
backtrace_symbols
backtrace_symbols_fd
btowc
canonicalize_file_name
catclose
catopen
cfree
clearenv
close
closedir
connect
creat
ctime
ctime_r
cuserid
dcgettext
dcngettext
dgettext
dngettext
dprintf
ecvt
ecvt_r
endaliasent
endfsent
endgrent
endhostent
endmntent
endmntent
endnetent
endprotoent
endpwent
endrpcent
endservent
endspent
endttyent
endusershell
envz_add
envz_merge
envz_remove
err
error
error_at_line
errx
ether_hostton
ether_ntoa
ether_ntoa_r
ether_ntohost
exit
fcvt
fcvt_r
fexecve
fgetc
fgetc_unlocked
fgetgrent
fgetgrent_r
fgetpwent
fgetpwent_r
fgets
fgets_unlocked
fgetspent
fgetspent_r
fgetwc
fgetwc_unlocked
fgetws
fgetws_unlocked
fmemopen
fmtmsg
fopen64
fork
fprintf
free
freelocale
freopen
freopen64
fscanf
fseek
fseeko
fseeko64
fstatvfs
fstatvfs64
fsync
ftell
ftello
ftello64
fts_children
fts_close
fts_open
fts_read
fwprintf
fwscanf
gcvt
get_current_dir_name
get_nprocs
get_nprocs_conf
getaliasbyname
getaliasent
getc
getc_unlocked
getchar
getchar_unlocked
getcwd
getdate
getdate_r
getdelim
getgrent
getgrgid
getgrnam
getgrouplist
gethostbyaddr
gethostbyname
gethostbyname2
gethostent
gethostid
getline
getmntent
getmntent_r
getnameinfo
getnetbyaddr
getnetbyname
getnetent
getopt
getopt_long
getopt_long_only
getprotobyname
getprotobynumber
getprotoent
getpt
getpw
getpwent
getpwnam
getpwuid
getrpcbyname
getrpcbynumber
getrpcent
gets
getservbyname
getservbyport
getservent
getspent
getspnam
gettext
getttyent
getttynam
getwc
getwc_unlocked
getwchar
getwchar_unlocked
getwd
glob
globfree
globfree64
gmtime
gmtime_r
hdestroy
hdestroy_r
herror
hstrerror
iconv
iconv_close
iconv_open
if_freenameindex
if_indextoname
if_nameindex
if_nametoindex
inet6_option_alloc
inet6_option_append
inet_ntoa
initgroups
lckpwdf
localtime
localtime_r
lockf
makecontext
mblen
mbrlen
mbrtowc
mbsnrtowcs
mbsrtowcs
mbstowcs
mbtowc
mcheck
mcheck_pedantic
memalign
mkdtemp
mkstemp
mkstemp64
mktemp
mktime
msgrcv
msgsnd
msync
mtrace
mtrace
muntrace
nanosleep
newlocale
ngettext
obstack_printf
obstack_vprintf
open
open_memstream
parse_printf_format
pause
perror
poll
posix_fallocate
posix_memalign
posix_openpt
posix_spawn
posix_spawn_file_actions_addclose
posix_spawn_file_actions_adddup2
posix_spawn_file_actions_addopen
posix_spawn_file_actions_destroy
posix_spawnp
pread
printf
printf_size
pselect
psignal
pthread_exit
putenv
putgrent
putpwent
putspent
pwrite
qecvt
qecvt_r
qfcvt
qfcvt_r
qgcvt
qsort
re_comp
re_compile_pattern
read
readv
realloc
recv
recvfrom
recvmsg
regcomp
regerror
regfree
rewind
scandir
scanf
select
send
send
sendmsg
sendto
setaliasent
setenv
setgrent
sethostent
setlocale
setmntent
setnetent
setprotoent
setpwent
setrpcent
setservent
setspent
setttyent
sgetspent
sigpause
sigsuspend
sigtimedwait
sigwait
sigwaitinfo
sleep
snprintf
sprintf
sprofil
sscanf
statvfs
statvfs64
strcoll
strcoll_l
strerror
strerror_r
strfmon
strfmon_l
strftime
strftime_l
strsignal
strxfrm
strxfrm_l
swprintf
swscanf
system
tcdrain
tdelete
tempnam
textdomain
timegm
timelocal
tmpfile64
tmpnam
tmpnam_r
ttyslot
ulckpwdf
usleep
valloc
vasprintf
vdprintf
verr
verrx
vfprintf
vfscanf
vfwprintf
vfwscanf
vprintf
vscanf
vsnprintf
vsprintf
vsscanf
vswprintf
vswscanf
vwarn
vwarnx
vwprintf
vwscanf
wait
waitid
waitpid
warn
warnx
wcrtomb
wcscoll
wcscoll_l
wcsftime
wcsftime_l
wcsnrtombs
wcsrtombs
wcstombs
wcsxfrm
wcsxfrm_l
wctob
wctomb
wordexp
wordfree
wprintf
write
writev
wscanf
+48
View File
@@ -0,0 +1,48 @@
mkdtemp.os
mktemp.os
tmpnam.os
tmpnam_r.os
tempnam.os
__assert.os
assert.os
assert-perr.os
gconv_builtin.os
gconv_simple.os
gconv.os
iconv.os
strfmon.os
strfmon_l.os
argp-xinl.os
iofdopen.os
printf_fp.os
printf_fphex.os
printf_size.os
strxfrm.os
strxfrm_l.os
strcoll.os
strcoll_l.os
alphasort.os
alphasort64.os
set-freeres.os
btowc.os
wctob.os
mblen.os
strops.os
wstrops.os
fmemopen.os
closedir.os
hsearch.os
hsearch_r.os
catgets.os
digits_dots.os
localealias.os
gconv_conf.os
mtrace.os
tzfile.os
tzset.os
ruserpass.os
mntent_r.os
fstab.os
getttyent.os
nsswitch.os
res_init.os
+20 -19
View File
@@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -303,9 +303,10 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
@@ -335,5 +336,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
+46 -38
View File
@@ -1,8 +1,9 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -22,7 +23,8 @@ specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
strategy to use in any particular case, based on the explanations
below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
@@ -55,7 +57,7 @@ modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
^L
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
@@ -87,9 +89,9 @@ libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
encourage the widest possible use of a certain library, so that it
becomes a de-facto standard. To achieve this, non-free programs must
be allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
@@ -111,7 +113,7 @@ modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
^L
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@@ -136,8 +138,8 @@ included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
interface definition files, plus the scripts used to control
compilation and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
@@ -216,7 +218,7 @@ instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
^L
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
@@ -267,7 +269,7 @@ Library will still fall under Section 6.)
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
^L
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
@@ -303,10 +305,10 @@ of these things:
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
c) Accompany the work with a written offer, valid for at least
three years, to give the same user the materials specified in
Subsection 6a, above, for a charge no more than the cost of
performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
@@ -329,7 +331,7 @@ restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
^L
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
@@ -370,7 +372,7 @@ subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
^L
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
@@ -384,9 +386,10 @@ all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply, and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
@@ -404,11 +407,11 @@ be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
original copyright holder who places the Library under this License
may add an explicit geographical distribution limitation excluding those
countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
@@ -422,7 +425,7 @@ conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
^L
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
@@ -456,19 +459,21 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
^L
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
redistribution under these terms (or, alternatively, under the terms
of the ordinary General Public License).
To apply these terms, attach the following notices to the library.
It is safest to attach them to the start of each source file to most
effectively convey the exclusion of warranty; and each file should
have at least the "copyright" line and a pointer to where the full
notice is found.
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
@@ -485,18 +490,21 @@ convey the exclusion of warranty; and each file should have at least the
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
You should also get your employer (if you work as a programmer) or
your school, if any, to sign a "copyright disclaimer" for the library,
if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
library `Frob' (a library for tweaking knobs) written by James
Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
+66 -59453
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1017,7 +1017,7 @@
* elf/dl-error.c (_dl_signal_error): Allocate memory for objname
as well. Reported by Alexander V. Lukyanov <lav@yars.free.net>.
* iconvdata/gconv-modules: Add aliases for Windows charsets.
* iconvdata/gconv-modules: Add aliases for Winblowz charsets.
Patch by Joseph S. Myers <jsm28@cam.ac.uk>.
2000-10-13 Andreas Schwab <schwab@suse.de>
+1 -1
View File
@@ -525,7 +525,7 @@
1998-07-29 12:58 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/glob.c: Windows compatibility stuff.
* sysdeps/generic/glob.c: Winblowz compatibility stuff.
Patch received from Paul D. Smith <psmith@BayNetworks.COM>.
1998-07-29 Andreas Jaeger <aj@arthur.rhein-neckar.de>
-107
View File
@@ -1,107 +0,0 @@
This file describes changes to the shared files of the ports/ add-on
directory. The ports/ directory is no longer used and the files
described here are all gone.
2014-04-29 Carlos O'Donell <carlos@redhat.com>
* README: Removed. The ports repository is no longer used.
2013-10-30 Mike Frysinger <vapier@gentoo.org>
* README: Change references to preconfigure.in to
preconfigure.ac.
2013-01-02 Joseph Myers <joseph@codesourcery.com>
* README: Update copyright dates in example.
2012-12-06 Joseph Myers <joseph@codesourcery.com>
* README: Use sourceware.org in Bugzilla URL.
2012-12-05 Joseph Myers <joseph@codesourcery.com>
* README: Don't refer to ports as a separate repository. Don't
refer to scripts/data/.
2012-07-03 Joseph Myers <joseph@codesourcery.com>
* .gitignore: Remove file.
* Banner: Likewise.
* Makefile: Likewise.
2012-06-21 Carlos O'Donell <carlos_odonell@mentor.com>
* .gitignore: New file.
2012-02-07 Joseph Myers <joseph@codesourcery.com>
* README: Update.
2012-02-07 Joseph Myers <joseph@codesourcery.com>
* README: Document use of ranges in copyright notices.
2011-11-29 Joseph Myers <joseph@codesourcery.com>
* bare, sysdeps/am29k, sysdeps/i860, sysdeps/i960, sysdeps/m88k,
sysdeps/mach, sysdeps/rs6000, sysdeps/standalone, sysdeps/tahoe,
sysdeps/unix/bsd, sysdeps/unix/sysv/hpux, sysdeps/unix/sysv/i386,
sysdeps/unix/sysv/irix4, sysdeps/unix/sysv/isc2.2,
sysdeps/unix/sysv/minix, sysdeps/unix/sysv/sco3.2,
sysdeps/unix/sysv/sco3.2.4, sysdeps/unix/sysv/sysv4, sysdeps/vax,
sysdeps/z8000: Remove.
2010-04-14 Joseph Myers <joseph@codesourcery.com>
* libc-abis: Remove.
2010-04-06 Joseph Myers <joseph@codesourcery.com>
* libc-abis: New.
2006-03-06 Roland McGrath <roland@redhat.com>
* Makefile (%.bz2, %.gz): New pattern rules.
2006-02-28 Roland McGrath <roland@redhat.com>
* Makefile (glibc-port-%-$(dist-version).tar): Don't include top-level
stuff.
* README: Update for new add-on scheme.
2006-02-27 Roland McGrath <roland@redhat.com>
* Makefile: Remove libc boilerplate.
* Makeconfig: File removed.
* configure.in: File removed.
* configure: File removed.
2005-03-22 Roland McGrath <roland@redhat.com>
* Makefile ($(distname).tar): Fail if sysdeps/.../configure files are
not all up to date. Touch configure files after cvs export.
(glibc-port-%-$(dist-version).tar): Likewise.
2004-10-22 Roland McGrath <roland@frob.com>
* Makefile (dist, dist-ports): New target.
(dist-port-%): New pattern rule.
* Makeconfig [!subdir] (ports/%): New pattern rule.
* configure.in: Cope if there are no sysdeps/*/preconfigure files.
* configure: Regenerated.
2004-08-16 Roland McGrath <roland@frob.com>
* Makefile: New file.
2004-08-04 Roland McGrath <roland@frob.com>
New directory implementing glibc add-on infrastructure for
ports maintained separate from the core glibc source tree.
* README, configure.in, Makeconfig, Banner, ChangeLog: New files.
* configure: New generated file.
-624
View File
@@ -1,624 +0,0 @@
This file describes changes to the AArch64 port while it was in the ports
add-on directory. This port is no longer part of an add-on and so
future changes to it should be listed in the top-level ChangeLog file,
not here.
2014-02-11 Marcus Shawcroft <marcus.shawcroft@arm.com>
* sysdeps/aarch64: Move directory to ../sysdeps/aarch64.
* sysdeps/unix/sysv/linux/aarch64: Move directory to
../sysdeps/unix/sysv/linux/aarch64.
2014-01-22 Marcus Shawcroft <marcus.shawcroft@arm.com>
* sysdeps/aarch64/libm-test-ulps: Regenerated.
2014-01-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/Makefile (abi-lp64_be-options): Fix
type in define.
2014-01-20 Tom Tromey <tromey@redhat.com>
[BZ #16169]
* sysdeps/unix/sysv/linux/aarch64/clone.S (__clone): Add CFI
directives; Zero x29.
2014-01-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/configure.ac: New file.
* sysdeps/aarch64/configure: New file.
* sysdeps/aarch64/shlib-versions: Define ld-linux-aarch64_be.so.1
* sysdeps/unix/sysv/linux/aarch64/Makefile (abi-variants)
(abi-lp64-options, abi-lp64-condition, abi-lp64-ld-soname)
(abi-lp64_be-options, abi-lp64_be-condition)
(abi-lp64_be-ld-soname) Define.
* sysdeps/unix/sysv/linux/aarch64/ldconfig.h
(SYSDEP_KNOWN_INTERPRETER_NAMES): Add ld-linux-aarch64_be.so.1
2014-01-07 Marcus Shawcroft <marcus.shawcroft@linaro.org>
[BZ #16387]
* sysdeps/aarch64/fpu/fpu_control.h (_FPU_FPCR_RM_MASK): Define.
* sysdeps/aarch64/soft-fp/sfp-machine.h (FP_ROUNDMODE): Adjust
rounding mode mask.
2014-01-07 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Drop sqrt ULPs.
2014-01-07 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/dl-trampoline.S (_dl_runtime_resolve): Correct
cfi_adjust_cfa_offset offset.
2014-01-06 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h (ptrace_peeksiginfo_args):
Rename to ...
(__ptrace_peeksiginfo_args): ... this.
2014-01-01 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerated.
2014-01-01 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/abort-instr.h: New file.
2014-01-01 Venkataramanan Kumar <venkataramanan.kumar@linaro.org>
* sysdeps/aarch64/__longjmp.S (__longjmp): Demangle sp and lr when
restoring register values.
* sysdeps/aarch64/setjmp.S (__sigsetjmp): Mangle sp and lr
before storing register values.
* sysdeps/arm/jmpbuf-unwind.h (_jmpbuf_sp): Remove.
* sysdeps/aarch64/jmpbuf-offsets.h (_jmpbuf_sp): Add.
(JB_FRAME_ADDRESS): call _jmpbuf_sp.
* sysdeps/aarch64/sysdep.h (LDST_PCREL) : New macros.
(LDST_GLOBAL): Likewise.
* sysdeps/unix/sysv/linux/aarch64/sysdep.h (PTR_MANGLE): New macro.
(PTR_DEMANGLE): Likewise.
(PTR_MANGLE2): Likewise.
(PTR_DEMANGLE2): Likewise.
2013-12-18 Marcus Shawcroft <marcus.shawcroft@linaro.org>
[BZ #15128]
* sysdeps/aarch64/dl-trampoline.S (_dl_runtime_resolve): Save and
restore q0-q7.
2013-12-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h
(FUTEX_WAIT_REQUEUE_PI): Define.
(FUTEX_CMP_REQUEUE_PI): Likewise.
(lll_futex_wait_requeue_pi): Likewise.
(lll_futex_timed_wait_requeue_pi): Likewise.
(lll_futex_cmp_requeue_pi): Likewise.
2013-12-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerated.
2013-12-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Remove sqrt.
2013-12-11 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerate.
2013-11-28 Joseph Myers <joseph@codesourcery.com>
* sysdeps/aarch64/fpu/fegetround.c (fegetround): Use
libm_hidden_def.
2013-11-26 Will Newton <will.newton@linaro.org>
* sysdeps/aarch64/dl-irel.h: Include ldsodefs.h.
(ELF_MACHINE_IRELA): Define. (elf_ifunc_invoke): Pass
hwcap to ifunc resolver function. (elf_irela): New function.
* sysdeps/aarch64/dl-machine.h: Include dl-irel.h.
(elf_machine_rela) Handle STT_GNU_IFUNC symbols and
R_AARCH64_IRELATIVE relocations. (elf_machine_lazy_rel):
Handle R_AARCH64_IRELATIVE relocations.
2013-10-30 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/aarch64/configure.in: Moved to ...
* sysdeps/unix/sysv/linux/aarch64/configure.ac: ... here.
* sysdeps/unix/sysv/linux/aarch64/configure: Regenerated.
2013-09-30 Andrew Pinski <andrew.pinski@caviumnetworks.com>
* sysdeps/unix/sysv/linux/aarch64/sysdep.h (SYSCALL_ERROR_HANDLER):
Fix store to errno to use 32bits.
2013-09-24 Venkataramanan Kumar <venkataramanan.kumar@linaro.org>
* sysdeps/aarch64/machine-gmon.h (__mcount): Accept parameter and
pass it to mcount_internal.
2013-09-24 Venkataramanan Kumar <venkataramanan.kumar@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h: New file.
2013-07-26 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/Versions: New file.
* sysdeps/aarch64/machine-gmon.h: New file.
* sysdeps/aarch64/mcount.c: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist (_mcount): Add.
2013-07-12 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/Makefile (CFLAGS-backtrace.c): Define.
2013-07-09 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/dl-static.c: New file to support
variable page size for AArch64.
* sysdeps/unix/sysv/linux/aarch64/ldsodefs.h: Likewise.
* sysdeps/unix/sysv/linux/aarch64/Makefile: Build dl-static in elf.
* sysdeps/unix/sysv/linux/aarch64/Versions: Add _dl_var_init.
2013-07-05 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerate.
2013-07-04 Andreas Jaeger <aj@suse.de>
For ChangeLog.aarch64:
* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h (PTRACE_LISTEN):
Add define.
(PTRACE_PEEKSIGINFO): Add new value from Linux 3.10.
(ptrace_peeksiginfo_args): Add.
(__ptrace_peeksiginfo_flags): Add.
2013-06-28 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/dl-machine.h (elf_machine_dynamic): De-reference
_GLOBAL_OFFSET_TABLE_.
2013-06-28 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/getcontext.S (__getcontext): Simplify
oPSTATE initialization.
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist:
Update.
2013-06-04 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/getcontext.S (__getcontext):
Initialize pstate.
* sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym (oPSTATE): Define.
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/aarch64/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
2013-05-23 Venkataranmanan Kumar <venkataramanan.kumar@linaro.org>
* sysdeps/aarch64/machine-gmon.h: Remove.
2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/aarch64/libm-test-ulps: Update test names.
2013-05-21 Andreas Schwab <schwab@suse.de>
[BZ #15493]
* sysdeps/aarch64/setjmp.S (__sigsetjmp): Don't clobber register
x1.
[NOT_IN_libc && IS_IN_rtld]: Don't call __sigjmp_save.
2013-05-21 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerate.
2013-05-19 Joseph Myers <joseph@codesourcery.com>
* sysdeps/aarch64/libm-test-ulps: Update names of sincos tests.
2013-05-16 Maciej W. Rozycki <macro@codesourcery.com>
[BZ #15442]
* sysdeps/aarch64/soft-fp/sfp-machine.h (_FP_QNANNEGATEDP): New
macro.
2013-05-12 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/clone.S (__clone):
Do not call sycall_error directly with a confitional branch.
* sysdeps/unix/sysv/linux/aarch64/ioctl.S (__ioctl):
Do not call sycall_error directly with a confitional branch.
2013-03-19 Andreas Schwab <schwab@suse.de>
* sysdeps/unix/sysv/linux/aarch64/configure.in: Set
libc_cv_rtlddir.
* sysdeps/unix/sysv/linux/aarch64/configure: Regenerate.
2013-03-14 Andreas Schwab <schwab@suse.de>
* sysdeps/unix/sysv/linux/aarch64/configure.in: Set
libc_cv_slibdir, libdir and libc_cv_localedir.
* sysdeps/unix/sysv/linux/aarch64/configure: Regenerate.
2013-03-11 Andreas Schwab <schwab@suse.de>
[BZ #15234]
* sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist
(GLIBC_2.17): Remove pthread_atfork.
2013-03-07 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/aarch64/bits/mman.h: Remove all defines
provided by bits/mman-linux.h and include <bits/mman-linux.h>.
2013-02-18 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist: Add
__cxa_thread_atexit_impl.
2013-02-14 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerate.
2013-02-13 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/unix/sysv/linux/aarch64/sigaction.c (__libc_sigaction):
Do not use __ptrvalue.
2013-02-08 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/unix/sysv/linux/aarch64/gettimeofday.c: Do not include
<bp-checks.h>.
(__gettimeofday): Do not use CHECK_1.
2013-01-23 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/strncmp.S: New file.
2013-01-23 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/sysdep.h (ENTRY_ALIGN_AND_PAD): New.
* sysdeps/aarch64/strnlen.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/strlen.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/strcmp.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/bzero.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/memmove.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/memcpy.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/memset.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/sysdep.h (ENTRY_ALIGN): New.
* sysdeps/aarch64/memcmp.S: New file.
2013-01-17 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/sysdep.h (ENTRY, END): Adjust
whitespace.
2013-01-10 Joseph Myers <joseph@codesourcery.com>
* sysdeps/aarch64/bits/setjmp.h (__jmp_buf): Use __extension__
with long long.
2013-01-02 Joseph Myers <joseph@codesourcery.com>
* All files with FSF copyright notices: Update copyright dates
using scripts/update-copyrights.
2012-12-10 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/sysdep.h (INTERNAL_VSYSCALL):
Remove _x0 declarations.
2012-12-07 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerate.
2012-12-07 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/sysdep.h (INLINE_VSYSCALL):
Remove _x0 and sc_err declarations.
2012-12-07 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/mmap.c (mmap): Cast return value.
2012-12-07 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/dl-machine.h (elf_machine_rela): Remove
strtab.
2012-12-04 Steve McIntyre <steve.mcintyre@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/ldconfig.h: Add entries
for /lib/ld-linux.so.3 and /lib/ld-linux-armhf.so.3.
2012-12-04 Steve McIntyre <steve.mcintyre@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/readelflib.c: New file.
2012-11-29 Steve McIntyre <steve.mcintyre@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/dl-cache.h: New file.
2012-11-22 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/libm-test-ulps: Regenerate.
2012-11-21 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h
(lll_futex_timed_wait_bitset): Remove INTERNAL_SYSCALL_ERROR_P.
2012-11-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/fpu/s_fma.c (weak_alias_x):
Remove and switch to weak_alias.
* sysdeps/aarch64/fpu/s_fmin.c (weak_alias_x): Likewise.
* sysdeps/aarch64/fpu/s_frint.c (weak_alias_x): Likewise.
* sysdeps/aarch64/fpu/s_lrint.c (weak_alias_x): Likewise.
* sysdeps/aarch64/fpu/s_lround.c (weak_alias_x): Likewise.
2012-11-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/fpu/s_fma.c (strong_aliasx, NO_LONG_DOUBLE): Remove.
* sysdeps/aarch64/fpu/s_fmin.c (strong_aliasx, NO_LONG_DOUBLE): Likewise.
* sysdeps/aarch64/fpu/s_frint.c (strong_aliasx, NO_LONG_DOUBLE): Likewise.
* sysdeps/aarch64/fpu/s_lrint.c (strong_aliasx, NO_LONG_DOUBLE): Likewise.
* sysdeps/aarch64/fpu/s_lround.c (strong_aliasx, NO_LONG_DOUBLE): Likewise.
2012-11-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/fpu/s_fma.c: Indent preprocessor directives.
* sysdeps/aarch64/fpu/s_fmin.c: Likewise.
* sysdeps/aarch64/fpu/s_frint.c: Likewise.
* sysdeps/aarch64/fpu/s_frintf.c: Likewise.
* sysdeps/aarch64/fpu/s_lrint.c: Likewise.
* sysdeps/aarch64/fpu/s_lround.c: Likewise.
2012-11-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/dl-tlsdesc.S: Use range for copyright years.
* sysdeps/aarch64/dl-tlsdesc.h: Likewise.
* sysdeps/aarch64/tlsdesc.c: Likewise.
* sysdeps/aarch64/fpu/s_ceil.c: Likewise.
* sysdeps/aarch64/fpu/s_ceilf.c: Likewise.
* sysdeps/aarch64/fpu/s_floor.c: Likewise.
* sysdeps/aarch64/fpu/s_floorf.c: Likewise.
* sysdeps/aarch64/fpu/s_fmaf.c: Likewise.
* sysdeps/aarch64/fpu/s_fmax.c: Likewise.
* sysdeps/aarch64/fpu/s_fmaxf.c: Likewise.
* sysdeps/aarch64/fpu/s_fmin.c: Likewise.
* sysdeps/aarch64/fpu/s_fminf.c: Likewise.
* sysdeps/aarch64/fpu/s_frint.c: Likewise.
* sysdeps/aarch64/fpu/s_frintf.c: Likewise.
* sysdeps/aarch64/fpu/s_llrint.c: Likewise.
* sysdeps/aarch64/fpu/s_llrintf.c: Likewise.
* sysdeps/aarch64/fpu/s_llround.c: Likewise.
* sysdeps/aarch64/fpu/s_llroundf.c: Likewise.
* sysdeps/aarch64/fpu/s_lrint.c: Likewise.
* sysdeps/aarch64/fpu/s_lrintf.c: Likewise.
* sysdeps/aarch64/fpu/s_lround.c: Likewise.
* sysdeps/aarch64/fpu/s_lroundf.c: Likewise.
* sysdeps/aarch64/fpu/s_nearbyint.c: Likewise.
* sysdeps/aarch64/fpu/s_nearbyintf.c: Likewise.
* sysdeps/aarch64/fpu/s_rint.c: Likewise.
* sysdeps/aarch64/fpu/s_rintf.c: Likewise.
* sysdeps/aarch64/fpu/s_round.c: Likewise.
* sysdeps/aarch64/fpu/s_roundf.c: Likewise.
* sysdeps/aarch64/fpu/s_trunc.c: Likewise.
* sysdeps/aarch64/fpu/s_truncf.c: Likewise.
2012-11-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/fpu/s_frint.x: Renamed to...
* sysdeps/aarch64/fpu/s_frint.c: ... this new file.
* sysdeps/aarch64/fpu/s_frintf.x: Renamed to...
* sysdeps/aarch64/fpu/s_frintf.c: ... this new file.
* sysdeps/aarch64/fpu/s_ceil.c: Include s_frint.c.
* sysdeps/aarch64/fpu/s_floor.c: Likewise.
* sysdeps/aarch64/fpu/s_nearbyint.c: Likewise.
* sysdeps/aarch64/fpu/s_rint.c: Likewise.
* sysdeps/aarch64/fpu/s_round.c: Likewise.
* sysdeps/aarch64/fpu/s_trunc.c: Likewise.
* sysdeps/aarch64/fpu/s_ceilf.c: Include s_frintf.c.
* sysdeps/aarch64/fpu/s_floorf.c: Likewise.
* sysdeps/aarch64/fpu/s_nearbyintf.c: Likewise.
* sysdeps/aarch64/fpu/s_rintf.c: Likewise.
* sysdeps/aarch64/fpu/s_roundf.c: Likewise.
* sysdeps/aarch64/fpu/s_truncf.c: Likewise.
2012-11-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/fpu/s_fma.c (__CONCATX): Don't use K&R.
* sysdeps/aarch64/fpu/s_fmin.c (__CONCATX): Likewise.
* sysdeps/aarch64/fpu/s_lrint.c (__CONCATX): Likewise.
* sysdeps/aarch64/fpu/s_lround.c (__CONCATX): Likewise.
* sysdeps/aarch64/fpu/s_frint.x (__CONCATX): Likewise.
2012-11-19 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/fpu/s_ceil.c: New file.
* sysdeps/aarch64/fpu/s_ceilf.c: New file.
* sysdeps/aarch64/fpu/s_floor.c: New file.
* sysdeps/aarch64/fpu/s_floorf.c: New file.
* sysdeps/aarch64/fpu/s_fma.c: Replace file.
* sysdeps/aarch64/fpu/s_fmaf.c: New file.
* sysdeps/aarch64/fpu/s_fmax.c: New file.
* sysdeps/aarch64/fpu/s_fmaxf.c: New file.
* sysdeps/aarch64/fpu/s_fmin.c: New file.
* sysdeps/aarch64/fpu/s_fminf.c: New file.
* sysdeps/aarch64/fpu/s_frint.x: New file.
* sysdeps/aarch64/fpu/s_frintf.x: New file.
* sysdeps/aarch64/fpu/s_llrint.c: New file.
* sysdeps/aarch64/fpu/s_llrintf.c: New file.
* sysdeps/aarch64/fpu/s_llround.c: New file.
* sysdeps/aarch64/fpu/s_llroundf.c: New file.
* sysdeps/aarch64/fpu/s_lrint.c: New file.
* sysdeps/aarch64/fpu/s_lrintf.c: New file.
* sysdeps/aarch64/fpu/s_lround.c: New file.
* sysdeps/aarch64/fpu/s_lroundf.c: New file.
* sysdeps/aarch64/fpu/s_nearbyint.c: New file.
* sysdeps/aarch64/fpu/s_nearbyintf.c: New file.
* sysdeps/aarch64/fpu/s_rint.c: New file.
* sysdeps/aarch64/fpu/s_rintf.c: New file.
* sysdeps/aarch64/fpu/s_round.c: New file.
* sysdeps/aarch64/fpu/s_roundf.c: New file.
* sysdeps/aarch64/fpu/s_trunc.c: New file.
* sysdeps/aarch64/fpu/s_truncf.c: New file.
2012-11-09 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/aarch64/Implies: New file.
* sysdeps/aarch64/Makefile: New file.
* sysdeps/aarch64/__longjmp.S: New file.
* sysdeps/aarch64/backtrace.c: New file.
* sysdeps/aarch64/bits: New file.
* sysdeps/aarch64/bits/atomic.h: New file.
* sysdeps/aarch64/bits/endian.h: New file.
* sysdeps/aarch64/bits/fenv.h: New file.
* sysdeps/aarch64/bits/link.h: New file.
* sysdeps/aarch64/bits/linkmap.h: New file.
* sysdeps/aarch64/bits/mathdef.h: New file.
* sysdeps/aarch64/bits/setjmp.h: New file.
* sysdeps/aarch64/bsd-_setjmp.S: New file.
* sysdeps/aarch64/bsd-setjmp.S: New file.
* sysdeps/aarch64/crti.S: New file.
* sysdeps/aarch64/crtn.S: New file.
* sysdeps/aarch64/dl-irel.h: New file.
* sysdeps/aarch64/dl-link.sym: New file.
* sysdeps/aarch64/dl-machine.h: New file.
* sysdeps/aarch64/dl-sysdep.h: New file.
* sysdeps/aarch64/dl-tls.h: New file.
* sysdeps/aarch64/dl-tlsdesc.S: New file.
* sysdeps/aarch64/dl-tlsdesc.h: New file.
* sysdeps/aarch64/dl-trampoline.S: New file.
* sysdeps/aarch64/fpu/fclrexcpt.c: New file.
* sysdeps/aarch64/fpu/fedisblxcpt.c: New file.
* sysdeps/aarch64/fpu/feenablxcpt.c: New file.
* sysdeps/aarch64/fpu/fegetenv.c: New file.
* sysdeps/aarch64/fpu/fegetexcept.c: New file.
* sysdeps/aarch64/fpu/fegetround.c: New file.
* sysdeps/aarch64/fpu/feholdexcpt.c: New file.
* sysdeps/aarch64/fpu/fesetenv.c: New file.
* sysdeps/aarch64/fpu/fesetround.c: New file.
* sysdeps/aarch64/fpu/feupdateenv.c: New file.
* sysdeps/aarch64/fpu/fgetexcptflg.c: New file.
* sysdeps/aarch64/fpu/fraiseexcpt.c: New file.
* sysdeps/aarch64/fpu/fsetexcptflg.c: New file.
* sysdeps/aarch64/fpu/ftestexcept.c: New file.
* sysdeps/aarch64/fpu/get-rounding-mode.h: New file.
* sysdeps/aarch64/fpu/s_fma.c: New file.
* sysdeps/aarch64/fpu_control.h: New file.
* sysdeps/aarch64/jmpbuf-offsets.h: New file.
* sysdeps/aarch64/jmpbuf-unwind.h: New file.
* sysdeps/aarch64/ldsodefs.h: New file.
* sysdeps/aarch64/libc-tls.c: New file.
* sysdeps/aarch64/libm-test-ulps: New file.
* sysdeps/aarch64/machine-gmon.h: New file.
* sysdeps/aarch64/memusage.h: New file.
* sysdeps/aarch64/nptl/Makefile: New file.
* sysdeps/aarch64/nptl/pthread_spin_lock.c: New file.
* sysdeps/aarch64/nptl/pthreaddef.h: New file.
* sysdeps/aarch64/nptl/tcb-offsets.sym: New file.
* sysdeps/aarch64/nptl/tls.h: New file.
* sysdeps/aarch64/sotruss-lib.c: New file.
* sysdeps/unix/sysv/linux/aarch64/Implies: New file.
* sysdeps/unix/sysv/linux/aarch64/Makefile: New file.
* sysdeps/unix/sysv/linux/aarch64/Versions: New file.
* sysdeps/unix/sysv/linux/aarch64/__read_tp.S: New file.
* sysdeps/unix/sysv/linux/aarch64/bits: New file.
* sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h: New file.
* sysdeps/unix/sysv/linux/aarch64/bits/mman.h: New file.
* sysdeps/unix/sysv/linux/aarch64/clone.S: New file.
* sysdeps/unix/sysv/linux/aarch64/configure: New file.
* sysdeps/unix/sysv/linux/aarch64/configure.in: New file.
* sysdeps/unix/sysv/linux/aarch64/getcontext.S: New file.
* sysdeps/unix/sysv/linux/aarch64/gettimeofday.c: New file.
* sysdeps/unix/sysv/linux/aarch64/init-first.c: New file.
* sysdeps/unix/sysv/linux/aarch64/ioctl.S: New file.
* sysdeps/unix/sysv/linux/aarch64/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h: New file.
* sysdeps/unix/sysv/linux/aarch64/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S: New file.
* sysdeps/unix/sysv/linux/aarch64/makecontext.c: New file.
* sysdeps/unix/sysv/linux/aarch64/mmap.c: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/bits: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/clone.S: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/fork.c: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h: New file.
* sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S: New file.
* sysdeps/unix/sysv/linux/aarch64/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/aarch64/setcontext.S: New file.
* sysdeps/unix/sysv/linux/aarch64/sigaction.c: New file.
* sysdeps/unix/sysv/linux/aarch64/swapcontext.S: New file.
* sysdeps/unix/sysv/linux/aarch64/sys/elf.h: New file.
* sysdeps/unix/sysv/linux/aarch64/sys/procfs.h: New file.
* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h: New file.
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h: New file.
* sysdeps/unix/sysv/linux/aarch64/sys/user.h: New file.
* sysdeps/unix/sysv/linux/aarch64/syscall.S: New file.
* sysdeps/unix/sysv/linux/aarch64/syscalls.list: New file.
* sysdeps/unix/sysv/linux/aarch64/sysdep.c: New file.
* sysdeps/unix/sysv/linux/aarch64/sysdep.h: New file.
* sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h: New file.
* sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym: New file.
* sysdeps/unix/sysv/linux/aarch64/vfork.S: New file.
-21
View File
@@ -1,21 +0,0 @@
This file describes changes to the AIX port while it was in the ports/
add-on directory. That port has since been removed entirely.
The ports/ directory is no longer used, so reintroduction of AIX code
would be described in the top-level ChangeLog file, not here.
2011-11-29 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/aix: Remove.
2007-07-10 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/aix/bits/fcntl.h: Comment fix.
2005-12-27 Roland McGrath <roland@redhat.com>
* sysdeps/unix/sysv/aix/bits/setjmp.h (_JMPBUF_UNWINDS): Take third
argument DEMANGLE, and pass SP value through it.
* sysdeps/unix/sysv/aix/powerpc/memset.c: Don't use sysdeps/generic.
File diff suppressed because it is too large Load Diff
-372
View File
@@ -1,372 +0,0 @@
This file describes changes to the AM33 port while it was in the ports/
add-on directory. That port has since been removed entirely.
The ports/ directory is no longer used, so reintroduction of AIX code
would be described in the top-level ChangeLog file, not here.
2014-02-08 Joseph Myers <joseph@codesourcery.com>
* sysdeps/am33: Remove.
* sysdeps/unix/am33: Likewise.
* sysdeps/unix/sysv/linux/am33: Likewise.
2013-11-28 Joseph Myers <joseph@codesourcery.com>
* sysdeps/am33/fpu/fegetround.c (fegetround): Use libm_hidden_def.
2013-10-30 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/am33/configure.in: Moved to ...
* sysdeps/unix/sysv/linux/am33/configure.ac: ... here.
* sysdeps/unix/sysv/linux/am33/configure: Regenerated.
2013-08-29 Ondřej Bílka <neleai@seznam.cz>
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h: Fix typos.
2013-08-21 Ondřej Bílka <neleai@seznam.cz>
* sysdeps/am33/fpu/fraiseexcpt.c: Fix typos.
2013-06-05 Joseph Myers <joseph@codesourcery.com>
* sysdeps/am33/elf/start.S: Remove trailing whitespace.
* sysdeps/am33/fpu/fgetexcptflg.c: Likewise.
2013-05-01 Ryan S. Arnold <rsa@linux.vnet.ibm.com>
* sysdeps/am33/atomicity.h: Add missing #include <stdint.h> due to
uint64_t or uint32_t usage.
2013-03-11 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/am33/bits/mman.h: Remove all defines
provided by bits/mman-linux.h and include <bits/mman-linux.h>.
2013-02-28 Joseph Myers <joseph@codesourcery.com>
* sysdeps/am33/elf/start.S: Don't include "bp-sym.h".
(_start): Don't use BP_SYM.
* sysdeps/unix/sysv/linux/am33/clone.S: Don't include <bp-sym.h>.
(__clone): Don't use BP_SYM.
2013-02-14 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/am33/dl-machine.h [!PROF && !__BOUNDED_POINTERS__]:
Remove __BOUNDED_POINTERS__ from condition.
2013-02-13 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/am33/dl-machine.h (fixup): Do not use __unbounded.
* sysdeps/unix/sysv/linux/am33/brk.c (__brk): Do not use
__ptrvalue.
2013-01-02 Joseph Myers <joseph@codesourcery.com>
* All files with FSF copyright notices: Update copyright dates
using scripts/update-copyrights.
2013-01-01 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h: Reformat copyright
notice.
* sysdeps/unix/sysv/linux/am33/sysdep.S: Likewise.
2012-11-03 Joseph Myers <joseph@codesourcery.com>
* sysdeps/am33/fpu/fclrexcpt.c (feclearexcept): Add
libm_hidden_ver.
[BZ #3439]
* sysdeps/am33/fpu/bits/fenv.h (FE_INEXACT): Define macro to
integer constant usable in #if and use that to give value to enum
constant.
(FE_UNDERFLOW): Likewise.
(FE_OVERFLOW): Likewise.
(FE_DIVBYZERO): Likewise.
(FE_INVALID): Likewise.
(FE_TONEAREST): Likewise.
2012-10-30 Joseph Myers <joseph@codesourcery.com>
[BZ #14047]
* sysdeps/am33/tininess.h: New file.
2012-10-09 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/am33/configure: Regenerated.
2012-08-07 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/am33/configure.in (arch_minimum_kernel):
Change to 2.6.25.
* sysdeps/unix/sysv/linux/am33/configure: Regenerated.
2012-08-01 Roland McGrath <roland@hack.frob.com>
[BZ #14138]
* sysdeps/unix/sysv/linux/am33/getrlimit.c: File removed.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2011-10-05 Andreas Schwab <schwab@redhat.com>
* sysdeps/am33/dl-machine.h (elf_machine_rela)
(elf_machine_lazy_rel): Add parameter skip_ifunc.
2007-10-22 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
2007-07-10 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h: Comment fix.
2006-01-12 Roland McGrath <roland@redhat.com>
* sysdeps/am33/jmpbuf-unwind.h: Include <jmpbuf-offsets.h>.
2006-01-10 Roland McGrath <roland@redhat.com>
* sysdeps/am33/bits/setjmp.h (__JMP_BUF_SP): Macro moved ...
* sysdeps/am33/jmpbuf-offsets.h: ... here, new file.
* sysdeps/am33/bits/setjmp.h (_JMPBUF_UNWINDS, __JMP_BUF_SP):
Move macros ...
* sysdeps/am33/jmpbuf-unwind.h: ... here, new file.
2005-12-27 Roland McGrath <roland@redhat.com>
* sysdeps/am33/bits/setjmp.h (_JMPBUF_UNWINDS): Take third argument
DEMANGLE, and pass SP value through it.
2004-10-25 Alexandre Oliva <aoliva@redhat.com>
* ChangeLog.am33: Added emacs local variables for mode setting and
default changelog name.
* sysdeps/unix/sysv/linux/linuxthreads/sysdep-cancel.h: Moved...
* sysdeps/unix/sysv/linux/am33/linuxthreads/sysdep-cancel.h:
... here, where it should have been added in the first place.
2004-10-22 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/bits/mman.h (PROT_GROWSDOWN): New.
(PROT_GROWSUP): New.
2004-08-16 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/shlib-versions: Moved from top level.
2004-08-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/preconfigure: Renamed from configure.
* Makefile: Removed.
2004-07-20 Alexandre Oliva <aoliva@redhat.com>
Moved from separate linuxthreads tree into am33/linuxthreads
subdirs:
2004-07-01 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/linuxthreads/sysdep-cancel.h
(PSEUDO): Save value returned by CENABLE and pass it to CDISABLE.
* sysdeps/am33/linuxthreads/pt-machine.h (testandset): Take
volatile argument. Improve asm statement.
2001-10-31 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/linuxthreads/pspinlock.c: New file.
* sysdeps/am33/linuxthreads/pt-machine.h: New file.
2004-07-19 Alexandre Oliva <aoliva@redhat.com>
* configure: New.
* mach.sh: Removed.
* sysdeps/am33/Makefile: Likewise.
2004-06-28 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/Makefile: New file.
* sysdeps/unix/sysv/linux/am33/configure.in: New file.
* sysdeps/unix/sysv/linux/am33/configure: New file.
* mach.sh: New file.
2004-06-19 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/fpu/bits/fenv.h: New file.
* sysdeps/am33/fpu/fpu_control.h: New file.
* sysdeps/am33/fpu/fenv_libc.h: New file.
* sysdeps/am33/fpu/fclrexcpt.c: New file.
* sysdeps/am33/fpu/fedisblxcpt.c: New file.
* sysdeps/am33/fpu/feenablxcpt.c: New file.
* sysdeps/am33/fpu/fegetenv.c: New file.
* sysdeps/am33/fpu/fegetexcept.c: New file.
* sysdeps/am33/fpu/fegetround.c: New file.
* sysdeps/am33/fpu/feholdexcpt.c: New file.
* sysdeps/am33/fpu/fesetenv.c: New file.
* sysdeps/am33/fpu/fesetround.c: New file.
* sysdeps/am33/fpu/feupdateenv.c: New file.
* sysdeps/am33/fpu/fgetexcptflg.c: New file.
* sysdeps/am33/fpu/fraiseexcpt.c: New file.
* sysdeps/am33/fpu/fsetexcptflg.c: New file.
* sysdeps/am33/fpu/ftestexcept.c: New file.
* sysdeps/unix/am33/sysdep.h: Use relative pathnames.
* sysdeps/unix/sysv/linux/am33/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/am33/sysdep.S: Likewise.
* configure, Makefile: Do nothing.
2004-06-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/bsd-setjmp.S: Move into...
* sysdeps/am33/setjmp.S: ... this file.
* sysdeps/am33/bsd-_setjmp.S: Likewise.
* sysdeps/am33/dl-machine.h (_dl_start_user): Do not do double
indirection to obtain _dl_loaded.
(elf_machine_rela_relative): Do not add addend.
2004-06-08 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/sysdep.h (JUMPTARGET): Undef before redefining.
* sysdeps/unix/sysv/linux/am33/sysdep.h (PSEUDO_NOERROR,
PSEUDO_END_NOERROR, ret_NOERROR, PSEUDO_ERRVAL, PSEUDO_END_ERRVAL,
ret_ERRVAL, INTERNAL_SYSCALL, INTERNAL_SYSCALL_DECL,
INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New.
(INLINE_SYSCALL): Rewrite in terms of INTERNAL_SYSCALL macros.
(DO_CALL): Reorder arguments.
* sysdeps/am33/dl-machine.h (elf_machine_rela): Update prototype.
2003-05-16 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/Makefile: New file.
* sysdeps/unix/sysv/linux/am33/sysdep.h (INLINE_SYSCALL1): Drop
comma before args when calling inline_syscall0.
* sysdeps/unix/sysv/linux/am33/chown.c: New file.
* sysdeps/unix/sysv/linux/am33/fchown.c: New file.
* sysdeps/unix/sysv/linux/am33/fxstat.c: New file.
* sysdeps/unix/sysv/linux/am33/getegid.c: New file.
* sysdeps/unix/sysv/linux/am33/geteuid.c: New file.
* sysdeps/unix/sysv/linux/am33/getgid.c: New file.
* sysdeps/unix/sysv/linux/am33/getrlimit.c: New file.
* sysdeps/unix/sysv/linux/am33/getuid.c: New file.
* sysdeps/unix/sysv/linux/am33/lchown.c: New file.
* sysdeps/unix/sysv/linux/am33/lockf64.c: New file.
* sysdeps/unix/sysv/linux/am33/lxstat.c: New file.
* sysdeps/unix/sysv/linux/am33/setegid.c: New file.
* sysdeps/unix/sysv/linux/am33/seteuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setfsgid.c: New file.
* sysdeps/unix/sysv/linux/am33/setfsuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setgid.c: New file.
* sysdeps/unix/sysv/linux/am33/setregid.c: New file.
* sysdeps/unix/sysv/linux/am33/setresgid.c: New file.
* sysdeps/unix/sysv/linux/am33/setresuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setreuid.c: New file.
* sysdeps/unix/sysv/linux/am33/setrlimit.c: New file.
* sysdeps/unix/sysv/linux/am33/setuid.c: New file.
* sysdeps/unix/sysv/linux/am33/xstat.c: New file.
* sysdeps/unix/sysv/linux/am33/syscalls.list: Removed, reverting
2003-03-26's patch.
* sysdeps/unix/sysv/linux/am33/getresgid.c: New file.
* sysdeps/unix/sysv/linux/am33/getresuid.c: New file.
2003-05-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/getgroups.c: New file.
* sysdeps/unix/sysv/linux/am33/setgroups.c: New file.
2003-05-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/getmsg.c: New file.
* sysdeps/unix/sysv/linux/am33/putmsg.c: New file.
2003-03-26 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/syscalls.list: Added getresuid and
getresgid.
2003-01-17 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/fcntl.c: New file.
2002-02-08 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/sys/ucontext.h (fpregset_t): Make it a structure.
2002-01-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/sys/ucontext.h (NFREG): Increment by 1, to make
room for FPCR.
2001-12-13 Alexandre Oliva <aoliva@redhat.com>
* shlib-versions: Set GLIBC_2.2.5 as the earliest symbol set.
2001-12-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/am33/__longjmp.S: Tabify.
* sysdeps/am33/setjmp.S: Likewise.
* sysdeps/am33/dl-debug.h: Remove.
* sysdeps/am33/dl-machine.h: Delete commented-out uses of
macros defined in dl-debug.
(elf_machine_rela): Optimize if HAVE_Z_COMBRELOC. Fix
prediction of R_MN10300_NONE. Don't test for impossible
condition.
* sysdeps/am33/sysdep.h (ASM_TYPE_DIRECTIVE,
ASM_SIZE_DIRECTIVE): Define to nothing if ! HAVE_ELF.
2001-11-09 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/clone.S: Avoid branch overflow in
static link.
2001-11-08 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/clone.S: Load arguments correctly
for syscall.
2001-11-07 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/am33/clone.S: Fix argument-passing
to thread_start.
2001-10-31 Alexandre Oliva <aoliva@redhat.com>
* shlib-versions: Added am33_2.0 support.
* sysdeps/am33/Implies: New file.
* sysdeps/am33/__longjmp.S: New file.
* sysdeps/am33/atomicity.h: New file.
* sysdeps/am33/bsd-_setjmp.S: New file.
* sysdeps/am33/bsd-setjmp.S: New file.
* sysdeps/am33/dl-debug.h: New file.
* sysdeps/am33/dl-machine.h: New file.
* sysdeps/am33/memusage.h: New file.
* sysdeps/am33/setjmp.S: New file.
* sysdeps/am33/stackinfo.h: New file.
* sysdeps/am33/sysdep.h: New file.
* sysdeps/am33/bits/endian.h: New file.
* sysdeps/am33/bits/setjmp.h: New file.
* sysdeps/am33/elf/start.S: New file.
* sysdeps/am33/sys/ucontext.h: New file.
* sysdeps/unix/am33/sysdep.S: New file.
* sysdeps/unix/am33/sysdep.h: New file.
* sysdeps/unix/sysv/linux/am33/brk.c: New file.
* sysdeps/unix/sysv/linux/am33/clone.S: New file.
* sysdeps/unix/sysv/linux/am33/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/am33/socket.S: New file.
* sysdeps/unix/sysv/linux/am33/syscall.S: New file.
* sysdeps/unix/sysv/linux/am33/sysdep.S: New file.
* sysdeps/unix/sysv/linux/am33/sysdep.h: New file.
* sysdeps/unix/sysv/linux/am33/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/am33/bits/mman.h: New file.
Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
change-log-default-name: "ChangeLog.am33"
End:
File diff suppressed because it is too large Load Diff
-40
View File
@@ -1,40 +0,0 @@
This file describes changes to the CRIS port while it was in the ports/
add-on directory. That port has since been removed entirely.
The ports/ directory is no longer used, so reintroduction of AIX code
would be described in the top-level ChangeLog file, not here.
2012-02-21 Joseph Myers <joseph@codesourcery.com>
* sysdeps/cris: Remove.
* sysdeps/unix/sysv/linux/cris: Likewise.
2011-10-05 Andreas Schwab <schwab@redhat.com>
* sysdeps/cris/dl-machine.h (elf_machine_rela)
(elf_machine_lazy_rel): Add parameter skip_ifunc.
2007-10-22 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/cris/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
2007-07-10 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/cris/bits/fcntl.h: Comment fix.
2005-12-27 Roland McGrath <roland@redhat.com>
* sysdeps/cris/bits/setjmp.h (_JMPBUF_UNWINDS): Take third argument
DEMANGLE, and pass SP value through it.
2004-10-25 Roland McGrath <roland@frob.com>
* sysdeps/cris/configure.in: New file, with test moved out of main
libc configure.in file.
* sysdeps/cris/configure: New generated file.
2004-10-23 Roland McGrath <roland@frob.com>
* sysdeps/cris, sysdeps/unix/sysv/linux/cris: Moved here from main
libc source tree.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-200
View File
@@ -1,200 +0,0 @@
This file describes changes to the linux-generic infrastructure while
it was in the ports add-on directory. This code is no longer maintained
here and so future changes to it should be listed in the top-level
ChangeLog file.
2014-02-10 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic: Move directory to
../sysdeps/unix/sysv/linux/generic.
2013-11-13 Chung-Lin Tang <cltang@codesourcery.com>
* sysdeps/unix/sysv/linux/generic/bits/stat.h (__field64): Use
__alignof__(type64) in alignment attribute instead of 8.
* sysdeps/unix/sysv/linux/generic/bits/statfs.h (__field64): Use
__alignof__(type64) in alignment attribute instead of 8.
(struct statfs): Remove alignment attribute.
(struct statfs64): Likewise.
2013-06-05 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list:
Remove trailing whitespace.
2013-01-02 Joseph Myers <joseph@codesourcery.com>
* All files with FSF copyright notices: Update copyright dates
using scripts/update-copyrights.
2013-01-01 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c: Reformat
copyright notice.
2012-11-04 Thomas Schwinge <thomas@codesourcery.com>
* sysdeps/unix/sysv/linux/generic/sysctl.c: Don't include
<stub-tag.h>.
* sysdeps/unix/sysv/linux/generic/ustat.c: Likewise.
2012-10-27 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/generic/bits/fcntl.h: (__O_LARGEFILE)
[__WORDSIZE != 64]: Do not define, take value from
<bits/fcntl-linux.h>.
2012-10-23 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/generic/bits/fcntl.h: Remove all
definitions and declarations that are provided by
<bits/fcntl-linux.h> and include <bits/fcntl-linux.h>.
2012-10-01 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
(__SWBLK_T_TYPE): Macro removed.
2012-08-02 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
[__LP64__] (__OFF_T_MATCHES_OFF64_T): New macro.
2012-05-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/syscalls.list: Remove
__connect_internal alias.
2012-05-18 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
(__FSWORD_T_TYPE): New macro.
2012-05-16 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/not-cancel.h: Add
multiple-inclusion guard.
2012-05-16 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h:
Remove now-unused __SNSECONDS_T_TYPE, and add new
__SYSCALL_ULONG_TYPE and __SYSCALL_SLONG_TYPE types.
2012-05-14 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/stat.h,
sysdeps/unix/sysv/linux/generic/bits/statfs.h:
Use "__aligned__" instead of "aligned" in public headers.
2012-05-12 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list:
Add entries for prlimit64 and fanotify_mark.
2012-05-12 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
(__SNSECONDS_T_TYPE): New macro.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-01-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/not-cancel.h: New file.
2012-01-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/epoll_wait.c: Remove
libc_hidden_proto declaration now it's in sys/epoll.h override.
2011-12-09 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/bits/msq.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/shm.h: New file.
2011-12-03 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/generic/Makefile: New file.
* sysdeps/unix/sysv/linux/generic/____longjmp_chk.c: New file.
* sysdeps/unix/sysv/linux/generic/access.c: New file.
* sysdeps/unix/sysv/linux/generic/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/sem.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/stat.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/statfs.h: New file.
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h: New file.
* sysdeps/unix/sysv/linux/generic/brk.c: New file.
* sysdeps/unix/sysv/linux/generic/chmod.c: New file.
* sysdeps/unix/sysv/linux/generic/chown.c: New file.
* sysdeps/unix/sysv/linux/generic/creat.c: New file.
* sysdeps/unix/sysv/linux/generic/dl-origin.c: New file.
* sysdeps/unix/sysv/linux/generic/dup2.c: New file.
* sysdeps/unix/sysv/linux/generic/epoll_create.c: New file.
* sysdeps/unix/sysv/linux/generic/epoll_wait.c: New file.
* sysdeps/unix/sysv/linux/generic/futimesat.c: New file.
* sysdeps/unix/sysv/linux/generic/getdents.c: New file.
* sysdeps/unix/sysv/linux/generic/getdents64.c: New file.
* sysdeps/unix/sysv/linux/generic/inotify_init.c: New file.
* sysdeps/unix/sysv/linux/generic/kernel_stat.h: New file.
* sysdeps/unix/sysv/linux/generic/lchown.c: New file.
* sysdeps/unix/sysv/linux/generic/link.c: New file.
* sysdeps/unix/sysv/linux/generic/lxstat.c: New file.
* sysdeps/unix/sysv/linux/generic/mkdir.c: New file.
* sysdeps/unix/sysv/linux/generic/nptl/not-cancel.h: New file.
* sysdeps/unix/sysv/linux/generic/open.c: New file.
* sysdeps/unix/sysv/linux/generic/open64.c: New file.
* sysdeps/unix/sysv/linux/generic/pause.c: New file.
* sysdeps/unix/sysv/linux/generic/pipe.c: New file.
* sysdeps/unix/sysv/linux/generic/poll.c: New file.
* sysdeps/unix/sysv/linux/generic/readlink.c: New file.
* sysdeps/unix/sysv/linux/generic/readlink_chk.c: New file.
* sysdeps/unix/sysv/linux/generic/recv.c: New file.
* sysdeps/unix/sysv/linux/generic/rename.c: New file.
* sysdeps/unix/sysv/linux/generic/rmdir.c: New file.
* sysdeps/unix/sysv/linux/generic/select.c: New file.
* sysdeps/unix/sysv/linux/generic/send.c: New file.
* sysdeps/unix/sysv/linux/generic/symlink.c: New file.
* sysdeps/unix/sysv/linux/generic/syscalls.list: New file.
* sysdeps/unix/sysv/linux/generic/sysctl.c: New file.
* sysdeps/unix/sysv/linux/generic/sysdep.h: New file.
* sysdeps/unix/sysv/linux/generic/umount.c: New file.
* sysdeps/unix/sysv/linux/generic/unlink.c: New file.
* sysdeps/unix/sysv/linux/generic/ustat.c: New file.
* sysdeps/unix/sysv/linux/generic/utimes.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/Versions: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fstatfs.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/llseek.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/lseek.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/sendfile.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/statfs.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/truncate64.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c: New file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c: New file.
* sysdeps/unix/sysv/linux/generic/xmknod.c: New file.
* sysdeps/unix/sysv/linux/generic/xstat.c: New file.
File diff suppressed because it is too large Load Diff
-198
View File
@@ -1,198 +0,0 @@
This file describes changes to the machine while it was in the ports
add-on directory. This port is no longer part of an add-on and so
future changes to it should be listed in the top-level ChangeLog file,
not here.
2014-02-17 David Holsgrove <david.holsgrove@xilinx.com>
* sysdeps/microblaze: Move directory to ../sysdeps/microblaze.
* sysdeps/unix/sysv/linux/microblaze: Move directory to
../sysdeps/unix/sysv/linux/microblaze.
2014-02-08 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/microblaze/msgctl.c: Include
sysdeps/unix/sysv/linux/arm/msgctl.c instead of
sysdeps/unix/sysv/linux/alpha/msgctl.c.
* sysdeps/unix/sysv/linux/microblaze/semctl.c: Include
sysdeps/unix/sysv/linux/arm/semctl.c instead of
sysdeps/unix/sysv/linux/alpha/semctl.c.
* sysdeps/unix/sysv/linux/microblaze/shmctl.c: Include
sysdeps/unix/sysv/linux/arm/shmctl.c instead of
sysdeps/unix/sysv/linux/alpha/shmctl.c.
2014-02-04 David Holsgrove <david.holsgrove@xilinx.com>
* sysdeps/microblaze/libm-test-ulps: Update.
* sysdeps/microblaze/libm-test-ulps_new: Delete redundant file.
2014-02-04 David Holsgrove <david.holsgrove@xilinx.com>
* sysdeps/microblaze/fegetround.c: Delete redundant file.
* sysdeps/microblaze/fesetround.c: Likewise.
2013-11-28 Joseph Myers <joseph@codesourcery.com>
* sysdeps/microblaze/fegetround.c (fegetround): Use
libm_hidden_def.
2013-11-26 Ondřej Bílka <neleai@seznam.cz>
* sysdeps/unix/sysv/linux/microblaze/bits/stat.h: Use __glibc_reserved instead __unused.
* sysdeps/unix/sysv/linux/microblaze/kernel_stat.h: Likewise.
2013-10-30 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/microblaze/configure.in: Moved to ...
* sysdeps/unix/sysv/linux/microblaze/configure.ac: ... here.
* sysdeps/unix/sysv/linux/microblaze/configure: Regenerated.
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist:
Update.
2013-06-14 David Holsgrove <david.holsgrove@xilinx.com>
* sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h: Correct
return from macros.
2013-06-05 Ondřej Bílka <neleai@seznam.cz>
* sysdeps/microblaze/bits/atomic.h: Remove executable mode.
* sysdeps/unix/sysv/linux/microblaze/sysdep.h: Likewise.
2013-05-31 Joseph Myers <joseph@codesourcery.com>
* sysdeps/microblaze/Makefile ($(objpfx)libm.so): Remove
dependency on ld.so.
($(objpfx)libcrypt.so): Likewise.
($(objpfx)libresolv.so): Likewise.
($(objpfx)libnss_dns.so): Likewise.
($(objpfx)libnss_files.so): Likewise.
($(objpfx)libnss_db.so): Likewise.
($(objpfx)libnss_nis.so): Likewise.
($(objpfx)libnss_nisplus.so): Likewise.
($(objpfx)libnss_hesiod.so): Likewise.
($(objpfx)libnss_compat.so): Likewise.
($(objpfx)libanl.so): Likewise.
($(objpfx)libnsl.so): Likewise.
($(objpfx)libcidn.so): Likewise.
($(objpfx)libutil.so): Likewise.
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/microblaze/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/microblaze/libm-test-ulps: Update test names.
2013-05-19 Joseph Myers <joseph@codesourcery.com>
* sysdeps/microblaze/libm-test-ulps: Update names of sincos tests.
2013-03-28 David Holsgrove <david.holsgrove@xilinx.com>
* sysdeps/microblaze/Implies: New file.
* sysdeps/microblaze/Makefile: New file.
* sysdeps/microblaze/__longjmp.S: New file.
* sysdeps/microblaze/_mcount.S: New file.
* sysdeps/microblaze/abort-instr.h: New file.
* sysdeps/microblaze/asm-syntax.h: New file.
* sysdeps/microblaze/backtrace.c: New file.
* sysdeps/microblaze/backtrace_linux.c: New file.
* sysdeps/microblaze/bits/atomic.h: New file.
* sysdeps/microblaze/bits/endian.h: New file.
* sysdeps/microblaze/bits/fenv.h: New file.
* sysdeps/microblaze/bits/link.h: New file.
* sysdeps/microblaze/bits/setjmp.h: New file.
* sysdeps/microblaze/bsd-_setjmp.S: New file.
* sysdeps/microblaze/bsd-setjmp.S: New file.
* sysdeps/microblaze/crti.S: New file.
* sysdeps/microblaze/crtn.S: New file.
* sysdeps/microblaze/dl-machine.h: New file.
* sysdeps/microblaze/dl-tls.h: New file.
* sysdeps/microblaze/dl-trampoline.S: New file.
* sysdeps/microblaze/fegetround.c: New file.
* sysdeps/microblaze/fesetround.c: New file.
* sysdeps/microblaze/gccframe.h: New file.
* sysdeps/microblaze/jmpbuf-unwind.h: New file.
* sysdeps/microblaze/ldsodefs.h: New file.
* sysdeps/microblaze/libc-tls.c: New file.
* sysdeps/microblaze/libm-test-ulps: New file.
* sysdeps/microblaze/machine-gmon.h: New file.
* sysdeps/microblaze/math_private.h: New file.
* sysdeps/microblaze/memusage.h: New file.
* sysdeps/microblaze/nptl/Makefile: New file.
* sysdeps/microblaze/nptl/pthread_spin_lock.c: New file.
* sysdeps/microblaze/nptl/pthreaddef.h: New file.
* sysdeps/microblaze/nptl/tcb-offsets.sym: New file.
* sysdeps/microblaze/nptl/tls.h: New file.
* sysdeps/microblaze/preconfigure: New file.
* sysdeps/microblaze/setjmp.S: New file.
* sysdeps/microblaze/shlib-versions: New file.
* sysdeps/microblaze/sotruss-lib.c: New file.
* sysdeps/microblaze/stackinfo.h: New file.
* sysdeps/microblaze/start.S: New file.
* sysdeps/microblaze/sysdep.h: New file.
* sysdeps/microblaze/tls-macros.h: New file.
* sysdeps/microblaze/tst-audit.h: New file.
* sysdeps/unix/sysv/linux/microblaze/Makefile: New file.
* sysdeps/unix/sysv/linux/microblaze/Versions: New file.
* sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S: New file.
* sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/microblaze/bits/mman.h: New file.
* sysdeps/unix/sysv/linux/microblaze/bits/stat.h: New file.
* sysdeps/unix/sysv/linux/microblaze/brk.c: New file.
* sysdeps/unix/sysv/linux/microblaze/clone.S: New file.
* sysdeps/unix/sysv/linux/microblaze/configure: New file.
* sysdeps/unix/sysv/linux/microblaze/configure.in: New file.
* sysdeps/unix/sysv/linux/microblaze/fcntl.c: New file.
* sysdeps/unix/sysv/linux/microblaze/fxstat.c: New file.
* sysdeps/unix/sysv/linux/microblaze/fxstatat.c: New file.
* sysdeps/unix/sysv/linux/microblaze/getsysstats.c: New file.
* sysdeps/unix/sysv/linux/microblaze/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/microblaze/kernel_stat.h: New file.
* sysdeps/unix/sysv/linux/microblaze/lxstat.c: New file.
* sysdeps/unix/sysv/linux/microblaze/mmap.S: New file.
* sysdeps/unix/sysv/linux/microblaze/msgctl.c: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/fork.c: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c: New file.
* sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S: New file.
* sysdeps/unix/sysv/linux/microblaze/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/microblaze/semctl.c: New file.
* sysdeps/unix/sysv/linux/microblaze/shmctl.c: New file.
* sysdeps/unix/sysv/linux/microblaze/setgroups.c: New file.
* sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h: New file.
* sysdeps/unix/sysv/linux/microblaze/socket.S: New file.
* sysdeps/unix/sysv/linux/microblaze/sys/procfs.h: New file.
* sysdeps/unix/sysv/linux/microblaze/sys/user.h: New file.
* sysdeps/unix/sysv/linux/microblaze/syscall.S: New file.
* sysdeps/unix/sysv/linux/microblaze/syscalls.list: New file.
* sysdeps/unix/sysv/linux/microblaze/sysdep.S: New file.
* sysdeps/unix/sysv/linux/microblaze/sysdep.h: New file.
* sysdeps/unix/sysv/linux/microblaze/xstat.c: New file.
File diff suppressed because it is too large Load Diff
-413
View File
@@ -1,413 +0,0 @@
This file describes changes to the soft-float powerpc port while it
was in the ports add-on directory. This port is no longer part of an
add-on and so future changes to it should be listed in the top-level
ChangeLog file, not here.
2013-10-04 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/powerpc32/Makefile: Remove file.
* sysdeps/powerpc/nofpu: Move directory to
../sysdeps/powerpc/nofpu.
* sysdeps/powerpc/soft-fp: Move directory to
../sysdeps/powerpc/soft-fp.
* sysdeps/powerpc/powerpc32/405: Move directory to
../sysdeps/powerpc/powerpc32/405.
* sysdeps/powerpc/powerpc32/440: Move directory to
../sysdeps/powerpc/powerpc32/440.
* sysdeps/powerpc/powerpc32/464: Move directory to
../sysdeps/powerpc/powerpc32/464.
* sysdeps/powerpc/powerpc32/476: Move directory to
../sysdeps/powerpc/powerpc32/476.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu: Move directory
to ../sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/405: Move directory to
../sysdeps/unix/sysv/linux/powerpc/powerpc32/405.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/440: Move directory to
../sysdeps/unix/sysv/linux/powerpc/powerpc32/440.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/464: Move directory to
../sysdeps/unix/sysv/linux/powerpc/powerpc32/464.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/476: Move directory to
../sysdeps/unix/sysv/linux/powerpc/powerpc32/476.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/context-e500.h:
New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S:
Include <context-e500.h>.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S:
Likewise.
2013-08-30 Ondřej Bílka <neleai@seznam.cz>
* sysdeps/powerpc/powerpc32/405/memcpy.S: Fix typos.
2013-08-17 Alexandre Oliva <aoliva@redhat.com>
PR 15483
* sysdeps/powerpc/nofpu/sim-full.c: Add FIXME note about
the need for thread-specific variables preserved across signal
handlers.
* sysdeps/powerpc/nofpu/soft-supp.h: Likewise.
* sysdeps/powerpc/soft-fp/sfp-machine.h: Likewise.
2013-07-03 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Regenerated.
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist:
Update.
2013-06-11 Ryan S. Arnold <rsa@linux.vnet.ibm.com>
* sysdeps/powerpc/dl-procinfo.c: Remove as this is now redundant with
glibc/sysdeps/powerpc/dl-procinfo.c.
* sysdeps/powerpc/dl-procinfo.h: Remove as this is now redundant with
glibc/sysdeps/powerpc/dl-procinfo.h
2013-06-11 Ryan S. Arnold <rsa@linux.vnet.ibm.com>
* sysdeps/powerpc/dl-procinfo.h: Fix whitespace by correcting
spaces with tabs where appropriate.
2013-06-05 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/fenv_const.c: Remove trailing whitespace.
* sysdeps/powerpc/nofpu/fenv_libc.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S:
Likewise.
2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Update test names.
2013-05-19 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Update names of sincos
tests.
2013-05-16 Maciej W. Rozycki <macro@codesourcery.com>
[BZ #15442]
* sysdeps/powerpc/soft-fp/sfp-machine.h (_FP_QNANNEGATEDP): New
macro.
2013-02-28 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/powerpc/powerpc32/405/memcmp.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memcmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/memcpy.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/memset.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memset): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strcmp.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strcmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strcpy.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strlen.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strlen): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strncmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strncmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/476/memset.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memset): Don't use BP_SYM.
2013-02-18 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Add __cxa_thread_atexit_impl.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
Likewise.
2013-02-14 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/powerpc/nofpu/fegetenv.c: Do not include <bp-sym.h>.
(fegetenv): Do not use BP_SYM in versioned symbols.
* sysdeps/powerpc/nofpu/fesetenv.c: Do not include <bp-sym.h>.
(fesetenv): Do not use BP_SYM in versioned symbols.
* sysdeps/powerpc/nofpu/feupdateenv.c: Do not include <bp-sym.h>.
(feupdateenv): Do not use BP_SYM in versioned symbols.
* sysdeps/powerpc/nofpu/fgetexcptflg.c: Do not include <bp-sym.h>.
(fegetexceptflag): Do not use BP_SYM in versioned symbols.
* sysdeps/powerpc/nofpu/fraiseexcpt.c: Do not include <bp-sym.h>.
(feraiseexcept): Do not use BP_SYM in versioned symbols.
* sysdeps/powerpc/nofpu/fsetexcptflg.c: Do not include <bp-sym.h>.
(fesetexceptflag): Do not use BP_SYM in versioned symbols.
2013-01-02 Joseph Myers <joseph@codesourcery.com>
* All files with FSF copyright notices: Update copyright dates
using scripts/update-copyrights.
2012-12-05 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/fgetexcptflg.c (__fegetexceptflag):
Specify return type as int.
2012-11-30 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Remove fma ulps.
* sysdeps/powerpc/nofpu/libm-test-ulps: Update.
2012-11-03 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/fclrexcpt.c (feclearexcept): Add
libm_hidden_ver.
2012-10-31 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Fix sort order.
2012-10-30 Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Ryan S. Arnold <rsa@linux.vnet.ibm.com>
[BZ #14595]
* sysdeps/powerpc/powerpc32/476/memset.S: New file copied from
405/memset.S to preserve 128-byte cacheline size.
* sysdeps/powerpc/powerpc32/405/memset.S (memset): Fix cacheline size
to 32-bytes for 405, 440, and 464 processors.
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist
(GLIBC_2.17): Add clock_* symbols.
2012-09-26 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Add __ppc_get_timebase_freq.
2012-09-12 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/get-rounding-mode.h: New file.
2012-07-25 Florian Weimer <fweimer@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Add secure_getenv.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
Likewise.
2012-07-20 Joseph Myers <joseph@codesourcery.com>
* data/localplt-powerpcsoft-linux-gnu.data: Move to ...
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/localplt.data:
... here.
2012-07-17 Joseph Myers <joseph@codesourcery.com>
* data/c++-types-powerpcsoft-linux-gnu.data: Move to ...
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/c++-types.data:
... here.
2012-07-03 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platforms): Add
"ppca2".
* sysdeps/powerpc/dl-procinfo.h (_DL_PLATFORMS_COUNT): Increase to
13.
(PPC_PLATFORM_PPCA2): Define.
(PPC_PLATFORM_PPC405): Increase value.
(PPC_PLATFORM_PPC440): Likewise.
(PPC_PLATFORM_PPC464): Likewise.
(PPC_PLATFORM_PPC476): Likewise.
(_dl_string_platform): Handle ppca2.
2012-06-13 Joseph Myers <joseph@codesourcery.com>
* data/localplt-powerpcsoft-linux-gnu.data: Allow abort and
soft-fp symbols to be absent.
2012-06-08 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Update.
2012-05-31 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Regenerated.
2012-05-30 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/soft-fp/sfp-machine.h (FP_EX_DENORM): Remove.
(FP_TRAPPING_EXCEPTIONS): Define.
2012-05-21 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libm.abilist
(__fe_nomask_env): Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Update.
2012-05-16 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/ld.abilist:
New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libanl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libcrypt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libdl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libnsl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/librt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libutil.abilist:
Likewise.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-02-20 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Resort with
gen-libm-test.pl -n in C locale.
2010-09-03 Luis Machado <luisgpm@br.ibm.com>
* sysdeps/powerpc/dl-procinfo.c: New file.
* sysdeps/powerpc/dl-procinfo.h: New file.
* sysdeps/powerpc/powerpc32/405/memcmp.S: New file.
* sysdeps/powerpc/powerpc32/405/memcpy.S: New file.
* sysdeps/powerpc/powerpc32/405/memset.S: New file.
* sysdeps/powerpc/powerpc32/405/strcmp.S: New file.
* sysdeps/powerpc/powerpc32/405/strcpy.S: New file.
* sysdeps/powerpc/powerpc32/405/strlen.S: New file.
* sysdeps/powerpc/powerpc32/405/strncmp.S: New file.
* sysdeps/powerpc/powerpc32/440/Implies: New file.
* sysdeps/powerpc/powerpc32/464/Implies: New file.
* sysdeps/powerpc/powerpc32/476/Implies: New file.
* sysdeps/powerpc/powerpc32/Makefile: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies: New file.
2010-10-11 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/feupdateenv.c (feupdateenv): Add
libm_hidden_ver.
* sysdeps/powerpc/nofpu/ftestexcept.c (fetestexcept): Add
libm_hidden_def.
2010-02-10 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/fegetenv.c: Add hidden alias.
2008-08-19 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/shlib-versions: New.
* c++-types-powerpcsoft-linux-gnu.data: New.
* localplt-powerpcsoft-linux-gnu.data: New.
* sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Use
__fegetenv.
2007-08-29 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/powerpc/nofpu/fsetexcptflg.c (__fesetexceptflag): Do not
clobber other exceptions.
* sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new
exceptions.
* sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle
multiple new exceptions if some are disabled.
* sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise.
2007-07-13 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/Makefile: Remove fe_nomask from libm-support.
2007-05-23 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Disable
exceptions. Use the updated env in fesetenv().
Add libm_hidden_def.
2007-01-23 Steven Munroe <sjmunroe@us.ibm.com>
[BZ #2749]
* sysdeps/powerpc/nofpu/fenv_libc.h: New file.
2007-01-08 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/fesetenv.c (__sim_exceptions,
__sim_disabled_exceptions, __sim_round_mode): Remove declarations.
2006-10-05 Steven Munroe <sjmunroe@us.ibm.com>
[BZ #2749]
* sysdeps/powerpc/nofpu/Makefile
[subdirs-soft-fp] (sysdep_routines): Remove gcc-quad-routines.
[subdirs-math] (CPPFLAGS): Add -I../soft-fp.
[subdirs-math] (CFLAGS-e_powl.c): Add -fno-builtin-fabsl.
[subdirs-math] (CFLAGS-s_ccoshl.c): Likewise.
[subdirs-math] (CFLAGS-s_csinhl.c): Likewise.
[subdirs-math] (CFLAGS-s_clogl.c): Likewise.
[subdirs-math] (CFLAGS-s_clog10l.c): Likewise.
[subdirs-math] (CFLAGS-s_csinl.c): Likewise.
[subdirs-math] (CFLAGS-s_csqrtl.c): Likewise.
* sysdeps/powerpc/nofpu/Versions (GLIBC_2.3.2): Remove __fixtfdi,
__fixtfsi, and __trunctfsf2.
(GLIBC_2.4): Remove __floatunditf, __floatunsitf, and __unordtf2.
Add __nedf2, __nesf2, __gtdf2, __gtsf2, __ltdf2, __ltsf2.
* sysdeps/powerpc/nofpu/libm-test-ulps: Update for soft-fp.
* sysdeps/powerpc/soft-fp/sfp-machine.h: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S:
New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S:
New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S:
New file.
2006-01-27 Roland McGrath <roland@redhat.com>
* sysdeps/powerpc/nofpu/Subdirs: New file.
* sysdeps/powerpc/nofpu/Makefile [$(subdir) = soft-fp]
(sysdep_routines): Add $(gcc-quad-routines) here.
2006-01-06 Roland McGrath <roland@redhat.com>
* sysdeps/powerpc/nofpu/Versions (libc: GLIBC_2.4): New set.
Add __floatundidf, __floatundisf, __floatunditf, __floatunsidf,
__floatunsisf, __floatunsitf, __unorddf2, __unordsf2, __unordtf2.
2005-10-11 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/fesetround.c: Add libm_hidden_def.
-741
View File
@@ -1,741 +0,0 @@
This file describes changes to the TILE-Gx and TILEPro ports while they
were in the ports add-on directory. These ports are no longer part of
an add-on and so future changes to them should be listed in the top-level
ChangeLog file, not here.
2014-02-10 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile: Move directory to ../sysdeps/tile.
* sysdeps/unix/sysv/linux/tile: Move directory to
../sysdeps/unix/sysv/linux/tile.
2014-01-03 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/libm-test-ulps: Regenerated.
2014-01-06 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h (ptrace_peeksiginfo_args):
Rename to ...
(__ptrace_peeksiginfo_args): ... this.
2013-10-30 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/tile/configure.in: Moved to ...
* sysdeps/unix/sysv/linux/tile/configure.ac: ... here.
* sysdeps/unix/sysv/linux/tile/tilegx/configure.in: Moved to ...
* sysdeps/unix/sysv/linux/tile/tilegx/configure.ac: ... here.
* sysdeps/unix/sysv/linux/tile/configure: Regenerated.
* sysdeps/unix/sysv/linux/tile/tilegx/configure: Likewise.
2013-09-22 Carlos O'Donell <carlos@redhat.com>
[BZ #15754]
* sysdeps/tile/stackguard-macros.h: Define POINTER_CHK_GUARD.
2013-09-20 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/tile/ffs.c (__ffs): Define as hidden.
2013-08-21 Ondřej Bílka <neleai@seznam.cz>
* sysdeps/tile/jmpbuf-offsets.h: Fix typos.
2013-07-22 Chris Metcalf <cmetcalf@tilera.com>
[BZ #15759]
* sysdeps/tile/dl-runtime.c (sim_dlclose): New function.
(_dl_unmap): Call sim_dlclose().
2013-07-19 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h
(__ptrace_peeksiginfo_args): Add missing semicolon.
2013-07-03 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/dl-static.c: New file to support
variable page size for tile.
* sysdeps/unix/sysv/linux/tile/ldsodefs.h: Likewise.
* sysdeps/unix/sysv/linux/tile/Makefile: Build dl-static in elf.
* sysdeps/unix/sysv/linux/tile/Versions: Add _dl_var_init.
* sysdeps/tile/libm-test-ulps: Update with new tests.
* sysdeps/tile/s_fma.c: Use soft-fp version instead of ieee754.
* sysdeps/tile/s_fmaf.c: Likewise.
* sysdeps/tile/sfp-machine.h: New file.
2013-07-04 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h (PTRACE_PEEKSIGINFO):
Add new value from Linux 3.10.
(ptrace_peeksiginfo_args): Add.
(__ptrace_peeksiginfo_flags): Add.
(PTRACE_SETREGSET, PTRACE_SEIZE, PTRACE_INTERRUPT, PTRACE_LISTEN):
Add.
2013-06-28 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/fegetenv.c: Delete now-redundant file.
* sysdeps/tile/fegetround.c: Likewise.
* sysdeps/tile/feholdexcpt.c: Likewise.
* sysdeps/tile/fesetenv.c: Likewise.
* sysdeps/tile/fesetround.c: Likewise.
* sysdeps/tile/feupdateenv.c: Likewise.
2013-06-15 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist:
Update.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist:
Likewise.
2013-06-12 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/bits/endian.h (__BYTE_ORDER): Default to little.
2013-06-05 Joseph Myers <joseph@codesourcery.com>
* sysdeps/tile/tilepro/memcpy.S: Remove trailing whitespace.
* sysdeps/unix/sysv/linux/tile/nptl/clone.S: Likewise.
* sysdeps/unix/sysv/linux/tile/setcontext.S: Likewise.
* sysdeps/unix/sysv/linux/tile/swapcontext.S: Likewise.
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/tile/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
2013-05-23 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/tilegx/Makefile ($(cflags-mcmodel-large)):
Test for assembler and linker support for "-mcmodel=large -fpic"
in addition to compiler support; provide -DNO_PLT_PCREL if not.
* sysdeps/tile/start.S [NO_PLT_PCREL]: Guard for no PC-relative
PLT operators in assembly.
* sysdeps/tile/crti.S [NO_PLT_PCREL]: Likewise.
2013-05-22 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h (siginfo_t): Fix comment
formatting. Add si_addr_lsb to _sifields.sigfault.
(si_addr_lsb): Define new macro.
(BUS_MCEERR_AR, BUS_MCEERR_AO): Define new values.
2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/tile/libm-test-ulps: Update test names.
2013-05-19 Joseph Myers <joseph@codesourcery.com>
* sysdeps/tile/libm-test-ulps: Update names of sincos tests.
2013-05-16 Ryan S. Arnold <rsa@linux.vnet.ibm.com>
* sysdeps/tile/tilegx/memusage.h: Add missing #include <stdint.h> due
to uint64_t or uint32_t usage.
* sysdeps/tile/tilegx/string-endian.h: Likewise.
2013-03-11 Andreas Schwab <schwab@suse.de>
[BZ #15234]
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist
(GLIBC_2.12): Remove pthread_atfork.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist
(GLIBC_2.12): Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist
(GLIBC_2.12): Likewise.
2013-03-05 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/tile/bits/mman.h: Remove all defines
provided by bits/mman-linux.h and include <bits/mman-linux.h>.
2013-02-28 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h
(FUTEX_WAIT_REQUEUE_PI): Define.
(FUTEX_CMP_REQUEUE_PI): Likewise.
(lll_futex_wait_requeue_pi): Likewise.
(lll_futex_timed_wait_requeue_pi): Likewise.
(lll_futex_cmp_requeue_pi): Likewise.
2013-02-18 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
Add __cxa_thread_atexit_impl.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist:
Likewise.
2013-01-10 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/tilegx/ldd-rewrite.sed: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/configure.in: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/configure: New file.
2013-01-02 Joseph Myers <joseph@codesourcery.com>
* All files with FSF copyright notices: Update copyright dates
using scripts/update-copyrights.
2012-12-28 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h
(lll_futex_timed_wait_bitset): New macro.
2012-12-14 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/nptl/clone.S: Fix DWARF info.
2012-11-29 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/s_fmaf.c: Remove redundant #defines now provided
in sysdeps/tile/math_private.h.
2012-11-20 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/libm-test-ulps: Account for new tests.
* sysdeps/tile/bits/byteswap.h: Include <bits/types.h>.
(__bswap_64): Use __uint64_t instead of unsigned long long int.
* sysdeps/tile/s_fma.c: Remove redundant #defines now provided
in sysdeps/tile/math_private.h.
2012-11-06 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/tilegx/memmove.c: New file.
* sysdeps/tile/nptl/pthread_spin_unlock.c: New file.
2012-11-05 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/math_private.h: Provide additional no-op defines
for exception and rounding macros.
* sysdeps/tile/tilegx/Makefile: New file.
* sysdeps/tile/crti.S: Support large memory model.
* sysdeps/tile/start.S: Likewise.
2012-11-02 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/dl-runtime.c (_dl_after_load): Handle simulator
notification better for dlopen() of relative paths.
* sysdeps/tile/tilegx/memcpy.c (__memcpy): Optimize.
* sysdeps/tile/memcopy.h: New file.
* sysdeps/tile/wordcopy.c: New file.
2012-11-03 Joseph Myers <joseph@codesourcery.com>
[BZ #3439]
* sysdeps/tile/bits/fenv.h (FE_TONEAREST): Define macro to integer
constant usable in #if and use that to give value to enum
constant.
2012-11-03 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/libm-test-ulps: Account for new tests.
2012-10-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/dl-machine.h: Use new DL_AFTER_LOAD macro
and rename _dl_arch_map_object to _dl_after_load.
* sysdeps/tile/dl-runtime.c: Rename _dl_arch_map_object
to _dl_after_load and remove spurious DL_UNMAP definition.
* sysdeps/unix/sysv/linux/tile/init-first.c: Use better #include.
* sysdeps/unix/sysv/linux/tile/gettimeofday.c: Use gettimeofday
aliases that match existing tile ABI.
* sysdeps/tile/libm-test-ulps: Account for new tests.
2012-10-26 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/Makefile (sysdep_routines):
Include dl-vdso.
* sysdeps/unix/sysv/linux/tile/bits/libc-vdso.h: New file.
* sysdeps/unix/sysv/linux/tile/gettimeofday.c: New file.
* sysdeps/unix/sysv/linux/tile/init-first.c: New file.
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist:
(GLIBC_2.17): Add clock_* symbols.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
Likewise.
2012-10-11 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/tilegx/sched_getcpu.c: New file.
2012-10-02 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h: Fix clone
flag name in comment to CLONE_CHILD_CLEARTID.
2012-09-17 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/libm-test-ulps: Account for new tests.
2012-09-06 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/sys/procfs.h: Fix type of prfpregset_t.
[BZ #14237]
* sysdeps/tile/__tls_get_addr.S: Fix TLS module initialization bug.
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_STAT64_SYSCALL): Remove.
2012-08-21 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_FADVISE64_64_SYSCALL): Remove.
2012-08-20 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_MMAP2_SYSCALL): Remove.
2012-08-14 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_CLONE_THREAD_FLAGS): Remove.
2012-08-08 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_TGKILL): Remove.
2012-08-02 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/sysdep.h: Do not define ASM_TYPE_DIRECTIVE.
2012-08-01 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_FCNTL64): Remove.
2012-07-26 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h (__ptrace_eventcodes):
Add new value PTRACE_EVENT_SECCOMP from Linux 3.5.
(__ptrace_setoptions): Add new value PTRACE_O_TRACESECCOMP, adjust
PTRACE_O_MASK.
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h (siginfo_t): Add
_sigsys.
(si_call_addr, si_syscall, si_arch): Define new macro.
2012-07-25 Florian Weimer <fweimer@redhat.com>
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
Add secure_getenv.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist:
Likewise.
2012-07-17 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/setcontext.S: Ensure exit status is
zero if uc_link is NULL.
* sysdeps/tile/libm-test-ulps: Account for new tests.
* data/c++-types-tilepro-linux-gnu.data: Move to ...
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/c++-types.data: ... here.
* data/c++-types-tilegx-linux-gnu.data: Move to ...
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/c++-types.data:
... here.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/c++-types.data:
New file.
2012-07-10 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/makecontext.c (__makecontext):
Correct typo in comment.
* sysdeps/tile/sysdep.h (ENTRY): Use .globl, not
ASM_GLOBAL_DIRECTIVE.
2012-05-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/tilegx/Makefile: Remove test
that $(subdir) is "misc" when setting abi- variables.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Makefile: New file.
* sysdeps/tile/libm-test-ulps: Account for new tests.
* sysdeps/unix/sysv/linux/tile/tilegx/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/nptl/pthread_once.c: Replace
_internal alias by hidden_def.
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_NEW_GETRLIMIT_SYSCALL, __ASSUME_TRUNCATE64_SYSCALL): Remove.
2012-05-23 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/bits/mman.h (MADV_DONTDUMP): Define.
(MADV_DODUMP): Likewise.
2012-05-22 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/bits/libm-test-ulps: Update.
* sysdeps/tile/bits/wordsize.h (__WORDSIZE_COMPAT32): Rename to
__WORDSIZE_TIME64_COMPAT32.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist: Update.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
Update.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
Update.
2012-05-17 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/fegetenv.c: Version fegetenv() like fesetenv().
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libm.abilist:
Add fegetenv.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libm.abilist: Likewise.
* sysdeps/tile/stackguard-macros.h: Support tilegx32.
* data/c++-types-tilepro-linux-gnu.data: Renamed from
data/c++-types-tile-linux-gnu.data.
* data/c++-types-tilegx-linux-gnu.data: New file.
* sysdeps/tile/libm-test-ulps: Improved fma() and exp10().
* sysdeps/tile/s_fma.c: Use ieee754/dbl-64 without rounding or
exception support; it's still much better than the generic version.
2012-05-16 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/ucontext_i: Fix tilegx32 offset bug.
* sysdeps/unix/sysv/linux/tile/getcontext.S: Fix tilegx32 bug
where we accessed "uc_flags" as an 8-byte field.
* sysdeps/unix/sysv/linux/tile/setcontext.S: Likewise,
and also fix frame code not to access stack below "sp".
* sysdeps/unix/sysv/linux/tile/swapcontext.S: Fix frame code not
to access stack below "sp", and add frame unwind to error path.
2012-05-15 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/sotruss-lib.c: New file.
* sysdeps/tile/math_private.h (feraiseexcept): Use statement
expression syntax to avoid compiler warning.
* sysdeps/tile/libm-test-ulps: New file.
* sysdeps/tile/bits/fenv.h (__FE_UNDEFINED): New symbol.
* sysdeps/tile/ldsodefs.h (ARCH_PLTEXIT_MEMBERS): Add proper
const qualifier to "inregs" argument.
* sysdeps/tile/elf/stackguard-macros.h: Delete unused file.
2012-05-14 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/ld.abilist:
New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libanl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libcrypt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libdl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libnsl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/librt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libutil.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/ld.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libanl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libcrypt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libdl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libnsl.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/librt.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libutil.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/ld.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libBrokenLocale.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libanl.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libcrypt.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libdl.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libnsl.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libresolv.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/librt.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libthread_db.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libutil.abilist: Likewise.
* sysdeps/tile/dl-start.S: Align stack for tilegx32.
2012-05-12 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/sys/dataplane.h: Add <features.h>.
* sysdeps/unix/sysv/linux/tile/nptl/clone.S: Add missing CFI.
* sysdeps/tile/tls-macros.h: Fix buggy TLS_GD, etc., macros.
* sysdeps/tile/tilegx/memchr.c: Use new copy_byte() function
to efficiently generate a large constant for masking.
* sysdeps/tile/tilegx/memset.c: Likewise.
* sysdeps/tile/tilegx/rawmemchr.c: Likewise.
* sysdeps/tile/tilegx/strchr.c: Likewise.
* sysdeps/tile/tilegx/strchrnul.c: Likewise.
* sysdeps/tile/tilegx/strrchr.c: Likewise.
* sysdeps/tile/tilegx/string-endian.h (copy_byte): New function.
* sysdeps/tile/tilegx/memcpy.c: Allow memcpy(p, p, n)
without corrupting memory at "p".
* sysdeps/tile/__tls_get_addr.S: Use __WORDSIZE, not _LP64.
* sysdeps/tile/stackguard-macros.h: New file.
* sysdeps/tile/elf/stackguard-macros.h: New stub include file.
* sysdeps/tile/Makefile (ELF_MACHINE_PLTREL_OVERLAP):
Remove variable no longer used by core.
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h: Don't name
siginfo_t struct. Add forward declaration of pthread_attr_t and
use it in sigevent.
* sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h: Name
pthread_attr_t union.
* sysdeps/tile/crti.S: New file, based on compiler output
for sysdeps/generic/initfini.c.
* sysdeps/tile/crtn.S: Likewise.
* sysdeps/tile/Makefile (CFLAGS-initfini.s): Remove variable.
* sysdeps/unix/sysv/linux/tile/nptl/Makefile
(CFLAGS-pt-initfini.s): Likewise.
* sysdeps/tile/elf/start.S: Moved to ...
* sysdeps/tile/start.S: ...here.
2012-04-15 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h: Include
<_itoa.h> instead of <stdio-common/_itoa.h>.
* sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h: Likewise.
2012-03-09 Richard Henderson <rth@twiddle.net>
* sysdeps/tile/math_private.h: Use include_next to
chain math_private.h.
2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
[BZ #13673]
Replace FSF snail mail address with URLs, as per GNU coding standards.
2012-01-31 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/bits/fenv.h: Use const instead of __const.
* sysdeps/unix/sysv/linux/tile/sys/cachectl.h: Likewise.
2012-01-31 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/sysdep.h: Use <feedback.h> not <feedback-asm.h>
to reflect change from gcc community giveback.
2012-01-31 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/math_private.h: Ignore feraiseexcept() internally.
2012-01-30 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/sysdep.h: Don't check HAVE_ELF or NO_UNDERSCORES.
2012-01-07 Joseph Myers <joseph@codesourcery.com>
* sysdeps/tile/backtrace.c: Use x86_64 version of backtrace.c.
2011-12-03 Chris Metcalf <cmetcalf@tilera.com>
* data/c++-types-tile-linux-gnu.data: New file.
* sysdeps/tile/Implies: New file.
* sysdeps/tile/Makefile: New file.
* sysdeps/tile/Versions: New file.
* sysdeps/tile/__longjmp.S: New file.
* sysdeps/tile/__tls_get_addr.S: New file.
* sysdeps/tile/_mcount.S: New file.
* sysdeps/tile/abort-instr.h: New file.
* sysdeps/tile/backtrace.c: New file.
* sysdeps/tile/bits/atomic.h: New file.
* sysdeps/tile/bits/byteswap.h: New file.
* sysdeps/tile/bits/endian.h: New file.
* sysdeps/tile/bits/fenv.h: New file.
* sysdeps/tile/bits/link.h: New file.
* sysdeps/tile/bits/mathdef.h: New file.
* sysdeps/tile/bits/mathinline.h: New file.
* sysdeps/tile/bits/setjmp.h: New file.
* sysdeps/tile/bsd-_setjmp.S: New file.
* sysdeps/tile/bsd-setjmp.S: New file.
* sysdeps/tile/bzero.S: New file.
* sysdeps/tile/dl-lookupcfg.h: New file.
* sysdeps/tile/dl-machine.h: New file.
* sysdeps/tile/dl-runtime.c: New file.
* sysdeps/tile/dl-start.S: New file.
* sysdeps/tile/dl-tls.c: New file.
* sysdeps/tile/dl-tls.h: New file.
* sysdeps/tile/dl-trampoline.S: New file.
* sysdeps/tile/elf/start.S: New file.
* sysdeps/tile/fegetenv.c: New file.
* sysdeps/tile/fegetround.c: New file.
* sysdeps/tile/feholdexcpt.c: New file.
* sysdeps/tile/fesetenv.c: New file.
* sysdeps/tile/fesetround.c: New file.
* sysdeps/tile/feupdateenv.c: New file.
* sysdeps/tile/ffs.c: New file.
* sysdeps/tile/ffsll.c: New file.
* sysdeps/tile/gccframe.h: New file.
* sysdeps/tile/jmpbuf-offsets.h: New file.
* sysdeps/tile/jmpbuf-unwind.h: New file.
* sysdeps/tile/ldsodefs.h: New file.
* sysdeps/tile/machine-gmon.h: New file.
* sysdeps/tile/nptl/Makefile: New file.
* sysdeps/tile/nptl/pthread_spin_lock.c: New file.
* sysdeps/tile/nptl/pthread_spin_trylock.c: New file.
* sysdeps/tile/nptl/pthreaddef.h: New file.
* sysdeps/tile/nptl/tcb-offsets.sym: New file.
* sysdeps/tile/nptl/tls.h: New file.
* sysdeps/tile/preconfigure: New file.
* sysdeps/tile/s_fma.c: New file.
* sysdeps/tile/s_fmaf.c: New file.
* sysdeps/tile/setjmp.S: New file.
* sysdeps/tile/shlib-versions: New file.
* sysdeps/tile/stackinfo.h: New file.
* sysdeps/tile/sysdep.h: New file.
* sysdeps/tile/tilegx/bits/atomic.h: New file.
* sysdeps/tile/tilegx/bits/wordsize.h: New file.
* sysdeps/tile/tilegx/memchr.c: New file.
* sysdeps/tile/tilegx/memcpy.c: New file.
* sysdeps/tile/tilegx/memset.c: New file.
* sysdeps/tile/tilegx/memusage.h: New file.
* sysdeps/tile/tilegx/rawmemchr.c: New file.
* sysdeps/tile/tilegx/strchr.c: New file.
* sysdeps/tile/tilegx/strchrnul.c: New file.
* sysdeps/tile/tilegx/string-endian.h: New file.
* sysdeps/tile/tilegx/strlen.c: New file.
* sysdeps/tile/tilegx/strrchr.c: New file.
* sysdeps/tile/tilegx/tilegx32/Implies: New file.
* sysdeps/tile/tilegx/tilegx64/Implies: New file.
* sysdeps/tile/tilepro/Implies: New file.
* sysdeps/tile/tilepro/bits/atomic.h: New file.
* sysdeps/tile/tilepro/bits/wordsize.h: New file.
* sysdeps/tile/tilepro/memchr.c: New file.
* sysdeps/tile/tilepro/memcpy.S: New file.
* sysdeps/tile/tilepro/memset.c: New file.
* sysdeps/tile/tilepro/memusage.h: New file.
* sysdeps/tile/tilepro/rawmemchr.c: New file.
* sysdeps/tile/tilepro/strchr.c: New file.
* sysdeps/tile/tilepro/strchrnul.c: New file.
* sysdeps/tile/tilepro/strlen.c: New file.
* sysdeps/tile/tilepro/strrchr.c: New file.
* sysdeps/tile/tls-macros.h: New file.
* sysdeps/tile/tst-audit.h: New file.
* sysdeps/unix/sysv/linux/tile/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/Versions: New file.
* sysdeps/unix/sysv/linux/tile/bits/environments.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/local_lim.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/mman.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/mman.h~: New file.
* sysdeps/unix/sysv/linux/tile/bits/sigaction.h: New file.
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h: New file.
* sysdeps/unix/sysv/linux/tile/cacheflush.c: New file.
* sysdeps/unix/sysv/linux/tile/configure: New file.
* sysdeps/unix/sysv/linux/tile/configure.in: New file.
* sysdeps/unix/sysv/linux/tile/getcontext.S: New file.
* sysdeps/unix/sysv/linux/tile/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/tile/makecontext.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/Makefile: New file.
* sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/clone.S: New file.
* sysdeps/unix/sysv/linux/tile/nptl/createthread.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/fork.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/pt-vfork.S: New file.
* sysdeps/unix/sysv/linux/tile/nptl/pthread_once.c: New file.
* sysdeps/unix/sysv/linux/tile/nptl/sysdep-cancel.h: New file.
* sysdeps/unix/sysv/linux/tile/nptl/vfork.S: New file.
* sysdeps/unix/sysv/linux/tile/nptl/waitpid.S: New file.
* sysdeps/unix/sysv/linux/tile/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/tile/set_dataplane.c: New file.
* sysdeps/unix/sysv/linux/tile/setcontext.S: New file.
* sysdeps/unix/sysv/linux/tile/sigcontextinfo.h: New file.
* sysdeps/unix/sysv/linux/tile/swapcontext.S: New file.
* sysdeps/unix/sysv/linux/tile/sys/cachectl.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/dataplane.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/procfs.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/reg.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h: New file.
* sysdeps/unix/sysv/linux/tile/sys/user.h: New file.
* sysdeps/unix/sysv/linux/tile/syscall.S: New file.
* sysdeps/unix/sysv/linux/tile/sysdep.c: New file.
* sysdeps/unix/sysv/linux/tile/sysdep.h: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/ioctl.S: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Implies: New file.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Implies: New file.
* sysdeps/unix/sysv/linux/tile/tilepro/Implies: New file.
* sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h: New file.
* sysdeps/unix/sysv/linux/tile/ucontext_i.h: New file.
+226 -338
View File
@@ -2,13 +2,14 @@ Installing the GNU C Library
****************************
Before you do anything else, you should read the FAQ at
<http://sourceware.org/glibc/wiki/FAQ>. It answers common questions and
describes problems you may experience with compilation and installation.
`http://sourceware.org/glibc/wiki/FAQ'. It answers common questions
and describes problems you may experience with compilation and
installation.
Features can be added to the GNU C Library via "add-on" bundles.
These are separate tar files, which you unpack into the top level of the
source tree. Then you give 'configure' the '--enable-add-ons' option to
activate them, and they will be compiled into the library.
These are separate tar files, which you unpack into the top level of
the source tree. Then you give `configure' the `--enable-add-ons'
option to activate them, and they will be compiled into the library.
You will need recent versions of several GNU tools: definitely GCC
and GNU Make, and possibly others. *Note Tools for Compilation::,
@@ -19,12 +20,12 @@ Configuring and compiling the GNU C Library
The GNU C Library cannot be compiled in the source directory. You must
build it in a separate build directory. For example, if you have
unpacked the GNU C Library sources in '/src/gnu/glibc-VERSION', create a
directory '/src/gnu/glibc-build' to put the object files in. This
allows removing the whole build directory in case an error occurs, which
is the safest way to get a fresh start and should always be done.
unpacked the GNU C Library sources in `/src/gnu/glibc-VERSION', create
a directory `/src/gnu/glibc-build' to put the object files in. This
allows removing the whole build directory in case an error occurs,
which is the safest way to get a fresh start and should always be done.
From your object directory, run the shell script 'configure' located
From your object directory, run the shell script `configure' located
at the top level of the source tree. In the scenario above, you'd type
$ ../glibc-VERSION/configure ARGS...
@@ -33,199 +34,141 @@ at the top level of the source tree. In the scenario above, you'd type
directory, the compilation may need to create or modify files and
directories in the source directory.
'configure' takes many options, but the only one that is usually
mandatory is '--prefix'. This option tells 'configure' where you want
the GNU C Library installed. This defaults to '/usr/local', but the
`configure' takes many options, but the only one that is usually
mandatory is `--prefix'. This option tells `configure' where you want
the GNU C Library installed. This defaults to `/usr/local', but the
normal setting to install as the standard system library is
'--prefix=/usr' for GNU/Linux systems and '--prefix=' (an empty prefix)
`--prefix=/usr' for GNU/Linux systems and `--prefix=' (an empty prefix)
for GNU/Hurd systems.
It may also be useful to set the CC and CFLAGS variables in the
environment when running 'configure'. CC selects the C compiler that
environment when running `configure'. CC selects the C compiler that
will be used, and CFLAGS sets optimization options for the compiler.
The following list describes all of the available options for
'configure':
`configure':
'--prefix=DIRECTORY'
`--prefix=DIRECTORY'
Install machine-independent data files in subdirectories of
'DIRECTORY'. The default is to install in '/usr/local'.
`DIRECTORY'. The default is to install in `/usr/local'.
'--exec-prefix=DIRECTORY'
`--exec-prefix=DIRECTORY'
Install the library and other machine-dependent files in
subdirectories of 'DIRECTORY'. The default is to the '--prefix'
directory if that option is specified, or '/usr/local' otherwise.
subdirectories of `DIRECTORY'. The default is to the `--prefix'
directory if that option is specified, or `/usr/local' otherwise.
'--with-headers=DIRECTORY'
Look for kernel header files in DIRECTORY, not '/usr/include'. The
GNU C Library needs information from the kernel's header files
`--with-headers=DIRECTORY'
Look for kernel header files in DIRECTORY, not `/usr/include'.
The GNU C Library needs information from the kernel's header files
describing the interface to the kernel. The GNU C Library will
normally look in '/usr/include' for them, but if you specify this
normally look in `/usr/include' for them, but if you specify this
option, it will look in DIRECTORY instead.
This option is primarily of use on a system where the headers in
'/usr/include' come from an older version of the GNU C Library.
`/usr/include' come from an older version of the GNU C Library.
Conflicts can occasionally happen in this case. You can also use
this option if you want to compile the GNU C Library with a newer
set of kernel headers than the ones found in '/usr/include'.
set of kernel headers than the ones found in `/usr/include'.
'--enable-add-ons[=LIST]'
`--enable-add-ons[=LIST]'
Specify add-on packages to include in the build. If this option is
specified with no list, it enables all the add-on packages it finds
in the main source directory; this is the default behavior. You
may specify an explicit list of add-ons to use in LIST, separated
by spaces or commas (if you use spaces, remember to quote them from
the shell). Each add-on in LIST can be an absolute directory name
or can be a directory name relative to the main source directory,
or relative to the build directory (that is, the current working
directory). For example,
'--enable-add-ons=nptl,../glibc-libidn-VERSION'.
specified with no list, it enables all the add-on packages it
finds in the main source directory; this is the default behavior.
You may specify an explicit list of add-ons to use in LIST,
separated by spaces or commas (if you use spaces, remember to
quote them from the shell). Each add-on in LIST can be an
absolute directory name or can be a directory name relative to the
main source directory, or relative to the build directory (that
is, the current working directory). For example,
`--enable-add-ons=nptl,../glibc-libidn-VERSION'.
'--enable-kernel=VERSION'
`--enable-kernel=VERSION'
This option is currently only useful on GNU/Linux systems. The
VERSION parameter should have the form X.Y.Z and describes the
smallest version of the Linux kernel the generated library is
expected to support. The higher the VERSION number is, the less
compatibility code is added, and the faster the code gets.
'--with-binutils=DIRECTORY'
Use the binutils (assembler and linker) in 'DIRECTORY', not the
`--with-binutils=DIRECTORY'
Use the binutils (assembler and linker) in `DIRECTORY', not the
ones the C compiler would default to. You can use this option if
the default binutils on your system cannot deal with all the
constructs in the GNU C Library. In that case, 'configure' will
constructs in the GNU C Library. In that case, `configure' will
detect the problem and suppress these constructs, so that the
library will still be usable, but functionality may be lost--for
example, you can't build a shared libc with old binutils.
'--without-fp'
`--without-fp'
Use this option if your computer lacks hardware floating-point
support and your operating system does not emulate an FPU.
'--disable-shared'
`--disable-shared'
Don't build shared libraries even if it is possible. Not all
systems support shared libraries; you need ELF support and
(currently) the GNU linker.
'--disable-profile'
`--disable-profile'
Don't build libraries with profiling information. You may want to
use this option if you don't plan to do profiling.
'--enable-static-nss'
`--disable-versioning'
Don't compile the shared libraries with symbol version information.
Doing this will make the resulting library incompatible with old
binaries, so it's not recommended.
`--enable-static-nss'
Compile static versions of the NSS (Name Service Switch) libraries.
This is not recommended because it defeats the purpose of NSS; a
program linked statically with the NSS libraries cannot be
dynamically reconfigured to use a different name database.
'--enable-hardcoded-path-in-tests'
`--without-tls'
By default the C library is built with support for thread-local
storage if the used tools support it. By using `--without-tls'
this can be prevented though there generally is no reason since it
creates compatibility problems.
`--enable-hardcoded-path-in-tests'
By default, dynamic tests are linked to run with the installed C
library. This option hardcodes the newly built C library path in
dynamic tests so that they can be invoked directly.
'--disable-timezone-tools'
By default, timezone related utilities ('zic', 'zdump', and
'tzselect') are installed with the GNU C Library. If you are
building these independently (e.g. by using the 'tzcode' package),
then this option will allow disabling the install of these.
`--build=BUILD-SYSTEM'
`--host=HOST-SYSTEM'
These options are for cross-compiling. If you specify both
options and BUILD-SYSTEM is different from HOST-SYSTEM, `configure'
will prepare to cross-compile the GNU C Library from BUILD-SYSTEM
to be used on HOST-SYSTEM. You'll probably need the
`--with-headers' option too, and you may have to override
CONFIGURE's selection of the compiler and/or binutils.
Note that you need to make sure the external tools are kept in sync
with the versions that the GNU C Library expects as the data
formats may change over time. Consult the 'timezone' subdirectory
for more details.
'--enable-lock-elision=yes'
Enable lock elision for pthread mutexes by default.
'--enable-stack-protector'
'--enable-stack-protector=strong'
'--enable-stack-protector=all'
Compile the C library and all other parts of the glibc package
(including the threading and math libraries, NSS modules, and
transliteration modules) using the GCC '-fstack-protector',
'-fstack-protector-strong' or '-fstack-protector-all' options to
detect stack overruns. Only the dynamic linker and a small number
of routines called directly from assembler are excluded from this
protection.
'--enable-pt_chown'
The file 'pt_chown' is a helper binary for 'grantpt' (*note
Pseudo-Terminals: Allocation.) that is installed setuid root to fix
up pseudo-terminal ownership. It is not built by default because
systems using the Linux kernel are commonly built with the 'devpts'
filesystem enabled and mounted at '/dev/pts', which manages
pseudo-terminal ownership automatically. By using
'--enable-pt_chown', you may build 'pt_chown' and install it setuid
and owned by 'root'. The use of 'pt_chown' introduces additional
security risks to the system and you should enable it only if you
understand and accept those risks.
'--disable-werror'
By default, the GNU C Library is built with '-Werror'. If you wish
to build without this option (for example, if building with a newer
version of GCC than this version of the GNU C Library was tested
with, so new warnings cause the build with '-Werror' to fail), you
can configure with '--disable-werror'.
'--disable-mathvec'
By default for x86_64, the GNU C Library is built with the vector
math library. Use this option to disable the vector math library.
'--enable-tunables'
Tunables support allows additional library parameters to be
customized at runtime. This is an experimental feature and affects
startup time and is thus disabled by default. This option can take
the following values:
'no'
This is the default if the option is not passed to configure.
This disables tunables.
'yes'
This is the default if the option is passed to configure.
This enables tunables and selects the default frontend
(currently 'valstring').
'valstring'
This enables tunables and selects the 'valstring' frontend for
tunables. This frontend allows users to specify tunables as a
colon-separated list in a single environment variable
'GLIBC_TUNABLES'.
'--build=BUILD-SYSTEM'
'--host=HOST-SYSTEM'
These options are for cross-compiling. If you specify both options
and BUILD-SYSTEM is different from HOST-SYSTEM, 'configure' will
prepare to cross-compile the GNU C Library from BUILD-SYSTEM to be
used on HOST-SYSTEM. You'll probably need the '--with-headers'
option too, and you may have to override CONFIGURE's selection of
the compiler and/or binutils.
If you only specify '--host', 'configure' will prepare for a native
compile but use what you specify instead of guessing what your
system is. This is most useful to change the CPU submodel. For
example, if 'configure' guesses your machine as 'i686-pc-linux-gnu'
but you want to compile a library for 586es, give
'--host=i586-pc-linux-gnu' or just '--host=i586-linux' and add the
appropriate compiler flags ('-mcpu=i586' will do the trick) to
If you only specify `--host', `configure' will prepare for a
native compile but use what you specify instead of guessing what
your system is. This is most useful to change the CPU submodel.
For example, if `configure' guesses your machine as
`i686-pc-linux-gnu' but you want to compile a library for 586es,
give `--host=i586-pc-linux-gnu' or just `--host=i586-linux' and add
the appropriate compiler flags (`-mcpu=i586' will do the trick) to
CFLAGS.
If you specify just '--build', 'configure' will get confused.
If you specify just `--build', `configure' will get confused.
'--with-pkgversion=VERSION'
`--with-pkgversion=VERSION'
Specify a description, possibly including a build number or build
date, of the binaries being built, to be included in '--version'
date, of the binaries being built, to be included in `--version'
output from programs installed with the GNU C Library. For
example, '--with-pkgversion='FooBar GNU/Linux glibc build 123''.
The default value is 'GNU libc'.
example, `--with-pkgversion='FooBar GNU/Linux glibc build 123''.
The default value is `GNU libc'.
'--with-bugurl=URL'
`--with-bugurl=URL'
Specify the URL that users should visit if they wish to report a
bug, to be included in '--help' output from programs installed with
bug, to be included in `--help' output from programs installed with
the GNU C Library. The default value refers to the main
bug-reporting information for the GNU C Library.
To build the library and related programs, type 'make'. This will
produce a lot of output, some of which may look like errors from 'make'
but aren't. Look for error messages from 'make' containing '***'.
To build the library and related programs, type `make'. This will
produce a lot of output, some of which may look like errors from `make'
but isn't. Look for error messages from `make' containing `***'.
Those indicate that something is seriously wrong.
The compilation process can take a long time, depending on the
@@ -233,167 +176,129 @@ configuration and the speed of your machine. Some complex modules may
take a very long time to compile, as much as several minutes on slower
machines. Do not panic if the compiler appears to hang.
If you want to run a parallel make, simply pass the '-j' option with
an appropriate numeric parameter to 'make'. You need a recent GNU
'make' version, though.
If you want to run a parallel make, simply pass the `-j' option with
an appropriate numeric parameter to `make'. You need a recent GNU
`make' version, though.
To build and run test programs which exercise some of the library
facilities, type 'make check'. If it does not complete successfully, do
not use the built library, and report a bug after verifying that the
facilities, type `make check'. If it does not complete successfully,
do not use the built library, and report a bug after verifying that the
problem is not already known. *Note Reporting Bugs::, for instructions
on reporting bugs. Note that some of the tests assume they are not
being run by 'root'. We recommend you compile and test the GNU C
being run by `root'. We recommend you compile and test the GNU C
Library as an unprivileged user.
Before reporting bugs make sure there is no problem with your system.
The tests (and later installation) use some pre-existing files of the
system such as '/etc/passwd', '/etc/nsswitch.conf' and others. These
system such as `/etc/passwd', `/etc/nsswitch.conf' and others. These
files must all contain correct and sensible content.
Normally, 'make check' will run all the tests before reporting all
problems found and exiting with error status if any problems occurred.
You can specify 'stop-on-test-failure=y' when running 'make check' to
make the test run stop and exit with an error status immediately when a
failure occurs.
The GNU C Library pretty printers come with their own set of scripts
for testing, which run together with the rest of the testsuite through
'make check'. These scripts require the following tools to run
successfully:
* Python 2.7.6/3.4.3 or later
Python is required for running the printers' test scripts.
* PExpect 4.0
The printer tests drive GDB through test programs and compare its
output to the printers'. PExpect is used to capture the output of
GDB, and should be compatible with the Python version in your
system.
* GDB 7.8 or later with support for Python 2.7.6/3.4.3 or later
GDB itself needs to be configured with Python support in order to
use the pretty printers. Notice that your system having Python
available doesn't imply that GDB supports it, nor that your
system's Python and GDB's have the same version.
If these tools are absent, the printer tests will report themselves as
'UNSUPPORTED'. Notice that some of the printer tests require the GNU C
Library to be compiled with debugging symbols.
To format the 'GNU C Library Reference Manual' for printing, type
'make dvi'. You need a working TeX installation to do this. The
distribution builds the on-line formatted version of the manual, as Info
files, as part of the build process. You can build them manually with
'make info'.
To format the `GNU C Library Reference Manual' for printing, type
`make dvi'. You need a working TeX installation to do this. The
distribution builds the on-line formatted version of the manual, as
Info files, as part of the build process. You can build them manually
with `make info'.
The library has a number of special-purpose configuration parameters
which you can find in 'Makeconfig'. These can be overwritten with the
file 'configparms'. To change them, create a 'configparms' in your
build directory and add values as appropriate for your system. The file
is included and parsed by 'make' and has to follow the conventions for
makefiles.
which you can find in `Makeconfig'. These can be overwritten with the
file `configparms'. To change them, create a `configparms' in your
build directory and add values as appropriate for your system. The
file is included and parsed by `make' and has to follow the conventions
for makefiles.
It is easy to configure the GNU C Library for cross-compilation by
setting a few variables in 'configparms'. Set 'CC' to the
setting a few variables in `configparms'. Set `CC' to the
cross-compiler for the target you configured the library for; it is
important to use this same 'CC' value when running 'configure', like
this: 'CC=TARGET-gcc configure TARGET'. Set 'BUILD_CC' to the compiler
important to use this same `CC' value when running `configure', like
this: `CC=TARGET-gcc configure TARGET'. Set `BUILD_CC' to the compiler
to use for programs run on the build system as part of compiling the
library. You may need to set 'AR' to cross-compiling versions of 'ar'
if the native tools are not configured to work with object files for the
target you configured for. When cross-compiling the GNU C Library, it
may be tested using 'make check
library. You may need to set `AR' to cross-compiling versions of `ar'
if the native tools are not configured to work with object files for
the target you configured for. When cross-compiling the GNU C Library,
it may be tested using `make check
test-wrapper="SRCDIR/scripts/cross-test-ssh.sh HOSTNAME"', where SRCDIR
is the absolute directory name for the main source directory and
HOSTNAME is the host name of a system that can run the newly built
binaries of the GNU C Library. The source and build directories must be
visible at the same locations on both the build system and HOSTNAME.
binaries of the GNU C Library. The source and build directories must
be visible at the same locations on both the build system and HOSTNAME.
In general, when testing the GNU C Library, 'test-wrapper' may be set
In general, when testing the GNU C Library, `test-wrapper' may be set
to the name and arguments of any program to run newly built binaries.
This program must preserve the arguments to the binary being run, its
working directory and the standard input, output and error file
descriptors. If 'TEST-WRAPPER env' will not work to run a program with
environment variables set, then 'test-wrapper-env' must be set to a
program that runs a newly built program with environment variable
assignments in effect, those assignments being specified as 'VAR=VALUE'
before the name of the program to be run. If multiple assignments to
the same variable are specified, the last assignment specified must take
precedence. Similarly, if 'TEST-WRAPPER env -i' will not work to run a
program with an environment completely empty of variables except those
directly assigned, then 'test-wrapper-env-only' must be set; its use has
the same syntax as 'test-wrapper-env', the only difference in its
semantics being starting with an empty set of environment variables
rather than the ambient set.
working directory, all environment variables set as part of testing and
the standard input, output and error file descriptors. If
`TEST-WRAPPER env' will not work to run a program with environment
variables set, then `test-wrapper-env' must be set to a program that
runs a newly built program with environment variable assignments in
effect, those assignments being specified as `VAR=VALUE' before the
name of the program to be run.
Installing the C Library
========================
To install the library and its header files, and the Info files of the
manual, type 'make install'. This will build things, if necessary,
before installing them; however, you should still compile everything
first. If you are installing the GNU C Library as your primary C
library, we recommend that you shut the system down to single-user mode
first, and reboot afterward. This minimizes the risk of breaking things
when the library changes out from underneath.
manual, type `env LANGUAGE=C LC_ALL=C make install'. This will build
things, if necessary, before installing them; however, you should still
compile everything first. If you are installing the GNU C Library as
your primary C library, we recommend that you shut the system down to
single-user mode first, and reboot afterward. This minimizes the risk
of breaking things when the library changes out from underneath.
'make install' will do the entire job of upgrading from a previous
`make install' will do the entire job of upgrading from a previous
installation of the GNU C Library version 2.x. There may sometimes be
headers left behind from the previous installation, but those are
generally harmless. If you want to avoid leaving headers behind you can
do things in the following order.
generally harmless. If you want to avoid leaving headers behind you
can do things in the following order.
You must first build the library ('make'), optionally check it ('make
check'), switch the include directories and then install ('make
You must first build the library (`make'), optionally check it
(`make check'), switch the include directories and then install (`make
install'). The steps must be done in this order. Not moving the
directory before install will result in an unusable mixture of header
files from both libraries, but configuring, building, and checking the
library requires the ability to compile and run programs against the old
library. The new '/usr/include', after switching the include
library. The new `/usr/include', after switching the include
directories and before installing the library should contain the Linux
headers, but nothing else. If you do this, you will need to restore any
headers from libraries other than the GNU C Library yourself after
headers, but nothing else. If you do this, you will need to restore
any headers from libraries other than the GNU C Library yourself after
installing the library.
You can install the GNU C Library somewhere other than where you
configured it to go by setting the 'DESTDIR' GNU standard make variable
on the command line for 'make install'. The value of this variable is
configured it to go by setting the `install_root' variable on the
command line for `make install'. The value of this variable is
prepended to all the paths for installation. This is useful when
setting up a chroot environment or preparing a binary distribution. The
directory should be specified with an absolute file name. Installing
with the 'prefix' and 'exec_prefix' GNU standard make variables set is
not supported.
setting up a chroot environment or preparing a binary distribution.
The directory should be specified with an absolute file name.
The GNU C Library includes a daemon called 'nscd', which you may or
may not want to run. 'nscd' caches name service lookups; it can
The GNU C Library includes a daemon called `nscd', which you may or
may not want to run. `nscd' caches name service lookups; it can
dramatically improve performance with NIS+, and may help with DNS as
well.
One auxiliary program, '/usr/libexec/pt_chown', is installed setuid
'root' if the '--enable-pt_chown' configuration option is used. This
program is invoked by the 'grantpt' function; it sets the permissions on
a pseudoterminal so it can be used by the calling process. If you are
using a Linux kernel with the 'devpts' filesystem enabled and mounted at
'/dev/pts', you don't need this program.
One auxiliary program, `/usr/libexec/pt_chown', is installed setuid
`root'. This program is invoked by the `grantpt' function; it sets the
permissions on a pseudoterminal so it can be used by the calling
process. This means programs like `xterm' and `screen' do not have to
be setuid to get a pty. (There may be other reasons why they need
privileges.) If you are using a Linux kernel with the `devptsfs' or
`devfs' filesystems providing pty slaves, you don't need this program;
otherwise you do. The source for `pt_chown' is in
`login/programs/pt_chown.c'.
After installation you might want to configure the timezone and
locale installation of your system. The GNU C Library comes with a
locale database which gets configured with 'localedef'. For example, to
set up a German locale with name 'de_DE', simply issue the command
'localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales that
are supported by the GNU C Library, you can issue from your build
directory the command 'make localedata/install-locales'.
locale database which gets configured with `localedef'. For example, to
set up a German locale with name `de_DE', simply issue the command
`localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales
that are supported by the GNU C Library, you can issue from your build
directory the command `make localedata/install-locales'.
To configure the locally used timezone, set the 'TZ' environment
variable. The script 'tzselect' helps you to select the right value.
As an example, for Germany, 'tzselect' would tell you to use
'TZ='Europe/Berlin''. For a system wide installation (the given paths
are for an installation with '--prefix=/usr'), link the timezone file
which is in '/usr/share/zoneinfo' to the file '/etc/localtime'. For
Germany, you might execute 'ln -s /usr/share/zoneinfo/Europe/Berlin
To configure the locally used timezone, set the `TZ' environment
variable. The script `tzselect' helps you to select the right value.
As an example, for Germany, `tzselect' would tell you to use
`TZ='Europe/Berlin''. For a system wide installation (the given paths
are for an installation with `--prefix=/usr'), link the timezone file
which is in `/usr/share/zoneinfo' to the file `/etc/localtime'. For
Germany, you might execute `ln -s /usr/share/zoneinfo/Europe/Berlin
/etc/localtime'.
Recommended Tools for Compilation
@@ -402,30 +307,18 @@ Recommended Tools for Compilation
We recommend installing the following GNU tools before attempting to
build the GNU C Library:
* GNU 'make' 3.79 or newer
* GNU `make' 3.79 or newer
You need the latest version of GNU 'make'. Modifying the GNU C
Library to work with other 'make' programs would be so difficult
that we recommend you port GNU 'make' instead. *Really.* We
recommend GNU 'make' version 3.79. All earlier versions have
You need the latest version of GNU `make'. Modifying the GNU C
Library to work with other `make' programs would be so difficult
that we recommend you port GNU `make' instead. *Really.* We
recommend GNU `make' version 3.79. All earlier versions have
severe bugs or lack features.
* GCC 4.7 or newer
* GCC 4.3 or newer, GCC 4.6 recommended
GCC 4.7 or higher is required. In general it is recommended to use
the newest version of the compiler that is known to work for
building the GNU C Library, as newer compilers usually produce
better code. As of release time, GCC 6.3 is the newest compiler
verified to work to build the GNU C Library.
For multi-arch support it is recommended to use a GCC which has
been built with support for GNU indirect functions. This ensures
that correct debugging information is generated for functions
selected by IFUNC resolvers. This support can either be enabled by
configuring GCC with '--enable-gnu-indirect-function', or by
enabling it by default by setting 'default_gnu_indirect_function'
variable for a particular architecture in the GCC source file
'gcc/config.gcc'.
GCC 4.3 or higher is required; as of this writing, GCC 4.6 is the
compiler we advise to use to build the GNU C Library.
You can use whatever compiler you like to compile programs that use
the GNU C Library.
@@ -433,53 +326,47 @@ build the GNU C Library:
Check the FAQ for any special compiler issues on particular
platforms.
* GNU 'binutils' 2.22 or later
* GNU `binutils' 2.20 or later
You must use GNU 'binutils' (as and ld) to build the GNU C Library.
You must use GNU `binutils' (as and ld) to build the GNU C Library.
No other assembler or linker has the necessary functionality at the
moment. As of release time, GNU 'binutils' 2.25 is the newest
verified to work to build the GNU C Library.
moment.
* GNU 'texinfo' 4.7 or later
* GNU `texinfo' 4.5 or later
To correctly translate and install the Texinfo documentation you
need this version of the 'texinfo' package. Earlier versions do
need this version of the `texinfo' package. Earlier versions do
not understand all the tags used in the document, and the
installation mechanism for the info files is not present or works
differently. As of release time, 'texinfo' 6.0 is the newest
verified to work to build the GNU C Library.
differently.
* GNU 'awk' 3.1.2, or higher
* GNU `awk' 3.0, or higher
'awk' is used in several places to generate files. Some 'gawk'
extensions are used, including the 'asorti' function, which was
introduced in version 3.1.2 of 'gawk'. As of release time, 'gawk'
version 4.1.3 is the newest verified to work to build the GNU C
Library.
`Awk' is used in several places to generate files. `gawk' 3.0 is
known to work.
* Perl 5
Perl is not required, but it is used if present to test the
installation. We may decide to use it elsewhere in the future.
* GNU 'sed' 3.02 or newer
* GNU `sed' 3.02 or newer
'Sed' is used in several places to generate files. Most scripts
work with any version of 'sed'. As of release time, 'sed' version
4.2.2 is the newest verified to work to build the GNU C Library.
`Sed' is used in several places to generate files. Most scripts
work with any version of `sed'. The known exception is the script
`po2test.sed' in the `intl' subdirectory which is used to generate
`msgs.h' for the test suite. This script works correctly only
with GNU `sed' 3.02. If you like to run the test suite, you
should definitely upgrade `sed'.
If you change any of the 'configure.ac' files you will also need
* GNU 'autoconf' 2.69 (exactly)
If you change any of the `configure.in' files you will also need
* GNU `autoconf' 2.53 or higher
and if you change any of the message translation files you will need
* GNU 'gettext' 0.10.36 or later
If you wish to regenerate the 'yacc' parser code in the 'intl'
subdirectory you will need
* GNU 'bison' 2.7 or later
* GNU `gettext' 0.10.36 or later
You may also need these packages if you upgrade your source tree using
patches, although we try to avoid this.
@@ -488,41 +375,42 @@ Specific advice for GNU/Linux systems
=====================================
If you are installing the GNU C Library on GNU/Linux systems, you need
to have the header files from a 3.2 or newer kernel around for
reference. These headers must be installed using 'make
headers_install'; the headers present in the kernel source directory are
not suitable for direct use by the GNU C Library. You do not need to
use that kernel, just have its headers installed where the GNU C Library
can access them, referred to here as INSTALL-DIRECTORY. The easiest way
to do this is to unpack it in a directory such as
'/usr/src/linux-VERSION'. In that directory, run 'make headers_install
to have the header files from a 2.6.19.1 or newer kernel around for
reference. These headers must be installed using `make
headers_install'; the headers present in the kernel source directory
are not suitable for direct use by the GNU C Library. You do not need
to use that kernel, just have its headers installed where the GNU C
Library can access them, referred to here as INSTALL-DIRECTORY. The
easiest way to do this is to unpack it in a directory such as
`/usr/src/linux-VERSION'. In that directory, run `make headers_install
INSTALL_HDR_PATH=INSTALL-DIRECTORY'. Finally, configure the GNU C
Library with the option '--with-headers=INSTALL-DIRECTORY/include'. Use
the most recent kernel you can get your hands on. (If you are
Library with the option `--with-headers=INSTALL-DIRECTORY/include'.
Use the most recent kernel you can get your hands on. (If you are
cross-compiling the GNU C Library, you need to specify
'ARCH=ARCHITECTURE' in the 'make headers_install' command, where
`ARCH=ARCHITECTURE' in the `make headers_install' command, where
ARCHITECTURE is the architecture name used by the Linux kernel, such as
'x86' or 'powerpc'.)
`x86' or `powerpc'.)
After installing the GNU C Library, you may need to remove or rename
directories such as '/usr/include/linux' and '/usr/include/asm', and
replace them with copies of directories such as 'linux' and 'asm' from
'INSTALL-DIRECTORY/include'. All directories present in
'INSTALL-DIRECTORY/include' should be copied, except that the GNU C
Library provides its own version of '/usr/include/scsi'; the files
provided by the kernel should be copied without replacing those provided
by the GNU C Library. The 'linux', 'asm' and 'asm-generic' directories
are required to compile programs using the GNU C Library; the other
directories describe interfaces to the kernel but are not required if
not compiling programs using those interfaces. You do not need to copy
kernel headers if you did not specify an alternate kernel header source
using '--with-headers'.
directories such as `/usr/include/linux' and `/usr/include/asm', and
replace them with copies of directories such as `linux' and `asm' from
`INSTALL-DIRECTORY/include'. All directories present in
`INSTALL-DIRECTORY/include' should be copied, except that the GNU C
Library provides its own version of `/usr/include/scsi'; the files
provided by the kernel should be copied without replacing those
provided by the GNU C Library. The `linux', `asm' and `asm-generic'
directories are required to compile programs using the GNU C Library;
the other directories describe interfaces to the kernel but are not
required if not compiling programs using those interfaces. You do not
need to copy kernel headers if you did not specify an alternate kernel
header source using `--with-headers'.
The Filesystem Hierarchy Standard for GNU/Linux systems expects some
components of the GNU C Library installation to be in '/lib' and some in
'/usr/lib'. This is handled automatically if you configure the GNU C
Library with '--prefix=/usr'. If you set some other prefix or allow it
to default to '/usr/local', then all the components are installed there.
components of the GNU C Library installation to be in `/lib' and some
in `/usr/lib'. This is handled automatically if you configure the GNU
C Library with `--prefix=/usr'. If you set some other prefix or allow
it to default to `/usr/local', then all the components are installed
there.
Reporting Bugs
==============
@@ -533,20 +421,20 @@ fixed. If you don't, no one will ever know about them and they will
remain unfixed for all eternity, if not longer.
It is a good idea to verify that the problem has not already been
reported. Bugs are documented in two places: The file 'BUGS' describes
reported. Bugs are documented in two places: The file `BUGS' describes
a number of well known bugs and the central GNU C Library bug tracking
system has a WWW interface at <http://sourceware.org/bugzilla/>. The
system has a WWW interface at `http://sourceware.org/bugzilla/'. The
WWW interface gives you access to open and closed reports. A closed
report normally includes a patch or a hint on solving the problem.
To report a bug, first you must find it. With any luck, this will be
the hard part. Once you've found a bug, make sure it's really a bug. A
good way to do this is to see if the GNU C Library behaves the same way
some other C library does. If so, probably you are wrong and the
libraries are right (but not necessarily). If not, one of the libraries
is probably wrong. It might not be the GNU C Library. Many historical
Unix C libraries permit things that we don't, such as closing a file
twice.
To report a bug, first you must find it. With any luck, this will
be the hard part. Once you've found a bug, make sure it's really a
bug. A good way to do this is to see if the GNU C Library behaves the
same way some other C library does. If so, probably you are wrong and
the libraries are right (but not necessarily). If not, one of the
libraries is probably wrong. It might not be the GNU C Library. Many
historical Unix C libraries permit things that we don't, such as
closing a file twice.
If you think you have found some way in which the GNU C Library does
not conform to the ISO and POSIX standards (*note Standards and
@@ -558,7 +446,7 @@ library, you really only need to narrow it down to one library function
call, if possible. This should not be too difficult.
The final step when you have a simple test case is to report the bug.
Do this at <http://www.gnu.org/software/libc/bugs.html>.
Do this at `http://www.gnu.org/software/libc/bugs.html'.
If you are not sure how a function should behave, and this manual
doesn't tell you, that's a bug in the manual. Report that too! If the
+118 -271
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991-2017 Free Software Foundation, Inc.
# Copyright (C) 1991-2013 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
@@ -50,7 +50,7 @@ export sysdep_dir := $(sysdep_dir)
include $(common-objpfx)config.make
# What flags to give to sources which call user provided callbacks
uses-callbacks = -fexceptions
uses-callbacks = $(exceptions)
# What flags to give to tests which test stack alignment
stack-align-test-flags =
@@ -86,18 +86,18 @@ $(common-objpfx)config.make: $(common-objpfx)config.status \
$(common-objpfx)config.status: $(..)version.h $(..)configure \
$(foreach dir,$(sysdirs),\
$(wildcard $(dir)/Implies) \
$(patsubst %.ac,%,\
$(patsubst %.in,%,\
$(firstword $(wildcard \
$(addprefix $(dir)/,configure configure.ac))))) \
$(patsubst %.ac,%,\
$(wildcard $(..)sysdeps/*/preconfigure $(..)sysdeps/*/preconfigure.ac)) \
$(patsubst %.ac,%,\
$(addprefix $(dir)/,configure configure.in))))) \
$(patsubst %.in,%,\
$(wildcard $(..)sysdeps/*/preconfigure $(..)sysdeps/*/preconfigure.in)) \
$(patsubst %.in,%,\
$(foreach add-on,$(add-ons),\
$(firstword $(wildcard \
$(addprefix $(firstword $(filter /%,$(add-on)) $(..)$(add-on))/,\
configure configure.ac))) \
configure configure.in))) \
$(wildcard $(addprefix $(firstword $(filter /%,$(add-on)) $(..)$(add-on))/,\
sysdeps/*/preconfigure sysdeps/*/preconfigure.ac))))
sysdeps/*/preconfigure sysdeps/*/preconfigure.in))))
@cd $(@D); if test -f $(@F); then exec $(SHELL) $(@F) --recheck; else \
echo The GNU C library has not been configured. >&2; \
echo Run \`configure\' to configure it before building. >&2; \
@@ -190,19 +190,18 @@ zonedir = $(datadir)/zoneinfo
endif
inst_zonedir = $(install_root)$(zonedir)
# Where to install the compiled binary locale archive and compiled
# binary locale files.
ifndef complocaledir
complocaledir = $(libdir)/locale
# Where to install the locale files.
ifndef localedir
localedir = $(libdir)/locale
endif
inst_complocaledir = $(install_root)$(complocaledir)
inst_localedir = $(install_root)$(localedir)
# Where to install the message catalog data files (which are
# machine-independent).
ifndef localedir
localedir = $(datadir)/locale
ifndef msgcatdir
msgcatdir = $(datadir)/locale
endif
inst_localedir = $(install_root)$(localedir)
inst_msgcatdir = $(install_root)$(msgcatdir)
# Where to install the locale charmap source files.
ifndef i18ndir
@@ -346,7 +345,9 @@ endif
endif
# Flags to pass the C compiler when assembling preprocessed assembly code
# (`.S' files).
# (`.S' files). On some systems the assembler doesn't understand the `#' line
# directives the preprocessor produces. If you have troubling compiling
# assembly code, try using -P here to suppress these directives.
ifndef asm-CPPFLAGS
asm-CPPFLAGS =
endif
@@ -386,17 +387,6 @@ LDFLAGS.so += $(hashstyle-LDFLAGS)
LDFLAGS-rtld += $(hashstyle-LDFLAGS)
endif
# Command to run after every final link (executable or shared object).
# This is invoked with $(call after-link,...), so it should operate on
# the file $1. This can be set to do some sort of post-processing on
# binaries, or to perform some sort of static sanity check.
ifndef after-link
after-link =
endif
# Additional libraries to link into every test.
link-extra-libs-tests = $(libsupport)
# Command for linking PIE programs with the C library.
ifndef +link-pie
+link-pie-before-libc = $(CC) -pie -Wl,-O1 -nostdlib -nostartfiles -o $@ \
@@ -410,20 +400,10 @@ ifndef +link-pie
$(common-objpfx)libc% $(+postinit),$^) \
$(link-extra-libs)
+link-pie-after-libc = $(+postctorS) $(+postinit)
define +link-pie
$(+link-pie-before-libc) $(rtld-LDFLAGS) $(link-libc) $(+link-pie-after-libc)
$(call after-link,$@)
endef
define +link-pie-tests
$(+link-pie-before-libc) $(rtld-tests-LDFLAGS) $(link-libc-tests) \
$(+link-pie-after-libc)
$(call after-link,$@)
endef
define +link-pie-printers-tests
$(+link-pie-before-libc) $(built-rtld-LDFLAGS) $(link-libc-printers-tests) \
$(+link-pie-after-libc)
$(call after-link,$@)
endef
+link-pie = $(+link-pie-before-libc) $(rtld-LDFLAGS) $(link-libc) \
$(+link-pie-after-libc)
+link-pie-tests = $(+link-pie-before-libc) $(rtld-tests-LDFLAGS) \
$(link-libc-tests) $(+link-pie-after-libc)
endif
# Command for statically linking programs with the C library.
ifndef +link-static
@@ -437,24 +417,14 @@ ifndef +link-static
$(common-objpfx)libc% $(+postinit),$^) \
$(link-extra-libs-static)
+link-static-after-libc = $(+postctorT) $(+postinit)
define +link-static
$(+link-static-before-libc) $(link-libc-static) $(+link-static-after-libc)
$(call after-link,$@)
endef
define +link-static-tests
$(+link-static-before-libc) $(link-libc-static-tests) $(+link-static-after-libc)
$(call after-link,$@)
endef
+link-static = $(+link-static-before-libc) $(link-libc-static) \
$(+link-static-after-libc)
+link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
$(+link-static-after-libc)
endif
# Commands for linking programs with the C library.
ifndef +link
ifeq (yes,$(build-shared))
ifeq (yes,$(build-pie-default))
no-pie-ldflag = -no-pie
+link = $(+link-pie)
+link-tests = $(+link-pie-tests)
+link-printers-tests = $(+link-pie-printers-tests)
else # not build-pie-default
+link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
@@ -466,96 +436,56 @@ else # not build-pie-default
$(common-objpfx)libc% $(+postinit),$^) \
$(link-extra-libs)
+link-after-libc = $(+postctor) $(+postinit)
define +link
$(+link-before-libc) $(rtld-LDFLAGS) $(link-libc) $(+link-after-libc)
$(call after-link,$@)
endef
define +link-tests
$(+link-before-libc) $(rtld-tests-LDFLAGS) $(link-libc-tests) \
$(+link-after-libc)
$(call after-link,$@)
endef
define +link-printers-tests
$(+link-before-libc) $(built-rtld-LDFLAGS) $(link-libc-printers-tests) \
$(+link-after-libc)
$(call after-link,$@)
endef
endif # build-pie-default
else # build-static
+link = $(+link-before-libc) $(rtld-LDFLAGS) $(link-libc) \
$(+link-after-libc)
+link-tests = $(+link-before-libc) $(rtld-tests-LDFLAGS) \
$(link-libc-tests) $(+link-after-libc)
else
+link = $(+link-static)
+link-tests = $(+link-static-tests)
+link-printers-tests = $(+link-static-tests)
endif # build-shared
endif # +link
# The pretty printer test programs need to be compiled without optimizations
# so they won't confuse gdb. We could use either the 'GCC optimize' pragma
# or the 'optimize' function attribute to achieve this; however, at least on
# ARM, gcc always produces different debugging symbols when invoked with
# a -O greater than 0 than when invoked with -O0, regardless of anything else
# we're using to suppress optimizations. Therefore, we need to explicitly pass
# -O0 to it through CFLAGS.
# Additionally, the build system will try to -include $(common-objpfx)/config.h
# when compiling the tests, which will throw an error if some special macros
# (such as __OPTIMIZE__ and IS_IN_build) aren't defined. To avoid this, we
# tell gcc to define IS_IN_build.
CFLAGS-printers-tests := -O0 -ggdb3 -DIS_IN_build
ifeq (yes,$(build-shared))
# These indicate whether to link using the built ld.so or the installed one.
installed-rtld-LDFLAGS = -Wl,-dynamic-linker=$(rtlddir)/$(rtld-installed-name)
built-rtld-LDFLAGS = -Wl,-dynamic-linker=$(elf-objpfx)ld.so
ifndef rtld-LDFLAGS
rtld-LDFLAGS = $(installed-rtld-LDFLAGS)
endif
endif
ifeq (yes,$(build-shared))
ifndef rtld-LDFLAGS
rtld-LDFLAGS = -Wl,-dynamic-linker=$(rtlddir)/$(rtld-installed-name)
endif
ifndef rtld-tests-LDFLAGS
ifeq (yes,$(build-hardcoded-path-in-tests))
rtld-tests-LDFLAGS = $(built-rtld-LDFLAGS)
rtld-tests-LDFLAGS = -Wl,-dynamic-linker=$(common-objpfx)elf/ld.so
else
rtld-tests-LDFLAGS = $(installed-rtld-LDFLAGS)
endif # build-hardcoded-path-in-tests
endif # rtld-tests-LDFLAGS
endif # build-shared
rtld-tests-LDFLAGS = $(rtld-LDFLAGS)
endif
endif
endif
ifndef link-libc
ifeq (yes,$(build-shared))
# We need the versioned name of libc.so in the deps of $(others) et al
# so that the symlink to libc.so is created before anything tries to
# run the linked programs.
link-libc-rpath = -Wl,-rpath=$(rpath-link)
link-libc-rpath-link = -Wl,-rpath-link=$(rpath-link)
ifeq (yes,$(build-hardcoded-path-in-tests))
link-libc-tests-rpath-link = $(link-libc-rpath)
link-libc-tests-rpath-link = -Wl,-rpath=$(rpath-link)
else
link-libc-tests-rpath-link = $(link-libc-rpath-link)
endif # build-hardcoded-path-in-tests
endif
link-libc-before-gnulib = $(common-objpfx)libc.so$(libc.so-version) \
$(common-objpfx)$(patsubst %,$(libtype.oS),c) \
$(as-needed) $(elf-objpfx)ld.so \
$(as-needed) $(common-objpfx)elf/ld.so \
$(no-as-needed)
link-libc = $(link-libc-rpath-link) $(link-libc-before-gnulib) $(gnulib)
link-libc-tests-after-rpath-link = $(link-libc-before-gnulib) $(gnulib-tests)
link-libc-tests = $(link-libc-tests-rpath-link) \
$(link-libc-tests-after-rpath-link)
# Pretty printer test programs always require rpath instead of rpath-link.
link-libc-printers-tests = $(link-libc-rpath) \
$(link-libc-tests-after-rpath-link)
$(link-libc-before-gnulib) $(gnulib-tests)
# This is how to find at build-time things that will be installed there.
rpath-dirs = math elf dlfcn nss nis rt resolv crypt mathvec support
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
rpath-link = \
$(common-objdir):$(subst $(empty) ,:,$(patsubst ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%)))
else # build-static
else
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
endif # build-shared
endif # link-libc
endif
endif
elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
# Differences in the linkers on the various platforms.
LDFLAGS-rpath-ORIGIN = -Wl,-rpath,'$$ORIGIN'
@@ -646,6 +576,7 @@ endif
# Variants of the two previous definitions for statically linking programs.
+prectorT = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtbeginT.o`
+postctorT = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtend.o`
+interp = $(addprefix $(elf-objpfx),interp.os)
csu-objpfx = $(common-objpfx)csu/
elf-objpfx = $(common-objpfx)elf/
@@ -660,11 +591,6 @@ endif
ifndef test-wrapper-env
test-wrapper-env = $(test-wrapper) env
endif
# Likewise, but the program's environment will be empty except for any
# explicit <variable>=<value> assignments preceding the program name.
ifndef test-wrapper-env-only
test-wrapper-env-only = $(test-wrapper) env -i
endif
# Whether to run test programs built for the library's host system.
ifndef run-built-tests
@@ -675,12 +601,6 @@ run-built-tests = yes
endif
endif
# Whether to stop immediately when a test fails. Nonempty means to
# stop, empty means not to stop.
ifndef stop-on-test-failure
stop-on-test-failure =
endif
# How to run a program we just linked with our library.
# The program binary is assumed to be $(word 2,$^).
built-program-file = $(dir $(word 2,$^))$(notdir $(word 2,$^))
@@ -704,30 +624,17 @@ run-via-rtld-prefix = \
else
run-via-rtld-prefix =
endif
# $(run-program-env) is the default environment variable settings to
# use when running a program built with the newly built library.
run-program-env = GCONV_PATH=$(common-objpfx)iconvdata \
LOCPATH=$(common-objpfx)localedata LC_ALL=C
# $(run-program-prefix) is a command that, when prepended to the name
# of a program built with the newly built library, produces a command
# that, executed on the build system on which "make" is run, runs that
# program. $(run-program-prefix-before-env) and
# $(run-program-prefix-after-env) are similar, but separate parts
# before and after a list of environment variables.
run-program-prefix-before-env = $(test-wrapper-env)
run-program-prefix-after-env = $(run-via-rtld-prefix)
run-program-prefix = $(run-program-prefix-before-env) $(run-program-env) \
$(run-program-prefix-after-env)
# program.
run-program-prefix = $(test-wrapper) $(run-via-rtld-prefix)
# $(built-program-cmd) is a command that, executed on the build system
# on which "make" is run, runs the newly built program that is the
# second dependency of the makefile target in which
# $(built-program-cmd) is used. $(built-program-cmd-before-env) and
# $(built-program-cmd-after-env) are similar, before and after a list
# of environment variables.
built-program-cmd-before-env = $(test-wrapper-env)
built-program-cmd-after-env = $(run-via-rtld-prefix) $(built-program-file)
built-program-cmd = $(built-program-cmd-before-env) $(run-program-env) \
$(built-program-cmd-after-env)
# $(built-program-cmd) is used.
built-program-cmd = $(test-wrapper) \
$(run-via-rtld-prefix) $(built-program-file)
# $(host-built-program-cmd) is a command that, executed on the host
# for which the library is built, runs the newly built program that is
# the second dependency of the makefile target in which
@@ -748,16 +655,12 @@ endif
# $(test-program-prefix) is a command that, when prepended to the name
# of a test program built with the newly built library, produces a command
# that, executed on the build system on which "make" is run, runs that
# test program. $(test-program-prefix-before-env) and
# $(test-program-prefix-after-env) are similar, before and after a
# list of environment variables.
# test program.
# $(test-program-cmd) is a command that, executed on the build system
# on which "make" is run, runs the newly built test program that is the
# second dependency of the makefile target in which
# $(test-program-cmd) is used. $(test-program-cmd-before-env) and
# $(test-program-cmd-after-env) are similar, before and after a list
# of environment variables.
# $(test-program-cmd) is used.
# $(host-test-program-cmd) is a command that, executed on the host
# for which the library is built, runs the newly built test program that
@@ -766,37 +669,23 @@ endif
ifeq (yes,$(build-hardcoded-path-in-tests))
test-via-rtld-prefix =
test-program-prefix-before-env = $(test-wrapper-env)
test-program-prefix-after-env =
test-program-prefix = $(test-program-prefix-before-env) $(run-program-env) \
$(test-program-prefix-after-env)
test-program-cmd-before-env = $(test-wrapper-env)
test-program-cmd-after-env = $(built-program-file)
test-program-cmd = $(test-program-cmd-before-env) $(run-program-env) \
$(test-program-cmd-after-env)
test-program-prefix = $(test-wrapper)
test-program-cmd = $(test-wrapper) $(built-program-file)
host-test-program-cmd = $(built-program-file)
else
test-via-rtld-prefix = $(run-via-rtld-prefix)
test-program-prefix-before-env = $(run-program-prefix-before-env)
test-program-prefix-after-env = $(run-program-prefix-after-env)
test-program-prefix = $(run-program-prefix)
test-program-cmd-before-env = $(built-program-cmd-before-env)
test-program-cmd-after-env = $(built-program-cmd-after-env)
test-program-cmd = $(built-program-cmd)
host-test-program-cmd = $(host-built-program-cmd)
endif
# Extra flags to pass to GCC.
ifeq ($(all-warnings),yes)
+gccwarn := -Wall -Wwrite-strings -Wcast-qual -Wbad-function-cast -Wmissing-noreturn -Wmissing-prototypes -Wmissing-declarations -Wcomment -Wcomments -Wtrigraphs -Wsign-compare -Wfloat-equal -Wmultichar
+gccwarn := -Wall -Wwrite-strings -Winline -Wcast-qual -Wbad-function-cast -Wmissing-noreturn -Wmissing-prototypes -Wmissing-declarations -Wcomment -Wcomments -Wtrigraphs -Wsign-compare -Wfloat-equal -Wmultichar
else
+gccwarn := -Wall -Wwrite-strings
+gccwarn := -Wall -Wwrite-strings -Winline
endif
+gccwarn += -Wundef
ifeq ($(enable-werror),yes)
+gccwarn += -Werror
endif
+gccwarn-c = -Wstrict-prototypes -Wold-style-definition
+gccwarn-c = -Wstrict-prototypes
# We do not depend on the address of constants in different files to be
# actually different, so allow the compiler to merge them all.
@@ -807,11 +696,6 @@ endif
# disable any optimization that assume default rounding mode.
+math-flags = -frounding-math
# We might want to compile with some stack-protection flag.
ifneq ($(stack-protector),)
+stack-protector=$(stack-protector)
endif
# This is the program that generates makefile dependencies from C source files.
# The -MP flag tells GCC >= 3.2 (which we now require) to produce dummy
# targets for headers so that removed headers don't break the build.
@@ -871,8 +755,7 @@ ifeq "$(strip $(+cflags))" ""
+cflags := $(default_cflags)
endif # $(+cflags) == ""
+cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags) \
$(+stack-protector)
+cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags)
+gcc-nowarn := -w
# Don't duplicate options if we inherited variables from the parent.
@@ -898,55 +781,24 @@ endif # $(+cflags) == ""
# of many little headers in the include directory.
libio-include = -I$(..)libio
# List of non-library modules that we build.
built-modules = iconvprogs iconvdata ldconfig lddlibc4 libmemusage \
libSegFault libpcprofile librpcsvc locale-programs \
memusagestat nonlib nscd extramodules libnldbl libsupport
in-module = $(subst -,_,$(firstword $(libof-$(basename $(@F))) \
$(libof-$(<F)) \
$(libof-$(@F)) \
libc))
# Build ld.so, libc.so and libpthread.so with -ftls-model=initial-exec
tls-model = $(if $(filter libpthread rtld \
libc,$(in-module)),-ftls-model=initial-exec,)
module-cppflags-real = -include $(common-objpfx)libc-modules.h \
-DMODULE_NAME=$(in-module)
# We don't need libc-modules.h and the MODULE_NAME definition for .v.i
# files. These targets don't (and will likely never need to) use the IS_IN
# facility. In fact, shlib-versions should not use it because that will
# create a circular dependency as libc-modules.h is generated from
# shlib-versions.
module-cppflags = $(if $(filter %.v.i,$(@F)),,$(module-cppflags-real))
# These are the variables that the implicit compilation rules use.
# Note that we can't use -std=* in CPPFLAGS, because it overrides
# the implicit -lang-asm and breaks cpp behavior for .S files--notably
# it causes cpp to stop predefining __ASSEMBLER__.
CPPFLAGS = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \
$($(subdir)-CPPFLAGS) \
$(+includes) $(defines) $(module-cppflags) \
CPPFLAGS = $(CPPUNDEFS) $(CPPFLAGS-config) $($(subdir)-CPPFLAGS) \
$(+includes) $(defines) \
-include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \
$(CPPFLAGS-$(suffix $@)) \
$(foreach lib,$(libof-$(basename $(@F))) \
$(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
$(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
ifneq (no,$(have-tunables))
CPPFLAGS += -DTOP_NAMESPACE=glibc
endif
override CFLAGS = -std=gnu11 -fgnu89-inline $(config-extra-cflags) \
override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) $(config-extra-cflags) \
$(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
$(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
$(CFLAGS-$(@F)) $(tls-model) \
$(CFLAGS-$(@F)) \
$(foreach lib,$(libof-$(basename $(@F))) \
$(libof-$(<F)) $(libof-$(@F)),$(CFLAGS-$(lib)))
# Use our copies of cstdlib and cmath.
override CXXFLAGS = -I$(common-objpfx) $(c++-sysincludes) \
override CXXFLAGS = $(c++-sysincludes) \
$(filter-out %frame-pointer,$(+cflags)) $(sysdep-CFLAGS) \
$(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) $(CFLAGS-$(@F))
@@ -961,8 +813,7 @@ endif
# The compilation rules use $(CPPFLAGS-${SUFFIX}) and $(CFLAGS-${SUFFIX})
# to pass different flags for each flavor.
libtypes = $(foreach o,$(object-suffixes-for-libc),$(libtype$o))
# .op may be added to all-object-suffixes below.
all-object-suffixes := .o .os .oS
all-object-suffixes := .o .os .op .og .oS
object-suffixes :=
CPPFLAGS-.o = $(pic-default)
CFLAGS-.o = $(filter %frame-pointer,$(+cflags))
@@ -987,7 +838,6 @@ PIE-ccflag = -fPIE
ifeq (yes,$(build-profile))
# Under --enable-profile, we will build a static library of profiled objects.
# The profiled object files are named foo.op.
all-object-suffixes += .op
object-suffixes += .op
CPPFLAGS-.op = -DPROF $(pic-default)
CFLAGS-.op = -pg
@@ -1016,7 +866,7 @@ endif
ifndef ASFLAGS
ASFLAGS := $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
endif
ASFLAGS += -Werror=undef $(ASFLAGS-config) $(asflags-cpu)
ASFLAGS += $(ASFLAGS-config) $(asflags-cpu)
ifndef BUILD_CC
BUILD_CC = $(CC)
@@ -1075,18 +925,26 @@ $(common-objpfx)shlib-versions.v.i: \
$(subdir-srcdirs:=/shlib-versions)) \
$(..)shlib-versions
soversions-default-setname = $(patsubst %, %,\
$(filter-out %_default,\
$(oldest-abi:%=GLIBC_%)))
$(common-objpfx)soversions.i: $(..)scripts/soversions.awk \
$(common-objpfx)shlib-versions.v
$(AWK) -f $^ > $@T
$(AWK) -v default_setname='$(soversions-default-setname)' \
-v cpu='$(config-machine)' \
-v vendor='$(config-vendor)' \
-v os='$(config-os)' \
-f $^ > $@T
mv -f $@T $@
$(common-objpfx)soversions.mk: $(common-objpfx)soversions.i $(..)Makeconfig
(while read which lib number setname; do \
eval seen_$$which=1; \
test x"$$which" != xABI || echo abi-name = "$$lib"; \
test x"$$which" = xDEFAULT || continue; \
case $$number in \
[0-9]*) echo "$$lib.so-version=.$$number"; \
echo "all-sonames+=$$lib=$$lib.so\$$($$lib.so-version)";;\
*) echo "$$lib.so-version=$$number"; \
*) echo "$$lib.so-version=\$$(if \$$(abi-$(default-abi)-$$lib-soname),\$$(abi-$(default-abi)-$$lib-soname),$$number)"; \
echo "all-sonames+=$$lib=\$$($$lib.so-version)";;\
esac; \
done; \
@@ -1098,33 +956,44 @@ endif
postclean-generated += soversions.mk soversions.i \
shlib-versions.v shlib-versions.v.i
before-compile += $(common-objpfx)libc-modules.h
# Generate the header containing the names of all shared libraries.
# We use a stamp file to avoid unnecessary recompilations.
before-compile += $(common-objpfx)gnu/lib-names.h
ifeq ($(soversions.mk-done),t)
# Generate a header with macro definitions for use with the IS_IN macro.
# These are the possible values for the MODULE_NAME macro defined when building
# sources, to identify which module the translation unit is going to be built
# into.
$(common-objpfx)libc-modules.h: $(common-objpfx)libc-modules.stmp; @:
$(common-objpfx)libc-modules.stmp: $(..)scripts/gen-libc-modules.awk \
$(common-objpfx)soversions.i
$(AWK) -v buildlist="$(subst -,_,$(built-modules))" -f $^ > ${@:stmp=T}
$(common-objpfx)gnu/lib-names.h: $(common-objpfx)gnu/lib-names.stmp; @:
$(common-objpfx)gnu/lib-names.stmp: $(..)scripts/lib-names.awk \
$(common-objpfx)soversions.i
$(make-target-directory)
{ \
echo '/* This file is automatically generated.';\
echo ' It defines macros to allow user program to find the shared'; \
echo ' library files which come as part of GNU libc. */'; \
echo '#ifndef __GNU_LIB_NAMES_H'; \
echo '#define __GNU_LIB_NAMES_H 1'; \
echo ''; \
$(if $(abi-includes), \
$(foreach h,$(abi-includes), echo '#include <$(h)>';) \
echo '';) \
$(if $(abi-variants), \
$(foreach v,$(abi-variants),\
$(if $(abi-$(v)-condition),\
echo '#if $(abi-$(v)-condition)'; \
($(foreach s,$(all-sonames), \
$(if $(abi-$(v)-$(firstword $(subst =, ,$(s)))-soname),\
echo $(firstword $(subst =, ,$(s)))=$(abi-$(v)-$(firstword $(subst =, ,$(s)))-soname);, \
echo $(s);))) \
| LC_ALL=C $(AWK) -v multi=1 -f $(firstword $^) | LC_ALL=C sort;) \
$(if $(abi-$(v)-condition),echo '#endif';)), \
($(foreach s,$(all-sonames), echo $(s);)) \
| LC_ALL=C $(AWK) -f $(firstword $^) | LC_ALL=C sort;) \
echo ''; \
echo '#endif /* gnu/lib-names.h */'; \
} > ${@:stmp=T}
$(move-if-change) ${@:stmp=T} ${@:stmp=h}
touch $@
endif
# Build the tunables list header early since it could be used by any module in
# glibc.
ifneq (no,$(have-tunables))
before-compile += $(common-objpfx)dl-tunable-list.h
$(common-objpfx)dl-tunable-list.h: $(..)scripts/gen-tunables.awk \
$(..)elf/dl-tunables.list
$(AWK) -f $^ > $@.tmp
mv $@.tmp $@
endif
common-generated += libc-modules.h libc-modules.stmp
common-generated += gnu/lib-names.h gnu/lib-names.stmp
# The name under which the run-time dynamic linker is installed.
# We are currently going for the convention that `/lib/ld.so.1'
@@ -1152,16 +1021,8 @@ endif
ifeq ($(build-shared),yes)
libm = $(common-objpfx)math/libm.so$(libm.so-version)
libmvec = $(common-objpfx)mathvec/libmvec.so$(libmvec.so-version)
else
libm = $(common-objpfx)math/libm.a
libmvec = $(common-objpfx)mathvec/libmvec.a
endif
ifeq ($(build-shared),yes)
libsupport = $(common-objpfx)support/libsupport_nonshared.a
else
libsupport = $(common-objpfx)support/libsupport.a
endif
# These are the subdirectories containing the library source. The order
@@ -1171,7 +1032,7 @@ all-subdirs = csu assert ctype locale intl catgets math setjmp signal \
stdlib stdio-common libio malloc string wcsmbs time dirent \
grp pwd posix io termios resource misc socket sysvipc gmon \
gnulib iconv iconvdata wctype manual shadow gshadow po argp \
crypt localedata timezone rt conform debug mathvec support \
crypt localedata timezone rt conform debug \
$(add-on-subdirs) dlfcn elf
ifndef avoid-generated
@@ -1180,7 +1041,7 @@ ifndef avoid-generated
# existing directory not in all-subdirs, then sysd-sorted needs to
# be regenerated, so it depends on existing $(sorted-subdirs:=/Depend) files.
all-Depend-files := $(wildcard $(sort \
$(foreach dir,$(all-subdirs),\
$(foreach dir,$(all-subdirs),\
$(firstword $($(dir)-srcdir) \
$(..)$(dir))/Depend) \
$(sorted-subdirs:=/Depend)))
@@ -1219,20 +1080,6 @@ defines += -D_LIBC_REENTRANT
libio-mtsafe = -D_IO_MTSAFE_IO
endif
# The name to give to a test in test results summaries.
test-name = $(strip $(patsubst %.out, %, $(patsubst $(common-objpfx)%, %, $@)))
# Likewise, in XFAIL variable names.
test-xfail-name = $(strip $(patsubst %.out, %, $(patsubst $(objpfx)%, %, $@)))
# Command to output a test status line (such as PASS: test-name). If
# test-xfail-$(test-xfail-name) has a nonempty value, the status will be
# XPASS or XFAIL rather than PASS or FAIL.
evaluate-test = $(..)scripts/evaluate-test.sh $(test-name) $$? \
$(if $(test-xfail-$(test-xfail-name)),true,false) \
$(if $(stop-on-test-failure),true,false) \
> $(common-objpfx)$(test-name).test-result
endif # Makeconfig not yet included
# Local Variables:
+71 -79
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991-2017 Free Software Foundation, Inc.
# Copyright (C) 1991-2013 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
@@ -38,9 +38,9 @@ chmod a-w$(patsubst %,$(comma)a+x,$(filter .,$(@D))) $@.new
mv -f $@.new $@
endef
configure: configure.ac aclocal.m4; $(autoconf-it)
%/configure: %/configure.ac aclocal.m4; $(autoconf-it)
%/preconfigure: %/preconfigure.ac aclocal.m4; $(autoconf-it)
configure: configure.in aclocal.m4; $(autoconf-it)
%/configure: %/configure.in aclocal.m4; $(autoconf-it)
%/preconfigure: %/preconfigure.in aclocal.m4; $(autoconf-it)
endif # $(AUTOCONF) = no
@@ -51,17 +51,15 @@ endif # $(AUTOCONF) = no
# These are the targets that are made by making them in each subdirectory.
+subdir_targets := subdir_lib objects objs others subdir_mostlyclean \
subdir_clean subdir_distclean subdir_realclean \
tests xtests \
tests xtests subdir_lint.out \
subdir_update-abi subdir_check-abi \
subdir_update-all-abi \
subdir_echo-headers \
subdir_install \
subdir_objs subdir_stubs subdir_testclean \
$(addprefix install-, no-libc.a bin lib data headers others)
headers := limits.h values.h features.h gnu-versions.h \
bits/xopen_lim.h gnu/libc-version.h stdc-predef.h \
bits/libc-header-start.h
headers := limits.h values.h features.h gnu-versions.h bits/libc-lock.h \
bits/xopen_lim.h gnu/libc-version.h stdc-predef.h
echo-headers: subdir_echo-headers
@@ -107,9 +105,9 @@ install-symbolic-link: subdir_install
rm -f $(symbolic-link-list)
install:
-test ! -x $(elf-objpfx)ldconfig || LC_ALL=C \
$(elf-objpfx)ldconfig $(addprefix -r ,$(install_root)) \
$(slibdir) $(libdir)
-test ! -x $(common-objpfx)elf/ldconfig || LC_ALL=C LANGUAGE=C \
$(common-objpfx)elf/ldconfig $(addprefix -r ,$(install_root)) \
$(slibdir) $(libdir)
ifneq (no,$(PERL))
ifeq (/usr,$(prefix))
ifeq (,$(install_root))
@@ -125,8 +123,28 @@ lib-noranlib: subdir_lib
ifeq (yes,$(build-shared))
# Build the shared object from the PIC object library.
lib: $(common-objpfx)libc.so $(common-objpfx)linkobj/libc.so
endif # $(build-shared)
lib: $(common-objpfx)libc.so
lib: $(common-objpfx)linkobj/libc.so
$(common-objpfx)linkobj/libc.so: $(elfobjdir)/soinit.os \
$(common-objpfx)linkobj/libc_pic.a \
$(elfobjdir)/sofini.os \
$(elfobjdir)/interp.os \
$(elfobjdir)/ld.so \
$(shlib-lds)
$(build-shlib)
$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a \
$(common-objpfx)sunrpc/librpc_compat_pic.a
$(..)./scripts/mkinstalldirs $(common-objpfx)linkobj
(cd $(common-objpfx)linkobj; \
$(AR) x ../libc_pic.a; \
rm $$($(AR) t ../sunrpc/librpc_compat_pic.a | sed 's/^compat-//'); \
$(AR) x ../sunrpc/librpc_compat_pic.a; \
$(AR) cr libc_pic.a *.os; \
rm *.os)
endif
# This is a handy script for running any dynamically linked program against
@@ -252,20 +270,18 @@ mostlyclean: parent-mostlyclean
tests-clean:
@$(MAKE) subdir_testclean no_deps=t
ifneq (,$(CXX))
tests: $(objpfx)c++-types-check.out $(objpfx)check-local-headers.out
ifneq ($(CXX),no)
vpath c++-types.data $(+sysdep_dirs)
tests-special += $(objpfx)c++-types-check.out
$(objpfx)c++-types-check.out: c++-types.data scripts/check-c++-types.sh
scripts/check-c++-types.sh $< $(CXX) $(filter-out -std=gnu11 $(+gccwarn-c),$(CFLAGS)) $(CPPFLAGS) > $@; \
$(evaluate-test)
scripts/check-c++-types.sh $< $(CXX) $(filter-out -std=gnu99 -Wstrict-prototypes,$(CFLAGS)) $(CPPFLAGS) > $@
endif
tests-special += $(objpfx)check-local-headers.out
$(objpfx)check-local-headers.out: scripts/check-local-headers.sh
AWK='$(AWK)' scripts/check-local-headers.sh \
"$(includedir)" "$(objpfx)" < /dev/null > $@; \
$(evaluate-test)
"$(includedir)" "$(objpfx)" > $@
ifneq ($(PERL),no)
installed-headers = argp/argp.h assert/assert.h catgets/nl_types.h \
@@ -286,7 +302,7 @@ installed-headers = argp/argp.h assert/assert.h catgets/nl_types.h \
malloc/obstack.h malloc/mcheck.h math/math.h \
math/complex.h math/fenv.h math/tgmath.h misc/sys/uio.h \
$(wildcard nis/rpcsvc/*.h) nptl_db/thread_db.h \
sysdeps/nptl/pthread.h sysdeps/pthread/semaphore.h \
nptl/sysdeps/pthread/pthread.h nptl/semaphore.h \
nss/nss.h posix/sys/utsname.h posix/sys/times.h \
posix/sys/wait.h posix/sys/types.h posix/unistd.h \
posix/glob.h posix/regex.h posix/wordexp.h posix/fnmatch.h\
@@ -312,57 +328,11 @@ installed-headers = argp/argp.h assert/assert.h catgets/nl_types.h \
time/sys/time.h time/sys/timeb.h wcsmbs/wchar.h \
wctype/wctype.h
tests-special += $(objpfx)begin-end-check.out
tests: $(objpfx)begin-end-check.out
$(objpfx)begin-end-check.out: scripts/begin-end-check.pl
$(PERL) scripts/begin-end-check.pl $(installed-headers) > $@; \
$(evaluate-test)
$(PERL) scripts/begin-end-check.pl $(installed-headers) > $@
endif
ifneq "$(headers)" ""
# Special test of all the installed headers in this directory.
tests-special += $(objpfx)check-installed-headers-c.out
libof-check-installed-headers-c := nonlib
$(objpfx)check-installed-headers-c.out: \
scripts/check-installed-headers.sh $(headers)
$(SHELL) $(..)scripts/check-installed-headers.sh c \
"$(CC) $(filter-out -std=%,$(CFLAGS)) -D_ISOMAC $(+includes)" \
$(headers) > $@; \
$(evaluate-test)
ifneq "$(CXX)" ""
tests-special += $(objpfx)check-installed-headers-cxx.out
libof-check-installed-headers-cxx := nonlib
$(objpfx)check-installed-headers-cxx.out: \
scripts/check-installed-headers.sh $(headers)
$(SHELL) $(..)scripts/check-installed-headers.sh c++ \
"$(CXX) $(filter-out -std=%,$(CXXFLAGS)) -D_ISOMAC $(+includes)" \
$(headers) > $@; \
$(evaluate-test)
endif
endif
define summarize-tests
@egrep -v '^(PASS|XFAIL):' $(objpfx)$1 || true
@echo "Summary of test results$2:"
@sed 's/:.*//' < $(objpfx)$1 | sort | uniq -c
@! egrep -q -v '^(X?PASS|XFAIL|UNSUPPORTED):' $(objpfx)$1
endef
tests-special-notdir = $(patsubst $(objpfx)%, %, $(tests-special))
tests: $(tests-special)
$(..)scripts/merge-test-results.sh -s $(objpfx) "" \
$(sort $(tests-special-notdir:.out=)) \
> $(objpfx)subdir-tests.sum
$(..)scripts/merge-test-results.sh -t $(objpfx) subdir-tests.sum \
$(sort $(subdirs) .) \
> $(objpfx)tests.sum
$(call summarize-tests,tests.sum)
xtests:
$(..)scripts/merge-test-results.sh -t $(objpfx) subdir-xtests.sum \
$(sort $(subdirs)) \
> $(objpfx)xtests.sum
$(call summarize-tests,xtests.sum, for extra tests)
# The realclean target is just like distclean for the parent, but we want
# the subdirs to know the difference in case they care.
realclean distclean: parent-clean
@@ -427,19 +397,41 @@ dist: dist-prepare
fi
endif
INSTALL: manual/install-plain.texi manual/macros.texi \
$(common-objpfx)manual/pkgvers.texi manual/install.texi
INSTALL: manual/install.texi manual/macros.texi \
$(common-objpfx)manual/pkgvers.texi
makeinfo --no-validate --plaintext --no-number-sections \
-I$(common-objpfx)manual $< -o $@-tmp
$(AWK) 'NF == 0 { ++n; next } \
NF != 0 { while (n-- > 0) print ""; n = 0; print }' \
< $@-tmp > $@-tmp2
rm -f $@-tmp
-chmod a-w $@-tmp2
mv -f $@-tmp2 $@
-I$(common-objpfx)manual $< -o $@
-chmod a-w $@
$(common-objpfx)manual/%: FORCE
$(MAKE) $(PARALLELMFLAGS) -C manual $@
FORCE:
iconvdata/% localedata/% po/%: FORCE
$(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
# glibc 2.0 contains some header files which aren't used with glibc 2.1
# anymore.
# These rules should remove those headers
ifeq (,$(install_root))
ifeq ($(old-glibc-headers),yes)
install: remove-old-headers
endif
endif
headers2_0 := __math.h bytesex.h confname.h direntry.h elfclass.h \
errnos.h fcntlbits.h huge_val.h ioctl-types.h \
ioctls.h iovec.h jmp_buf.h libc-lock.h local_lim.h \
mathcalls.h mpool.h nan.h ndbm.h posix1_lim.h \
posix2_lim.h posix_opt.h resourcebits.h schedbits.h \
selectbits.h semaphorebits.h sigaction.h sigcontext.h \
signum.h sigset.h sockaddrcom.h socketbits.h stab.def \
statbuf.h statfsbuf.h stdio-lock.h stdio_lim.h \
syscall-list.h termbits.h timebits.h ustatbits.h \
utmpbits.h utsnamelen.h waitflags.h waitstatus.h \
xopen_lim.h gnu/types.h sys/ipc_buf.h \
sys/kernel_termios.h sys/msq_buf.h sys/sem_buf.h \
sys/shm_buf.h sys/socketcall.h sigstack.h
.PHONY: remove-old-headers
remove-old-headers:
rm -f $(addprefix $(inst_includedir)/, $(headers2_0))
+2 -2
View File
@@ -9,10 +9,10 @@ all .DEFAULT:
$(MAKE) -r PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@
install:
LC_ALL=C; export LC_ALL; \
LANGUAGE=C LC_ALL=C; export LANGUAGE LC_ALL; \
$(MAKE) -r PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@
bench bench-clean bench-build:
bench bench-clean:
$(MAKE) -C $(srcdir)/benchtests $(PARALLELMFLAGS) objdir=`pwd` $@
# Convenience target to rebuild ULPs for all math tests.
+83 -366
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991-2017 Free Software Foundation, Inc.
# Copyright (C) 1991-2013 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
@@ -93,12 +93,12 @@ before-compile := $(filter $(common-objpfx)mach% $(common-objpfx)hurd%,\
$(before-compile))
# Even before that, we need abi-versions.h which is generated right here.
ifeq ($(build-shared),yes)
ifeq ($(versioning),yes)
ifndef avoid-generated
before-compile := $(common-objpfx)abi-versions.h $(before-compile)
$(common-objpfx)abi-versions.h: $(..)scripts/abi-versions.awk \
$(common-objpfx)Versions.all
LC_ALL=C $(AWK) -f $^ > $@T
LC_ALL=C $(AWK) -v oldest_abi=$(oldest-abi) -f $^ > $@T
mv -f $@T $@
$(common-objpfx)%.latest: $(common-objpfx)abi-versions.h
@@ -106,29 +106,9 @@ $(common-objpfx)%.latest: $(common-objpfx)abi-versions.h
$(common-objpfx)abi-versions.h > $@T
mv -f $@T $@
endif # avoid-generated
endif # $(build-shared) = yes
endif # $(versioning) = yes
ifndef avoid-generated
ifneq (,$(CXX))
# If C++ headers <cstdlib> or <cmath> are used, GCC 6 will include
# /usr/include/stdlib.h or /usr/include/math.h from "#include_next"
# (instead of stdlib/stdlib.h or math/math.h in the glibc source
# directory), and this turns up as a make dependency. An implicit
# rule will kick in and make will try to install stdlib/stdlib.h or
# math/math.h as /usr/include/stdlib.h or /usr/include/math.h because
# the target is out of date. We make a copy of <cstdlib> and <cmath>
# in the glibc build directory so that stdlib/stdlib.h and math/math.h
# will be used instead of /usr/include/stdlib.h and /usr/include/math.h.
before-compile := $(common-objpfx)cstdlib $(common-objpfx)cmath \
$(before-compile)
$(common-objpfx)cstdlib: $(c++-cstdlib-header)
$(INSTALL_DATA) $< $@T
$(move-if-change) $@T $@
$(common-objpfx)cmath: $(c++-cmath-header)
$(INSTALL_DATA) $< $@T
$(move-if-change) $@T $@
endif
before-compile := $(common-objpfx)libc-abis.h $(before-compile)
$(common-objpfx)libc-abis.h: $(common-objpfx)libc-abis.stamp; @:
$(common-objpfx)libc-abis.stamp: $(..)scripts/gen-libc-abis \
@@ -143,16 +123,6 @@ $(common-objpfx)libc-abis.stamp: $(..)scripts/gen-libc-abis \
common-generated += $(common-objpfx)libc-abis.h
endif # avoid-generated
ifeq (yes,$(build-shared))
$(common-objpfx)runtime-linker.h: $(common-objpfx)runtime-linker.stamp; @:
$(common-objpfx)runtime-linker.stamp: $(common-objpfx)config.make
$(make-target-directory)
echo '#define RUNTIME_LINKER "$(rtlddir)/$(rtld-installed-name)"' \
> ${@:stamp=T}
$(move-if-change) ${@:stamp=T} ${@:stamp=h}
touch $@
endif
# Make sure the subdirectory for object files gets created.
ifdef objpfx
ifeq (,$(wildcard $(objpfx).))
@@ -210,52 +180,6 @@ sed-remove-dotdot := -e 's@ *\([^ \/$$][^ \]*\)@ $$(..)\1@g' \
-e 's@^\([^ \/$$][^ \]*\)@$$(..)\1@g'
endif
ifdef gen-py-const-headers
# We'll use a static pattern rule to match .pysym files with their
# corresponding generated .py files.
# The generated .py files go in the submodule's dir in the glibc build dir.
py-const-files := $(patsubst %.pysym,%.py,$(gen-py-const-headers))
py-const-dir := $(objpfx)
py-const := $(addprefix $(py-const-dir),$(py-const-files))
py-const-script := $(..)scripts/gen-py-const.awk
# This is a hack we use to generate .py files with constants for Python
# pretty printers. It works the same way as gen-as-const.
# See scripts/gen-py-const.awk for details on how the awk | gcc mechanism
# works.
#
# $@.tmp and $@.tmp2 are temporary files we use to store the partial contents
# of the target file. We do this instead of just writing on $@ because, if the
# build process terminates prematurely, re-running Make wouldn't run this rule
# since Make would see that the target file already exists (despite it being
# incomplete).
#
# The sed line replaces "@name@SOME_NAME@value@SOME_VALUE@" strings from the
# output of 'gcc -S' with "SOME_NAME = SOME_VALUE" strings.
# The '-n' option, combined with the '/p' command, makes sed output only the
# modified lines instead of the whole input file. The output is redirected
# to a .py file; we'll import it in the pretty printers file to read
# the constants generated by gen-py-const.awk.
# The regex has two capturing groups, for SOME_NAME and SOME_VALUE
# respectively. Notice SOME_VALUE may be prepended by a special character,
# depending on the assembly syntax (e.g. immediates are prefixed by a '$'
# in AT&T x86, and by a '#' in ARM). We discard it using a complemented set
# before the second capturing group.
$(py-const): $(py-const-dir)%.py: %.pysym $(py-const-script) \
$(common-before-compile)
$(make-target-directory)
$(AWK) -f $(py-const-script) $< \
| $(CC) -S -o $@.tmp $(CFLAGS) $(CPPFLAGS) -x c -
echo '# GENERATED FILE\n' > $@.tmp2
echo '# Constant definitions for pretty printers.' >> $@.tmp2
echo '# See gen-py-const.awk for details.\n' >> $@.tmp2
sed -n -r 's/^.*@name@([^@]+)@value@[^[:xdigit:]Xx-]*([[:xdigit:]Xx-]+)@.*/\1 = \2/p' \
$@.tmp >> $@.tmp2
mv -f $@.tmp2 $@
rm -f $@.tmp
generated += $(py-const)
endif # gen-py-const-headers
ifdef gen-as-const-headers
# Generating headers for assembly constants.
@@ -287,82 +211,20 @@ $(objpfx)test-as-const-%.c: $(..)scripts/gen-as-const.awk $(..)Makerules \
mv -f $@T $@
endif
ifeq (yes,$(build-shared))
# Generate the header containing the names of all shared libraries.
# We use a stamp file to avoid unnecessary recompilations.
before-compile += $(common-objpfx)gnu/lib-names.h
ifeq ($(soversions.mk-done),t)
ifndef abi-variants
lib-names-h-abi = gnu/lib-names.h
lib-names-stmp-abi = gnu/lib-names.stmp
else
lib-names-h-abi = gnu/lib-names-$(default-abi).h
lib-names-stmp-abi = gnu/lib-names-$(default-abi).stmp
before-compile += $(common-objpfx)$(lib-names-h-abi)
common-generated += gnu/lib-names.h
install-others-nosubdir: $(inst_includedir)/$(lib-names-h-abi)
$(common-objpfx)gnu/lib-names.h:
$(make-target-directory)
{ \
echo '/* This file is automatically generated.';\
echo ' It defines macros to allow user program to find the shared'; \
echo ' library files which come as part of GNU libc. */'; \
echo '#ifndef __GNU_LIB_NAMES_H'; \
echo '#define __GNU_LIB_NAMES_H 1'; \
echo ''; \
$(if $(abi-includes), \
$(foreach h,$(abi-includes), echo '#include <$(h)>';) \
echo '';) \
$(foreach v,$(abi-variants),\
$(if $(abi-$(v)-condition),\
echo '#if $(abi-$(v)-condition)'; \
echo '# include <gnu/lib-names-$(v).h>'); \
$(if $(abi-$(v)-condition),echo '#endif';)) \
echo ''; \
echo '#endif /* gnu/lib-names.h */'; \
} > $@
endif
$(common-objpfx)$(lib-names-h-abi): $(common-objpfx)$(lib-names-stmp-abi); @:
$(common-objpfx)$(lib-names-stmp-abi): $(..)scripts/lib-names.awk \
$(common-objpfx)soversions.i
$(make-target-directory)
{ \
$(if $(abi-variants), \
echo '/* This file is automatically generated. */';\
echo '#ifndef __GNU_LIB_NAMES_H'; \
echo '# error "Never use <$(lib-names-h-abi)> directly; include <gnu/lib-names.h> instead."'; \
echo '#endif';, \
echo '/* This file is automatically generated.';\
echo ' It defines macros to allow user program to find the shared'; \
echo ' library files which come as part of GNU libc. */'; \
echo '#ifndef __GNU_LIB_NAMES_H'; \
echo '#define __GNU_LIB_NAMES_H 1';) \
echo ''; \
($(foreach s,$(all-sonames), echo $(s);)) \
| LC_ALL=C $(AWK) -f $(firstword $^) | LC_ALL=C sort; \
$(if $(abi-variants),, \
echo ''; \
echo '#endif /* gnu/lib-names.h */';) \
} > ${@:stmp=T}
$(move-if-change) ${@:stmp=T} ${@:stmp=h}
touch $@
endif
common-generated += $(lib-names-h-abi) $(lib-names-stmp-abi)
endif
###############################################################################
# NOTE! Everything adding to before-compile needs to come before this point! #
###############################################################################
# Generate an ordered list of implicit rules which find the source files in
# each sysdep directory. The old method was to use vpath to search all the
# sysdep directories. However, that had the problem that a .S file in a
# later directory would be chosen over a .c file in an earlier directory,
# which does not preserve the desired sysdeps ordering behavior.
# System-dependent makefiles can put in `inhibit-sysdep-asm' regexps
# matching sysdep directories whose assembly source files should be
# suppressed.
# System-dependent makefiles can put in `inhibit-sysdep-asm' wildcard
# patterns matching sysdep directories whose assembly source files should
# be suppressed.
ifdef inhibit-sysdep-asm
define check-inhibit-asm
case $$sysdir in $(subst $(empty) ,|,$(inhibit-sysdep-asm))) asm= ;; esac;
endef
endif
-include $(common-objpfx)sysd-rules
ifneq ($(sysd-rules-sysdirs),$(config-sysdirs))
@@ -371,16 +233,34 @@ ifneq ($(sysd-rules-sysdirs),$(config-sysdirs))
sysd-rules-force = FORCE
FORCE:
endif
$(common-objpfx)sysd-rules: $(..)scripts/sysd-rules.awk \
$(common-objpfx)config.make $(..)Makerules \
$(common-objpfx)sysd-rules: $(common-objpfx)config.make $(..)Makerules \
$(sysdep-makefiles) $(sysdep-makeconfigs) \
$(sysd-rules-force)
-@rm -f $@T
LC_ALL=C $(AWK) -f $< > $@T \
-v all_object_suffixes='$(all-object-suffixes)' \
-v inhibit_sysdep_asm='$(inhibit-sysdep-asm)' \
-v sysd_rules_patterns='$(sysd-rules-patterns)' \
-v config_sysdirs='$(config-sysdirs)'
(echo 'sysd-rules-sysdirs := $(config-sysdirs)'; \
for dir in $(config-sysdirs); do \
case "$$dir" in \
/*) ;; \
*) dir="\$$(..)$$dir" ;; \
esac; \
asm='.S'; \
$(check-inhibit-asm) \
for o in $(all-object-suffixes); do \
set $(subst :, ,$(sysd-rules-patterns)); \
while [ $$# -ge 2 ]; do \
t=$$1; shift; \
d=$$1; shift; \
v=$${t%%%}; [ x"$$v" = x ] || v="\$$($${v}CPPFLAGS)"; \
for s in $$asm .c; do \
echo "\$$(objpfx)$$t$$o: $$dir/$$d$$s \$$(before-compile)"; \
echo " \$$(compile-command$$s) $$v"; \
done; \
done; \
done; \
echo "\$$(inst_includedir)/%.h: $$dir/%.h \$$(+force)"; \
echo " \$$(do-install)"; \
done; \
echo 'sysd-rules-done = t') > $@T
mv -f $@T $@
ifndef sysd-rules-done
@@ -426,27 +306,24 @@ endif
# Generate version maps, but wait until sysdep-subdirs is known
ifeq ($(sysd-sorted-done),t)
ifeq ($(build-shared),yes)
ifeq ($(versioning),yes)
-include $(common-objpfx)sysd-versions
$(addprefix $(common-objpfx),$(version-maps)): $(common-objpfx)sysd-versions
common-generated += $(version-maps)
postclean-generated += sysd-versions Versions.all abi-versions.h \
Versions.def Versions.v.i Versions.v
Versions.def.v.i Versions.def.v Versions.v.i Versions.v
ifndef avoid-generated
ifneq ($(sysd-versions-subdirs),$(sorted-subdirs) $(config-sysdirs))
sysd-versions-force = FORCE
FORCE:
endif
$(common-objpfx)Versions.def: $(..)scripts/versionlist.awk \
$(common-objpfx)Versions.v
LC_ALL=C $(AWK) -f $^ > $@T
mv -f $@T $@
# See %.v/%.v.i implicit rules in Makeconfig.
$(common-objpfx)Versions.def.v.i: $(..)Versions.def \
$(wildcard $(add-ons:%=$(..)%/Versions.def))
$(common-objpfx)Versions.all: $(..)scripts/firstversions.awk \
$(common-objpfx)soversions.i \
$(common-objpfx)Versions.def
$(common-objpfx)Versions.def.v
{ while read which lib version setname; do \
test x"$$which" = xDEFAULT || continue; \
test -z "$$setname" || echo "$$lib : $$setname"; \
@@ -457,6 +334,7 @@ $(common-objpfx)Versions.all: $(..)scripts/firstversions.awk \
# See %.v/%.v.i implicit rules in Makeconfig.
$(common-objpfx)Versions.v.i: $(wildcard $(subdirs:%=$(..)%/Versions)) \
$(wildcard $(sysdirs:%=%/Versions)) \
$(common-objpfx)abi-versions.h \
$(sysd-versions-force)
$(common-objpfx)sysd-versions: $(common-objpfx)Versions.all \
$(common-objpfx)Versions.v \
@@ -469,7 +347,7 @@ $(common-objpfx)sysd-versions: $(common-objpfx)Versions.all \
) > $@T
mv -f $@T $@
endif # avoid-generated
endif # $(build-shared) = yes
endif # $(versioning) = yes
endif # sysd-sorted-done
# Generate .dT files as we compile.
@@ -539,51 +417,31 @@ elide-routines.os += $(static-only-routines)
# static libraries.
elide-routines.o += $(shared-only-routines)
elide-routines.op += $(shared-only-routines)
elide-routines.og += $(shared-only-routines)
# Shared library building.
ifeq (yes,$(build-shared))
# Reference map file only when shared libraries are built and a map file name
# Reference map file only when versioning is selected and a map file name
# is given.
ifeq ($(build-shared),yes)
ifeq ($(versioning),yes)
map-file = $(firstword $($(@F:.so=-map)) \
$(addprefix $(common-objpfx), \
$(filter $(@F:.so=.map),$(version-maps))))
load-map-file = $(map-file:%=-Wl,--version-script=%)
endif
# Compiler arguments to use to link a shared object with libc and
# ld.so. This is intended to be as similar as possible to a default
# link with an installed libc.
link-libc-args = -Wl,--start-group \
$(libc-for-link) \
$(common-objpfx)libc_nonshared.a \
$(as-needed) $(elf-objpfx)ld.so $(no-as-needed) \
-Wl,--end-group
# The corresponding shared libc to use. This may be modified for a
# particular target.
libc-for-link = $(common-objpfx)libc.so
# The corresponding dependencies. As these are used in dependencies,
# not just commands, they cannot use target-specific variables so need
# to name both possible libc.so objects.
link-libc-deps = $(common-objpfx)libc.so $(common-objpfx)linkobj/libc.so \
$(common-objpfx)libc_nonshared.a $(elf-objpfx)ld.so
# Pattern rule to build a shared object from an archive of PIC objects.
# This must come after the installation rules so Make doesn't try to
# build shared libraries in place from the installed *_pic.a files.
# $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies
# on other shared objects. The linking with libc and ld.so is intended
# to be as similar as possible to a default link with an installed libc.
lib%.so: lib%_pic.a $(+preinit) $(+postinit) $(link-libc-deps)
$(build-shlib) $(link-libc-args)
$(call after-link,$@)
# on other shared objects.
lib%.so: lib%_pic.a $(+preinit) $(+postinit) $(+interp)
$(build-shlib)
define build-shlib-helper
$(LINK.o) -shared -static-libgcc -Wl,-O1 $(sysdep-LDFLAGS) \
$(LINK.o) -shared $(static-libgcc) -Wl,-O1 $(sysdep-LDFLAGS) \
$(if $($(@F)-no-z-defs)$(no-z-defs),,-Wl,-z,defs) $(rtld-LDFLAGS) \
$(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
$(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
@@ -627,9 +485,6 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make $(..)Makerules
PROVIDE(__start___libc_thread_subfreeres = .);\
__libc_thread_subfreeres : { *(__libc_thread_subfreeres) }\
PROVIDE(__stop___libc_thread_subfreeres = .);\
PROVIDE(__start___libc_IO_vtables = .);\
__libc_IO_vtables : { *(__libc_IO_vtables) }\
PROVIDE(__stop___libc_IO_vtables = .);\
/DISCARD/ : { *(.gnu.glibc-stub.*) }@'
test -s $@T
mv -f $@T $@
@@ -645,7 +500,7 @@ $(build-shlib-helper) -o $@ $(shlib-lds-flags) \
endef
define build-module-helper
$(LINK.o) -shared -static-libgcc $(sysdep-LDFLAGS) $(rtld-LDFLAGS) \
$(LINK.o) -shared $(static-libgcc) $(sysdep-LDFLAGS) $(rtld-LDFLAGS) \
$(if $($(@F)-no-z-defs)$(no-z-defs),,-Wl,-z,defs) \
-B$(csu-objpfx) $(load-map-file) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \
@@ -658,21 +513,17 @@ endef
# not for shared objects
define build-module
$(build-module-helper) -o $@ $(shlib-lds-flags) \
$(csu-objpfx)abi-note.o $(build-module-objlist) $(link-libc-args)
$(call after-link,$@)
$(csu-objpfx)abi-note.o $(build-module-objlist)
endef
define build-module-asneeded
$(build-module-helper) -o $@ $(shlib-lds-flags) \
$(csu-objpfx)abi-note.o \
-Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed \
$(link-libc-args)
$(call after-link,$@)
-Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed
endef
build-module-helper-objlist = \
$(patsubst %_pic.a,$(whole-archive) %_pic.a $(no-whole-archive),\
$(filter-out %.lds $(map-file) $(+preinit) $(+postinit) \
$(link-libc-deps),$^))
$(filter-out %.lds $(map-file) $(+preinit) $(+postinit),$^))
build-module-objlist = $(build-module-helper-objlist) $(LDLIBS-$(@F:%.so=%).so)
build-shlib-objlist = $(build-module-helper-objlist) \
@@ -715,50 +566,14 @@ generated += libc_pic.opts libc_pic.os.clean
libc_pic_clean := .clean
endif
# Build a possibly-modified version of libc_pic.a for use in building
# linkobj/libc.so.
ifeq (,$(filter sunrpc,$(subdirs)))
$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a
$(make-target-directory)
ln -f $< $@
else
$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a \
$(common-objpfx)sunrpc/librpc_compat_pic.a
$(make-target-directory)
(cd $(common-objpfx)linkobj; \
$(AR) x ../libc_pic.a; \
rm $$($(AR) t ../sunrpc/librpc_compat_pic.a | sed 's/^compat-//'); \
$(AR) x ../sunrpc/librpc_compat_pic.a; \
$(AR) cr libc_pic.a *.os; \
rm *.os)
endif # $(subdirs) contains sunrpc
# Clear link-libc-deps for the libc.so libraries so build-shlibs does not
# filter ld.so out of the list of linked objects.
$(common-objpfx)libc.so: link-libc-deps = # empty
$(common-objpfx)linkobj/libc.so: link-libc-deps = # empty
# Use our own special initializer and finalizer files for the libc.so
# libraries.
$(common-objpfx)libc.so: $(elf-objpfx)soinit.os \
# Use our own special initializer and finalizer files for libc.so.
$(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
$(common-objpfx)libc_pic.os$(libc_pic_clean) \
$(elf-objpfx)sofini.os \
$(elf-objpfx)interp.os \
$(elf-objpfx)ld.so \
$(elfobjdir)/sofini.os \
$(elfobjdir)/interp.os $(elfobjdir)/ld.so \
$(shlib-lds)
$(build-shlib)
$(call after-link,$@)
$(common-objpfx)linkobj/libc.so: $(elf-objpfx)soinit.os \
$(common-objpfx)linkobj/libc_pic.a \
$(elf-objpfx)sofini.os \
$(elf-objpfx)interp.os \
$(elf-objpfx)ld.so \
$(shlib-lds)
$(build-shlib)
$(call after-link,$@)
ifeq ($(build-shared),yes)
ifeq ($(versioning),yes)
$(common-objpfx)libc.so: $(common-objpfx)libc.map
endif
common-generated += libc.so libc_pic.os
@@ -806,7 +621,8 @@ include $(patsubst %,$(..)extra-modules.mk,$(modules-names))
extra-modules-build := $(filter-out $(modules-names-nobuild),$(modules-names))
$(extra-modules-build:%=$(objpfx)%.so): $(objpfx)%.so: \
$(objpfx)%.os $(shlib-lds) $(link-libs-deps)
$(objpfx)%.os $(shlib-lds) \
$(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a
$(build-module)
endif
@@ -984,26 +800,6 @@ endef
installed-libcs := $(foreach o,$(filter-out .os,$(object-suffixes-for-libc)),\
$(inst_libdir)/$(patsubst %,$(libtype$o),\
$(libprefix)$(libc-name)))
.PHONY: check-install-supported
check-install-supported:
# Check to see if the prefix or exec_prefix GNU standard variable
# has been overridden on the command line and, if so, fail with
# an error message since doing so is not supported (set DESTDIR
# instead).
ifeq ($(origin prefix),command line)
check-install-supported:
$(error Overriding prefix is not supported. Set DESTDIR instead.)
endif
ifeq ($(origin exec_prefix),command line)
check-install-supported:
$(error Overriding exec_prefix is not supported. Set DESTDIR instead.)
endif
install: check-install-supported
install: $(installed-libcs)
$(installed-libcs): $(inst_libdir)/lib$(libprefix)%: lib $(+force)
$(make-target-directory)
@@ -1065,8 +861,8 @@ endif
ifeq (yes,$(build-shared))
ifeq (no,$(cross-compiling))
symbolic-link-prog := $(elf-objpfx)sln
symbolic-link-list := $(elf-objpfx)symlink.list
symbolic-link-prog := $(common-objpfx)elf/sln
symbolic-link-list := $(common-objpfx)elf/symlink.list
define make-shlib-link
echo `$(..)scripts/rellns-sh -p $< $@` $@ >> $(symbolic-link-list)
endef
@@ -1200,8 +996,7 @@ endif
define do-install-so
$(do-install-program)
$(patsubst %,$(LN_S) -f $(@F) \
$(@D)/$(patsubst %$*.so,%,$(<F))$(libprefix)$*.so,\
$(patsubst %,ln -s -f $(@F) $(@D)/$(patsubst %$*.so,%,$(<F))$(libprefix)$*.so,\
$(filter-out %.so,$@))
endef
@@ -1237,7 +1032,6 @@ $(addprefix $(inst_sbindir)/,$(install-sbin)): \
endif
ifdef install-lib
install-lib.a := $(filter lib%.a,$(install-lib))
install-lib.a := $(filter-out $(install-lib-ldscripts),$(install-lib.a))
install-lib-non.a := $(filter-out lib%.a,$(install-lib))
ifdef install-lib-non.a
$(addprefix $(inst_libdir)/$(libprefix),$(install-lib-non.a)): \
@@ -1328,13 +1122,16 @@ xcheck: xtests
all-nonlib = $(strip $(tests) $(xtests) $(test-srcs) $(test-extras) $(others))
ifneq (,$(all-nonlib))
cpp-srcs-left = $(all-nonlib)
cpp-srcs-left = $(all-nonlib:=.c) $(all-nonlib:=.cc)
lib := nonlib
include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
endif
# The include magic above causes those files to use this variable for flags.
CPPFLAGS-nonlib = -DNOT_IN_libc=1
ifeq ($(build-shared),yes)
ifeq ($(versioning),yes)
# Generate normalized lists of symbols, versions, and data sizes.
# This is handy for checking against existing library binaries.
@@ -1346,14 +1143,6 @@ ifeq ($(build-shared),yes)
LC_ALL=C $(OBJDUMP) --dynamic-syms $< > $@T
mv -f $@T $@
# A sysdeps/.../Makefile can set abilist-pattern to something like
# %-foo.abilist to look for libc-foo.abilist instead of libc.abilist.
# This makes sense if multiple ABIs can be most cleanly supported by a
# configuration without using separate sysdeps directories for each.
ifdef abilist-pattern
vpath $(abilist-pattern) $(+sysdep_dirs)
endif
vpath %.abilist $(+sysdep_dirs)
# The .PRECIOUS rule prevents the files built by an implicit rule whose
@@ -1363,50 +1152,18 @@ vpath %.abilist $(+sysdep_dirs)
.PRECIOUS: %.symlist
generated += $(extra-libs:=.symlist)
ifdef abilist-pattern
$(objpfx)check-abi-%.out: $(common-objpfx)config.make $(abilist-pattern) \
$(objpfx)%.symlist
$(check-abi-pattern); \
$(evaluate-test)
$(objpfx)check-abi-%.out: $(common-objpfx)config.make $(abilist-pattern) \
$(common-objpfx)%.symlist
$(check-abi-pattern); \
$(evaluate-test)
endif
$(objpfx)check-abi-%.out: $(common-objpfx)config.make %.abilist \
$(objpfx)%.symlist
$(check-abi); \
$(evaluate-test)
$(objpfx)check-abi-%.out: $(common-objpfx)config.make %.abilist \
$(common-objpfx)%.symlist
$(check-abi); \
$(evaluate-test)
define check-abi-pattern
diff -p -U 0 $(filter $(abilist-pattern),$^) $(filter %.symlist,$^) \
> $@
endef
check-abi-%: $(common-objpfx)config.make %.abilist $(objpfx)%.symlist
$(check-abi)
check-abi-%: $(common-objpfx)config.make %.abilist $(common-objpfx)%.symlist
$(check-abi)
define check-abi
diff -p -U 0 $(filter %.abilist,$^) $(filter %.symlist,$^) > $@
diff -p -U 0 $(filter %.abilist,$^) $(filter %.symlist,$^)
endef
ifdef abilist-pattern
update-abi-%: $(objpfx)%.symlist $(abilist-pattern)
$(update-abi-pattern)
update-abi-%: $(common-objpfx)%.symlist $(abilist-pattern)
$(update-abi-pattern)
endif
update-abi-%: $(objpfx)%.symlist %.abilist
$(update-abi)
update-abi-%: $(common-objpfx)%.symlist %.abilist
$(update-abi)
define update-abi-pattern
@if cmp -s $^ 2> /dev/null; \
then \
echo '+++ $(filter $(abilist-pattern),$^) is unchanged'; \
else cp -f $^; \
echo '*** Now check $(filter $(abilist-pattern),$^) changes for correctness ***'; \
fi
endef
define update-abi
@if cmp -s $^ 2> /dev/null; \
then \
@@ -1416,65 +1173,31 @@ define update-abi
fi
endef
# Patch all .abilist files for one DSO. The find command locates
# abilist files for all architectures. The regular expression in the
# find invocation is needed to separate libc.abilist and
# libcrypt.abilist, for example. It assumes that abilist-pattern, if
# set, is of the form "%-SUFFIX", and not "%SUFFIX", that is, there is
# a non-alphanumeric seperator between the pattern and the suffix
# added. The abilist files in /generic/ are filtered out because
# these are expected to remain empty.
define update-all-abi
$(SHELL) $(..)scripts/update-abilist.sh $^ \
$$(find $(..)sysdeps \
-regextype posix-egrep -regex '.*/$*([^a-z0-9].*)?\.abilist$$' \
\! -regex '.*/generic/.*')
endef
ifdef abilist-pattern
update-all-abi-%: $(abilist-pattern) $(objpfx)%.symlist
$(update-all-abi)
update-all-abi-%: $(abilist-pattern) $(common-objpfx)%.symlist
$(update-all-abi)
endif
update-all-abi-%: %.abilist $(objpfx)%.symlist
$(update-all-abi)
update-all-abi-%: %.abilist $(common-objpfx)%.symlist
$(update-all-abi)
.PHONY: update-abi update-all-abi check-abi
.PHONY: update-abi check-abi
update-abi: $(patsubst %.so,update-abi-%,$(install-lib.so-versioned))
update-all-abi: $(patsubst %.so,update-all-abi-%,$(install-lib.so-versioned))
check-abi-list = $(patsubst %.so,$(objpfx)check-abi-%.out, \
$(install-lib.so-versioned))
check-abi: $(check-abi-list)
check-abi: $(patsubst %.so,check-abi-%,$(install-lib.so-versioned))
ifdef subdir
subdir_check-abi: check-abi
subdir_update-abi: update-abi
subdir_update-all-abi: update-all-abi
else
check-abi: subdir_check-abi
if grep -q '^FAIL:' $(objpfx)*/check-abi*.test-result; then \
cat $(objpfx)*/check-abi*.out && exit 1; fi
update-abi: subdir_update-abi
update-all-abi: subdir_update-all-abi
endif
ifeq ($(subdir),elf)
check-abi: $(objpfx)check-abi-libc.out
tests-special += $(objpfx)check-abi-libc.out
check-abi: check-abi-libc
update-abi: update-abi-libc
update-all-abi: update-all-abi-libc
common-generated += libc.symlist
endif
ifeq ($(build-shared),yes)
ifdef subdir
tests-special += $(check-abi-list)
tests: check-abi
endif
endif
endif
# These will have been set by sysdeps/posix/Makefile.
L_tmpnam ?= 1
TMP_MAX ?= 0
@@ -1541,10 +1264,7 @@ mostlyclean: common-mostlyclean
do-tests-clean:
-rm -f $(addprefix $(objpfx),$(addsuffix .out,$(tests) $(xtests) \
$(test-srcs)) \
$(addsuffix .test-result,$(tests) \
$(xtests) \
$(test-srcs)))
$(test-srcs)))
# Remove the object files.
common-mostlyclean:
@@ -1554,10 +1274,7 @@ common-mostlyclean:
$(test-srcs) $(others) \
$(sysdep-others)) \
$(addsuffix .out,$(tests) $(xtests) \
$(test-srcs)) \
$(addsuffix .test-result,$(tests) \
$(xtests) \
$(test-srcs)))
$(test-srcs)))
-rm -f $(addprefix $(objpfx),$(extra-objs) $(extra-test-objs) \
$(install-lib) $(install-lib.so) \
$(install-lib.so:%.so=%_pic.a))
+30 -1550
View File
File diff suppressed because it is too large Load Diff
+107
View File
@@ -0,0 +1,107 @@
Open jobs for finishing GNU libc:
---------------------------------
Status: October 2004
If you have time and talent to take over any of the jobs below please
contact <bug-glibc@gnu.org>.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 1] Port to new platforms or test current version on formerly supported
platforms.
**** See http://www.gnu.org/software/libc/porting.html for more details.
[ 2] Test compliance with standards. If you have access to recent
standards (IEEE, ISO, ANSI, X/Open, ...) and/or test suites you
could do some checks as the goal is to be compliant with all
standards if they do not contradict each other.
[ 3] The IMHO opinion most important task is to write a more complete
test suite. We cannot get too many people working on this. It is
not difficult to write a test, find a definition of the function
which I normally can provide, if necessary, and start writing tests
to test for compliance. Beside this, take a look at the sources
and write tests which in total test as many paths of execution as
possible.
[ 4] Write translations for the GNU libc message for the so far
unsupported languages. GNU libc is fully internationalized and
users can immediately benefit from this.
Take a look at the matrix in
ftp://ftp.gnu.org/pub/gnu/ABOUT-NLS
for the current status (of course better use a mirror of ftp.gnu.org).
[ 8] If you enjoy assembler programming (as I do --drepper :-) you might
be interested in writing optimized versions for some functions.
Especially the string handling functions can be optimized a lot.
Take a look at
Faster String Functions
Henry Spencer, University of Toronto
Usenix Winter '92, pp. 419--428
or just ask. Currently mostly i?86 and Alpha optimized versions
exist. Please ask before working on this to avoid duplicate
work.
[11] Write access function for netmasks, bootparams, and automount
databases for nss_files, nss_nis, and nss_nisplus modules.
The functions should be embedded in the nss scheme. This is not
hard and not all services must be supported at once.
[15] Cleaning up the header files. Ideally, each header style should
follow the "good examples". Each variable and function should have
a short description of the function and its parameters. The prototypes
should always contain variable names which can help to identify their
meaning; better than
int foo (int, int, int, int);
Blargh!
*** The conformtest.pl tool helps cleaning the namespace. As far as
known the prototypes all contain parameter names. But maybe some
comments can be improved.
[18] Based on the sprof program we need tools to analyze the output. The
result should be a link map which specifies in which order the .o
files are placed in the shared object. This should help to improve
code locality and result in a smaller footprint (in code and data
memory) since less pages are only used in small parts.
[19] A user-level STREAMS implementation should be available if the
kernel does not provide the support.
*** This is a much lower priority job now that STREAMS are optional in
XPG.
[20] More conversion modules for iconv(3). Existing modules should be
extended to do things like transliteration if this is wanted.
For often used conversion a direct conversion function should be
available.
[23] The `strptime' function needs to be completed. This includes among
other things that it must get teached about timezones. The solution
envisioned is to extract the timezones from the ADO timezone
specifications. Special care must be given names which are used
multiple times. Here the precedence should (probably) be according
to the geograhical distance. E.g., the timezone EST should be
treated as the `Eastern Australia Time' instead of the US `Eastern
Standard Time' if the current TZ variable is set to, say,
Australia/Canberra or if the current locale is en_AU.
[27] ...deleted...
+19 -15
View File
@@ -17,33 +17,37 @@ GNU/Hurd support requires out-of-tree patches that will eventually be
incorporated into an official GNU C Library release.
When working with Linux kernels, this version of the GNU C Library
requires Linux kernel version 3.2 or later on all architectures except
i[4567]86 and x86_64, where Linux kernel version 2.6.32 or later
suffices.
requires Linux kernel version 2.6.16 or later.
Also note that the shared version of the libgcc_s library must be
installed for the pthread library to work correctly.
The GNU C Library supports these configurations for using Linux kernels:
aarch64*-*-linux-gnu
alpha*-*-linux-gnu
arm-*-linux-gnueabi
hppa-*-linux-gnu Not currently functional without patches.
i[4567]86-*-linux-gnu
x86_64-*-linux-gnu Can build either x86_64 or x32
ia64-*-linux-gnu
m68k-*-linux-gnu
microblaze*-*-linux-gnu
mips-*-linux-gnu
mips64-*-linux-gnu
powerpc-*-linux-gnu Hardware or software floating point, BE only.
powerpc64*-*-linux-gnu Big-endian and little-endian.
powerpc-*-linux-gnu Hardware floating point required
powerpc64-*-linux-gnu
s390-*-linux-gnu
s390x-*-linux-gnu
sh[34]-*-linux-gnu
sparc*-*-linux-gnu
sparc64*-*-linux-gnu
The code for other CPU configurations supported by volunteers outside of
the core glibc maintenance effort is contained in the `ports' add-on,
located in the `ports' subdirectory of the source tree.
aarch64*-*-linux-gnu
alpha*-*-linux-gnu
am33*-*-linux-gnu Not currently functional
arm-*-linux-gnueabi
hppa-*-linux-gnu Not currently functional without patches.
ia64-*-linux-gnu
m68k-*-linux-gnu
mips-*-linux-gnu
mips64-*-linux-gnu
powerpc-*-linux-gnu Software floating point (--without-fp)
tilegx-*-linux-gnu
tilepro-*-linux-gnu
@@ -71,6 +75,6 @@ This web page gives detailed information on how to report bugs properly.
The GNU C Library is free software. See the file COPYING.LIB for copying
conditions, and LICENSES for notices about a few contributions that require
these additional notices to be distributed. License copyright years may be
listed using range notation, e.g., 1996-2015, indicating that every year in
listed using range notation, e.g., 2000-2013, indicating that every year in
the range, inclusive, is a copyrightable year that would otherwise be listed
individually.
-175
View File
@@ -1,175 +0,0 @@
README for the glibc Python pretty printers
===========================================
Pretty printers are gdb extensions that allow it to print useful, human-readable
information about a program's variables. For example, for a pthread_mutex_t
gdb would usually output something like this:
(gdb) print mutex
$1 = {
__data = {
__lock = 22020096,
__count = 0,
__owner = 0,
__nusers = 0,
__kind = 576,
__spins = 0,
__elision = 0,
__list = {
__prev = 0x0,
__next = 0x0
}
},
__size = "\000\000P\001", '\000' <repeats 12 times>, "@\002", '\000' <repeats 21 times>,
__align = 22020096
}
However, with a pretty printer gdb will output something like this:
(gdb) print mutex
$1 = pthread_mutex_t = {
Type = Normal,
Status = Not acquired,
Robust = No,
Shared = No,
Protocol = Priority protect,
Priority ceiling = 42
}
Before printing a value, gdb will first check if there's a pretty printer
registered for it. If there is, it'll use it, otherwise it'll print the value
as usual. Pretty printers can be registered in various ways; for our purposes
we register them for the current objfile by calling
gdb.printing.register_pretty_printer().
Currently our printers are based on gdb.RegexpCollectionPrettyPrinter, which
means they'll be triggered if the type of the variable we're printing matches
a given regular expression. For example, MutexPrinter will be triggered if
our variable's type matches the regexp '^pthread_mutex_t$'.
Besides the printers themselves, each module may have a constants file which the
printers will import. These constants are generated from C headers during the
build process, and need to be in the Python search path when loading the
printers.
Installing and loading
----------------------
The pretty printers and their constant files may be installed in different paths
for each distro, though gdb should be able to automatically load them by itself.
When in doubt, you can use the 'info pretty-printer' gdb command to list the
loaded pretty printers.
If the printers aren't automatically loaded for some reason, you should add the
following to your .gdbinit:
python
import sys
sys.path.insert(0, '/path/to/constants/file/directory')
end
source /path/to/printers.py
If you're building glibc manually, '/path/to/constants/file/directory' should be
'/path/to/glibc-build/submodule', where 'submodule' is e.g. nptl.
Testing
-------
The pretty printers come with a small test suite based on PExpect, which is a
Python module with Expect-like features for spawning and controlling interactive
programs. Each printer has a corresponding C program and a Python script
that uses PExpect to drive gdb through the program and compare its output to
the expected printer's.
The tests run on the glibc host, which is assumed to have both gdb and PExpect;
if any of those is absent the tests will fail with code 77 (UNSUPPORTED).
Native builds can be tested simply by doing 'make check'; cross builds must use
cross-test-ssh.sh as test-wrapper, like this:
make test-wrapper='/path/to/scripts/cross-test-ssh.sh user@host' check
(Remember to share the build system's filesystem with the glibc host's through
NFS or something similar).
Running 'make check' on a cross build will only compile the test programs,
without running the scripts.
Adding new pretty printers
--------------------------
Adding new pretty printers to glibc requires following these steps:
1. Identify which constants must be generated from C headers, and write the
corresponding .pysym file. See scripts/gen-py-const.awk for more information
on how this works. The name of the .pysym file must be added to the
'gen-py-const-headers' variable in your submodule's Makefile (without the .pysym
extension).
2. Write the pretty printer code itself. For this you can follow the gdb
Python API documentation, and use the existing printers as examples. The printer
code must import the generated constants file (which will have the same name
as your .pysym file). The names of the pretty printer files must be added
to the 'pretty-printers' variable in your submodule's Makefile (without the .py
extension).
3. Write the unit tests for your pretty printers. The build system calls each
test script passing it the paths to the test program source, the test program
binary, and the printer files you added to 'pretty-printers' in the previous
step. The test scripts, in turn, must import scripts/test_printers_common
and call the init_test function passing it, among other things, the name of the
set of pretty printers to enable (as seen by running 'info pretty-printer').
You can use the existing unit tests as examples.
4. Add the names of the pretty printer tests to the 'tests-printers' variable
in your submodule's Makefile (without extensions). In addition, for each test
program you must define a corresponding CFLAGS-* and CPPFLAGS-* variable and
set it to $(CFLAGS-printers-tests) to ensure they're compiled correctly. For
example, test-foo-printer.c requires the following:
CFLAGS-test-foo-printer.c := $(CFLAGS-printers-tests)
CPPFLAGS-test-foo-printer.c := $(CFLAGS-printers-tests)
Finally, if your programs need to be linked with a specific library, you can add
its name to the 'tests-printers-libs' variable in your submodule's Makefile.
Known issues
------------
* Pretty printers are inherently coupled to the code they're targetting, thus
any changes to the target code must also update the corresponding printers.
On the plus side, the printer code itself may serve as a kind of documentation
for the target code.
* There's no guarantee that the information the pretty printers provide is
complete, i.e. some details might be left off. For example, the pthread_mutex_t
printers won't report whether a thread is spin-waiting in an attempt to acquire
the mutex.
* Older versions of the gdb Python API have a bug where
gdb.RegexpCollectionPrettyPrinter would not be able to get a value's real type
if it was typedef'd. This would cause gdb to ignore the pretty printers for
types like pthread_mutex_t, which is defined as:
typedef union
{
...
} pthread_mutex_t;
This was fixed in commit 1b588015839caafc608a6944a78aea170f5fb2f6, and released
as part of gdb 7.8. However, typedef'ing an already typedef'd type may cause
a similar issue, e.g.:
typedef pthread_mutex_t mutex;
mutex a_mutex;
Here, trying to print a_mutex won't trigger the pthread_mutex_t printer.
* The test programs must be compiled without optimizations. This is necessary
because the test scripts rely on the C code structure being preserved when
stepping through the programs. Things like aggressive instruction reordering
or optimizing variables out may make this kind of testing impossible.
-85
View File
@@ -1,85 +0,0 @@
TUNABLE FRAMEWORK
=================
Tunables is a feature in the GNU C Library that allows application authors and
distribution maintainers to alter the runtime library behaviour to match their
workload.
The tunable framework allows modules within glibc to register variables that
may be tweaked through an environment variable. It aims to enforce a strict
namespace rule to bring consistency to naming of these tunable environment
variables across the project. This document is a guide for glibc developers to
add tunables to the framework.
ADDING A NEW TUNABLE
--------------------
The TOP_NAMESPACE macro is defined by default as 'glibc'. If distributions
intend to add their own tunables, they should do so in a different top
namespace by overriding the TOP_NAMESPACE macro for that tunable. Downstream
implementations are discouraged from using the 'glibc' top namespace for
tunables they don't already have consensus to push upstream.
There are two steps to adding a tunable:
1. Add a tunable ID:
Modules that wish to use the tunables interface must define the
TUNABLE_NAMESPACE macro. Following this, for each tunable you want to
add, make an entry in elf/dl-tunables.list. The format of the file is as
follows:
TOP_NAMESPACE {
NAMESPACE1 {
TUNABLE1 {
# tunable attributes, one per line
}
# A tunable with default attributes, i.e. string variable.
TUNABLE2
TUNABLE3 {
# its attributes
}
}
NAMESPACE2 {
...
}
}
The list of allowed attributes are:
- type: Data type. Defaults to STRING. Allowed types are:
INT_32, SIZE_T and STRING.
- minval: Optional minimum acceptable value. For a string type
this is the minimum length of the value.
- maxval: Optional maximum acceptable value. For a string type
this is the maximum length of the value.
- env_alias: An alias environment variable
- is_secure: Specify whether the tunable should be read for setuid
binaries. True allows the tunable to be read for
setuid binaries while false disables it. Note that
even if this is set as true and the value is read, it
may not be used if it does not validate against the
acceptable values or is not considered safe by the
module.
2. Call either the TUNABLE_SET_VALUE and pass into it the tunable name and a
pointer to the variable that should be set with the tunable value.
If additional work needs to be done after setting the value, use the
TUNABLE_SET_VALUE_WITH_CALLBACK instead and additionally pass a pointer to
the function that should be called if the tunable value has been set.
FUTURE WORK
-----------
The framework currently only allows a one-time initialization of variables
through environment variables and in some cases, modification of variables via
an API call. A future goals for this project include:
- Setting system-wide and user-wide defaults for tunables through some
mechanism like a configuration file.
- Allow tweaking of some tunables at runtime
+14 -110
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991-2017 Free Software Foundation, Inc.
# Copyright (C) 1991-2013 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
@@ -80,43 +80,13 @@ $(common-objpfx)dummy.c:
(echo 'extern void __dummy__ (void);'; \
echo 'void __dummy__ (void) { }') > $@
common-generated += dummy.o dummy.c
ifneq "$(headers)" ""
# Special test of all the installed headers in this directory.
tests-special += $(objpfx)check-installed-headers-c.out
libof-check-installed-headers-c := nonlib
$(objpfx)check-installed-headers-c.out: \
$(..)scripts/check-installed-headers.sh $(headers)
$(SHELL) $(..)scripts/check-installed-headers.sh c \
"$(CC) $(filter-out -std=%,$(CFLAGS)) -D_ISOMAC $(+includes)" \
$(headers) > $@; \
$(evaluate-test)
ifneq "$(CXX)" ""
tests-special += $(objpfx)check-installed-headers-cxx.out
libof-check-installed-headers-cxx := nonlib
$(objpfx)check-installed-headers-cxx.out: \
$(..)scripts/check-installed-headers.sh $(headers)
$(SHELL) $(..)scripts/check-installed-headers.sh c++ \
"$(CXX) $(filter-out -std=%,$(CXXFLAGS)) -D_ISOMAC $(+includes)" \
$(headers) > $@; \
$(evaluate-test)
endif
endif
# This makes all the auxiliary and test programs.
.PHONY: others tests bench bench-build
# Test programs for the pretty printers.
tests-printers-programs := $(addprefix $(objpfx),$(tests-printers))
# .out files with the output of running the pretty printer tests.
tests-printers-out := $(patsubst %,$(objpfx)%.out,$(tests-printers))
ifndef PYTHON
# Mark tests-printers tests as unsupported if we don't have PYTHON.
tests-unsupported += $(tests-printers)
.PHONY: others tests bench
ifeq ($(multi-arch),no)
tests := $(filter-out $(tests-ifunc), $(tests))
xtests := $(filter-out $(xtests-ifunc), $(xtests))
endif
ifeq ($(build-programs),yes)
@@ -124,36 +94,14 @@ others: $(addprefix $(objpfx),$(others) $(sysdep-others) $(extra-objs))
else
others: $(addprefix $(objpfx),$(extra-objs))
endif
# Generate constant files for Python pretty printers if required.
others: $(py-const)
ifeq ($(run-built-tests),no)
tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported),$(tests)) \
$(test-srcs)) $(tests-special) \
$(tests-printers-programs)
xtests: tests $(xtests-special)
tests: $(addprefix $(objpfx),$(tests) $(test-srcs))
xtests: tests
else
tests: $(tests:%=$(objpfx)%.out) $(tests-special) $(tests-printers-out)
xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-special)
tests: $(tests:%=$(objpfx)%.out)
xtests: tests $(xtests:%=$(objpfx)%.out)
endif
tests-special-notdir = $(patsubst $(objpfx)%, %, $(tests-special))
xtests-special-notdir = $(patsubst $(objpfx)%, %, $(xtests-special))
ifeq ($(run-built-tests),no)
tests-expected =
else
tests-expected = $(tests) $(tests-printers)
endif
tests:
$(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \
$(sort $(tests-expected) $(tests-special-notdir:.out=)) \
> $(objpfx)subdir-tests.sum
xtests:
$(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \
$(sort $(xtests) $(xtests-special-notdir:.out=)) \
> $(objpfx)subdir-xtests.sum
ifeq ($(build-programs),yes)
binaries-all-notests = $(others) $(sysdep-others)
binaries-all-tests = $(tests) $(xtests) $(test-srcs)
@@ -194,7 +142,6 @@ endif
ifneq "$(strip $(binaries-shared-tests))" ""
$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
$(link-extra-libs-tests) \
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link-tests)
@@ -202,7 +149,6 @@ endif
ifneq "$(strip $(binaries-pie-tests))" ""
$(addprefix $(objpfx),$(binaries-pie-tests)): %: %.o \
$(link-extra-libs-tests) \
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link-pie-tests)
@@ -224,7 +170,6 @@ endif
ifneq "$(strip $(binaries-static-tests))" ""
$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
$(link-extra-libs-tests) \
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link-static-tests)
@@ -234,57 +179,16 @@ ifneq "$(strip $(tests) $(xtests) $(test-srcs))" ""
# These are the implicit rules for making test outputs
# from the test programs and whatever input files are present.
define make-test-out
$(if $($*-ENV-only),$(test-wrapper-env-only) $($*-ENV-only),\
$(test-wrapper-env) $(run-program-env) $($*-ENV)) \
$(host-test-program-cmd) $($*-ARGS)
endef
make-test-out = $(test-wrapper-env) \
GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
$($*-ENV) $(host-test-program-cmd) $($*-ARGS)
$(objpfx)%.out: %.input $(objpfx)%
$(make-test-out) > $@ < $(word 1,$^); \
$(evaluate-test)
$(make-test-out) > $@ < $(word 1,$^)
$(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence.
$(make-test-out) > $@; \
$(evaluate-test)
# tests-unsupported lists tests that we will not try to build at all in
# this configuration. Note this runs every time because it does not
# actually create its target. The dependency on Makefile is meant to
# ensure that it runs after a Makefile change to add a test to the list
# when it previously ran and produced a .out file (probably for a failure).
ifneq "$(strip $(tests-unsupported))" ""
$(tests-unsupported:%=$(objpfx)%.out): $(objpfx)%.out: Makefile
@rm -f $@
$(..)scripts/evaluate-test.sh $(patsubst $(common-objpfx)%.out,%,$@) \
77 false false > $(@:.out=.test-result)
endif
$(make-test-out) > $@
endif # tests
ifdef PYTHON
ifneq "$(strip $(tests-printers))" ""
# Static pattern rule for building the test programs for the pretty printers.
$(tests-printers-programs): %: %.o $(tests-printers-libs) \
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link-printers-tests)
# Add the paths to the generated constants file and test_common_printers.py
# to PYTHONPATH so the test scripts can find them.
py-env := PYTHONPATH=$(py-const-dir):$(..)scripts:$${PYTHONPATH}
# Static pattern rule that matches the test-* targets to their .c and .py
# prerequisites. It'll run the corresponding test script for each test program
# we compiled and place its output in the corresponding .out file.
# The pretty printer files and test_common_printers.py must be present for all.
$(tests-printers-out): $(objpfx)%.out: $(objpfx)% %.py %.c $(pretty-printers) \
$(..)scripts/test_printers_common.py
$(test-wrapper-env) $(py-env) \
$(PYTHON) $*.py $*.c $(objpfx)$* $(pretty-printers) > $@; \
$(evaluate-test)
endif
endif
.PHONY: distclean realclean subdir_distclean subdir_realclean \
subdir_clean subdir_mostlyclean subdir_testclean
+145
View File
@@ -0,0 +1,145 @@
libBrokenLocale {
GLIBC_2.0
}
libc {
GLIBC_2.0
GLIBC_2.1
GLIBC_2.1.1
GLIBC_2.1.2
GLIBC_2.1.3
GLIBC_2.1.4
GLIBC_2.2
GLIBC_2.2.1
GLIBC_2.2.2
GLIBC_2.2.3
GLIBC_2.2.4
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.1
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
HURD_CTHREADS_0.3
%ifdef EXPORT_UNWIND_FIND_FDE
GCC_3.0
%endif
GLIBC_PRIVATE
}
libcrypt {
GLIBC_2.0
}
libdl {
GLIBC_2.0
GLIBC_2.1
GLIBC_2.3.3
GLIBC_2.3.4
}
libm {
GLIBC_2.0
GLIBC_2.1
GLIBC_2.2
GLIBC_2.2.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.15
GLIBC_2.18
}
libnsl {
GLIBC_2.0
GLIBC_2.1
GLIBC_2.2
}
libnss_compat {
GLIBC_PRIVATE
}
libnss_dns {
GLIBC_PRIVATE
}
libnss_db {
GLIBC_PRIVATE
}
libnss_files {
GLIBC_PRIVATE
}
libnss_hesiod {
GLIBC_PRIVATE
}
libnss_nis {
GLIBC_PRIVATE
}
libnss_nisplus {
GLIBC_PRIVATE
}
libpthread {
GLIBC_2.0
GLIBC_2.1
GLIBC_2.1.1
GLIBC_2.1.2
GLIBC_2.2
GLIBC_2.2.3
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.6
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
}
libresolv {
GLIBC_2.0
GLIBC_2.2
GLIBC_2.3.2
GLIBC_2.9
GLIBC_PRIVATE
}
librt {
GLIBC_2.1
GLIBC_2.2
GLIBC_2.3
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.7
}
libutil {
GLIBC_2.0
GLIBC_2.9
}
ld {
GLIBC_2.0
GLIBC_2.1
GLIBC_2.3
GLIBC_2.4
GLIBC_PRIVATE
}
libthread_db {
GLIBC_2.1.3
GLIBC_2.2.3
GLIBC_2.3
GLIBC_2.3.3
}
libanl {
GLIBC_2.2.3
}
libcidn {
GLIBC_PRIVATE
}
-2
View File
@@ -28,7 +28,5 @@
.*-.*-syllable.* 5 2.0.0 # just an arbitrary value
.*-.*-nacl.* 6 42.0.0 # earliest compatible Chromium version
# There is no catch-all default here because every supported OS that uses
# ELF must have its own unique ABI tag.
Vendored
+8 -27
View File
@@ -1,8 +1,7 @@
dnl We require that everyone use exactly the same Autoconf version so that
dnl the internal functions defined and used by the main configure script
dnl match those expected by the fragments. When changing this version,
dnl install.texi also needs to be updated.
m4_define([GLIBC_AUTOCONF_VERSION], [2.69])
dnl match those expected by the fragments.
m4_define([GLIBC_AUTOCONF_VERSION], [2.68])
m4_if(m4_defn([AC_AUTOCONF_VERSION]), GLIBC_AUTOCONF_VERSION, [],
[m4_fatal(m4_flatten(
Exactly version GLIBC_AUTOCONF_VERSION of Autoconf is required but you have
@@ -10,8 +9,8 @@ m4_defn([AC_AUTOCONF_VERSION])
), [63])])dnl
dnl
dnl We define the macro GLIBC_PROVIDES to do an AC_PROVIDE for each macro
dnl which appears in configure.ac before the sysdep configure scripts are run.
dnl Each sysdep configure.ac does GLIBC_PROVIDES first, to avoid any
dnl which appears in configure.in before the sysdep configure scripts are run.
dnl Each sysdep configure.in does GLIBC_PROVIDES first, to avoid any
dnl AC_REQUIREs or AC_BEFOREs duplicating their code.
dnl
define([GLIBC_PROVIDES], [dnl
@@ -40,7 +39,7 @@ dnl Ripped out of AS_INIT, which does more cruft we do not want.
m4_wrap([m4_divert_pop([BODY])[]])
m4_divert_push([BODY])[]dnl
dnl End of ripped out of AS_INIT.
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
define([_AC_LANG], [C])dnl
])dnl
dnl
@@ -141,7 +140,7 @@ int _start (void) { return 0; }
int __start (void) { return 0; }
$1
EOF
AS_IF([AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp -o conftest
AS_IF([AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
conftest.c -static -nostartfiles -nostdlib
1>&AS_MESSAGE_LOG_FD])],
[$2], [$3])
@@ -226,7 +225,7 @@ if test x"$gnu_ld" = x"yes"; then
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
$2 -nostdlib -nostartfiles
-fPIC -shared -o conftest.so conftest.c
1>&AS_MESSAGE_LOG_FD])
@@ -268,7 +267,7 @@ libc_compiler_builtin_inlined=no
cat > conftest.c <<EOF
int _start (void) { $2 return 0; }
EOF
if ! AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
if ! AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
$3 -nostdlib -nostartfiles
-S conftest.c -o - | fgrep "$1"
1>&AS_MESSAGE_LOG_FD])
@@ -282,21 +281,3 @@ else
$5
fi
AC_MSG_RESULT($libc_compiler_builtin_inlined)])
dnl Default to slibdir named SLIBDIR instead of "lib", and rtlddir
dnl named RTLDDIR instead of "lib". This is used to put 64-bit
dnl libraries in /lib64.
dnl LIBC_SLIBDIR_RTLDDIR([slibdir], [rtlddir])
AC_DEFUN([LIBC_SLIBDIR_RTLDDIR],
[test -n "$libc_cv_slibdir" ||
case "$prefix" in
/usr | /usr/)
libc_cv_slibdir=/$1
libc_cv_rtlddir=/$2
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/$1';
# Locale data can be shared between 32-bit and 64-bit libraries.
libc_cv_complocaledir='${exec_prefix}/lib/locale'
fi
;;
esac])
+1 -3
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
# Copyright (C) 1997-2013 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
@@ -20,8 +20,6 @@
#
subdir := argp
include ../Makeconfig
headers = argp.h
routines = $(addprefix argp-, ba fmtstream fs-xinl help parse pv \
pvh xinl eexst)
+1 -1
View File
@@ -1,5 +1,5 @@
/* Default definition for ARGP_PROGRAM_BUG_ADDRESS.
Copyright (C) 1996-2017 Free Software Foundation, Inc.
Copyright (C) 1996-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+1 -1
View File
@@ -1,5 +1,5 @@
/* Default definition for ARGP_ERR_EXIT_STATUS
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+1 -5
View File
@@ -1,5 +1,5 @@
/* Word-wrapping and line-truncating streams
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
@@ -100,11 +100,7 @@ __argp_fmtstream_free (argp_fmtstream_t fs)
__argp_fmtstream_update (fs);
if (fs->p > fs->buf)
{
#ifdef _LIBC
__fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf);
#else
fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
#endif
}
free (fs->buf);
free (fs);
+14 -5
View File
@@ -1,5 +1,5 @@
/* Word-wrapping and line-truncating streams.
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
@@ -29,6 +29,19 @@
#include <string.h>
#include <unistd.h>
#ifndef __attribute__
/* This feature is available in gcc versions 2.5 and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
# define __attribute__(Spec) /* empty */
# endif
/* The __-protected variants of `format' and `printf' attributes
are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || __STRICT_ANSI__
# define __format__ format
# define __printf__ printf
# endif
#endif
#if defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H)
/* line_wrap_stream is available, so use that. */
#define ARGP_FMTSTREAM_USE_LINEWRAP
@@ -96,8 +109,6 @@ struct argp_fmtstream
typedef struct argp_fmtstream *argp_fmtstream_t;
__BEGIN_DECLS
/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines
written on it with LMARGIN spaces and limits them to RMARGIN columns
total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by
@@ -284,8 +295,6 @@ __argp_fmtstream_point (argp_fmtstream_t __fs)
#endif /* __OPTIMIZE__ */
__END_DECLS
#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */
#endif /* argp-fmtstream.h */
+1 -1
View File
@@ -1,5 +1,5 @@
/* Real definitions for extern inline functions in argp-fmtstream.h
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+9 -9
View File
@@ -1,5 +1,5 @@
/* Hierarchial argument parsing help output
Copyright (C) 1995-2017 Free Software Foundation, Inc.
Copyright (C) 1995-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
@@ -160,7 +160,7 @@ static const struct uparam_name uparam_names[] =
};
#define nuparam_names (sizeof (uparam_names) / sizeof (uparam_names[0]))
/* Read user options from the environment, and fill in UPARAMS appropriately. */
/* Read user options from the environment, and fill in UPARAMS appropiately. */
static void
fill_in_uparams (const struct argp_state *state)
{
@@ -275,11 +275,11 @@ fill_in_uparams (const struct argp_state *state)
-xARG, -yARG, --long1=ARG, --long2=ARG Documentation...
Where ARG will be omitted if there's no argument, for this option, or
will be surrounded by "[" and "]" appropriately if the argument is
optional. The documentation string is word-wrapped appropriately, and if
will be surrounded by "[" and "]" appropiately if the argument is
optional. The documentation string is word-wrapped appropiately, and if
the list of options is long enough, it will be started on a separate line.
If there are no short options for a given option, the first long option is
indented slightly in a way that's supposed to make most long options appear
indented slighly in a way that's supposed to make most long options appear
to be in a separate column.
For example, the following output (from ps):
@@ -357,7 +357,7 @@ struct hol_entry
/* A pointers into the HOL's short_options field, to the first short option
letter for this entry. The order of the characters following this point
corresponds to the order of options pointed to by OPT, and there are at
most NUM. A short option recorded in an option following OPT is only
most NUM. A short option recorded in a option following OPT is only
valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's
probably been shadowed by some other entry). */
char *short_options;
@@ -736,12 +736,12 @@ hol_entry_cmp (const struct hol_entry *entry1,
if (entry1->cluster != entry2->cluster)
{
/* The entries are not within the same cluster, so we can't compare them
directly, we have to use the appropriate clustering level too. */
directly, we have to use the appropiate clustering level too. */
if (! entry1->cluster)
/* ENTRY1 is at the `base level', not in a cluster, so we have to
compare it's group number with that of the base cluster in which
ENTRY2 resides. Note that if they're in the same group, the
clustered option always comes last. */
clustered option always comes laster. */
return group_cmp (group1, hol_cluster_base (entry2->cluster)->group, -1);
else if (! entry2->cluster)
/* Likewise, but ENTRY2's not in a cluster. */
@@ -998,7 +998,7 @@ filter_doc (const char *doc, int key, const struct argp *argp,
return doc;
}
/* Prints STR as a header line, with the margin lines set appropriately, and
/* Prints STR as a header line, with the margin lines set appropiately, and
notes the fact that groups should be separated with a blank line. ARGP is
the argp that should dictate any user doc filtering to take place. Note
that the previous wrap margin isn't restored, but the left margin is reset
+1 -1
View File
@@ -1,5 +1,5 @@
/* Name frobnication for compiling argp outside of glibc
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Hierarchial argument parsing, layered over getopt
Copyright (C) 1995-2017 Free Software Foundation, Inc.
Copyright (C) 1995-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
@@ -410,7 +410,7 @@ convert_options (const struct argp *argp,
return group;
}
/* Find the merged set of getopt options, with keys appropriately prefixed. */
/* Find the merged set of getopt options, with keys appropiately prefixed. */
static void
parser_convert (struct parser *parser, const struct argp *argp, int flags)
{
+1 -1
View File
@@ -1,5 +1,5 @@
/* Default definition for ARGP_PROGRAM_VERSION.
Copyright (C) 1996-2017 Free Software Foundation, Inc.
Copyright (C) 1996-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+1 -1
View File
@@ -1,5 +1,5 @@
/* Default definition for ARGP_PROGRAM_VERSION_HOOK.
Copyright (C) 1996-2017 Free Software Foundation, Inc.
Copyright (C) 1996-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+1 -1
View File
@@ -1,5 +1,5 @@
/* Test program for argp argument parser
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+1 -1
View File
@@ -1,5 +1,5 @@
/* Real definitions for extern inline functions in argp.h
Copyright (C) 1997-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
+41 -5
View File
@@ -1,5 +1,5 @@
/* Hierarchial argument parsing, layered over getopt.
Copyright (C) 1995-2017 Free Software Foundation, Inc.
Copyright (C) 1995-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@gnu.ai.mit.edu>.
@@ -28,12 +28,46 @@
#define __need_error_t
#include <errno.h>
#ifndef __THROW
# define __THROW
#endif
#ifndef __NTH
# define __NTH(fct) fct __THROW
#endif
#ifndef __attribute__
/* This feature is available in gcc versions 2.5 and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
# define __attribute__(Spec) /* empty */
# endif
/* The __-protected variants of `format' and `printf' attributes
are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || __STRICT_ANSI__
# define __format__ format
# define __printf__ printf
# endif
#endif
/* GCC 2.95 and later have "__restrict"; C99 compilers have
"restrict", and "configure" may have defined "restrict". */
#ifndef __restrict
# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
# if defined restrict || 199901L <= __STDC_VERSION__
# define __restrict restrict
# else
# define __restrict
# endif
# endif
#endif
#ifndef __error_t_defined
typedef int error_t;
# define __error_t_defined
#endif
__BEGIN_DECLS
#ifdef __cplusplus
extern "C" {
#endif
/* A description of a particular option. A pointer to an array of
these is passed in the OPTIONS field of an argp structure. Each option
@@ -511,7 +545,7 @@ extern void *__argp_input (const struct argp *__restrict __argp,
#ifdef __USE_EXTERN_INLINES
# if !(defined _LIBC && _LIBC)
# if !_LIBC
# define __argp_usage argp_usage
# define __argp_state_help argp_state_help
# define __option_is_short _option_is_short
@@ -546,7 +580,7 @@ __NTH (__option_is_end (const struct argp_option *__opt))
return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
}
# if !(defined _LIBC && _LIBC)
# if !_LIBC
# undef __argp_usage
# undef __argp_state_help
# undef __option_is_short
@@ -554,6 +588,8 @@ __NTH (__option_is_end (const struct argp_option *__opt))
# endif
#endif /* Use extern inlines. */
__END_DECLS
#ifdef __cplusplus
}
#endif
#endif /* argp.h */
+1 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+1 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2007-2017 Free Software Foundation, Inc.
/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2007.
+4 -4
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991-2017 Free Software Foundation, Inc.
# Copyright (C) 1991-2013 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
@@ -19,12 +19,12 @@
# Sub-makefile for assert portion of the library.
#
subdir := assert
include ../Makeconfig
headers := assert.h
routines := assert assert-perr __assert
tests := test-assert test-assert-perr
include ../Rules
test-assert-ENV = LANGUAGE=C
test-assert-perr-ENV = LANGUAGE=C
+1 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2000-2017 Free Software Foundation, Inc.
/* Copyright (C) 2000-2013 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
+1 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1994-2017 Free Software Foundation, Inc.
/* Copyright (C) 1994-2013 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
+2 -2
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
/* Copyright (C) 1991-2013 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
@@ -67,7 +67,7 @@ __assert_fail_base (const char *fmt, const char *assertion, const char *file,
total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);
struct abort_msg_s *buf = __mmap (NULL, total, PROT_READ | PROT_WRITE,
MAP_ANON | MAP_PRIVATE, -1, 0);
if (__glibc_likely (buf != MAP_FAILED))
if (__builtin_expect (buf != MAP_FAILED, 1))
{
buf->size = total;
strcpy (buf->msg, str);
+6 -18
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
/* Copyright (C) 1991-2013 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
@@ -82,23 +82,10 @@ extern void __assert (const char *__assertion, const char *__file, int __line)
__END_DECLS
/* When possible, define assert so that it does not add extra
parentheses around EXPR. Otherwise, those added parentheses would
suppress warnings we'd expect to be detected by gcc's -Wparentheses. */
# if !defined __GNUC__ || defined __STRICT_ANSI__
# define assert(expr) \
((expr) \
? __ASSERT_VOID_CAST (0) \
: __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
# else
# define assert(expr) \
({ \
if (expr) \
; /* empty */ \
else \
__assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION); \
})
# endif
# define assert(expr) \
((expr) \
? __ASSERT_VOID_CAST (0) \
: __assert_fail (__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION))
# ifdef __USE_GNU
# define assert_perror(errnum) \
@@ -126,6 +113,7 @@ __END_DECLS
#if defined __USE_ISOC11 && !defined __cplusplus
/* Static assertion. Requires support in the compiler. */
# undef static_assert
# define static_assert _Static_assert
#endif
+58 -149
View File
@@ -1,4 +1,4 @@
# Copyright (C) 2013-2017 Free Software Foundation, Inc.
# Copyright (C) 2013 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
@@ -15,202 +15,111 @@
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.
# Makefile for benchmark tests. The only useful target here is `bench`.
# Add benchmark functions in alphabetical order.
# Adding a new function `foo`:
# ---------------------------
# - Append the function name to the bench variable
# - Define foo-ARGLIST as a colon separated list of types of the input
# arguments. Use `void` if function does not take any inputs. Put in quotes
# if the input argument is a pointer, e.g.:
# malloc-ARGLIST: "void *"
# - Define foo-RET as the type the function returns. Skip if the function
# returns void. One could even skip foo-ARGLIST if the function does not
# take any inputs AND the function returns void.
# - Make a file called `foo-inputs` with one input value per line, an input
# being a comma separated list of arguments to be passed into the function.
# See pow-inputs for an example.
subdir := benchtests
bench := exp pow rint sin cos tan atan modf
include ../Makeconfig
bench-math := acos acosh asin asinh atan atanh cos cosh exp exp2 log log2 \
modf pow rint sin sincos sinh sqrt tan tanh fmin fmax fminf \
fmaxf
exp-ARGLIST = double
exp-RET = double
LDFLAGS-bench-exp = -lm
bench-pthread := pthread_once
pow-ARGLIST = double:double
pow-RET = double
LDFLAGS-bench-pow = -lm
bench-string := ffs ffsll
rint-ARGLIST = double
rint-RET = double
LDFLAGS-bench-rint = -lm
bench := $(bench-math) $(bench-pthread) $(bench-string)
sin-ARGLIST = double
sin-RET = double
LDFLAGS-bench-sin = -lm
# String function benchmarks.
string-benchset := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \
mempcpy memset rawmemchr stpcpy stpncpy strcasecmp strcasestr \
strcat strchr strchrnul strcmp strcpy strcspn strlen \
strncasecmp strncat strncmp strncpy strnlen strpbrk strrchr \
strspn strstr strcpy_chk stpcpy_chk memrchr strsep strtok \
strcoll memcpy-large memmove-large memset-large
cos-ARGLIST = double
cos-RET = double
LDFLAGS-bench-cos = -lm
# Build and run locale-dependent benchmarks only if we're building natively.
ifeq (no,$(cross-compiling))
wcsmbs-benchset := wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat \
wcscmp wcsncmp wcschr wcschrnul wcsrchr wcsspn wcspbrk wcscspn \
wmemchr wmemset wmemcmp
else
wcsmbs-benchset :=
endif
tan-ARGLIST = double
tan-RET = double
LDFLAGS-bench-tan = -lm
string-benchset-all := $(string-benchset) ${wcsmbs-benchset}
ifeq (no,$(cross-compiling))
# We have to generate locales
LOCALES := en_US.UTF-8 tr_TR.UTF-8 cs_CZ.UTF-8 fa_IR.UTF-8 fr_FR.UTF-8 \
ja_JP.UTF-8 si_LK.UTF-8 en_GB.UTF-8 vi_VN.UTF-8 ar_SA.UTF-8 \
da_DK.UTF-8 pl_PL.UTF-8 pt_PT.UTF-8 el_GR.UTF-8 ru_RU.UTF-8 \
he_IL.UTF-8 is_IS.UTF-8 es_ES.UTF-8 hi_IN.UTF-8 sv_SE.UTF-8 \
hu_HU.UTF-8 it_IT.UTF-8 sr_RS.UTF-8 zh_CN.UTF-8
include ../gen-locales.mk
endif
stdlib-benchset := strtod
stdio-common-benchset := sprintf
math-benchset := math-inlines
benchset := $(string-benchset-all) $(stdlib-benchset) $(stdio-common-benchset) \
$(math-benchset)
CFLAGS-bench-ffs.c += -fno-builtin
CFLAGS-bench-ffsll.c += -fno-builtin
CFLAGS-bench-sqrt.c += -fno-builtin
CFLAGS-bench-fmin.c += -fno-builtin
CFLAGS-bench-fminf.c += -fno-builtin
CFLAGS-bench-fmax.c += -fno-builtin
CFLAGS-bench-fmaxf.c += -fno-builtin
bench-malloc := malloc-thread
$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
$(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
$(objpfx)bench-malloc-thread: $(shared-thread-library)
atan-ARGLIST = double
atan-RET = double
LDFLAGS-bench-atan = -lm
# Rules to build and execute the benchmarks. Do not put any benchmark
# parameters beyond this point.
# We don't want the benchmark programs to run in parallel since that could
# affect their performance.
.NOTPARALLEL:
include ../Makeconfig
include ../Rules
binaries-bench := $(addprefix $(objpfx)bench-,$(bench))
binaries-benchset := $(addprefix $(objpfx)bench-,$(benchset))
binaries-bench-malloc := $(addprefix $(objpfx)bench-,$(bench-malloc))
# The default duration: 10 seconds.
ifndef BENCH_DURATION
BENCH_DURATION := 10
endif
CPPFLAGS-nonlib += -DDURATION=$(BENCH_DURATION)
# Use clock_gettime to measure performance of functions. The default is to use
# HP_TIMING if it is available.
ifdef USE_CLOCK_GETTIME
CPPFLAGS-nonlib += -DUSE_CLOCK_GETTIME
endif
DETAILED_OPT :=
ifdef DETAILED
DETAILED_OPT := -d
endif
CPPFLAGS-nonlib = -DDURATION=$(BENCH_DURATION)
# This makes sure CPPFLAGS-nonlib and CFLAGS-nonlib are passed
# for all these modules.
cpp-srcs-left := $(binaries-benchset:=.c) $(binaries-bench:=.c) \
$(binaries-bench-malloc:=.c)
cpp-srcs-left := $(binaries-bench:=.c)
lib := nonlib
include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
bench-extra-objs = json-lib.o
extra-objs += $(bench-extra-objs)
bench-deps := bench-skeleton.c bench-timing.h Makefile
bench-deps := bench-skeleton.c Makefile
run-bench = $(test-wrapper-env) \
$(run-program-env) \
$($*-ENV) $(test-via-rtld-prefix) $${run}
timing-type := $(objpfx)bench-timing-type
GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
$($*-ENV) $(rtld-prefix) $${run}
bench-clean:
rm -f $(binaries-bench) $(addsuffix .o,$(binaries-bench))
rm -f $(binaries-benchset) $(addsuffix .o,$(binaries-benchset))
rm -f $(binaries-bench-malloc) $(addsuffix .o,$(binaries-bench-malloc))
rm -f $(timing-type) $(addsuffix .o,$(timing-type))
rm -f $(addprefix $(objpfx),$(bench-extra-objs))
# Define the bench target only if the target has a usable python installation.
ifdef PYTHON
bench: bench-build bench-set bench-func bench-malloc
else
bench:
@echo "The bench target needs python to run."
@exit 1
endif
# Target to only build the benchmark without running it. We generate locales
# only if we're building natively.
ifeq (no,$(cross-compiling))
bench-build: $(gen-locales) $(timing-type) $(binaries-bench) \
$(binaries-benchset) $(binaries-bench-malloc)
else
bench-build: $(timing-type) $(binaries-bench) $(binaries-benchset) \
$(binaries-bench-malloc)
endif
bench-set: $(binaries-benchset)
for run in $^; do \
echo "Running $${run}"; \
$(run-bench) > $${run}.out; \
done
bench-malloc: $(binaries-bench-malloc)
run=$(objpfx)bench-malloc-thread; \
for thr in 1 8 16 32; do \
echo "Running $${run} $${thr}"; \
$(run-bench) $${thr} > $${run}-$${thr}.out; \
done
# Build and execute the benchmark functions. This target generates JSON
# formatted bench.out. Each of the programs produce independent JSON output,
# so one could even execute them individually and process it using any JSON
# capable language or tool.
bench-func: $(binaries-bench)
{ timing_type=$$($(timing-type)); \
echo "{\"timing_type\": \"$${timing_type}\","; \
echo " \"functions\": {"; \
for run in $^; do \
if ! [ "x$${run}" = "x$<" ]; then \
echo ","; \
fi; \
bench: $(binaries-bench)
{ for run in $^; do \
echo "Running $${run}" >&2; \
$(run-bench) $(DETAILED_OPT); \
done; \
echo; \
echo " }"; \
echo "}"; } > $(objpfx)bench.out-tmp; \
$(run-bench); \
done; } > $(objpfx)bench.out-tmp; \
if [ -f $(objpfx)bench.out ]; then \
mv -f $(objpfx)bench.out $(objpfx)bench.out.old; \
fi; \
mv -f $(objpfx)bench.out-tmp $(objpfx)bench.out
$(PYTHON) scripts/validate_benchout.py $(objpfx)bench.out \
scripts/benchout.schema.json
$(timing-type) $(binaries-bench) $(binaries-benchset) \
$(binaries-bench-malloc): %: %.o $(objpfx)json-lib.o \
$(link-extra-libs-tests) \
$(binaries-bench): %: %.o \
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link-tests)
$(+link)
$(objpfx)bench-%.c: %-inputs $(bench-deps)
{ if [ -n "$($*-INCLUDE)" ]; then \
cat $($*-INCLUDE); \
fi; \
$(PYTHON) scripts/bench.py $(patsubst %-inputs,%,$<); } > $@-tmp
$(..)scripts/bench.pl $(patsubst %-inputs,%,$<) \
$($*-ARGLIST) $($*-RET); } > $@-tmp
mv -f $@-tmp $@
-118
View File
@@ -1,118 +0,0 @@
Using the glibc microbenchmark suite
====================================
The glibc microbenchmark suite automatically generates code for specified
functions, builds and calls them repeatedly for given inputs to give some
basic performance properties of the function.
Running the benchmark:
=====================
The benchmark needs python 2.7 or later in addition to the
dependencies required to build the GNU C Library. One may run the
benchmark by invoking make as follows:
$ make bench
This runs each function for 10 seconds and appends its output to
benchtests/bench.out. To ensure that the tests are rebuilt, one could run:
$ make bench-clean
The duration of each test can be configured setting the BENCH_DURATION variable
in the call to make. One should run `make bench-clean' before changing
BENCH_DURATION.
$ make BENCH_DURATION=1 bench
The benchmark suite does function call measurements using architecture-specific
high precision timing instructions whenever available. When such support is
not available, it uses clock_gettime (CLOCK_PROCESS_CPUTIME_ID). One can force
the benchmark to use clock_gettime by invoking make as follows:
$ make USE_CLOCK_GETTIME=1 bench
Again, one must run `make bench-clean' before changing the measurement method.
Running benchmarks on another target:
====================================
If the target where you want to run benchmarks is not capable of building the
code or you're cross-building, you could build and execute the benchmark in
separate steps. On the build system run:
$ make bench-build
and then copy the source and build directories to the target and run the
benchmarks from the build directory as usual:
$ make bench
make sure the copy preserves timestamps by using either rsync or scp -p
otherwise the above command may try to build the benchmark again. Benchmarks
that require generated code to be executed during the build are skipped when
cross-building.
Adding a function to benchtests:
===============================
If the name of the function is `foo', then the following procedure should allow
one to add `foo' to the bench tests:
- Append the function name to the bench variable in the Makefile.
- Make a file called `foo-inputs` to provide the definition and input for the
function. The file should have some directives telling the parser script
about the function and then one input per line. Directives are lines that
have a special meaning for the parser and they begin with two hashes '##'.
The following directives are recognized:
- args: This should be assigned a colon separated list of types of the input
arguments. This directive may be skipped if the function does not take any
inputs. One may identify output arguments by nesting them in <>. The
generator will create variables to get outputs from the calling function.
- ret: This should be assigned the type that the function returns. This
directive may be skipped if the function does not return a value.
- includes: This should be assigned a comma-separated list of headers that
need to be included to provide declarations for the function and types it
may need (specifically, this includes using "#include <header>").
- include-sources: This should be assigned a comma-separated list of source
files that need to be included to provide definitions of global variables
and functions (specifically, this includes using "#include "source").
See pthread_once-inputs and pthreads_once-source.c for an example of how
to use this to benchmark a function that needs state across several calls.
- init: Name of an initializer function to call to initialize the benchtest.
- name: See following section for instructions on how to use this directive.
Lines beginning with a single hash '#' are treated as comments. See
pow-inputs for an example of an input file.
Multiple execution units per function:
=====================================
Some functions have distinct performance characteristics for different input
domains and it may be necessary to measure those separately. For example, some
math functions perform computations at different levels of precision (64-bit vs
240-bit vs 768-bit) and mixing them does not give a very useful picture of the
performance of these functions. One could separate inputs for these domains in
the same file by using the `name' directive that looks something like this:
##name: 240bit
See the pow-inputs file for an example of what such a partitioned input file
would look like.
Benchmark Sets:
==============
In addition to standard benchmarking of functions, one may also generate
custom outputs for a set of functions. This is currently used by string
function benchmarks where the aim is to compare performance between
implementations at various alignments and for various sizes.
To add a benchset for `foo':
- Add `foo' to the benchset variable.
- Write your bench-foo.c that prints out the measurements to stdout.
- On execution, a bench-foo.out is created in $(objpfx) with the contents of
stdout.
File diff suppressed because it is too large Load Diff
-303
View File
@@ -1,303 +0,0 @@
## args: double
## ret: double
## includes: math.h
0x1.6d46e7252da2fp388
0x1.c18cc3982093ep775
0x1.2e9a406645b9bp609
0x1.006d075b935c9p0
0x1.4d49f6cda4ceap0
0x1.e0ba4580ef871p21
0x1.ffab14f637eaap733
0x1.f0a22293c4ecbp852
0x1.24baf479f025cp0
0x1.91bc310a7648ep243
0x1.93d4c19692fbfp80
0x1.9eb0b40303dcap843
0x1.945a20aa092e2p4
0x1.ac2677a0ed292p0
0x1.64c6a3d5a0867p304
0x1.e0d6324c882e9p0
0x1.7e0ba7c987b9ep7
0x1.3975f02686229p10
0x1.cc4916f089070p25
0x1.729be339c67b2p0
0x1.c64b8297569c4p207
0x1.2c1544d816155p340
0x1.ad443265c6b4ap845
0x1.f53624533eb2cp0
0x1.92e4800542f83p108
0x1.f873e456e1975p0
0x1.84a7b4b80f227p4
0x1.46dd43031fe1fp0
0x1.e28b805a73a97p0
0x1.9e11325b1c3c4p22
0x1.5c76b43d66941p15
0x1.98109155dd7bfp21
0x1.3d88b121650aap8
0x1.adff01fab2117p0
0x1.5e76d52c7f729p15
0x1.0a46e3262c2b8p20
0x1.52f9a11ad6e66p0
0x1.96f8f26a41c3bp122
0x1.161fd6fd320d5p745
0x1.c5fb927d2cb09p8
0x1.265a61a0bb1d4p0
0x1.09a5d681397d0p0
0x1.ebef22f6aa8aap0
0x1.3ac9b75c613bdp160
0x1.b77615a1e2a3ap0
0x1.68f9d755d5eadp0
0x1.ed2c9188571d9p0
0x1.e8f886346b284p15
0x1.f65bd2ce4416ap0
0x1.4574341b05968p656
0x1.5c2cb3414299cp154
0x1.c4ea7682d0661p832
0x1.b221562a61af2p0
0x1.d7f9c739e0b26p561
0x1.eb28429726661p423
0x1.e7a5f5b2cc9e8p902
0x1.9fd093db922f4p0
0x1.c1cb5159d4e46p0
0x1.a0bed3234b8cdp0
0x1.bc8ff7e59e82ep18
0x1.de8f25287ff7cp0
0x1.a1ab66b8f9098p0
0x1.c36c11c290063p20
0x1.72e9e736d6e41p0
0x1.38b134391f71ep21
0x1.a500e5cf1a2cfp246
0x1.253da08c9c318p144
0x1.f5efb379e3b3fp952
0x1.07c767a225a7bp21
0x1.f82770adf361dp19
0x1.39e42524c048ep894
0x1.a4ae84e202a44p0
0x1.e17e23b598415p925
0x1.08fa931bd21f5p10
0x1.b52541759872ep0
0x1.91bf33cdb6804p710
0x1.5c18505e522d6p0
0x1.9fe7c5ca15212p9
0x1.62c360b992b13p10
0x1.57a000ceee049p800
0x1.da296671c3e5cp0
0x1.ff43325a40608p0
0x1.295d65809666fp111
0x1.2781e3f5d0e0fp249
0x1.875d5703776fcp0
0x1.0f8045a313158p26
0x1.bd30a3b638a67p11
0x1.0a3184db8d287p0
0x1.c6d33006f978ep0
0x1.8c6476a610245p0
0x1.aa7fc36f3cea9p461
0x1.afb5c0c4f933ap6
0x1.20b75365bd50fp16
0x1.69c8245c09535p19
0x1.30dcf0414c561p292
0x1.c2323455e5501p0
0x1.c2e3d08f78fb2p0
0x1.f479457ec8f4fp25
0x1.4c1e32e79005dp7
0x1.86b9a4aed3300p26
0x1.ee654167b045bp0
0x1.a339c796ccd9fp0
0x1.75f6f32348765p4
0x1.6120d7e4e5d9ep498
0x1.01c843ae8b440p20
0x1.034a67c534113p0
0x1.94d6d681be7e6p0
0x1.2576745f4cca6p22
0x1.813994f759a60p171
0x1.0308a4c5b820dp0
0x1.d073e0e895907p580
0x1.6094d2dc7af3bp0
0x1.3348d7ba303bep0
0x1.a0830483382afp2
0x1.e3558408e36dep0
0x1.d55db05590c97p0
0x1.95680648261ecp0
0x1.d54c401b55bd9p18
0x1.584be75027a11p872
0x1.594273cdd339dp4
0x1.85d9676b1ae49p752
0x1.38f122e7f7be0p220
0x1.75c3a575deb13p251
0x1.2c85f1a74ac0fp0
0x1.0dc9e789128acp947
0x1.51dbf3461a224p0
0x1.61c9644526617p809
0x1.89494217ed887p204
0x1.2a57014d8c24bp317
0x1.c4d527df0d553p762
0x1.ad2717638f0adp986
0x1.63352752d72c5p847
0x1.d124a052e9410p0
0x1.373d228ee6061p505
0x1.0bbe63d8b48d2p0
0x1.0b5115dd5774dp4
0x1.f50d62ef77ac6p3
0x1.4cb6110ea61e4p1
0x1.b056b690aef8ap0
0x1.a32cd47340669p2
0x1.f917868895288p872
0x1.332a86c10c0e1p14
0x1.07f7c34023735p881
0x1.7935f21efcfadp24
0x1.644ad1a392b18p0
0x1.f930b772bba49p0
0x1.019a86d2e2300p18
0x1.a25af297e68fep194
0x1.80ab316f210c8p0
0x1.f73a3049f9d76p16
0x1.8b1a0407ae636p7
0x1.9bdf23a917930p2
0x1.d139574e3913ep168
0x1.caf9468b5f459p0
0x1.c3b5f0096df0dp24
0x1.d3451096baf1ep0
0x1.7bb5671e2bfcap719
0x1.64b7e3621a6ddp0
0x1.08b544290bb37p0
0x1.2b65c78ec87a4p0
0x1.993a6363227e2p12
0x1.a09d26d2a558fp216
0x1.daff104bb08a5p25
0x1.7d77308fd73cap655
0x1.8946b691ecf5ap10
0x1.8ec222d562aa9p25
0x1.b7da17cd3268ap0
0x1.250500a0b4266p831
0x1.8e6f071075758p0
0x1.984146d8a6c69p20
0x1.558480e0da8bdp15
0x1.b6bea5e996fdbp11
0x1.f289853c632ddp11
0x1.8fbe179f273aap0
0x1.6b4382f669e8dp0
0x1.a966a17972ca9p601
0x1.dbd635362ec6bp6
0x1.899e75c43e065p675
0x1.f11c07e219bafp7
0x1.3ab637a02ed36p0
0x1.36b913a68fe70p901
0x1.049fe294eb450p0
0x1.0547247e7518ap677
0x1.9e07054aa7309p743
0x1.aff281fbb3a6ap874
0x1.6c1b6312efacfp783
0x1.a38c639c0df57p243
0x1.f07b95fd415ccp9
0x1.ca1c23fd6ce37p7
0x1.9ed9906a6f029p18
0x1.f1a483c62adecp74
0x1.617df662bbf02p0
0x1.22e1608c31f55p13
0x1.d840853d46285p15
0x1.023fd69d438dep12
0x1.8184a3fcc1ac3p942
0x1.25c5071d2dc6ep8
0x1.0eec25d2a59ccp27
0x1.d55b11ee07cc4p0
0x1.175347bf29152p23
0x1.546624c66c38bp0
0x1.212fc4abebddep723
0x1.75f1269063e4dp5
0x1.3b51233fed0a5p381
0x1.486e24ad660e1p686
0x1.7788055510c4dp23
0x1.55bf96fcf9458p905
0x1.0a5aa2d61be59p0
0x1.5da757c1a95c6p895
0x1.d596e1ea9dcefp0
0x1.e91b460893372p0
0x1.d934d6ea17649p728
0x1.cd74423b4c4aep15
0x1.dc3151a1b4289p0
0x1.5799c072442dep0
0x1.97ae606371057p22
0x1.7369c3195238ap0
0x1.43a1d0e6eae29p109
0x1.7fd922252a24ep425
0x1.bf01d7e826d2cp0
0x1.a397b7c711fcfp14
0x1.7b40809d9f6b5p0
0x1.58098134bf6afp0
0x1.567e92bdee806p3
0x1.641866cfab5e7p382
0x1.11d483657f659p0
0x1.f0b1d4cd82236p18
0x1.a18365ad84301p6
0x1.4f749259eb02dp140
0x1.4b1d721633901p747
0x1.fa9e9543d1dfbp5
0x1.ae33e3ae5e0ecp0
0x1.29c444207fa90p0
0x1.b55e708600082p19
0x1.bb1464c1f136fp0
0x1.d36f165b63b8fp880
0x1.c1a0d0ee96f75p27
0x1.9b1376e7377a3p0
0x1.6e88361aa13bbp619
0x1.d109f410d341bp822
0x1.654255768c727p0
0x1.c938959e450d6p0
0x1.26fd92ae3e170p356
0x1.157c240adb715p982
0x1.749735f182597p15
0x1.2291e3ab7501cp0
0x1.96d320a0153bap383
0x1.b569919b79b6fp214
0x1.0872c2cff972dp276
0x1.bd98342544357p0
0x1.853327d0e2f4dp11
0x1.23438314fb10bp0
0x1.342f35eabf622p707
0x1.d19f05a5a1fe4p13
0x1.67c566bcf73aap0
0x1.2ce065238fb73p27
0x1.5219d2e05f184p0
0x1.4a163440f7c98p4
0x1.d780c4711b212p0
0x1.395461c5f96a6p5
0x1.21efa25110e19p12
0x1.c9ddf4f375933p17
0x1.3da0800fe1f5ep0
0x1.90f147b3d0164p829
0x1.001d955d8a436p344
0x1.c6b2115b84675p319
0x1.650441a7059bdp554
0x1.3a49216bbe75ep0
0x1.fdd3c3404c763p750
0x1.0b97d555f912cp1
0x1.95c32605e6c59p20
0x1.6acfa746531b2p0
0x1.13f4d3bbd6417p8
0x1.ac31b628eaa2cp0
0x1.4293b3d3169d2p8
0x1.6e8a94f758a02p802
0x1.701604374d526p0
0x1.bec162f84a16cp13
0x1.2015764e98ea6p481
0x1.b9d12441e91a7p11
0x1.55a4c648ebcc2p378
0x1.65b6e4f33cc66p0
0x1.b12c01289b0c4p15
0x1.ce91f580c5091p228
0x1.719ec056f57fep1
0x1.0b2c87979b28cp23
0x1.218c0592aa7fcp95
0x1.ec1e878f29cf8p97
0x1.adc8d213f43b1p0
0x1.e788f6152fe51p0
0x1.a026b0485c0e8p12
0x1.f181e3ec38f77p3
0x1.dafd9764a705fp13
0x1.a292f29dfe6c4p0
0x1.661d765a50087p13
0x1.f619932e8e376p1010
0x1.4a1600b2e95dbp880
0x1.f5b95104bb64dp320
0x1.a7a935f93958ap22
0x1.5fe3a6a58526dp20
File diff suppressed because it is too large Load Diff
-303
View File
@@ -1,303 +0,0 @@
## args: double
## ret: double
## includes: math.h
0x1.408fb643484cep-11
0x1.f0763423f1d52p-23
-0x1.681573418e494p4
-0x1.87cc25833f74bp16
-0x1.ad3df5eb7db54p24
0x1.90f147b3d0164p829
-0x1.60b1066c6712ep71
-0x1.5997c27aac9ccp332
-0x1.2cb3142c669a0p15
-0x1.ec882168157e6p191
0x1.43a1d0e6eae29p109
-0x1.2b43c388e1857p672
0x1.f11c07e219bafp7
0x1.f5efb379e3b3fp952
-0x1.405cf322b684cp-13
-0x1.fa64c4090d337p43
0x1.a98724f016a93p-13
-0x1.5743f3604a7fbp10
0x1.042971d37879bp-17
0x1.d4cda5814c00fp-2
0x1.ec1e878f29cf8p97
-0x1.6a4cd37896c5fp-24
0x1.da85d34b19160p-10
0x1.c068c277d171fp-17
-0x1.b3e2d1ead4160p-1
-0x1.ac8a62deb27c3p521
-0x1.e28e32ce20a25p-1
-0x1.e70635022c5fdp315
0x1.984146d8a6c69p20
-0x1.67cf155405aadp747
-0x1.a852444a7de0ep-23
0x1.92e4800542f83p108
-0x1.564ba0e9ad540p-7
0x1.c36c11c290063p20
0x1.4723d5459434cp-26
-0x1.43c1535cd024bp-11
0x1.6d46e7252da2fp388
0x1.756f2685e9ca9p-26
-0x1.72268726f4141p22
0x1.558480e0da8bdp15
0x1.ef0970332ed6fp-3
0x1.2015764e98ea6p481
-0x1.3a0f66a229b60p871
-0x1.c833f28187420p-25
-0x1.a0ea74513cffbp778
-0x1.d2dde734625d1p13
-0x1.996507c01ea97p25
0x1.d36f165b63b8fp880
0x1.445234d59e32bp-2
0x1.cd74423b4c4aep15
-0x1.c0b6631621425p-1
0x1.a2e0f00779702p-25
-0x1.fcf5c0266c2f2p-22
-0x1.af38a56120728p-21
-0x1.9ec217ea497dap1
0x1.57a000ceee049p800
0x1.6c1b6312efacfp783
0x1.afb5c0c4f933ap6
-0x1.f9267499e3327p16
-0x1.9b5ba5b496ae5p10
0x1.3975f02686229p10
0x1.36b913a68fe70p901
0x1.8946b691ecf5ap10
-0x1.efbb62a588bccp24
0x1.f3de8628048d9p-8
0x1.8ec222d562aa9p25
-0x1.ac03e6a0d863cp22
-0x1.6d9d94c1e0b6fp23
0x1.9807337060f87p-10
0x1.0f8045a313158p26
0x1.fe8cd64528951p-16
-0x1.51c184460cfafp-26
-0x1.74b0f442763c7p20
-0x1.d30da53c93e10p18
0x1.749735f182597p15
0x1.253da08c9c318p144
-0x1.2714417156ae3p693
-0x1.189320570f30bp26
-0x1.a2e120ac12626p756
0x1.ce724582eabcfp-24
0x1.30dcf0414c561p292
-0x1.1a1790d8a72d1p452
0x1.3242254b631b3p-26
-0x1.b5890305f1b78p11
0x1.019a86d2e2300p18
0x1.0e9cc39a3bff8p-14
0x1.bc8ff7e59e82ep18
-0x1.235a45afa3842p25
0x1.0b2c87979b28cp23
0x1.c717951ecf869p-9
0x1.daff104bb08a5p25
-0x1.b14b119b47d4ep5
0x1.6e8a94f758a02p802
0x1.7788055510c4dp23
0x1.6120d7e4e5d9ep498
0x1.1154e15c2c284p-24
0x1.eb28429726661p423
-0x1.b9faa23669003p9
-0x1.a615746664b00p339
-0x1.835384e92d59cp56
0x1.1fb4b0fe36aacp-3
-0x1.e440c3183f046p-19
-0x1.1e714012cae50p22
-0x1.1821b0014d9cep-16
-0x1.5de4c1e0a1bfep-24
-0x1.c1e5c78840e91p25
0x1.f0b1d4cd82236p18
-0x1.450ff3ad26e5bp984
0x1.23438314fb10bp0
-0x1.82be43e413126p14
-0x1.5c70206fd22f7p628
0x1.7e213160ec541p-15
0x1.5487358228cedp-14
0x1.4a163440f7c98p4
0x1.ad443265c6b4ap845
-0x1.732c509382338p-2
0x1.929ba224e2240p-17
0x1.a026b0485c0e8p12
-0x1.fa4e77f1b2343p-12
-0x1.3a2ac1c73ae50p5
0x1.0c4a80d41a2f7p-20
-0x1.1c57b37023dcep150
-0x1.2c1b509030e5dp26
-0x1.c7cdd089827cdp-26
0x1.3d88b121650aap8
-0x1.1583f2a9d2d5dp618
0x1.295d65809666fp111
-0x1.3dc8c1a73f146p-3
-0x1.4dc715a6ae290p999
-0x1.3808360307701p464
-0x1.adf4158880f7bp2
-0x1.3913104f0eea6p-16
0x1.8c91558dbd886p-2
-0x1.d67f73ef2736ap11
0x1.218c0592aa7fcp95
0x1.4c1e32e79005dp7
0x1.395461c5f96a6p5
-0x1.a311a7fbb5afap-12
0x1.f07b95fd415ccp9
-0x1.08745233a4ce8p-13
0x1.38f122e7f7be0p220
0x1.8c9c967e8e99ap-5
-0x1.3353e4fc6b002p987
0x1.945a20aa092e2p4
0x1.a7a935f93958ap22
-0x1.946865aa1c43cp-20
0x1.001d955d8a436p344
-0x1.5146c4a1225eep-22
0x1.ffab14f637eaap733
-0x1.3d50819d9de92p-8
0x1.84a7b4b80f227p4
0x1.73af93193478dp-6
0x1.3ac9b75c613bdp160
0x1.dafd9764a705fp13
0x1.91bc310a7648ep243
-0x1.531fa4a4bac3ap713
0x1.95c32605e6c59p20
-0x1.012141d71b636p-2
-0x1.eb4540a49b927p20
0x1.9c4716594b306p-24
-0x1.242df1aa8bf7ep642
-0x1.2d1fc7cf19d2ap-27
0x1.161fd6fd320d5p745
-0x1.3aaa34f975620p811
0x1.9e11325b1c3c4p22
-0x1.a838b07a6641ap5
0x1.8b1a0407ae636p7
-0x1.eb717004808e1p469
-0x1.d166757807df4p-6
0x1.2a57014d8c24bp317
-0x1.5ea093bc15910p468
-0x1.2545b7ec8b35fp-3
-0x1.e47ca00d1f14ep929
0x1.af09542db1b29p-18
-0x1.8d4bc4f005536p6
-0x1.8d564435d4d3fp-9
0x1.993a6363227e2p12
0x1.bec162f84a16cp13
0x1.f0a22293c4ecbp852
0x1.9eb0b40303dcap843
-0x1.0cdae1dc93ed0p22
0x1.21efa25110e19p12
-0x1.cf1531a43c397p144
-0x1.a043f6a911bdep-16
0x1.816c4063e718ap-15
0x1.e23b95950e47dp-21
0x1.a0830483382afp2
-0x1.52e49239a95d4p957
0x1.f73a3049f9d76p16
-0x1.1304063a4fbe5p316
0x1.f5b95104bb64dp320
0x1.661d765a50087p13
0x1.7bb5671e2bfcap719
0x1.3e14e736580b3p-20
-0x1.11340035e5609p-25
0x1.c4d527df0d553p762
-0x1.731bc7cf3026ap7
-0x1.079c1776f403fp965
0x1.e6879000598aep-28
-0x1.d3bee1e831937p25
0x1.c3b5f0096df0dp24
0x1.667d70b10ce7ep-6
0x1.c780d2406b7d1p-26
-0x1.df8fd3fe95d12p27
0x1.89494217ed887p204
-0x1.ea94d70c825d3p764
-0x1.04366739a80cbp11
0x1.75f1269063e4dp5
0x1.0a46e3262c2b8p20
-0x1.92c337d25b414p-4
0x1.5c2cb3414299cp154
0x1.07f7c34023735p881
0x1.c64b8297569c4p207
0x1.13f4d3bbd6417p8
0x1.bde9c42ffd9ecp-15
0x1.9e07054aa7309p743
-0x1.dd8c11c0073a4p-16
-0x1.e04d9283ac8d4p20
-0x1.c0f2e29b30840p10
0x1.55a4c648ebcc2p378
-0x1.7b0c92c6d8687p658
-0x1.ed8bb5ef46109p24
0x1.5cc2904baa4d2p-18
-0x1.b688c6944fa1dp-3
-0x1.2330768204f78p754
0x1.650441a7059bdp554
-0x1.0d1c66b57d36bp493
-0x1.54e35714807acp368
-0x1.6165d7bebf894p776
0x1.7e0ba7c987b9ep7
0x1.d139574e3913ep168
-0x1.40cc4145ea64ep19
0x1.0db7e5339af44p-8
-0x1.87410240fe22cp-9
-0x1.d0f46605d4a27p18
0x1.d1e8b19cca04dp-19
0x1.979981827668ap-21
0x1.2576745f4cca6p22
-0x1.1f02e2c0c288dp14
-0x1.77bab17202acap-13
0x1.25c5071d2dc6ep8
-0x1.306185b351fdap26
-0x1.ad6e853661ee0p587
0x1.f389b34d6b10fp-13
0x1.08fa931bd21f5p10
-0x1.b65bf00b921e8p-24
-0x1.cbb5f173385aep82
0x1.a32cd47340669p2
-0x1.a83fd05f605e6p-25
0x1.8184a3fcc1ac3p942
0x1.61c9644526617p809
0x1.b12c01289b0c4p15
-0x1.16a4a50f1192bp-17
-0x1.5658b26bd2888p-9
-0x1.8c5563528e33bp-14
-0x1.fd7e32bd8a9adp-23
-0x1.1106a6a425747p-18
0x1.98109155dd7bfp21
0x1.dbd635362ec6bp6
0x1.4a1600b2e95dbp880
-0x1.2fd6819d3d81cp361
-0x1.28f5b629029b5p12
0x1.64c6a3d5a0867p304
0x1.97ae606371057p22
-0x1.d61a76409f8f9p-25
0x1.a4c67223582ffp-27
0x1.b569919b79b6fp214
0x1.1bf0416ef51a4p-28
-0x1.1b9502079e873p-25
-0x1.a94006dd19303p355
-0x1.78bd67abffa91p20
0x1.96d320a0153bap383
0x1.f82770adf361dp19
0x1.ee0725a2dbe84p-28
0x1.93d4c19692fbfp80
0x1.d69c251aa0003p-3
-0x1.36c310f2a5894p-26
-0x1.7bbce527b5784p19
0x1.5a90f2032fb5ap-14
-0x1.194fe079c05eep1002
0x1.2e9a406645b9bp609
-0x1.c566e4a419660p-14
0x1.f917868895288p872
0x1.a966a17972ca9p601
-0x1.6d5eb4970b882p-20
0x1.c1a0d0ee96f75p27
0x1.958fd1185d839p-24
-0x1.c738b5fffeeb2p4
0x1.91bf33cdb6804p710
-0x1.66e0a7e4034dbp224
-0x1.dd6e42f5992c4p667
-0x1.6e17000848200p951
-0x1.f625958e05264p-1
-0x1.63e025fbcdcacp442
0x1.c5fb927d2cb09p8
-0x1.d7e514672b2ddp987
0x1.0eec25d2a59ccp27
0x1.342f35eabf622p707
-0x1.6ffad140301c8p609
-0x1.5b10b0ca4ea9dp-21
+5 -805
View File
@@ -1,809 +1,9 @@
## args: double
## ret: double
## includes: math.h
0x1.642175414a222p-3
0x1.32f96343ff094p47
0x1.63961340f55e3p-4
-0x1.404c80c42d2d7p3
0x1.ff0297a7f4cf9p-4
-0x1.3514d0a630343p2
-0x1.9cd792d24de9cp-13
0x1.48de0536fa639p-26
0x1.df679233e616cp3
-0x1.3672036e3b5dbp46
-0x1.a6af31fe26a67p1
-0x1.601447d82000cp-23
0x1.6978a3d8cdd0cp34
-0x1.bcf7074f6ad00p-20
0x1.4560113d34322p1
-0x1.88e3f71039a4bp-4
0x1.016652052d70ep6
0x1.4eeee5387c40fp-11
0x1.1a93e2edc9a70p-1
0x1.2a86a6b000b1bp19
0x1.b550a52791570p19
0x1.4f55e0fd66533p6
0x1.179893d68a175p0
0x1.c587a48440d49p18
0x1.c4d736b34755ep41
-0x1.0b00d1e309baap15
0x1.d3ddd7a4105b8p-17
0x1.907795ee90c71p1
0x1.1c0ee51bf3fbbp-26
0x1.6e21857f657b5p-3
0x1.522870681be34p0
-0x1.47fc357b48019p2
-0x1.fc80d2478d003p44
0x1.6b6af109c6d11p-2
-0x1.557b744e3f2b2p-2
-0x1.c0bd72f9dcc6fp-3
-0x1.5dad543b37a02p2
-0x1.d95b35b36eadep38
0x1.645042fa42207p-2
-0x1.139444200b144p1
-0x1.28a691f56455fp-24
0x1.d97ff36594800p-2
-0x1.c46e817205691p-1
0x1.189121c162006p-21
0x1.b22526da1b4b3p-25
0x1.89097738a1f84p23
-0x1.3de8b3a71241ep-4
0x1.d539d73aa3a6bp4
0x1.9f3aa3d8be109p-8
-0x1.28df31604ae5fp-2
-0x1.a5ba03c7f21c6p39
-0x1.0aa65539c9639p44
-0x1.596756edc8d29p-1
0x1.bf89523d6d9a8p18
0x1.245712c9030a1p-9
-0x1.e70de078fe520p-3
0x1.0a6a653edc9c8p-1
0x1.cc69116b071cdp-2
0x1.2f24c0cf8fcb2p-16
0x1.ed2ac30efc4e7p41
-0x1.db4970624d850p-4
-0x1.bb1260bff835cp-4
0x1.d685f1157cf4ap-4
-0x1.27241256d29b8p1
0x1.ec5380eff6d2ap-3
-0x1.fd7d8132290bep-1
0x1.228426a24d54dp-17
0x1.2ea847880a2cdp39
-0x1.89a5c5d485ab4p3
-0x1.fbd930c90d22cp3
-0x1.86674787bedeap3
0x1.ab27809f97987p1
0x1.c17c653258848p2
0x1.a3f615b4aa2afp-4
-0x1.e8bff4a769203p46
0x1.2fbb90ef75a25p-4
0x1.d9d246c3e5da7p10
0x1.1adf65737ce63p2
-0x1.4bbf56383d2c4p-20
0x1.1bc9009943672p2
-0x1.84cd8442450bcp24
-0x1.05cbc2307bc60p0
0x1.b18fc1de83969p-2
-0x1.a63bf1a32c82cp-26
0x1.08e7e57369c93p4
0x1.97e8f20d0a9f8p33
0x1.1358340c23f9dp-13
-0x1.f3a987156a953p-15
0x1.cc4fe36fcebc5p-3
0x1.d858d5bee5222p-2
0x1.8911076ba1dfep-5
0x1.5ab4754566467p1
0x1.854547561eabbp1
-0x1.830ce306fc8c4p-13
0x1.b181a4ed4c25ep-19
0x1.f77112499c880p30
-0x1.5124040e757ddp43
0x1.751c061e72f3dp-1
0x1.b88d87c4c86b2p-8
0x1.52c5b76c6ef89p-10
0x1.e89130ee99ce5p-4
0x1.2a2ed7a0b1956p-1
-0x1.47b533d254eb8p3
0x1.b4d0b69a8f4a8p-24
0x1.8316a4af1bf68p-18
-0x1.9e1ef1ccdd020p15
-0x1.88bde5f29b2d9p3
-0x1.365034bff4761p0
0x1.7e40940c2d5adp-17
-0x1.2c37625bfd76dp-18
0x1.707642d37610fp0
-0x1.afd1d0135cf31p3
-0x1.4b0d1755bbf42p-11
0x1.c4ed75b07c727p0
-0x1.5e2db71616c7ap1
0x1.050223b1cd624p3
-0x1.3b3db4aa80820p-10
0x1.5ccb8047d5d1ap12
0x1.175282b52f29cp0
0x1.aabc424c47eafp9
-0x1.1a90445a04e18p0
0x1.3da941dc72acdp2
0x1.501726cf3e259p-12
-0x1.1b3006e74e325p4
-0x1.ad42977bf9a2bp-1
0x1.73d0e25d9335ap-3
0x1.0a514560b1915p-4
0x1.9b955619c595bp-3
0x1.c1bde2d25803bp-2
-0x1.c9c450db85015p-24
-0x1.b93f27a390fc9p-3
0x1.394074cfa62d3p1
0x1.815072f52a2e6p0
0x1.1e52d6ee6069fp-1
0x1.1f90737198ea5p-19
0x1.13341218923f7p-23
0x1.348b0774c87ffp2
0x1.d2580731da42cp2
0x1.87b5a06e57762p-5
0x1.b40fd58aea62ap0
0x1.9cd365175d628p28
-0x1.4094703aac68bp-24
0x1.56af03795574fp21
-0x1.e189800006571p-26
-0x1.9dfb51f7b789cp47
0x1.9bc2e73963ca7p11
0x1.b5a1c0632322cp0
0x1.205e5539779c2p51
-0x1.6c47a5b0217f6p2
0x1.791cd37782384p-2
0x1.231d31372c140p1
0x1.91e2d31efbcaap-3
0x1.34fa969626571p30
-0x1.6bc04360963b5p-11
0x1.8add0065da1d5p-4
-0x1.d346e1877a7fdp-2
-0x1.725697ff5c03dp1
0x1.a8e2a686fd172p-1
-0x1.8bd725c48f410p3
-0x1.3b0537b22c0bbp-1
-0x1.2c0db2781aad0p28
0x1.4c6a110727b7fp-16
0x1.b8d171996cbe1p0
0x1.e6c6d70c497a0p19
-0x1.15a9f10771286p2
-0x1.c30f24893d7a3p-3
-0x1.d73aa26a08a23p38
-0x1.58b7549a93d13p-4
0x1.169012651035fp1
0x1.197ee4c04ae17p25
0x1.3fba00276eae3p1
0x1.941d03c4bf6a6p-4
0x1.7f21c64e2abb7p-2
0x1.7581d56332d79p0
0x1.971980a7e2435p27
-0x1.e44690996dde4p-8
-0x1.3133113da7775p-20
0x1.31d201884c815p30
0x1.1f46672b184b2p-20
-0x1.bbbc31b0259d6p7
-0x1.ff6f625bf7eadp-1
-0x1.3dd6a5e841573p-1
-0x1.294b2242985c5p-5
0x1.80c6d17d3b82ep41
0x1.66a703915eafdp-4
0x1.c16431985801dp28
-0x1.66cc363cc169cp-13
-0x1.445ac6d7de615p29
-0x1.78d803eac6a4fp-17
0x1.7d17f2f5981bdp-4
-0x1.be3452bcdc974p28
0x1.83dff4dfc4757p42
0x1.451781735f844p14
-0x1.4dab41db1c970p3
0x1.3373037f37040p2
0x1.20f7623057a1cp-4
0x1.b74c37f7006cfp36
0x1.6d17f13894ea6p-8
-0x1.9084f58ffff58p1
-0x1.c57ef7f9833e1p-3
-0x1.943ce31bfd282p-26
-0x1.75a42576fe1cdp1
0x1.ff0257a993250p2
-0x1.63ef308e427d4p0
0x1.de26003f5ba7ep16
0x1.15333549fa76fp29
0x1.66bfb50c269e7p0
0x1.a49604cc4d7f9p-4
-0x1.15003315471d9p-4
-0x1.38bed20a51ff5p-9
0x1.7d97f5b7805ddp-19
-0x1.7a3244a0e1b3ep-2
0x1.ed0681d4ee226p50
-0x1.15a691a22afc6p-4
-0x1.d2c15149a171cp48
-0x1.d395408686509p1
0x1.d121d5a063487p-27
-0x1.159dc08e6bae4p-18
0x1.835914ed4ac69p46
-0x1.f45bc1593e631p-2
-0x1.abaf42742e1aep0
0x1.f67cc57a82279p22
-0x1.3cdc56ba8ad80p0
-0x1.5a8f042e5c06dp-4
0x1.306774727b9c8p-5
-0x1.0f21118d78a86p1
-0x1.abbcc62ae1185p-17
-0x1.ff75940794858p3
-0x1.6048b6174f2dap-3
-0x1.84f4968e9a1a0p3
-0x1.ecc9025c45c61p-9
0x1.d9cd03dc0d910p-18
0x1.cd846319c00c5p-3
0x1.6366066bd94a6p3
-0x1.8ebc74865b7b3p1
-0x1.b87c63e47576cp-3
0x1.c45cb0d4685f5p-3
-0x1.e702b4a6029fcp35
0x1.fc6300b9b675ap3
-0x1.3f43a795e244ep0
-0x1.f1cd009ef1604p3
-0x1.d2fbd2cc79418p11
0x1.907fd4f15d9d3p-10
0x1.a371220d3cd1ep43
0x1.df8544d34e26dp26
0x1.acb3279e8da17p-18
0x1.b1ea21e59afd9p-4
-0x1.e0dff1828b454p-4
0x1.ef38b267b4663p39
-0x1.baba241cd2232p-13
0x1.4fe7c7cd05a69p46
-0x1.988073a34d2c8p29
0x1.7599e0ac9a522p-8
0x1.251b26c85badap52
-0x1.a27c560a7da35p0
-0x1.f091c7c2304a2p17
-0x1.d0e1114b97abfp-13
0x1.33ee35cf8c72ap1
-0x1.e714e1fed73c4p-2
0x1.1292e4e843885p-3
-0x1.03fcc540c9867p22
0x1.a53c8268c5213p-2
-0x1.f16e3196353c0p-20
0x1.e88a97bf39b0cp14
0x1.4f00111aae17fp13
-0x1.388bf2c171982p-1
0x1.0f70b2319de14p-3
0x1.e95a75a9609e3p-1
-0x1.1047552b4d153p2
0x1.091e73082965cp0
0x1.2560a7de1090ep-26
0x1.b7fde3097d182p-20
0x1.c7f115eabfdedp-4
-0x1.e99523e282a43p40
-0x1.960706b024814p-3
0x1.6ca4d098808a9p41
-0x1.782a50dd85179p50
-0x1.26e3c42a5f2d2p1
0x1.ca282036f2b8cp-10
0x1.87d031409e3e4p-17
0x1.a80f97461a0f4p-3
0x1.66ed5379b1601p45
-0x1.081bb51f6296ep21
-0x1.a51801c3b0ab4p-3
-0x1.f9af91b1e0eacp-4
0x1.f59650108c48fp1
0x1.085c309bbe310p0
-0x1.b9fea5e346036p1
-0x1.453542b905ad4p24
-0x1.e66c14b55c117p1
-0x1.90a6830407ac7p40
0x1.9bc93234caf93p26
0x1.4b94104f5f41ap-3
-0x1.c7b564e75a382p50
-0x1.c2b250afb59e8p13
-0x1.bfb283faeefbfp2
-0x1.173235dbdbca5p-10
-0x1.ac62c7b5e878bp-4
-0x1.c2a9461c28ecdp-17
0x1.1e1bf4bfee9b2p1
-0x1.c6a1a78876ab6p0
-0x1.e6fb5111565c8p3
-0x1.8932b58866bcfp-19
0x1.6407a070f3a3fp12
0x1.87a1b1adaed03p-4
0x1.e5ebf4ac465b1p-4
-0x1.f8d5e0b5c2957p20
0x1.42836589a8c0dp31
-0x1.d1ad755010ed1p-4
0x1.3d1f16896735ep-1
0x1.fdaba0fd40c7cp31
0x1.3311135efe06dp-3
0x1.b5dc02c3070d2p-2
-0x1.04d741eec5058p-23
0x1.a80bc579c9a9bp3
0x1.4766230792559p1
-0x1.a5cbe4d7cc609p-3
-0x1.ba1d23d80c32fp-11
-0x1.daaf8434d9034p-13
-0x1.c65d358dac3fep-11
-0x1.3f4da10042b42p2
0x1.262fa4579b063p-7
0x1.914e60ffdbed8p-4
-0x1.efac261144868p-9
0x1.ce397251fa408p-4
0x1.be05d28ca250ap-11
-0x1.7479b7fa984ddp-3
-0x1.ac20c42062d2fp2
0x1.9a487118946dap-4
0x1.2a124744f9fa4p47
0x1.b1981261f9020p-1
0x1.fbf7179ce5846p-2
0x1.22fbd75358604p-23
0x1.b1b2a4bcce5acp34
0x1.84e62689c678dp-19
-0x1.0b3bf5d136f5fp-25
0x1.f93ce18d93227p-15
0x1.bbd3b6a42bc58p-22
-0x1.47b315f8194ebp27
-0x1.827896462fb0cp-18
0x1.2947c23116c19p-2
0x1.3466e4652adedp1
-0x1.23c2a01c6daddp-11
-0x1.5831b4a29e94ep-2
0x1.4a7fb41fb32ccp-24
0x1.77544628d33f4p2
0x1.40a5220c05f84p43
-0x1.859503fac777cp-1
0x1.629111fdc02f9p49
0x1.f72960081155dp-24
0x1.100cb00f41850p0
-0x1.1280f391f830bp8
-0x1.2e93552200855p1
-0x1.4621063cd9ecdp-12
0x1.1c4111533addep-25
-0x1.569560309d6bbp-22
-0x1.7a8124168d622p3
0x1.17fba47954943p-4
0x1.0672546df1e40p-4
0x1.3157a7fbb3b2ap2
0x1.a82f370a40ce4p2
-0x1.a8fac6ce90f3cp1
0x1.0f28d09b57a07p0
0x1.da30a55a75636p2
-0x1.4a8a0783b2ccdp-3
-0x1.79e674173ab88p-1
0x1.c89b61641fceep31
-0x1.0f8107e6388fbp3
-0x1.f720f120f5f1fp-22
0x1.144b44598ac02p-4
-0x1.ceb152c076922p-3
-0x1.4b12e43d683a4p0
0x1.c0ae8156c4455p-3
0x1.85c10724ee68cp-3
0x1.3c4635592b9ffp-3
-0x1.d59892bee5390p-4
-0x1.cd1280ceab8c4p-3
0x1.b622b71aa922bp8
-0x1.2795c18e21649p-15
-0x1.639d32c619c4bp-19
-0x1.e8f917ef054dfp-8
0x1.c9eca4e44a7b1p1
0x1.be86276e10fa9p3
0x1.750cd40dd63b8p-24
-0x1.033ab125bb64ep-18
-0x1.9679b2912fcecp-4
0x1.f7b3a1afd048dp-23
-0x1.9f2863bcb1fd6p1
0x1.c7fed1051dcb2p4
0x1.c23ec470a9239p-7
-0x1.1e5006f62ba49p1
-0x1.0d9f216fea290p3
0x1.bd8340ad169bap46
0x1.dac8831aa29d9p3
0x1.7c191598763c2p1
-0x1.121aa313ac95bp33
-0x1.b0996534e93cep-2
-0x1.6c8353699c9c6p-1
-0x1.5df8208f06792p3
-0x1.4657113ffa73fp28
0x1.48a901159abe7p0
0x1.70e4b3448f927p50
-0x1.e120d621edccap-4
-0x1.4f2900d44caa5p1
-0x1.848165627b209p-5
-0x1.4cd082b565a11p-16
-0x1.d9d2d7967af18p-1
-0x1.222be1230bd8dp0
-0x1.361e6586e20d9p16
-0x1.3ddd364c29946p-19
0x1.3ee601f53dafap-18
0x1.e37ab68eb3013p45
-0x1.0b8a978bd97b9p2
-0x1.9589707e8a6ddp-20
0x1.b7ca368b81375p-4
0x1.2a7b114a80983p0
-0x1.8c0fd1048891ep-4
0x1.c32454b620d43p-26
0x1.853192a0e3bbbp-14
0x1.172b96d182f82p-2
0x1.4156741896c30p-3
-0x1.dd08573a1dc08p-3
-0x1.f112f2dfd0c38p23
0x1.f07ef18d186acp-9
0x1.b0b643dc8187bp-2
0x1.edf9044a400ccp-26
-0x1.420ee09a253bbp-16
-0x1.ce5f43fa6c0e8p0
-0x1.b49ed6fe33c01p-2
0x1.bc1e67b736d93p27
0x1.18f252a5a70f2p-1
0x1.3bd3528a6b5c3p-25
0x1.042f039297e45p0
0x1.890e26c77777ap2
0x1.ec331761880b9p39
-0x1.12aec65364402p2
-0x1.b09600801c6c9p7
0x1.4c14331304537p36
-0x1.366b32ae15936p-9
-0x1.d04011bd2f923p-27
-0x1.bb73e632734cap51
-0x1.22df928d0db2bp14
-0x1.84d2c65e8a597p-4
-0x1.248ce4d82f9e1p-3
-0x1.a89a16ab8fc98p41
-0x1.22061604a7bbep-1
-0x1.9b7790ad6cfcap37
0x1.e146126a58363p-20
0x1.8bf9d0bee4587p-6
-0x1.74eec1eb48a38p18
-0x1.1eca65e42c0e2p-24
-0x1.5f6e27219b443p5
-0x1.95f64657f34b0p1
-0x1.ad0923f0c8747p-14
-0x1.71b7472c93381p2
-0x1.e88ec0fa2b8e2p40
0x1.0efad07b1325cp-2
-0x1.d614b725644c2p-11
-0x1.87f104d664989p-4
0x1.db8bf75a3dabcp25
0x1.18a07441e9358p-3
0x1.c52552071ba9dp2
0x1.4eee532e1cf42p-2
-0x1.acd7a7d0cb2d2p49
-0x1.efdbb63ba4cd9p3
-0x1.c0dbd4011e3dbp14
0x1.a8b9053cd4ae7p-26
0x1.950f208f9f314p-3
0x1.62bc1534e8779p1
0x1.ec8712224e21dp5
-0x1.dcf2f55094df3p-4
-0x1.13a10025de14cp1
-0x1.275ce549521b9p-1
-0x1.2d3995ba1b17bp-5
-0x1.a76630717c0c6p3
-0x1.b2ec655611d3ep38
-0x1.9bd4a62004f97p-20
-0x1.49dcb6df53770p1
-0x1.2b34c0811030cp-3
0x1.99ee70ec910aap-21
0x1.35b201aa1e70bp-3
-0x1.92a3000ee8dd4p-2
-0x1.d69d60b48249fp3
0x1.eee73555cf4d5p-3
-0x1.07de748dacd3ap12
-0x1.a8ea7383f8f09p8
-0x1.eca3120c1f7cep1
-0x1.8b4b26d9f4eabp51
0x1.167433f50737ep-23
0x1.585657c46c25ap-20
0x1.0e0447b473e54p2
0x1.b28d209b03f59p-4
0x1.9a8d34b2b2855p-25
0x1.948ac6afc0f37p3
-0x1.563cf374c073fp-4
0x1.fa49e687bce32p42
0x1.c42c2624133c2p48
-0x1.001e573a69113p2
-0x1.4dfb17453411bp-3
-0x1.d9b9b553ab45fp23
0x1.55496452db316p3
-0x1.8420d7f1ac33ep3
-0x1.ac7cd42b0f63ep2
0x1.ce2970c35394cp2
-0x1.de2ce25feb1e3p-16
0x1.4fe2152fd9407p-2
0x1.4d4233d0400d2p1
0x1.f4c640fdd48b2p-10
0x1.1512c1316465ap37
0x1.b584b29dc1d4bp22
-0x1.695e973f8db94p-1
0x1.7373d677b7679p24
0x1.f899a57b746b9p-22
-0x1.f5ad761b38217p0
0x1.daf950a02a029p1
0x1.a9c47461369bcp-7
0x1.a66902e961fe5p-2
-0x1.f6bc5292eadcep2
-0x1.0377673b5656cp20
-0x1.269297562701dp-4
0x1.13d1e1e922a15p3
-0x1.ddf1d5cfbfb4dp-20
0x1.6c21328fa2eacp0
0x1.953fe3186fbacp0
-0x1.2ed5d49aee19cp-15
-0x1.d3e9f10d61fa8p-4
0x1.5315517278bffp-4
-0x1.aeeb36df95b57p26
0x1.9f55b3bd1d398p2
0x1.894151536709bp3
-0x1.93a3d5c645e3fp22
-0x1.37803538f3548p43
-0x1.d5dde10bc588fp-23
0x1.f145117569f10p4
-0x1.ca23009d83541p0
-0x1.fc4063d4a4afep23
-0x1.ec88c7edb5ae2p-6
-0x1.2d5973fcaa823p-21
0x1.437a141589287p2
-0x1.9104e694ef44ap-2
-0x1.b70572032d576p-7
0x1.d10452e3eae69p2
0x1.2874b443d01bcp0
0x1.fa66d12189a72p20
-0x1.303e443c556d3p46
0x1.4b5d557e8fe56p44
0x1.602bb4e791b87p-20
-0x1.158f81cbcb150p-3
-0x1.36a3939175212p3
-0x1.826092fe525c4p-19
-0x1.a72da4879bcb1p-26
0x1.839626b74c51ap-1
-0x1.bd2da6527d628p5
0x1.3257e0dc99c46p-23
-0x1.b3ebe0c2317c6p3
0x1.1164968b6d3d2p-4
0x1.bd5404092a649p30
-0x1.dd0e00246fdf1p-3
-0x1.4167e56920aa2p6
-0x1.b035570fa59c8p-1
0x1.7853f4cf90bbcp15
0x1.bc20a74a4c2dbp-18
0x1.0e3ee3d24bf54p3
-0x1.95aab56378e9cp45
-0x1.4930a7aa51e8dp1
0x1.ea77407c9a5f1p-1
0x1.4fac93644de62p-3
0x1.a2ed87cc0f417p43
0x1.14d2d0a33df56p2
-0x1.3473f6f77b6c5p11
0x1.b647101dc4177p3
-0x1.4e0b92acc66bfp23
0x1.2a3797d36ee30p-4
0x1.ce10973c013ebp-14
0x1.b6cef57406772p2
-0x1.326762c9ea656p-22
0x1.56473079b28aap24
-0x1.46f3d42d9a8dap-11
-0x1.6d4e52e373151p-7
0x1.622a0570fc4abp11
-0x1.7e0bb32e21466p-6
0x1.55a1a3d809d3ep1
-0x1.d7492480e11f5p32
0x1.835730d6b3ef6p-18
0x1.2d9cf79f070e8p-9
-0x1.6cee95c1d9445p26
0x1.45c58441f2822p-3
0x1.2f01d75200b30p21
-0x1.014c5172af434p0
0x1.9d96552d416d8p3
0x1.f878a3fc8f55fp-3
0x1.1206f1aa29231p1
0x1.998bc480cbf5dp-3
0x1.2160c0ab74e78p41
0x1.66cce4923857ap-6
-0x1.47bf27bfba3adp-3
-0x1.88b9442658583p-13
0x1.baf0076743831p2
-0x1.d7a664adbb965p-22
0x1.8bfbf37ef0c90p22
-0x1.a2b137086be2cp9
0x1.b8fa2667197acp29
0x1.2e9ee649d720ap-2
0x1.fd42f19ae5dfdp-15
0x1.b4c7c70a22018p38
0x1.6fee027ca714ap-18
0x1.b986a428fdeebp-9
-0x1.f63c6744cafc4p-7
-0x1.860b9508a01c2p-4
0x1.c9dbe26d13605p-7
-0x1.e5af65a0da055p-4
0x1.2f48357a95e60p-3
0x1.afac3209945f4p-11
0x1.e24230fc8430fp-1
0x1.555f1605043d9p40
-0x1.42c7b6d8c6b89p-4
0x1.f5e416fab1768p24
0x1.4379506da570ep10
-0x1.c38b2527d3a6ap0
-0x1.ecf007e1a6728p-3
0x1.636eb2220b2c2p-18
0x1.7609e702937b8p2
0x1.2db5d31780fa5p3
-0x1.221c240b15183p-3
0x1.084b249033af8p-19
-0x1.69c8f54230d4cp2
-0x1.5458a621ac511p0
0x1.c8b53281fbad0p-15
0x1.0c8ac2d6bf8cep-22
-0x1.28b804bea1e7fp3
0x1.919d64a75bf39p-9
0x1.4c0b078f754a4p-1
-0x1.dd7405983ab97p-20
0x1.ba2103a39b033p19
-0x1.b21fc106586d2p0
0x1.eacb558bbd5dap1
-0x1.058304cdc51f1p-2
-0x1.e530d67d5c413p15
0x1.9efc141496268p-21
0x1.9e43436405397p-2
0x1.d6c5d5f5dcc9fp-22
0x1.2f0540658e814p1
0x1.89ea31cb96062p1
0x1.c9d690079576dp-7
0x1.9b1ef5b23f047p-2
-0x1.c1e61429c45fbp43
0x1.248b34f22e7e1p-26
0x1.0dc2918fd3196p-15
0x1.a17a2260c8d58p18
-0x1.a088140ade389p19
0x1.8b92c2168e33fp40
0x1.69ab67a22bbbcp0
-0x1.343232b010a37p-17
-0x1.0c4932248f574p0
-0x1.2bdc378a38991p-2
0x1.2d563370110dap-12
0x1.a27134171f37dp-4
0x1.fa63324eb71a3p26
0x1.6f50c55b7950ep-21
-0x1.0486e73eca0d8p45
-0x1.fa20f7947f447p-3
0x1.0439c6fe1a62ep2
0x1.4e5d366349911p2
0x1.985933b0a27d6p-2
0x1.bf592781e0417p-4
0x1.bd39f070daca3p-4
0x1.0130b7296f20dp0
-0x1.299cc68ec2149p2
-0x1.6d9fc7a6e0946p0
0x1.b42110fb94ad0p31
0x1.b59970f83df8ep1
0x1.c4083529ddeb8p38
0x1.ac3bb44cafe59p1
0x1.6d66733b81b71p-11
0x1.20beb78f7ceeep-16
0x1.d285f704a02d5p-4
0x1.bf37a3dc305b1p37
-0x1.8852a20307706p1
0x1.8129a11b33c67p31
0x1.1b31565ac4d26p38
0x1.efe3d79df1a25p0
-0x1.df4fc61097087p34
-0x1.801e6310f70c4p1
0x1.de7fc178da718p1
0x1.82cd96b74c33bp-3
0x1.14ce177c73acbp2
-0x1.b8bfa6f20bf6cp-4
0x1.04ff06087395bp-9
-0x1.8327b171d58abp-4
-0x1.8cabe7b5327bap-3
-0x1.82c492035cf5bp24
-0x1.d85a267d87555p-24
-0x1.efdc44b7fb121p24
0x1.ea99c6cf2fd74p-17
0x1.3fb6671f607b1p1
0x1.97dce09249de2p-3
-0x1.9dc4f0331f52cp43
0x1.ea7d727d27334p41
-0x1.ec9d516a85c75p-25
-0x1.bb2176abaedd1p-3
-0x1.71eeb273dd3adp-15
-0x1.7be385146ccdep25
0x1.c1f987ad8af62p-6
0x1.2159279f1c89ap2
-0x1.4805b43babc89p-17
-0x1.c16834d0d845ap-20
0x1.c52f537caeb0ep10
0x1.14d5e5a6c66f8p52
0x1.2f929423ad32fp0
0x1.e9ce62b513428p-4
-0x1.8a14f3724eb37p32
0x1.64013151734fdp3
-0x1.9090f39f49889p23
0x1.be6b47a137a52p-12
0x1.59a42749fd7c3p1
0x1.8603f544b0976p-15
-0x1.4d2ba3dfaeb93p-2
-0x1.7d770619d5bc3p12
0x1.edfb87aaee9b1p1
-0x1.f23d94e870be7p-4
-0x1.21500514f25d3p41
0x1.cb8712f937eedp-15
0x1.fb47c7a69d8a4p-24
0x1.f1c904cd2e471p-12
-0x1.31e6e3b7073f8p0
-0x1.facd32a72c5a8p2
-0x1.9823a41a9780ap-3
0x1.3db1f5e2a9a51p51
0x1.6344057f1cca6p-1
-0x1.8be6128041ebfp-13
0x1.6f07c272d7fe9p38
-0x1.fd48060bf89bfp-5
-0x1.82eb1727ca16ep-2
0x1.26e0a24f2ec11p-18
-0x1.74a1c0cb9d677p-14
-0x1.bb0c36f1bb121p0
-0x1.56a4873461187p1
-0x1.d01e65e325d8dp2
-0x1.5250308bc28a5p36
-0x1.83c6f31f2de0fp-24
-0x1.41ae76e29ab40p1
-0x1.d738a56bac094p1
0x1.1a5247926ba82p-14
0x1.d703938b24ac4p-22
-0x1.cc5566621df4fp-4
-0x1.4144e3f175873p-4
0x1.a41e208bd59c2p-4
-0x1.8588a53e4e022p8
0x1.cf4331e97df52p-27
-0x1.d70843f5b2a7bp-8
-0x1.b1a912cdf744ep-3
0x1.ad44072bba2efp-15
-0x1.735cf794885b0p25
-0x1.94d98257a7443p-4
-0x1.61dac14e8c1f2p1
0x1.f71585bdc20e7p-20
-0x1.3338f2e1ebed7p-2
-0x1.044ab29dd3fd8p-1
0x1.b230868e79405p-25
0x1.c3539439a1ce3p15
-0x1.2998d58d65498p-4
0x1.7273d75dd90f5p0
-0x1.6214d3e6a209fp32
-0x1.3b2aa66ea6fd8p-3
-0x1.6cc910ca7817ap-4
-0x1.1194f4be56f5bp28
-0x1.6dc3114d423c9p2
-0x1.b447e098a3c6fp18
-0x1.705865523468cp15
-0x1.8e6752f060479p38
-0x1.ebe665ab9b23ap3
0x1.df6ee1073afd0p32
-0x1.35ce11e0f4a42p5
0x1.7c26f0a48edd9p-3
0x1.af1996c678e0dp28
0x1.c4ea4704b4de2p2
0x1.697b37d6b070dp19
0x1.49fa574ba1eccp52
-0x1.695ee7cc1ce8ep48
-0x1.169c757dd823dp-23
0x1.207273ac379a1p-4
0x1.7c2dc5c85d916p23
0x1.fe02e67c4ccbfp-24
0x1.accc401e13286p49
-0x1.af3426c709c78p-18
-0x1.ab2ca07faba33p-4
0x1.aeaaf4f90a9c1p-4
-0x1.84f781f4efe2cp-9
-0x1.d885871aa2240p-9
-0x1.a618720ac58c4p-22
-0x1.9b995257a7ee5p-6
-0x1.f68b46a30839ep-18
0x1.e1443653f9257p3
0x1.ce1a94d5c772cp-22
0x1.b24255d0a3ce2p38
0x1.2eaa6690d786ep2
0x1.b5bb45a608da6p0
-0x1.ead7509b0d69ep26
0x1.86fa30e0b406ep3
-0x1.acd451c3cb8b6p49
# atan slow path with 144bit precision
0x1.000000c5cba86p0
0x1.000001883003ap0
0x1.00000dfb2b674p0
# atan slowest path at 768 bits
# Implemented in sysdeps/ieee754/dbl-64/mpatan.c
## name: 144bits
## name: 768bits
0x1.000000c5cba87p0
0x1.000001883003bp0
0x1.00000dfb2b675p0
-203
View File
@@ -1,203 +0,0 @@
## args: double
## ret: double
## includes: math.h
0x1.5a2730bacd94ap-1
-0x1.b57eb40fc048ep-21
-0x1.c0b185fb450e2p-17
-0x1.bd6e1642bb727p-1
-0x1.4cfdd35756bc5p-10
0x1.aadb5767b3ae4p-1
0x1.827ab42a1416dp-1
0x1.6d4e56dd0ff53p-14
0x1.667d8313f78d2p-1
0x1.672230c640ef3p-1
-0x1.35ec261f6be52p-19
0x1.9cf3279d8ff3ep-21
-0x1.a60896128036fp-1
0x1.ad5067d5aa573p-1
-0x1.8a4421ee0d23ap-1
0x1.aba153a252f9bp-14
-0x1.2498611880effp-1
-0x1.aa2c423f024dep-26
-0x1.43d972a3632b8p-1
0x1.12d690cf283ebp-25
-0x1.eec6a3a873b98p-1
-0x1.987b43a58457ap-21
0x1.96a646ec9ba90p-11
0x1.b961f358d8f43p-3
-0x1.51d594fababdep-1
-0x1.72a777e07e732p-8
-0x1.21fcd11e4d773p-1
-0x1.094ea21018a32p-1
-0x1.79ea722d33e33p-9
0x1.c63fc48261538p-5
0x1.b1c0b7e618a20p-3
-0x1.9957f1ba37225p-19
-0x1.ecc6037c6538ap-21
0x1.7e0bc46e556bcp-1
0x1.4e7cd59b97811p-22
-0x1.6b2773f7bf9c1p-27
0x1.db9e07d2c1d81p-1
0x1.293835cf8c06bp-1
0x1.f59e8473488f7p-1
0x1.094c253414b65p-22
-0x1.922cb3b58f124p-3
0x1.8a9b4773d8067p-1
0x1.59e1848e51b3fp-1
-0x1.77eb61d6b55b3p-1
0x1.63e245bf37393p-1
-0x1.8adb670e973d8p-1
-0x1.c34f8232a8efap-1
0x1.83f2e5bd4e680p-25
-0x1.6b8d336fb28b2p-1
-0x1.f50ce1076f808p-23
0x1.ceb5a49139809p-19
-0x1.3d0616e8d067dp-11
-0x1.5ff057a79950ap-1
0x1.263f96335fa00p-25
0x1.5d5fa0d6d5003p-9
-0x1.5070a3937a84bp-7
-0x1.299707cfa0a5ap-5
-0x1.64f623f5a4713p-3
0x1.2bc994ee38c37p-3
-0x1.e27d9435b978ap-1
0x1.8092d58d5c790p-21
-0x1.9c31372efb7c2p-25
-0x1.b3e4409bf591ap-11
-0x1.fc9e4603f0a42p-16
0x1.7d4f167842e1ep-1
0x1.d220d2dea0517p-25
-0x1.f327d6a043438p-9
0x1.0fbf54939b136p-16
-0x1.9d4c17b3aa3e3p-18
-0x1.6ab736c8be0aep-5
0x1.ecff81aec235cp-1
-0x1.102122d6bf984p-1
-0x1.44a7f0d39a7cbp-18
0x1.369d17b6b92d9p-1
0x1.2c1ec48113977p-1
0x1.b2a4a2cd6ddbfp-1
0x1.1aa8449c2cce7p-18
-0x1.2083e1015b457p-1
-0x1.1589761b30c7bp-1
0x1.e3c782bba8f90p-1
-0x1.e08b0317d404dp-1
0x1.290f1622d1939p-8
0x1.7edf2261fcf95p-1
-0x1.521241688012fp-2
-0x1.0307d4e8caa52p-18
-0x1.ccb366715602cp-1
-0x1.95aa45bfdf88bp-1
0x1.83b6d2241735cp-13
0x1.4977776659f91p-21
0x1.265e670e3a504p-1
0x1.857de2b5f1f7cp-1
-0x1.6e69d509bec68p-24
0x1.d4f0109417b1ap-1
0x1.9ab2842033f1fp-15
-0x1.17d9b0f3c22a2p-1
0x1.75a321c41a6b0p-1
0x1.53a5d3faa91ffp-1
-0x1.618c00bcdbb72p-1
0x1.e99bd19956904p-1
-0x1.89c34195ab10dp-21
-0x1.82b1234ed4accp-21
0x1.6b0486d8d09fbp-1
-0x1.4259822aefa37p-1
-0x1.ecfff733e7bb3p-2
-0x1.90eac37875516p-1
-0x1.ba38b666e3abap-6
0x1.1ebbb6284200ap-22
0x1.6c2ee1790a8b6p-1
-0x1.0c2d8105dd990p-1
-0x1.6d7264d3662ffp-1
-0x1.43fe90e13fc36p-4
0x1.46eb6152db91dp-10
0x1.e4e26333b349ep-4
-0x1.96ef543f5383cp-1
0x1.47dca56a5b223p-1
0x1.08ea668aed516p-4
0x1.ef8f3428ca661p-6
0x1.5b2b8480c515fp-10
-0x1.2762d191e5fa5p-1
0x1.508d56e0f5ca9p-1
-0x1.2f616558f0888p-24
0x1.0260d42d27c09p-11
-0x1.0988f69b99e16p-1
-0x1.d35697fcfb7b6p-14
0x1.ffaf01135dec7p-1
0x1.0afa01afd6afep-1
0x1.c7cbb635b5af3p-6
-0x1.23eb629a0abe4p-1
-0x1.b87e61aeac49bp-1
0x1.1646f4a28d191p-18
0x1.4cd3a045b9783p-1
-0x1.5c7a8599ffe9ap-14
-0x1.9457a34399b4ap-1
0x1.a154f6f6548e8p-1
0x1.ba8ad1105bb80p-6
0x1.af9176505fbeep-1
-0x1.430563677bff8p-8
0x1.a2a2d2a0778c3p-1
0x1.df4c731f44b97p-1
-0x1.d049e60c0ecd3p-23
-0x1.325e341d79998p-1
0x1.3da4954669e1fp-27
-0x1.88d501c9b4a1bp-8
0x1.f41c064c0c9bdp-1
-0x1.2e7715356184dp-16
-0x1.ab8a55eb84adfp-1
-0x1.b5e7918f752d5p-1
-0x1.c958c1faf2e05p-12
-0x1.0a0b95fda6377p-1
0x1.b05f4635c8e79p-1
0x1.a216642c8c3c6p-8
0x1.3049c686e99b7p-27
0x1.e5ea44ec320c1p-1
-0x1.884175facb7a0p-5
0x1.45aa62e647503p-13
-0x1.634bc7ff5c615p-1
0x1.b68125750b075p-9
-0x1.97abf0534746cp-15
0x1.f687e58a3b36ap-5
-0x1.1040e1ed1d1e7p-25
-0x1.6ba8e7fc4221fp-10
0x1.16e38001e0edbp-1
0x1.df2ad20740b3dp-26
-0x1.8e1172ae8c333p-1
-0x1.b22640bb7e540p-19
-0x1.fa5552ca0ed82p-13
-0x1.e8ad873f75a2dp-1
0x1.c91491a1a5938p-26
-0x1.4ec4473b27d56p-1
0x1.5f1862dba68cbp-1
-0x1.dce0e6290bc85p-1
0x1.fa68d22f5773bp-1
-0x1.919486a495542p-1
0x1.d303d564c000fp-1
-0x1.afff55716fe0bp-23
0x1.28b7d3631da7ap-16
0x1.9ca493208bbdep-1
-0x1.542a05a6b369fp-1
-0x1.f7e79460fc57ep-7
0x1.bb029019558b5p-15
0x1.bba002729f3d6p-1
0x1.1ada3533fa957p-1
-0x1.896d956b5743fp-21
-0x1.3a30147e08f69p-1
0x1.25644490a1259p-14
-0x1.4ef3744b5e468p-4
0x1.04dac7a84b2d7p-1
0x1.d46464683c4f8p-1
0x1.9c4674b85fc58p-9
-0x1.da6bd2cb0a530p-1
-0x1.eb2076f05f6f8p-1
0x1.4aeba21a72c73p-11
0x1.af7910337420fp-6
0x1.04ad609a3e62bp-1
0x1.eafe16a4433afp-1
0x1.1c65e51ff0cacp-1
-0x1.4eb61140c3e34p-1
-0x1.693d851f3cfeep-10
0x1.254d73366914dp-2
-0x1.ff34f15f5e3e6p-3
-20
View File
@@ -1,20 +0,0 @@
/* Measure bcopy functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_BCOPY
#include "bench-memmove.c"
-19
View File
@@ -1,19 +0,0 @@
/* Measure bzero functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_BZERO
#include "bench-memset.c"
-302
View File
@@ -1,302 +0,0 @@
/* Benchmark malloc and free functions.
Copyright (C) 2013-2017 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.
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 <math.h>
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include "bench-timing.h"
#include "json-lib.h"
/* Benchmark duration in seconds. */
#define BENCHMARK_DURATION 60
#define RAND_SEED 88
#ifndef NUM_THREADS
# define NUM_THREADS 1
#endif
/* Maximum memory that can be allocated at any one time is:
NUM_THREADS * WORKING_SET_SIZE * MAX_ALLOCATION_SIZE
However due to the distribution of the random block sizes
the typical amount allocated will be much smaller. */
#define WORKING_SET_SIZE 1024
#define MIN_ALLOCATION_SIZE 4
#define MAX_ALLOCATION_SIZE 32768
/* Get a random block size with an inverse square distribution. */
static unsigned int
get_block_size (unsigned int rand_data)
{
/* Inverse square. */
const float exponent = -2;
/* Minimum value of distribution. */
const float dist_min = MIN_ALLOCATION_SIZE;
/* Maximum value of distribution. */
const float dist_max = MAX_ALLOCATION_SIZE;
float min_pow = powf (dist_min, exponent + 1);
float max_pow = powf (dist_max, exponent + 1);
float r = (float) rand_data / RAND_MAX;
return (unsigned int) powf ((max_pow - min_pow) * r + min_pow,
1 / (exponent + 1));
}
#define NUM_BLOCK_SIZES 8000
#define NUM_OFFSETS ((WORKING_SET_SIZE) * 4)
static unsigned int random_block_sizes[NUM_BLOCK_SIZES];
static unsigned int random_offsets[NUM_OFFSETS];
static void
init_random_values (void)
{
for (size_t i = 0; i < NUM_BLOCK_SIZES; i++)
random_block_sizes[i] = get_block_size (rand ());
for (size_t i = 0; i < NUM_OFFSETS; i++)
random_offsets[i] = rand () % WORKING_SET_SIZE;
}
static unsigned int
get_random_block_size (unsigned int *state)
{
unsigned int idx = *state;
if (idx >= NUM_BLOCK_SIZES - 1)
idx = 0;
else
idx++;
*state = idx;
return random_block_sizes[idx];
}
static unsigned int
get_random_offset (unsigned int *state)
{
unsigned int idx = *state;
if (idx >= NUM_OFFSETS - 1)
idx = 0;
else
idx++;
*state = idx;
return random_offsets[idx];
}
static volatile bool timeout;
static void
alarm_handler (int signum)
{
timeout = true;
}
/* Allocate and free blocks in a random order. */
static size_t
malloc_benchmark_loop (void **ptr_arr)
{
unsigned int offset_state = 0, block_state = 0;
size_t iters = 0;
while (!timeout)
{
unsigned int next_idx = get_random_offset (&offset_state);
unsigned int next_block = get_random_block_size (&block_state);
free (ptr_arr[next_idx]);
ptr_arr[next_idx] = malloc (next_block);
iters++;
}
return iters;
}
struct thread_args
{
size_t iters;
void **working_set;
timing_t elapsed;
};
static void *
benchmark_thread (void *arg)
{
struct thread_args *args = (struct thread_args *) arg;
size_t iters;
void *thread_set = args->working_set;
timing_t start, stop;
TIMING_NOW (start);
iters = malloc_benchmark_loop (thread_set);
TIMING_NOW (stop);
TIMING_DIFF (args->elapsed, start, stop);
args->iters = iters;
return NULL;
}
static timing_t
do_benchmark (size_t num_threads, size_t *iters)
{
timing_t elapsed = 0;
if (num_threads == 1)
{
timing_t start, stop;
void *working_set[WORKING_SET_SIZE];
memset (working_set, 0, sizeof (working_set));
TIMING_NOW (start);
*iters = malloc_benchmark_loop (working_set);
TIMING_NOW (stop);
TIMING_DIFF (elapsed, start, stop);
}
else
{
struct thread_args args[num_threads];
void *working_set[num_threads][WORKING_SET_SIZE];
pthread_t threads[num_threads];
memset (working_set, 0, sizeof (working_set));
*iters = 0;
for (size_t i = 0; i < num_threads; i++)
{
args[i].working_set = working_set[i];
pthread_create(&threads[i], NULL, benchmark_thread, &args[i]);
}
for (size_t i = 0; i < num_threads; i++)
{
pthread_join(threads[i], NULL);
TIMING_ACCUM (elapsed, args[i].elapsed);
*iters += args[i].iters;
}
}
return elapsed;
}
static void usage(const char *name)
{
fprintf (stderr, "%s: <num_threads>\n", name);
exit (1);
}
int
main (int argc, char **argv)
{
timing_t cur;
size_t iters = 0, num_threads = 1;
unsigned long res;
json_ctx_t json_ctx;
double d_total_s, d_total_i;
struct sigaction act;
if (argc == 1)
num_threads = 1;
else if (argc == 2)
{
long ret;
errno = 0;
ret = strtol(argv[1], NULL, 10);
if (errno || ret == 0)
usage(argv[0]);
num_threads = ret;
}
else
usage(argv[0]);
init_random_values ();
json_init (&json_ctx, 0, stdout);
json_document_begin (&json_ctx);
json_attr_string (&json_ctx, "timing_type", TIMING_TYPE);
json_attr_object_begin (&json_ctx, "functions");
json_attr_object_begin (&json_ctx, "malloc");
json_attr_object_begin (&json_ctx, "");
TIMING_INIT (res);
(void) res;
memset (&act, 0, sizeof (act));
act.sa_handler = &alarm_handler;
sigaction (SIGALRM, &act, NULL);
alarm (BENCHMARK_DURATION);
cur = do_benchmark (num_threads, &iters);
struct rusage usage;
getrusage(RUSAGE_SELF, &usage);
d_total_s = cur;
d_total_i = iters;
json_attr_double (&json_ctx, "duration", d_total_s);
json_attr_double (&json_ctx, "iterations", d_total_i);
json_attr_double (&json_ctx, "time_per_iteration", d_total_s / d_total_i);
json_attr_double (&json_ctx, "max_rss", usage.ru_maxrss);
json_attr_double (&json_ctx, "threads", num_threads);
json_attr_double (&json_ctx, "min_size", MIN_ALLOCATION_SIZE);
json_attr_double (&json_ctx, "max_size", MAX_ALLOCATION_SIZE);
json_attr_double (&json_ctx, "random_seed", RAND_SEED);
json_attr_object_end (&json_ctx);
json_attr_object_end (&json_ctx);
json_attr_object_end (&json_ctx);
json_document_end (&json_ctx);
return 0;
}
-285
View File
@@ -1,285 +0,0 @@
/* Measure math inline functions.
Copyright (C) 2015-2017 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.
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/>. */
#define SIZE 1024
#define TEST_MAIN
#define TEST_NAME "math-inlines"
#define TEST_FUNCTION test_main ()
#include "bench-timing.h"
#include "json-lib.h"
#include "bench-util.h"
#include <stdlib.h>
#include <math.h>
#include <stdint.h>
#define BOOLTEST(func) \
static int __attribute__((noinline)) \
func ## _f (double d, int i) \
{ \
if (func (d)) \
return (int) d + i; \
else \
return 5; \
} \
static int \
func ## _t (volatile double *p, size_t n, size_t iters) \
{ \
int i, j; \
int res = 0; \
for (j = 0; j < iters; j++) \
for (i = 0; i < n; i++) \
if (func ## _f (p[i] * 2.0, i) != 0) \
res += 5; \
return res; \
}
#define VALUETEST(func) \
static int __attribute__((noinline)) \
func ## _f (double d) \
{ \
return func (d); \
} \
static int \
func ## _t (volatile double *p, size_t n, size_t iters) \
{ \
int i, j; \
int res = 0; \
for (j = 0; j < iters; j++) \
for (i = 0; i < n; i++) \
res += func ## _f (p[i] * 2.0); \
return res; \
}
typedef union
{
double value;
uint64_t word;
} ieee_double_shape_type;
#define EXTRACT_WORDS64(i,d) \
do { \
ieee_double_shape_type gh_u; \
gh_u.value = (d); \
(i) = gh_u.word; \
} while (0)
/* Inlines similar to existing math_private.h versions. */
static __always_inline int
__isnan_inl (double d)
{
uint64_t di;
EXTRACT_WORDS64 (di, d);
return (di & 0x7fffffffffffffffull) > 0x7ff0000000000000ull;
}
static __always_inline int
__isinf_ns2 (double d)
{
uint64_t di;
EXTRACT_WORDS64 (di, d);
return (di & 0x7fffffffffffffffull) == 0x7ff0000000000000ull;
}
static __always_inline int
__finite_inl (double d)
{
uint64_t di;
EXTRACT_WORDS64 (di, d);
return (di & 0x7fffffffffffffffull) < 0x7ff0000000000000ull;
}
#define __isnormal_inl(X) (__fpclassify (X) == FP_NORMAL)
/* Inlines for the builtin functions. */
#define __isnan_builtin(X) __builtin_isnan (X)
#define __isinf_ns_builtin(X) __builtin_isinf (X)
#define __isinf_builtin(X) __builtin_isinf_sign (X)
#define __isfinite_builtin(X) __builtin_isfinite (X)
#define __isnormal_builtin(X) __builtin_isnormal (X)
#define __fpclassify_builtin(X) __builtin_fpclassify (FP_NAN, FP_INFINITE, \
FP_NORMAL, FP_SUBNORMAL, FP_ZERO, (X))
static double __attribute ((noinline))
kernel_standard (double x, double y, int z)
{
return x * y + z;
}
volatile double rem1 = 2.5;
static __always_inline double
remainder_test1 (double x)
{
double y = rem1;
if (((__builtin_expect (y == 0.0, 0) && !__isnan_inl (x))
|| (__builtin_expect (__isinf_ns2 (x), 0) && !__isnan_inl (y))))
return kernel_standard (x, y, 10);
return remainder (x, y);
}
static __always_inline double
remainder_test2 (double x)
{
double y = rem1;
if (((__builtin_expect (y == 0.0, 0) && !__builtin_isnan (x))
|| (__builtin_expect (__builtin_isinf (x), 0) && !__builtin_isnan (y))))
return kernel_standard (x, y, 10);
return remainder (x, y);
}
/* Create test functions for each possibility. */
BOOLTEST (__isnan)
BOOLTEST (__isnan_inl)
BOOLTEST (__isnan_builtin)
BOOLTEST (isnan)
BOOLTEST (__isinf)
BOOLTEST (__isinf_builtin)
BOOLTEST (__isinf_ns2)
BOOLTEST (__isinf_ns_builtin)
BOOLTEST (isinf)
BOOLTEST (__finite)
BOOLTEST (__finite_inl)
BOOLTEST (__isfinite_builtin)
BOOLTEST (isfinite)
BOOLTEST (__isnormal_inl)
BOOLTEST (__isnormal_builtin)
BOOLTEST (isnormal)
VALUETEST (__fpclassify)
VALUETEST (__fpclassify_builtin)
VALUETEST (fpclassify)
VALUETEST (remainder_test1)
VALUETEST (remainder_test2)
typedef int (*proto_t) (volatile double *p, size_t n, size_t iters);
typedef struct
{
const char *name;
proto_t fn;
} impl_t;
#define IMPL(name) { #name, name ## _t }
static impl_t test_list[] =
{
IMPL (__isnan),
IMPL (__isnan_inl),
IMPL (__isnan_builtin),
IMPL (isnan),
IMPL (__isinf),
IMPL (__isinf_ns2),
IMPL (__isinf_ns_builtin),
IMPL (__isinf_builtin),
IMPL (isinf),
IMPL (__finite),
IMPL (__finite_inl),
IMPL (__isfinite_builtin),
IMPL (isfinite),
IMPL (__isnormal_inl),
IMPL (__isnormal_builtin),
IMPL (isnormal),
IMPL (__fpclassify),
IMPL (__fpclassify_builtin),
IMPL (fpclassify),
IMPL (remainder_test1),
IMPL (remainder_test2)
};
static void
do_one_test (json_ctx_t *json_ctx, proto_t test_fn, volatile double *arr,
size_t len, const char *testname)
{
size_t iters = 500;
timing_t start, stop, cur;
json_attr_object_begin (json_ctx, testname);
TIMING_NOW (start);
test_fn (arr, len, iters);
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
json_attr_double (json_ctx, "duration", cur);
json_attr_double (json_ctx, "iterations", iters);
json_attr_double (json_ctx, "mean", cur / iters);
json_attr_object_end (json_ctx);
}
static volatile double arr1[SIZE];
static volatile double arr2[SIZE];
int
test_main (void)
{
json_ctx_t json_ctx;
size_t i;
bench_start ();
json_init (&json_ctx, 2, stdout);
json_attr_object_begin (&json_ctx, TEST_NAME);
/* Create 2 test arrays, one with 10% zeroes, 10% negative values,
79% positive values and 1% infinity/NaN. The other contains
50% inf, 50% NaN. This relies on rand behaving correctly. */
for (i = 0; i < SIZE; i++)
{
int x = rand () & 255;
arr1[i] = (x < 25) ? 0.0 : ((x < 50) ? -1 : 100);
if (x == 255) arr1[i] = __builtin_inf ();
if (x == 254) arr1[i] = __builtin_nan ("0");
arr2[i] = (x < 128) ? __builtin_inf () : __builtin_nan ("0");
}
for (i = 0; i < sizeof (test_list) / sizeof (test_list[0]); i++)
{
json_attr_object_begin (&json_ctx, test_list[i].name);
do_one_test (&json_ctx, test_list[i].fn, arr2, SIZE, "inf/nan");
json_attr_object_end (&json_ctx);
}
for (i = 0; i < sizeof (test_list) / sizeof (test_list[0]); i++)
{
json_attr_object_begin (&json_ctx, test_list[i].name);
do_one_test (&json_ctx, test_list[i].fn, arr1, SIZE, "normal");
json_attr_object_end (&json_ctx);
}
json_attr_object_end (&json_ctx);
return 0;
}
#include "bench-util.c"
#include "../test-skeleton.c"
-163
View File
@@ -1,163 +0,0 @@
/* Measure memccpy functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#define TEST_NAME "memccpy"
#include "bench-string.h"
void *simple_memccpy (void *, const void *, int, size_t);
void *stupid_memccpy (void *, const void *, int, size_t);
IMPL (stupid_memccpy, 0)
IMPL (simple_memccpy, 0)
IMPL (memccpy, 1)
void *
simple_memccpy (void *dst, const void *src, int c, size_t n)
{
const char *s = src;
char *d = dst;
while (n-- > 0)
if ((*d++ = *s++) == (char) c)
return d;
return NULL;
}
void *
stupid_memccpy (void *dst, const void *src, int c, size_t n)
{
void *p = memchr (src, c, n);
if (p != NULL)
return mempcpy (dst, src, p - src + 1);
memcpy (dst, src, n);
return NULL;
}
typedef void *(*proto_t) (void *, const void *, int c, size_t);
static void
do_one_test (impl_t *impl, void *dst, const void *src, int c, size_t len,
size_t n)
{
void *expect = len > n ? NULL : (char *) dst + len;
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
if (CALL (impl, dst, src, c, n) != expect)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
CALL (impl, dst, src, c, n), expect);
ret = 1;
return;
}
if (memcmp (dst, src, len > n ? n : len) != 0)
{
error (0, 0, "Wrong result in function %s", impl->name);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, dst, src, c, n);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, int c, size_t len, size_t n,
int max_char)
{
size_t i;
char *s1, *s2;
align1 &= 7;
if (align1 + len >= page_size)
return;
align2 &= 7;
if (align2 + len >= page_size)
return;
s1 = (char *) (buf1 + align1);
s2 = (char *) (buf2 + align2);
for (i = 0; i < len - 1; ++i)
{
s1[i] = 32 + 23 * i % (max_char - 32);
if (s1[i] == (char) c)
--s1[i];
}
s1[len - 1] = c;
for (i = len; i + align1 < page_size && i < len + 64; ++i)
s1[i] = 32 + 32 * i % (max_char - 32);
printf ("Length %4zd, n %4zd, char %d, alignment %2zd/%2zd:", len, n, c, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, c, len, n);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%28s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 1; i < 8; ++i)
{
do_test (i, i, 12, 16, 16, 127);
do_test (i, i, 23, 16, 16, 255);
do_test (i, 2 * i, 28, 16, 16, 127);
do_test (2 * i, i, 31, 16, 16, 255);
do_test (8 - i, 2 * i, 1, 1 << i, 2 << i, 127);
do_test (2 * i, 8 - i, 17, 2 << i, 1 << i, 127);
do_test (8 - i, 2 * i, 0, 1 << i, 2 << i, 255);
do_test (2 * i, 8 - i, i, 2 << i, 1 << i, 255);
}
for (i = 1; i < 8; ++i)
{
do_test (0, 0, i, 4 << i, 8 << i, 127);
do_test (0, 0, i, 16 << i, 8 << i, 127);
do_test (8 - i, 2 * i, i, 4 << i, 8 << i, 127);
do_test (8 - i, 2 * i, i, 16 << i, 8 << i, 127);
}
return ret;
}
#include <support/test-driver.c>
-156
View File
@@ -1,156 +0,0 @@
/* Measure memchr functions.
Copyright (C) 2013-2017 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.
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/>. */
#ifndef WIDE
# define CHAR char
# define SMALL_CHAR 127
#else
# include <wchar.h>
# define CHAR wchar_t
# define SMALL_CHAR 1273
#endif /* WIDE */
#ifndef USE_AS_MEMRCHR
# define TEST_MAIN
# ifndef WIDE
# define TEST_NAME "memchr"
# else
# define TEST_NAME "wmemchr"
# endif /* WIDE */
# include "bench-string.h"
# ifndef WIDE
# define MEMCHR memchr
# define SIMPLE_MEMCHR simple_memchr
# else
# define MEMCHR wmemchr
# define SIMPLE_MEMCHR simple_wmemchr
# endif /* WIDE */
typedef CHAR *(*proto_t) (const CHAR *, int, size_t);
CHAR *SIMPLE_MEMCHR (const CHAR *, int, size_t);
IMPL (SIMPLE_MEMCHR, 0)
IMPL (MEMCHR, 1)
CHAR *
SIMPLE_MEMCHR (const CHAR *s, int c, size_t n)
{
while (n--)
if (*s++ == (CHAR) c)
return (CHAR *) s - 1;
return NULL;
}
#endif /* !USE_AS_MEMRCHR */
static void
do_one_test (impl_t *impl, const CHAR *s, int c, size_t n, CHAR *exp_res)
{
CHAR *res = CALL (impl, s, c, n);
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
if (res != exp_res)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
res, exp_res);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s, c, n);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align, size_t pos, size_t len, int seek_char)
{
size_t i;
CHAR *result;
align &= 7;
if ((align + len) * sizeof (CHAR) >= page_size)
return;
CHAR *buf = (CHAR *) (buf1);
for (i = 0; i < len; ++i)
{
buf[align + i] = 1 + 23 * i % SMALL_CHAR;
if (buf[align + i] == seek_char)
buf[align + i] = seek_char + 1;
}
buf[align + len] = 0;
if (pos < len)
{
buf[align + pos] = seek_char;
buf[align + len] = -seek_char;
result = (CHAR *) (buf + align + pos);
}
else
{
result = NULL;
buf[align + len] = seek_char;
}
printf ("Length %4zd, alignment %2zd:", pos, align);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (CHAR *) (buf + align), seek_char, len, result);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%20s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 1; i < 8; ++i)
{
do_test (0, 16 << i, 2048, 23);
do_test (i, 64, 256, 23);
do_test (0, 16 << i, 2048, 0);
do_test (i, 64, 256, 0);
}
for (i = 1; i < 32; ++i)
{
do_test (0, i, i + 1, 23);
do_test (0, i, i + 1, 0);
}
return ret;
}
#include <support/test-driver.c>
-178
View File
@@ -1,178 +0,0 @@
/* Measure memcmp functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#ifdef WIDE
# define TEST_NAME "wmemcmp"
#else
# define TEST_NAME "memcmp"
#endif
#include "bench-string.h"
#ifdef WIDE
# include <inttypes.h>
# include <wchar.h>
# define MEMCMP wmemcmp
# define MEMCPY wmemcpy
# define SIMPLE_MEMCMP simple_wmemcmp
# define CHAR wchar_t
# define UCHAR wchar_t
# define CHARBYTES 4
# define CHAR__MIN WCHAR_MIN
# define CHAR__MAX WCHAR_MAX
int
simple_wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n)
{
int ret = 0;
/* Warning!
wmemcmp has to use SIGNED comparison for elements.
memcmp has to use UNSIGNED comparison for elemnts.
*/
while (n-- && (ret = *s1 < *s2 ? -1 : *s1 == *s2 ? 0 : 1) == 0) {s1++; s2++;}
return ret;
}
#else
# include <limits.h>
# define MEMCMP memcmp
# define MEMCPY memcpy
# define SIMPLE_MEMCMP simple_memcmp
# define CHAR char
# define MAX_CHAR 255
# define UCHAR unsigned char
# define CHARBYTES 1
# define CHAR__MIN CHAR_MIN
# define CHAR__MAX CHAR_MAX
int
simple_memcmp (const char *s1, const char *s2, size_t n)
{
int ret = 0;
while (n-- && (ret = *(unsigned char *) s1++ - *(unsigned char *) s2++) == 0);
return ret;
}
#endif
typedef int (*proto_t) (const CHAR *, const CHAR *, size_t);
IMPL (SIMPLE_MEMCMP, 0)
IMPL (MEMCMP, 1)
static void
do_one_test (impl_t *impl, const CHAR *s1, const CHAR *s2, size_t len,
int exp_result)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s1, s2, len);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len, int exp_result)
{
size_t i;
CHAR *s1, *s2;
if (len == 0)
return;
align1 &= 63;
if (align1 + (len + 1) * CHARBYTES >= page_size)
return;
align2 &= 63;
if (align2 + (len + 1) * CHARBYTES >= page_size)
return;
s1 = (CHAR *) (buf1 + align1);
s2 = (CHAR *) (buf2 + align2);
for (i = 0; i < len; i++)
s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % CHAR__MAX;
s1[len] = align1;
s2[len] = align2;
s2[len - 1] -= exp_result;
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, len, exp_result);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 1; i < 16; ++i)
{
do_test (i * CHARBYTES, i * CHARBYTES, i, 0);
do_test (i * CHARBYTES, i * CHARBYTES, i, 1);
do_test (i * CHARBYTES, i * CHARBYTES, i, -1);
}
for (i = 0; i < 16; ++i)
{
do_test (0, 0, i, 0);
do_test (0, 0, i, 1);
do_test (0, 0, i, -1);
}
for (i = 1; i < 10; ++i)
{
do_test (0, 0, 2 << i, 0);
do_test (0, 0, 2 << i, 1);
do_test (0, 0, 2 << i, -1);
do_test (0, 0, 16 << i, 0);
do_test ((8 - i) * CHARBYTES, (2 * i) * CHARBYTES, 16 << i, 0);
do_test (0, 0, 16 << i, 1);
do_test (0, 0, 16 << i, -1);
}
for (i = 1; i < 8; ++i)
{
do_test (i * CHARBYTES, 2 * (i * CHARBYTES), 8 << i, 0);
do_test (i * CHARBYTES, 2 * (i * CHARBYTES), 8 << i, 1);
do_test (i * CHARBYTES, 2 * (i * CHARBYTES), 8 << i, -1);
}
return ret;
}
#include <support/test-driver.c>
-123
View File
@@ -1,123 +0,0 @@
/* Measure memcpy functions with large data sizes.
Copyright (C) 2016-2017 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.
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/>. */
#ifndef MEMCPY_RESULT
# define MEMCPY_RESULT(dst, len) dst
# define START_SIZE (64 * 1024)
# define MIN_PAGE_SIZE (getpagesize () + 32 * 1024 * 1024)
# define TEST_MAIN
# define TEST_NAME "memcpy"
# define TIMEOUT (20 * 60)
# include "bench-string.h"
IMPL (memcpy, 1)
#endif
typedef char *(*proto_t) (char *, const char *, size_t);
static void
do_one_test (impl_t *impl, char *dst, const char *src,
size_t len)
{
size_t i, iters = 16;
timing_t start, stop, cur;
/* Must clear the destination buffer updated by the previous run. */
for (i = 0; i < len; i++)
dst[i] = 0;
if (CALL (impl, dst, src, len) != MEMCPY_RESULT (dst, len))
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
CALL (impl, dst, src, len), MEMCPY_RESULT (dst, len));
ret = 1;
return;
}
if (memcmp (dst, src, len) != 0)
{
error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
impl->name, dst, src);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, dst, src, len);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len)
{
size_t i, j;
char *s1, *s2;
align1 &= 63;
if (align1 + len >= page_size)
return;
align2 &= 63;
if (align2 + len >= page_size)
return;
s1 = (char *) (buf1 + align1);
s2 = (char *) (buf2 + align2);
for (i = 0, j = 1; i < len; i++, j += 23)
s1[i] = j;
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = START_SIZE; i <= MIN_PAGE_SIZE; i <<= 1)
{
do_test (0, 0, i + 7);
do_test (0, 3, i + 15);
do_test (3, 0, i + 31);
do_test (3, 5, i + 63);
}
return ret;
}
#include <support/test-driver.c>
-169
View File
@@ -1,169 +0,0 @@
/* Measure memcpy functions.
Copyright (C) 2013-2017 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.
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/>. */
#ifndef MEMCPY_RESULT
# define MEMCPY_RESULT(dst, len) dst
# define MIN_PAGE_SIZE 131072
# define TEST_MAIN
# define TEST_NAME "memcpy"
# include "bench-string.h"
char *simple_memcpy (char *, const char *, size_t);
char *builtin_memcpy (char *, const char *, size_t);
IMPL (simple_memcpy, 0)
IMPL (builtin_memcpy, 0)
IMPL (memcpy, 1)
char *
simple_memcpy (char *dst, const char *src, size_t n)
{
char *ret = dst;
while (n--)
*dst++ = *src++;
return ret;
}
char *
builtin_memcpy (char *dst, const char *src, size_t n)
{
return __builtin_memcpy (dst, src, n);
}
#endif
typedef char *(*proto_t) (char *, const char *, size_t);
static void
do_one_test (impl_t *impl, char *dst, const char *src,
size_t len)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
/* Must clear the destination buffer set by the previous run. */
for (i = 0; i < len; i++)
dst[i] = 0;
if (CALL (impl, dst, src, len) != MEMCPY_RESULT (dst, len))
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
CALL (impl, dst, src, len), MEMCPY_RESULT (dst, len));
ret = 1;
return;
}
if (memcmp (dst, src, len) != 0)
{
error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
impl->name, dst, src);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, dst, src, len);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len)
{
size_t i, j;
char *s1, *s2;
align1 &= 63;
if (align1 + len >= page_size)
return;
align2 &= 63;
if (align2 + len >= page_size)
return;
s1 = (char *) (buf1 + align1);
s2 = (char *) (buf2 + align2);
for (i = 0, j = 1; i < len; i++, j += 23)
s1[i] = j;
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 0; i < 18; ++i)
{
do_test (0, 0, 1 << i);
do_test (i, 0, 1 << i);
do_test (0, i, 1 << i);
do_test (i, i, 1 << i);
}
for (i = 0; i < 32; ++i)
{
do_test (0, 0, i);
do_test (i, 0, i);
do_test (0, i, i);
do_test (i, i, i);
}
for (i = 3; i < 32; ++i)
{
if ((i & (i - 1)) == 0)
continue;
do_test (0, 0, 16 * i);
do_test (i, 0, 16 * i);
do_test (0, i, 16 * i);
do_test (i, i, 16 * i);
}
for (i = 32; i < 64; ++i)
{
do_test (0, 0, 32 * i);
do_test (i, 0, 32 * i);
do_test (0, i, 32 * i);
do_test (i, i, 32 * i);
}
do_test (0, 0, getpagesize ());
return ret;
}
#include <support/test-driver.c>
-164
View File
@@ -1,164 +0,0 @@
/* Measure memmem functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#define TEST_NAME "memmem"
#define BUF1PAGES 20
#define ITERATIONS 500
#include "bench-string.h"
typedef char *(*proto_t) (const void *, size_t, const void *, size_t);
void *simple_memmem (const void *, size_t, const void *, size_t);
IMPL (simple_memmem, 0)
IMPL (memmem, 1)
void *
simple_memmem (const void *haystack, size_t haystack_len, const void *needle,
size_t needle_len)
{
const char *begin;
const char *const last_possible
= (const char *) haystack + haystack_len - needle_len;
if (needle_len == 0)
/* The first occurrence of the empty string is deemed to occur at
the beginning of the string. */
return (void *) haystack;
/* Sanity check, otherwise the loop might search through the whole
memory. */
if (__glibc_unlikely (haystack_len < needle_len))
return NULL;
for (begin = (const char *) haystack; begin <= last_possible; ++begin)
if (begin[0] == ((const char *) needle)[0] &&
!memcmp ((const void *) &begin[1],
(const void *) ((const char *) needle + 1),
needle_len - 1))
return (void *) begin;
return NULL;
}
static void
do_one_test (impl_t *impl, const void *haystack, size_t haystack_len,
const void *needle, size_t needle_len, const void *expected)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, haystack, haystack_len, needle, needle_len);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (const char *str, size_t len, size_t idx)
{
char tmpbuf[len];
memcpy (tmpbuf, buf1 + idx, len);
memcpy (buf1 + idx, str, len);
printf ("String %s, offset %zd:", str, idx);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, buf1, BUF1PAGES * page_size, str, len, buf1 + idx);
memcpy (buf1 + idx, tmpbuf, len);
putchar ('\n');
}
static void
do_random_tests (void)
{
for (size_t n = 0; n < ITERATIONS; ++n)
{
char tmpbuf[32];
size_t shift = random () % 11;
size_t rel = random () % ((2 << (shift + 1)) * 64);
size_t idx = MIN ((2 << shift) * 64 + rel, BUF1PAGES * page_size - 2);
size_t len = random () % (sizeof (tmpbuf) - 1) + 1;
len = MIN (len, BUF1PAGES * page_size - idx - 1);
memcpy (tmpbuf, buf1 + idx, len);
for (size_t i = random () % len / 2 + 1; i > 0; --i)
{
size_t off = random () % len;
char ch = '0' + random () % 10;
buf1[idx + off] = ch;
}
printf ("String %.*s, offset %zd:", (int) len, buf1 + idx, idx);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, buf1, BUF1PAGES * page_size, buf1 + idx, len,
buf1 + idx);
putchar ('\n');
memcpy (buf1 + idx, tmpbuf, len);
}
}
static const char *const strs[] =
{
"00000", "00112233", "0123456789", "0000111100001111",
"00000111110000022222", "012345678901234567890",
"abc0", "aaaa0", "abcabc0"
};
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 0; i < BUF1PAGES * page_size; ++i)
buf1[i] = 60 + random () % 32;
for (i = 0; i < sizeof (strs) / sizeof (strs[0]); ++i)
for (size_t j = 0; j < 120; j += 7)
{
size_t len = strlen (strs[i]);
do_test (strs[i], len, j);
}
do_random_tests ();
return ret;
}
#include <support/test-driver.c>
-123
View File
@@ -1,123 +0,0 @@
/* Measure memmove functions with large data sizes.
Copyright (C) 2016-2017 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.
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/>. */
#define BASE_PAGE_SIZE (1024 * 1024)
#define START_SIZE (4 * 1024)
#define MIN_PAGE_SIZE (getpagesize () + 16 * 1024 * 1024)
#define TEST_MAIN
#define TEST_NAME "memmove"
#define TIMEOUT (20 * 60)
#include "bench-string.h"
IMPL (memmove, 1)
typedef char *(*proto_t) (char *, const char *, size_t);
static void
do_one_test (impl_t *impl, char *dst, char *src, const char *orig_src,
size_t len)
{
size_t i, iters = 16;
timing_t start, stop, cur;
/* This also clears the destination buffer updated by the previous
run. */
memcpy (src, orig_src, len);
char *res = CALL (impl, dst, src, len);
if (res != dst)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
res, dst);
ret = 1;
return;
}
if (memcmp (dst, orig_src, len) != 0)
{
error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
impl->name, dst, src);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, dst, src, len);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len)
{
size_t i, j;
char *s1, *s2;
align1 &= 127;
if (align1 + len >= page_size)
return;
align2 &= 127;
if (align2 + len >= page_size)
return;
s1 = (char *) (buf1 + align1);
s2 = (char *) (buf2 + align2);
for (i = 0, j = 1; i < len; i++, j += 23)
s1[i] = j;
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, (char *) (buf2 + align1), s1, len);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = START_SIZE; i <= MIN_PAGE_SIZE; i <<= 1)
{
do_test (0, 64, i + 7);
do_test (0, 3, i + 15);
do_test (3, 0, i + 31);
do_test (3, 7, i + 63);
do_test (9, 5, i + 127);
}
return ret;
}
#include <support/test-driver.c>
-191
View File
@@ -1,191 +0,0 @@
/* Measure memmove functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#ifdef TEST_BCOPY
# define TEST_NAME "bcopy"
#else
# define TEST_NAME "memmove"
#endif
#include "bench-string.h"
char *simple_memmove (char *, const char *, size_t);
#ifdef TEST_BCOPY
typedef void (*proto_t) (const char *, char *, size_t);
void simple_bcopy (const char *, char *, size_t);
IMPL (simple_bcopy, 0)
IMPL (bcopy, 1)
void
simple_bcopy (const char *src, char *dst, size_t n)
{
simple_memmove (dst, src, n);
}
#else
typedef char *(*proto_t) (char *, const char *, size_t);
IMPL (simple_memmove, 0)
IMPL (memmove, 1)
#endif
char *
inhibit_loop_to_libcall
simple_memmove (char *dst, const char *src, size_t n)
{
char *ret = dst;
if (src < dst)
{
dst += n;
src += n;
while (n--)
*--dst = *--src;
}
else
while (n--)
*dst++ = *src++;
return ret;
}
static void
do_one_test (impl_t *impl, char *dst, char *src, const char *orig_src,
size_t len)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
/* This also clears the destination buffer set by the previous run. */
memcpy (src, orig_src, len);
#ifdef TEST_BCOPY
CALL (impl, src, dst, len);
#else
char *res;
res = CALL (impl, dst, src, len);
if (res != dst)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
res, dst);
ret = 1;
return;
}
#endif
if (memcmp (dst, orig_src, len) != 0)
{
error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
impl->name, dst, src);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
#ifdef TEST_BCOPY
CALL (impl, src, dst, len);
#else
CALL (impl, dst, src, len);
#endif
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len)
{
size_t i, j;
char *s1, *s2;
align1 &= 63;
if (align1 + len >= page_size)
return;
align2 &= 63;
if (align2 + len >= page_size)
return;
s1 = (char *) (buf1 + align1);
s2 = (char *) (buf2 + align2);
for (i = 0, j = 1; i < len; i++, j += 23)
s1[i] = j;
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, (char *) (buf2 + align1), s1, len);
putchar ('\n');
}
static int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 0; i < 14; ++i)
{
do_test (0, 32, 1 << i);
do_test (32, 0, 1 << i);
do_test (0, i, 1 << i);
do_test (i, 0, 1 << i);
}
for (i = 0; i < 32; ++i)
{
do_test (0, 32, i);
do_test (32, 0, i);
do_test (0, i, i);
do_test (i, 0, i);
}
for (i = 3; i < 32; ++i)
{
if ((i & (i - 1)) == 0)
continue;
do_test (0, 32, 16 * i);
do_test (32, 0, 16 * i);
do_test (0, i, 16 * i);
do_test (i, 0, 16 * i);
}
for (i = 32; i < 64; ++i)
{
do_test (0, 0, 32 * i);
do_test (i, 0, 32 * i);
do_test (0, i, 32 * i);
do_test (i, i, 32 * i);
}
return ret;
}
#include <support/test-driver.c>
-37
View File
@@ -1,37 +0,0 @@
/* Measure mempcpy functions.
Copyright (C) 2013-2017 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.
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/>. */
#define MEMCPY_RESULT(dst, len) (dst) + (len)
#define TEST_MAIN
#define TEST_NAME "mempcpy"
#include "bench-string.h"
char *simple_mempcpy (char *, const char *, size_t);
IMPL (simple_mempcpy, 0)
IMPL (mempcpy, 1)
char *
simple_mempcpy (char *dst, const char *src, size_t n)
{
while (n--)
*dst++ = *src++;
return dst;
}
#include "bench-memcpy.c"
-40
View File
@@ -1,40 +0,0 @@
/* Measure memrchr functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#define TEST_NAME "memrchr"
#include "bench-string.h"
typedef char *(*proto_t) (const char *, int, size_t);
char *simple_memrchr (const char *, int, size_t);
IMPL (simple_memrchr, 0)
IMPL (memrchr, 1)
char *
simple_memrchr (const char *s, int c, size_t n)
{
s = s + n;
while (n--)
if (*--s == (char) c)
return (char *) s;
return NULL;
}
#define USE_AS_MEMRCHR
#include "bench-memchr.c"
-134
View File
@@ -1,134 +0,0 @@
/* Measure memset functions with large data sizes.
Copyright (C) 2016-2017 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.
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/>. */
#define TEST_MAIN
#ifndef WIDE
# define TEST_NAME "memset"
#else
# define TEST_NAME "wmemset"
#endif /* WIDE */
#define START_SIZE (128 * 1024)
#define MIN_PAGE_SIZE (getpagesize () + 64 * 1024 * 1024)
#define TIMEOUT (20 * 60)
#include "bench-string.h"
#ifndef WIDE
# define MEMSET memset
# define CHAR char
# define SIMPLE_MEMSET simple_memset
# define MEMCMP memcmp
#else
# include <wchar.h>
# define MEMSET wmemset
# define CHAR wchar_t
# define SIMPLE_MEMSET simple_wmemset
# define MEMCMP wmemcmp
#endif /* WIDE */
#include <assert.h>
IMPL (MEMSET, 1)
typedef CHAR *(*proto_t) (CHAR *, int, size_t);
CHAR *
inhibit_loop_to_libcall
SIMPLE_MEMSET (CHAR *s, int c, size_t n)
{
CHAR *r = s, *end = s + n;
while (r < end)
*r++ = c;
return s;
}
static void
do_one_test (impl_t *impl, CHAR *s, int c __attribute ((unused)), size_t n)
{
size_t i, iters = 16;
timing_t start, stop, cur;
CHAR *tstbuf = malloc (n * sizeof (*s));
assert (tstbuf != NULL);
/* Must clear the destination buffer updated by the previous run. */
for (i = 0; i < n; i++)
s[i] = 0;
CHAR *res = CALL (impl, s, c, n);
if (res != s
|| SIMPLE_MEMSET (tstbuf, c, n) != tstbuf
|| MEMCMP (s, tstbuf, n) != 0)
{
error (0, 0, "Wrong result in function %s", impl->name);
ret = 1;
free (tstbuf);
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s, c, n);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
free (tstbuf);
}
static void
do_test (size_t align, int c, size_t len)
{
align &= 63;
if ((align + len) * sizeof (CHAR) > page_size)
return;
printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (CHAR *) (buf1) + align, c, len);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
int c;
test_init ();
printf ("%24s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
c = 65;
for (i = START_SIZE; i <= MIN_PAGE_SIZE; i <<= 1)
{
do_test (0, c, i);
do_test (3, c, i);
}
return ret;
}
#include <support/test-driver.c>
-193
View File
@@ -1,193 +0,0 @@
/* Measure memset functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#ifdef TEST_BZERO
# define TEST_NAME "bzero"
#else
# ifndef WIDE
# define TEST_NAME "memset"
# else
# define TEST_NAME "wmemset"
# endif /* WIDE */
#endif /* !TEST_BZERO */
#define MIN_PAGE_SIZE 131072
#include "bench-string.h"
#ifndef WIDE
# define MEMSET memset
# define CHAR char
# define SIMPLE_MEMSET simple_memset
# define MEMCMP memcmp
#else
# include <wchar.h>
# define MEMSET wmemset
# define CHAR wchar_t
# define SIMPLE_MEMSET simple_wmemset
# define MEMCMP wmemcmp
#endif /* WIDE */
CHAR *SIMPLE_MEMSET (CHAR *, int, size_t);
#ifdef TEST_BZERO
typedef void (*proto_t) (char *, size_t);
void simple_bzero (char *, size_t);
void builtin_bzero (char *, size_t);
IMPL (simple_bzero, 0)
IMPL (builtin_bzero, 0)
IMPL (bzero, 1)
void
simple_bzero (char *s, size_t n)
{
SIMPLE_MEMSET (s, 0, n);
}
void
builtin_bzero (char *s, size_t n)
{
__builtin_bzero (s, n);
}
#else
typedef CHAR *(*proto_t) (CHAR *, int, size_t);
IMPL (SIMPLE_MEMSET, 0)
# ifndef WIDE
char *builtin_memset (char *, int, size_t);
IMPL (builtin_memset, 0)
# endif /* !WIDE */
IMPL (MEMSET, 1)
# ifndef WIDE
char *
builtin_memset (char *s, int c, size_t n)
{
return __builtin_memset (s, c, n);
}
# endif /* !WIDE */
#endif /* !TEST_BZERO */
CHAR *
inhibit_loop_to_libcall
SIMPLE_MEMSET (CHAR *s, int c, size_t n)
{
CHAR *r = s, *end = s + n;
while (r < end)
*r++ = c;
return s;
}
static void
do_one_test (impl_t *impl, CHAR *s, int c __attribute ((unused)), size_t n)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
CHAR tstbuf[n];
#ifdef TEST_BZERO
simple_bzero (tstbuf, n);
CALL (impl, s, n);
if (memcmp (s, tstbuf, n) != 0)
#else
CHAR *res = CALL (impl, s, c, n);
if (res != s
|| SIMPLE_MEMSET (tstbuf, c, n) != tstbuf
|| MEMCMP (s, tstbuf, n) != 0)
#endif /* !TEST_BZERO */
{
error (0, 0, "Wrong result in function %s", impl->name);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
#ifdef TEST_BZERO
CALL (impl, s, n);
#else
CALL (impl, s, c, n);
#endif /* !TEST_BZERO */
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align, int c, size_t len)
{
align &= 63;
if ((align + len) * sizeof (CHAR) > page_size)
return;
printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (CHAR *) (buf1) + align, c, len);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
int c = 0;
test_init ();
printf ("%24s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
#ifndef TEST_BZERO
for (c = -65; c <= 130; c += 65)
#endif
{
for (i = 0; i < 18; ++i)
do_test (0, c, 1 << i);
for (i = 1; i < 32; ++i)
{
do_test (i, c, i);
if (i & (i - 1))
do_test (0, c, i);
}
for (i = 32; i < 512; i+=32)
{
do_test (0, c, i);
do_test (i, c, i);
}
do_test (1, c, 14);
do_test (3, c, 1024);
do_test (4, c, 64);
do_test (2, c, 25);
}
for (i = 33; i <= 256; i += 4)
{
do_test (0, c, 32 * i);
do_test (i, c, 32 * i);
}
return ret;
}
#include <support/test-driver.c>
+44
View File
@@ -0,0 +1,44 @@
/* Copyright (C) 2013 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.
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/>. */
extern double modf (double, double *);
#define CALL_BENCH_FUNC(j, i) modf (in[j].arg0, &i);
struct args
{
double arg0;
} in[] =
{
{ 42.42 },
{ -42.42 }
};
#define NUM_VARIANTS 1
#define NUM_SAMPLES(v) (sizeof (in) / sizeof (struct args))
static volatile double ret = 0.0;
#define BENCH_FUNC(v, j) \
({ \
double iptr; \
ret = CALL_BENCH_FUNC (j, iptr); \
})
#define FUNCNAME "modf"
#define VARIANT(v) FUNCNAME "()"
#include "bench-skeleton.c"
-126
View File
@@ -1,126 +0,0 @@
/* Measure memchr functions.
Copyright (C) 2013-2017 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.
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>
#define TEST_MAIN
#define TEST_NAME "rawmemchr"
#include "bench-string.h"
typedef char *(*proto_t) (const char *, int);
char *simple_rawmemchr (const char *, int);
IMPL (simple_rawmemchr, 0)
IMPL (rawmemchr, 1)
char *
simple_rawmemchr (const char *s, int c)
{
while (1)
if (*s++ == (char) c)
return (char *) s - 1;
return NULL;
}
static void
do_one_test (impl_t *impl, const char *s, int c, char *exp_res)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
char *res = CALL (impl, s, c);
if (res != exp_res)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
res, exp_res);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s, c);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align, size_t pos, size_t len, int seek_char)
{
size_t i;
char *result;
align &= 7;
if (align + len >= page_size)
return;
for (i = 0; i < len; ++i)
{
buf1[align + i] = 1 + 23 * i % 127;
if (buf1[align + i] == seek_char)
buf1[align + i] = seek_char + 1;
}
buf1[align + len] = 0;
assert (pos < len);
buf1[align + pos] = seek_char;
buf1[align + len] = -seek_char;
result = (char *) (buf1 + align + pos);
printf ("Length %4zd, alignment %2zd:", pos, align);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (char *) (buf1 + align), seek_char, result);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%20s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 1; i < 7; ++i)
{
do_test (0, 16 << i, 2048, 23);
do_test (i, 64, 256, 23);
do_test (0, 16 << i, 2048, 0);
do_test (i, 64, 256, 0);
}
for (i = 1; i < 32; ++i)
{
do_test (0, i, i + 1, 23);
do_test (0, i, i + 1, 0);
}
return ret;
}
#include <support/test-driver.c>
+22 -64
View File
@@ -1,5 +1,5 @@
/* Skeleton for benchmark programs.
Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copyright (C) 2013 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
@@ -18,15 +18,9 @@
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <time.h>
#include <inttypes.h>
#include "bench-timing.h"
#include "json-lib.h"
#include "bench-util.h"
#include "bench-util.c"
#define TIMESPEC_AFTER(a, b) \
(((a).tv_sec == (b).tv_sec) ? \
@@ -36,31 +30,19 @@ int
main (int argc, char **argv)
{
unsigned long i, k;
struct timespec runtime;
timing_t start, end;
bool detailed = false;
json_ctx_t json_ctx;
if (argc == 2 && !strcmp (argv[1], "-d"))
detailed = true;
bench_start ();
struct timespec start, end, runtime;
memset (&runtime, 0, sizeof (runtime));
memset (&start, 0, sizeof (start));
memset (&end, 0, sizeof (end));
unsigned long iters, res;
clock_getres (CLOCK_PROCESS_CPUTIME_ID, &start);
#ifdef BENCH_INIT
BENCH_INIT ();
#endif
TIMING_INIT (res);
iters = 1000 * res;
json_init (&json_ctx, 2, stdout);
/* Begin function. */
json_attr_object_begin (&json_ctx, FUNCNAME);
/* Measure 1000 times the resolution of the clock. So for a 1ns resolution
clock, we measure 1000 iterations of the function call at a time.
Measurements close to the minimum clock resolution won't make much sense,
but it's better than having nothing at all. */
unsigned long iters = 1000 * start.tv_nsec;
for (int v = 0; v < NUM_VARIANTS; v++)
{
@@ -69,19 +51,19 @@ main (int argc, char **argv)
runtime.tv_sec += DURATION;
double d_total_i = 0;
timing_t total = 0, max = 0, min = 0x7fffffffffffffff;
int64_t c = 0;
uint64_t total = 0, max = 0, min = 0x7fffffffffffffff;
while (1)
{
for (i = 0; i < NUM_SAMPLES (v); i++)
{
uint64_t cur;
TIMING_NOW (start);
clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &start);
for (k = 0; k < iters; k++)
BENCH_FUNC (v, i);
TIMING_NOW (end);
clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &end);
TIMING_DIFF (cur, start, end);
uint64_t cur = (end.tv_nsec - start.tv_nsec
+ ((end.tv_sec - start.tv_sec)
* (uint64_t) 1000000000));
if (cur > max)
max = cur;
@@ -89,14 +71,10 @@ main (int argc, char **argv)
if (cur < min)
min = cur;
TIMING_ACCUM (total, cur);
/* Accumulate timings for the value. In the end we will divide
by the total iterations. */
RESULT_ACCUM (cur, v, i, c * iters, (c + 1) * iters);
total += cur;
d_total_i += iters;
}
c++;
struct timespec curtime;
memset (&curtime, 0, sizeof (curtime));
@@ -109,34 +87,14 @@ main (int argc, char **argv)
double d_iters;
done:
d_total_s = total;
d_total_s = total * 1e-9;
d_iters = iters;
/* Begin variant. */
json_attr_object_begin (&json_ctx, VARIANT (v));
json_attr_double (&json_ctx, "duration", d_total_s);
json_attr_double (&json_ctx, "iterations", d_total_i);
json_attr_double (&json_ctx, "max", max / d_iters);
json_attr_double (&json_ctx, "min", min / d_iters);
json_attr_double (&json_ctx, "mean", d_total_s / d_total_i);
if (detailed)
{
json_array_begin (&json_ctx, "timings");
for (int i = 0; i < NUM_SAMPLES (v); i++)
json_element_double (&json_ctx, RESULT (v, i));
json_array_end (&json_ctx);
}
/* End variant. */
json_attr_object_end (&json_ctx);
printf ("%s: ITERS:%g: TOTAL:%gs, MAX:%gns, MIN:%gns, %g iter/s\n",
VARIANT (v),
d_total_i, d_total_s, max / d_iters, min / d_iters,
d_total_i / d_total_s);
}
/* End function. */
json_attr_object_end (&json_ctx);
return 0;
}
-51
View File
@@ -1,51 +0,0 @@
/* Measure stpcpy functions.
Copyright (C) 2013-2017 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.
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/>. */
#define STRCPY_RESULT(dst, len) ((dst) + (len))
#define TEST_MAIN
#ifndef WIDE
# define TEST_NAME "stpcpy"
#else
# define TEST_NAME "wcpcpy"
#endif /* WIDE */
#include "bench-string.h"
#ifndef WIDE
# define CHAR char
# define SIMPLE_STPCPY simple_stpcpy
# define STPCPY stpcpy
#else
# include <wchar.h>
# define CHAR wchar_t
# define SIMPLE_STPCPY simple_wcpcpy
# define STPCPY wcpcpy
#endif /* WIDE */
CHAR *SIMPLE_STPCPY (CHAR *, const CHAR *);
IMPL (SIMPLE_STPCPY, 0)
IMPL (STPCPY, 1)
CHAR *
SIMPLE_STPCPY (CHAR *dst, const CHAR *src)
{
while ((*dst++ = *src++) != '\0');
return dst - 1;
}
#undef CHAR
#include "bench-strcpy.c"
-45
View File
@@ -1,45 +0,0 @@
/* Measure stpcpy checking functions.
Copyright (C) 2013-2017 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.
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/>. */
#define STRCPY_RESULT(dst, len) ((dst) + (len))
#define TEST_MAIN
#define TEST_NAME "stpcpy_chk"
#include "bench-string.h"
extern void __attribute__ ((noreturn)) __chk_fail (void);
char *simple_stpcpy_chk (char *, const char *, size_t);
extern char *normal_stpcpy (char *, const char *, size_t)
__asm ("stpcpy");
extern char *__stpcpy_chk (char *, const char *, size_t);
IMPL (simple_stpcpy_chk, 0)
IMPL (normal_stpcpy, 1)
IMPL (__stpcpy_chk, 2)
char *
simple_stpcpy_chk (char *dst, const char *src, size_t len)
{
if (! len)
__chk_fail ();
while ((*dst++ = *src++) != '\0')
if (--len == 0)
__chk_fail ();
return dst - 1;
}
#include "bench-strcpy_chk.c"
-78
View File
@@ -1,78 +0,0 @@
/* Measure stpncpy functions.
Copyright (C) 2013-2017 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.
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/>. */
#define STRNCPY_RESULT(dst, len, n) ((dst) + ((len) > (n) ? (n) : (len)))
#define TEST_MAIN
#ifndef WIDE
# define TEST_NAME "stpncpy"
#else
# define TEST_NAME "wcpncpy"
#endif /* WIDE */
#include "bench-string.h"
#ifndef WIDE
# define CHAR char
# define SIMPLE_STPNCPY simple_stpncpy
# define STUPID_STPNCPY stupid_stpncpy
# define STPNCPY stpncpy
# define STRNLEN strnlen
#else
# include <wchar.h>
# define CHAR wchar_t
# define SIMPLE_STPNCPY simple_wcpncpy
# define STUPID_STPNCPY stupid_wcpncpy
# define STPNCPY wcpncpy
# define STRNLEN wcsnlen
#endif /* WIDE */
CHAR *SIMPLE_STPNCPY (CHAR *, const CHAR *, size_t);
CHAR *STUPID_STPNCPY (CHAR *, const CHAR *, size_t);
IMPL (STUPID_STPNCPY, 0)
IMPL (SIMPLE_STPNCPY, 0)
IMPL (STPNCPY, 1)
CHAR *
SIMPLE_STPNCPY (CHAR *dst, const CHAR *src, size_t n)
{
while (n--)
if ((*dst++ = *src++) == '\0')
{
size_t i;
for (i = 0; i < n; ++i)
dst[i] = '\0';
return dst - 1;
}
return dst;
}
CHAR *
STUPID_STPNCPY (CHAR *dst, const CHAR *src, size_t n)
{
size_t nc = STRNLEN (src, n);
size_t i;
for (i = 0; i < nc; ++i)
dst[i] = src[i];
for (; i < n; ++i)
dst[i] = '\0';
return dst + nc;
}
#undef CHAR
#include "bench-strncpy.c"
-176
View File
@@ -1,176 +0,0 @@
/* Measure strcasecmp functions.
Copyright (C) 2013-2017 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.
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 <ctype.h>
#define TEST_MAIN
#define TEST_NAME "strcasecmp"
#include "bench-string.h"
typedef int (*proto_t) (const char *, const char *);
static int simple_strcasecmp (const char *, const char *);
static int stupid_strcasecmp (const char *, const char *);
IMPL (stupid_strcasecmp, 0)
IMPL (simple_strcasecmp, 0)
IMPL (strcasecmp, 1)
static int
simple_strcasecmp (const char *s1, const char *s2)
{
int ret;
while ((ret = ((unsigned char) tolower (*s1)
- (unsigned char) tolower (*s2))) == 0
&& *s1++)
++s2;
return ret;
}
static int
stupid_strcasecmp (const char *s1, const char *s2)
{
size_t ns1 = strlen (s1) + 1, ns2 = strlen (s2) + 1;
size_t n = ns1 < ns2 ? ns1 : ns2;
int ret = 0;
while (n--)
{
if ((ret = ((unsigned char) tolower (*s1)
- (unsigned char) tolower (*s2))) != 0)
break;
++s1;
++s2;
}
return ret;
}
static void
do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
int result = CALL (impl, s1, s2);
if ((exp_result == 0 && result != 0)
|| (exp_result < 0 && result >= 0)
|| (exp_result > 0 && result <= 0))
{
error (0, 0, "Wrong result in function %s %d %d", impl->name,
result, exp_result);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s1, s2);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len, int max_char,
int exp_result)
{
size_t i;
char *s1, *s2;
if (len == 0)
return;
align1 &= 7;
if (align1 + len + 1 >= page_size)
return;
align2 &= 7;
if (align2 + len + 1 >= page_size)
return;
s1 = (char *) (buf1 + align1);
s2 = (char *) (buf2 + align2);
for (i = 0; i < len; i++)
{
s1[i] = toupper (1 + 23 * i % max_char);
s2[i] = tolower (s1[i]);
}
s1[len] = s2[len] = 0;
s1[len + 1] = 23;
s2[len + 1] = 24 + exp_result;
if ((s2[len - 1] == 'z' && exp_result == -1)
|| (s2[len - 1] == 'a' && exp_result == 1))
s1[len - 1] += exp_result;
else
s2[len - 1] -= exp_result;
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, exp_result);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 1; i < 16; ++i)
{
do_test (i, i, i, 127, 0);
do_test (i, i, i, 127, 1);
do_test (i, i, i, 127, -1);
}
for (i = 1; i < 10; ++i)
{
do_test (0, 0, 2 << i, 127, 0);
do_test (0, 0, 2 << i, 254, 0);
do_test (0, 0, 2 << i, 127, 1);
do_test (0, 0, 2 << i, 254, 1);
do_test (0, 0, 2 << i, 127, -1);
do_test (0, 0, 2 << i, 254, -1);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 2 * i, 8 << i, 127, 0);
do_test (2 * i, i, 8 << i, 254, 0);
do_test (i, 2 * i, 8 << i, 127, 1);
do_test (2 * i, i, 8 << i, 254, 1);
do_test (i, 2 * i, 8 << i, 127, -1);
do_test (2 * i, i, 8 << i, 254, -1);
}
return ret;
}
#include <support/test-driver.c>
-180
View File
@@ -1,180 +0,0 @@
/* Measure strcasestr functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#define TEST_NAME "strcasestr"
#include "bench-string.h"
#define STRCASESTR simple_strcasestr
#define NO_ALIAS
#define __strncasecmp strncasecmp
#include "../string/strcasestr.c"
static char *
stupid_strcasestr (const char *s1, const char *s2)
{
ssize_t s1len = strlen (s1);
ssize_t s2len = strlen (s2);
if (s2len > s1len)
return NULL;
for (ssize_t i = 0; i <= s1len - s2len; ++i)
{
size_t j;
for (j = 0; j < s2len; ++j)
if (tolower (s1[i + j]) != tolower (s2[j]))
break;
if (j == s2len)
return (char *) s1 + i;
}
return NULL;
}
typedef char *(*proto_t) (const char *, const char *);
IMPL (stupid_strcasestr, 0)
IMPL (simple_strcasestr, 0)
IMPL (strcasestr, 1)
static void
do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s1, s2);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len1, size_t len2,
int fail)
{
char *s1 = (char *) (buf1 + align1);
char *s2 = (char *) (buf2 + align2);
static const char d[] = "1234567890abcxyz";
#define dl (sizeof (d) - 1)
char *ss2 = s2;
for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
{
size_t t = l > dl ? dl : l;
ss2 = mempcpy (ss2, d, t);
}
s2[len2] = '\0';
if (fail)
{
char *ss1 = s1;
for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
{
size_t t = l > dl ? dl : l;
memcpy (ss1, d, t);
++ss1[len2 > 7 ? 7 : len2 - 1];
ss1 += t;
}
}
else
{
memset (s1, '0', len1);
for (size_t i = 0; i < len2; ++i)
s1[len1 - len2 + i] = toupper (s2[i]);
}
s1[len1] = '\0';
printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
len1, len2, align1, align2, fail ? "fail" : "found");
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
putchar ('\n');
}
static int
test_main (void)
{
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (size_t klen = 2; klen < 32; ++klen)
for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
{
do_test (0, 0, hlen, klen, 0);
do_test (0, 0, hlen, klen, 1);
do_test (0, 3, hlen, klen, 0);
do_test (0, 3, hlen, klen, 1);
do_test (0, 9, hlen, klen, 0);
do_test (0, 9, hlen, klen, 1);
do_test (0, 15, hlen, klen, 0);
do_test (0, 15, hlen, klen, 1);
do_test (3, 0, hlen, klen, 0);
do_test (3, 0, hlen, klen, 1);
do_test (3, 3, hlen, klen, 0);
do_test (3, 3, hlen, klen, 1);
do_test (3, 9, hlen, klen, 0);
do_test (3, 9, hlen, klen, 1);
do_test (3, 15, hlen, klen, 0);
do_test (3, 15, hlen, klen, 1);
do_test (9, 0, hlen, klen, 0);
do_test (9, 0, hlen, klen, 1);
do_test (9, 3, hlen, klen, 0);
do_test (9, 3, hlen, klen, 1);
do_test (9, 9, hlen, klen, 0);
do_test (9, 9, hlen, klen, 1);
do_test (9, 15, hlen, klen, 0);
do_test (9, 15, hlen, klen, 1);
do_test (15, 0, hlen, klen, 0);
do_test (15, 0, hlen, klen, 1);
do_test (15, 3, hlen, klen, 0);
do_test (15, 3, hlen, klen, 1);
do_test (15, 9, hlen, klen, 0);
do_test (15, 9, hlen, klen, 1);
do_test (15, 15, hlen, klen, 0);
do_test (15, 15, hlen, klen, 1);
}
do_test (0, 0, page_size - 1, 16, 0);
do_test (0, 0, page_size - 1, 16, 1);
return ret;
}
#include <support/test-driver.c>
-174
View File
@@ -1,174 +0,0 @@
/* Measure strcat functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#ifndef WIDE
# define TEST_NAME "strcat"
#else
# define TEST_NAME "wcscat"
#endif /* WIDE */
#include "bench-string.h"
#ifndef WIDE
# define STRCAT strcat
# define CHAR char
# define sfmt "s"
# define SIMPLE_STRCAT simple_strcat
# define STRLEN strlen
# define STRCMP strcmp
# define BIG_CHAR CHAR_MAX
# define SMALL_CHAR 127
#else
# include <wchar.h>
# define STRCAT wcscat
# define CHAR wchar_t
# define sfmt "ls"
# define SIMPLE_STRCAT simple_wcscat
# define STRLEN wcslen
# define STRCMP wcscmp
# define BIG_CHAR WCHAR_MAX
# define SMALL_CHAR 1273
#endif /* WIDE */
typedef CHAR *(*proto_t) (CHAR *, const CHAR *);
CHAR *SIMPLE_STRCAT (CHAR *, const CHAR *);
IMPL (SIMPLE_STRCAT, 0)
IMPL (STRCAT, 1)
CHAR *
SIMPLE_STRCAT (CHAR *dst, const CHAR *src)
{
CHAR *ret = dst;
while (*dst++ != '\0');
--dst;
while ((*dst++ = *src++) != '\0');
return ret;
}
static void
do_one_test (impl_t *impl, CHAR *dst, const CHAR *src)
{
size_t k = STRLEN (dst), i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
if (CALL (impl, dst, src) != dst)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
CALL (impl, dst, src), dst);
ret = 1;
return;
}
if (STRCMP (dst + k, src) != 0)
{
error (0, 0, "Wrong result in function %s dst \"%" sfmt "\" src \"%" sfmt "\"",
impl->name, dst, src);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
dst[k] = '\0';
CALL (impl, dst, src);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len1, size_t len2, int max_char)
{
size_t i;
CHAR *s1, *s2;
align1 &= 7;
if ((align1 + len1) * sizeof (CHAR) >= page_size)
return;
align2 &= 7;
if ((align2 + len1 + len2) * sizeof (CHAR) >= page_size)
return;
s1 = (CHAR *) (buf1) + align1;
s2 = (CHAR *) (buf2) + align2;
for (i = 0; i < len1; ++i)
s1[i] = 32 + 23 * i % (max_char - 32);
s1[len1] = '\0';
for (i = 0; i < len2; i++)
s2[i] = 32 + 23 * i % (max_char - 32);
printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len1, len2, align1, align2);
FOR_EACH_IMPL (impl, 0)
{
s2[len2] = '\0';
do_one_test (impl, s2, s1);
}
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%28s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 0; i < 16; ++i)
{
do_test (0, 0, i, i, SMALL_CHAR);
do_test (0, 0, i, i, BIG_CHAR);
do_test (0, i, i, i, SMALL_CHAR);
do_test (i, 0, i, i, BIG_CHAR);
}
for (i = 1; i < 8; ++i)
{
do_test (0, 0, 8 << i, 8 << i, SMALL_CHAR);
do_test (8 - i, 2 * i, 8 << i, 8 << i, SMALL_CHAR);
do_test (0, 0, 8 << i, 2 << i, SMALL_CHAR);
do_test (8 - i, 2 * i, 8 << i, 2 << i, SMALL_CHAR);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 2 * i, 8 << i, 1, SMALL_CHAR);
do_test (2 * i, i, 8 << i, 1, BIG_CHAR);
do_test (i, i, 8 << i, 10, SMALL_CHAR);
do_test (i, i, 8 << i, 10, BIG_CHAR);
}
return ret;
}
#include <support/test-driver.c>
-210
View File
@@ -1,210 +0,0 @@
/* Measure STRCHR functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#ifndef WIDE
# ifdef USE_FOR_STRCHRNUL
# define TEST_NAME "strchrnul"
# else
# define TEST_NAME "strchr"
# endif /* !USE_FOR_STRCHRNUL */
#else
# ifdef USE_FOR_STRCHRNUL
# define TEST_NAME "wcschrnul"
# else
# define TEST_NAME "wcschr"
# endif /* !USE_FOR_STRCHRNUL */
#endif /* WIDE */
#include "bench-string.h"
#ifndef WIDE
# ifdef USE_FOR_STRCHRNUL
# define STRCHR strchrnul
# define stupid_STRCHR stupid_STRCHRNUL
# define simple_STRCHR simple_STRCHRNUL
# else
# define STRCHR strchr
# endif /* !USE_FOR_STRCHRNUL */
# define STRLEN strlen
# define CHAR char
# define BIG_CHAR CHAR_MAX
# define MIDDLE_CHAR 127
# define SMALL_CHAR 23
# define UCHAR unsigned char
#else
# include <wchar.h>
# ifdef USE_FOR_STRCHRNUL
# define STRCHR wcschrnul
# define stupid_STRCHR stupid_WCSCHRNUL
# define simple_STRCHR simple_WCSCHRNUL
# else
# define STRCHR wcschr
# endif /* !USE_FOR_STRCHRNUL */
# define STRLEN wcslen
# define CHAR wchar_t
# define BIG_CHAR WCHAR_MAX
# define MIDDLE_CHAR 1121
# define SMALL_CHAR 851
# define UCHAR wchar_t
#endif /* WIDE */
#ifdef USE_FOR_STRCHRNUL
# define NULLRET(endptr) endptr
#else
# define NULLRET(endptr) NULL
#endif /* !USE_FOR_STRCHRNUL */
typedef CHAR *(*proto_t) (const CHAR *, int);
CHAR *
simple_STRCHR (const CHAR *s, int c)
{
for (; *s != (CHAR) c; ++s)
if (*s == '\0')
return NULLRET ((CHAR *) s);
return (CHAR *) s;
}
CHAR *
stupid_STRCHR (const CHAR *s, int c)
{
size_t n = STRLEN (s) + 1;
while (n--)
if (*s++ == (CHAR) c)
return (CHAR *) s - 1;
return NULLRET ((CHAR *) s - 1);
}
IMPL (stupid_STRCHR, 0)
IMPL (simple_STRCHR, 0)
IMPL (STRCHR, 1)
static void
do_one_test (impl_t *impl, const CHAR *s, int c, const CHAR *exp_res)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s, c);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align, size_t pos, size_t len, int seek_char, int max_char)
/* For wcschr: align here means align not in bytes,
but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t))
len for wcschr here isn't in bytes but it's number of wchar_t symbols. */
{
size_t i;
CHAR *result;
CHAR *buf = (CHAR *) buf1;
align &= 15;
if ((align + len) * sizeof (CHAR) >= page_size)
return;
for (i = 0; i < len; ++i)
{
buf[align + i] = 32 + 23 * i % max_char;
if (buf[align + i] == seek_char)
buf[align + i] = seek_char + 1;
else if (buf[align + i] == 0)
buf[align + i] = 1;
}
buf[align + len] = 0;
if (pos < len)
{
buf[align + pos] = seek_char;
result = buf + align + pos;
}
else if (seek_char == 0)
result = buf + align + len;
else
result = NULLRET (buf + align + len);
printf ("Length %4zd, alignment in bytes %2zd:",
pos, align * sizeof (CHAR));
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, buf + align, seek_char, result);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%20s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 1; i < 8; ++i)
{
do_test (0, 16 << i, 2048, SMALL_CHAR, MIDDLE_CHAR);
do_test (i, 16 << i, 2048, SMALL_CHAR, MIDDLE_CHAR);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 64, 256, SMALL_CHAR, MIDDLE_CHAR);
do_test (i, 64, 256, SMALL_CHAR, BIG_CHAR);
}
for (i = 0; i < 32; ++i)
{
do_test (0, i, i + 1, SMALL_CHAR, MIDDLE_CHAR);
do_test (0, i, i + 1, SMALL_CHAR, BIG_CHAR);
}
for (i = 1; i < 8; ++i)
{
do_test (0, 16 << i, 2048, 0, MIDDLE_CHAR);
do_test (i, 16 << i, 2048, 0, MIDDLE_CHAR);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 64, 256, 0, MIDDLE_CHAR);
do_test (i, 64, 256, 0, BIG_CHAR);
}
for (i = 0; i < 32; ++i)
{
do_test (0, i, i + 1, 0, MIDDLE_CHAR);
do_test (0, i, i + 1, 0, BIG_CHAR);
}
return ret;
}
#include <support/test-driver.c>
-20
View File
@@ -1,20 +0,0 @@
/* Measure strchrnul function.
Copyright (C) 2013-2017 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.
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/>. */
#define USE_FOR_STRCHRNUL 1
#include "bench-strchr.c"
-241
View File
@@ -1,241 +0,0 @@
/* Measure strcmp and wcscmp functions.
Copyright (C) 2013-2017 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.
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/>. */
#define TEST_MAIN
#ifdef WIDE
# define TEST_NAME "wcscmp"
#else
# define TEST_NAME "strcmp"
#endif
#include "bench-string.h"
#ifdef WIDE
# include <wchar.h>
# define L(str) L##str
# define STRCMP wcscmp
# define STRCPY wcscpy
# define STRLEN wcslen
# define MEMCPY wmemcpy
# define SIMPLE_STRCMP simple_wcscmp
# define STUPID_STRCMP stupid_wcscmp
# define CHAR wchar_t
# define UCHAR wchar_t
# define CHARBYTES 4
# define CHARBYTESLOG 2
# define CHARALIGN __alignof__ (CHAR)
# define MIDCHAR 0x7fffffff
# define LARGECHAR 0xfffffffe
# define CHAR__MAX WCHAR_MAX
# define CHAR__MIN WCHAR_MIN
/* Wcscmp uses signed semantics for comparison, not unsigned */
/* Avoid using substraction since possible overflow */
int
simple_wcscmp (const wchar_t *s1, const wchar_t *s2)
{
wchar_t c1, c2;
do
{
c1 = *s1++;
c2 = *s2++;
if (c2 == L'\0')
return c1 - c2;
}
while (c1 == c2);
return c1 < c2 ? -1 : 1;
}
int
stupid_wcscmp (const wchar_t *s1, const wchar_t *s2)
{
size_t ns1 = wcslen (s1) + 1;
size_t ns2 = wcslen (s2) + 1;
size_t n = ns1 < ns2 ? ns1 : ns2;
int ret = 0;
wchar_t c1, c2;
while (n--) {
c1 = *s1++;
c2 = *s2++;
if ((ret = c1 < c2 ? -1 : c1 == c2 ? 0 : 1) != 0)
break;
}
return ret;
}
#else
# include <limits.h>
# define L(str) str
# define STRCMP strcmp
# define STRCPY strcpy
# define STRLEN strlen
# define MEMCPY memcpy
# define SIMPLE_STRCMP simple_strcmp
# define STUPID_STRCMP stupid_strcmp
# define CHAR char
# define UCHAR unsigned char
# define CHARBYTES 1
# define CHARBYTESLOG 0
# define CHARALIGN 1
# define MIDCHAR 0x7f
# define LARGECHAR 0xfe
# define CHAR__MAX CHAR_MAX
# define CHAR__MIN CHAR_MIN
/* Strcmp uses unsigned semantics for comparison. */
int
simple_strcmp (const char *s1, const char *s2)
{
int ret;
while ((ret = *(unsigned char *) s1 - *(unsigned char*) s2++) == 0 && *s1++);
return ret;
}
int
stupid_strcmp (const char *s1, const char *s2)
{
size_t ns1 = strlen (s1) + 1;
size_t ns2 = strlen (s2) + 1;
size_t n = ns1 < ns2 ? ns1 : ns2;
int ret = 0;
while (n--)
if ((ret = *(unsigned char *) s1++ - *(unsigned char *) s2++) != 0)
break;
return ret;
}
#endif
typedef int (*proto_t) (const CHAR *, const CHAR *);
IMPL (STUPID_STRCMP, 1)
IMPL (SIMPLE_STRCMP, 1)
IMPL (STRCMP, 1)
static void
do_one_test (impl_t *impl,
const CHAR *s1, const CHAR *s2,
int exp_result)
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, s1, s2);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len, int max_char,
int exp_result)
{
size_t i;
CHAR *s1, *s2;
if (len == 0)
return;
align1 &= 63;
if (align1 + (len + 1) * CHARBYTES >= page_size)
return;
align2 &= 63;
if (align2 + (len + 1) * CHARBYTES >= page_size)
return;
/* Put them close to the end of page. */
i = align1 + CHARBYTES * (len + 2);
s1 = (CHAR *) (buf1 + ((page_size - i) / 16 * 16) + align1);
i = align2 + CHARBYTES * (len + 2);
s2 = (CHAR *) (buf2 + ((page_size - i) / 16 * 16) + align2);
for (i = 0; i < len; i++)
s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % max_char;
s1[len] = s2[len] = 0;
s1[len + 1] = 23;
s2[len + 1] = 24 + exp_result;
s2[len - 1] -= exp_result;
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, exp_result);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 1; i < 32; ++i)
{
do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, 0);
do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, 1);
do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, -1);
}
for (i = 1; i < 10 + CHARBYTESLOG; ++i)
{
do_test (0, 0, 2 << i, MIDCHAR, 0);
do_test (0, 0, 2 << i, LARGECHAR, 0);
do_test (0, 0, 2 << i, MIDCHAR, 1);
do_test (0, 0, 2 << i, LARGECHAR, 1);
do_test (0, 0, 2 << i, MIDCHAR, -1);
do_test (0, 0, 2 << i, LARGECHAR, -1);
do_test (0, CHARBYTES * i, 2 << i, MIDCHAR, 1);
do_test (CHARBYTES * i, CHARBYTES * (i + 1), 2 << i, LARGECHAR, 1);
}
for (i = 1; i < 8; ++i)
{
do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, 0);
do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, 0);
do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, 1);
do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, 1);
do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, -1);
do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, -1);
}
return ret;
}
#include <support/test-driver.c>
-275
View File
@@ -1,275 +0,0 @@
/* Measure strcoll execution time in different locales.
Copyright (C) 2015-2017 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.
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 <stdio.h>
#include <fcntl.h>
#include <assert.h>
#include <stdlib.h>
#include <locale.h>
#include <unistd.h>
#include "json-lib.h"
#include "bench-timing.h"
#include <string.h>
/* Many thanks to http://generator.lorem-ipsum.info/ */
#define INPUT_PREFIX "strcoll-inputs/"
static const char *const input_files[] = {
"filelist#C",
"filelist#en_US.UTF-8",
"lorem_ipsum#vi_VN.UTF-8",
"lorem_ipsum#ar_SA.UTF-8",
"lorem_ipsum#en_US.UTF-8",
"lorem_ipsum#zh_CN.UTF-8",
"lorem_ipsum#cs_CZ.UTF-8",
"lorem_ipsum#en_GB.UTF-8",
"lorem_ipsum#da_DK.UTF-8",
"lorem_ipsum#pl_PL.UTF-8",
"lorem_ipsum#fr_FR.UTF-8",
"lorem_ipsum#pt_PT.UTF-8",
"lorem_ipsum#el_GR.UTF-8",
"lorem_ipsum#ru_RU.UTF-8",
"lorem_ipsum#he_IL.UTF-8",
"lorem_ipsum#es_ES.UTF-8",
"lorem_ipsum#hi_IN.UTF-8",
"lorem_ipsum#sv_SE.UTF-8",
"lorem_ipsum#hu_HU.UTF-8",
"lorem_ipsum#tr_TR.UTF-8",
"lorem_ipsum#is_IS.UTF-8",
"lorem_ipsum#it_IT.UTF-8",
"lorem_ipsum#sr_RS.UTF-8",
"lorem_ipsum#ja_JP.UTF-8"
};
#define TEXTFILE_DELIMITER " \n\r\t.,?!"
static char *
read_file (const char *filename)
{
struct stat stats;
char *buffer = NULL;
int fd = open (filename, O_CLOEXEC);
if (fd >= 0)
{
if (fstat (fd, &stats) == 0)
{
buffer = malloc (stats.st_size + 1);
if (buffer)
{
if (read (fd, buffer, stats.st_size) == stats.st_size)
buffer[stats.st_size] = '\0';
else
{
free (buffer);
buffer = NULL;
}
}
}
close (fd);
}
return buffer;
}
static size_t
count_words (const char *text, const char *delim)
{
size_t wordcount = 0;
char *tmp = strdup (text);
char *token = strtok (tmp, delim);
while (token != NULL)
{
if (*token != '\0')
wordcount++;
token = strtok (NULL, delim);
}
free (tmp);
return wordcount;
}
typedef struct
{
size_t size;
char **words;
} word_list;
static word_list *
new_word_list (size_t size)
{
word_list *list = malloc (sizeof (word_list));
assert (list != NULL);
list->size = size;
list->words = malloc (size * sizeof (char *));
assert (list->words != NULL);
return list;
}
static word_list *
str_word_list (const char *str, const char *delim)
{
size_t n = 0;
word_list *list = new_word_list (count_words (str, delim));
char *toks = strdup (str);
char *word = strtok (toks, delim);
while (word != NULL && n < list->size)
{
if (*word != '\0')
list->words[n++] = strdup (word);
word = strtok (NULL, delim);
}
free (toks);
return list;
}
static word_list *
copy_word_list (const word_list *list)
{
size_t i;
word_list *copy = new_word_list (list->size);
for (i = 0; i < list->size; i++)
copy->words[i] = strdup (list->words[i]);
return copy;
}
static void
free_word_list (word_list *list)
{
size_t i;
for (i = 0; i < list->size; i++)
free (list->words[i]);
free (list->words);
free (list);
}
static int
compare_words (const void *a, const void *b)
{
const char *s1 = *(char **) a;
const char *s2 = *(char **) b;
return strcoll (s1, s2);
}
#undef INNER_LOOP_ITERS
#define INNER_LOOP_ITERS 16
static void
bench_list (json_ctx_t *json_ctx, word_list *list)
{
size_t i;
timing_t start, stop, cur;
word_list **tests = malloc (INNER_LOOP_ITERS * sizeof (word_list *));
assert (tests != NULL);
for (i = 0; i < INNER_LOOP_ITERS; i++)
tests[i] = copy_word_list (list);
TIMING_NOW (start);
for (i = 0; i < INNER_LOOP_ITERS; i++)
qsort (tests[i]->words, tests[i]->size, sizeof (char *), compare_words);
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
setlocale (LC_ALL, "en_US.UTF-8");
json_attr_double (json_ctx, "duration", cur);
json_attr_double (json_ctx, "iterations", i);
json_attr_double (json_ctx, "mean", (double) cur / i);
for (i = 0; i < INNER_LOOP_ITERS; i++)
free_word_list (tests[i]);
free (tests);
}
typedef enum
{
OK,
ERROR_FILENAME,
ERROR_LOCALE,
ERROR_IO
} result_t;
static result_t
bench_file (json_ctx_t *json_ctx, const char *testname, const char *filename,
const char *locale)
{
if (setlocale (LC_ALL, locale) == NULL)
return ERROR_LOCALE;
char *text = read_file (filename);
if (text == NULL)
return ERROR_IO;
word_list *list = str_word_list (text, TEXTFILE_DELIMITER);
json_attr_object_begin (json_ctx, testname);
bench_list (json_ctx, list);
json_attr_object_end (json_ctx);
free_word_list (list);
free (text);
return OK;
}
int
main (void)
{
json_ctx_t *json_ctx = malloc (sizeof (json_ctx_t));
assert (json_ctx != NULL);
json_init (json_ctx, 2, stdout);
json_attr_object_begin (json_ctx, "strcoll");
size_t i;
result_t result = OK;
for (i = 0; i < (sizeof (input_files) / sizeof (input_files[0])); i++)
{
char *locale = strchr (input_files[i], '#');
if (locale == NULL)
{
printf ("Failed to get locale from filename %s, aborting!\n",
input_files[i]);
return ERROR_FILENAME;
}
char *filename;
asprintf (&filename, INPUT_PREFIX "%s", input_files[i]);
result = bench_file (json_ctx, input_files[i], filename, locale + 1);
if (result != OK)
{
if (result == ERROR_LOCALE)
printf ("Failed to set locale %s, aborting!\n", locale);
else if (result == ERROR_IO)
printf ("Failed to read file %s, aborting!\n", filename);
free (filename);
goto out;
}
free (filename);
}
out:
json_attr_object_end (json_ctx);
free (json_ctx);
return result;
}
-193
View File
@@ -1,193 +0,0 @@
/* Measure strcpy functions.
Copyright (C) 2013-2017 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.
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/>. */
#ifdef WIDE
# include <wchar.h>
# define CHAR wchar_t
# define UCHAR wchar_t
# define sfmt "ls"
# define BIG_CHAR WCHAR_MAX
# define SMALL_CHAR 1273
# define STRCMP wcscmp
# define MEMCMP wmemcmp
# define MEMSET wmemset
#else
# define CHAR char
# define UCHAR unsigned char
# define sfmt "s"
# define BIG_CHAR CHAR_MAX
# define SMALL_CHAR 127
# define STRCMP strcmp
# define MEMCMP memcmp
# define MEMSET memset
#endif
#ifndef STRCPY_RESULT
# define STRCPY_RESULT(dst, len) dst
# define TEST_MAIN
# ifndef WIDE
# define TEST_NAME "strcpy"
# else
# define TEST_NAME "wcscpy"
# endif
# include "bench-string.h"
# ifndef WIDE
# define SIMPLE_STRCPY simple_strcpy
# define STRCPY strcpy
# else
# define SIMPLE_STRCPY simple_wcscpy
# define STRCPY wcscpy
# endif
CHAR *SIMPLE_STRCPY (CHAR *, const CHAR *);
IMPL (SIMPLE_STRCPY, 0)
IMPL (STRCPY, 1)
CHAR *
SIMPLE_STRCPY (CHAR *dst, const CHAR *src)
{
CHAR *ret = dst;
while ((*dst++ = *src++) != '\0');
return ret;
}
#endif
typedef CHAR *(*proto_t) (CHAR *, const CHAR *);
static void
do_one_test (impl_t *impl, CHAR *dst, const CHAR *src,
size_t len __attribute__((unused)))
{
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
if (CALL (impl, dst, src) != STRCPY_RESULT (dst, len))
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
CALL (impl, dst, src), STRCPY_RESULT (dst, len));
ret = 1;
return;
}
if (STRCMP (dst, src) != 0)
{
error (0, 0,
"Wrong result in function %s dst \"%" sfmt "\" src \"%" sfmt "\"",
impl->name, dst, src);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, dst, src);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len, int max_char)
{
size_t i;
CHAR *s1, *s2;
/* For wcscpy: align1 and align2 here mean alignment not in bytes,
but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t))
len for wcschr here isn't in bytes but it's number of wchar_t symbols. */
align1 &= 7;
if ((align1 + len) * sizeof(CHAR) >= page_size)
return;
align2 &= 7;
if ((align2 + len) * sizeof(CHAR) >= page_size)
return;
s1 = (CHAR *) (buf1) + align1;
s2 = (CHAR *) (buf2) + align2;
for (i = 0; i < len; i++)
s1[i] = 32 + 23 * i % (max_char - 32);
s1[len] = 0;
printf ("Length %4zd, alignments in bytes %2zd/%2zd:", len, align1 * sizeof(CHAR), align2 * sizeof(CHAR));
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len);
putchar ('\n');
}
int
test_main (void)
{
size_t i;
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 0; i < 16; ++i)
{
do_test (0, 0, i, SMALL_CHAR);
do_test (0, 0, i, BIG_CHAR);
do_test (0, i, i, SMALL_CHAR);
do_test (i, 0, i, BIG_CHAR);
}
for (i = 1; i < 8; ++i)
{
do_test (0, 0, 8 << i, SMALL_CHAR);
do_test (8 - i, 2 * i, 8 << i, SMALL_CHAR);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 2 * i, 8 << i, SMALL_CHAR);
do_test (2 * i, i, 8 << i, BIG_CHAR);
do_test (i, i, 8 << i, SMALL_CHAR);
do_test (i, i, 8 << i, BIG_CHAR);
}
for (i = 16; i <= 512; i+=4)
{
do_test (0, 4, i, SMALL_CHAR);
do_test (4, 0, i, BIG_CHAR);
do_test (4, 4, i, SMALL_CHAR);
do_test (2, 2, i, BIG_CHAR);
do_test (2, 6, i, SMALL_CHAR);
do_test (6, 2, i, BIG_CHAR);
do_test (1, 7, i, SMALL_CHAR);
do_test (7, 1, i, BIG_CHAR);
do_test (3, 4, i, SMALL_CHAR);
do_test (4, 3, i, BIG_CHAR);
do_test (5, 7, i, SMALL_CHAR);
do_test (7, 5, i, SMALL_CHAR);
}
return ret;
}
#include <support/test-driver.c>
-244
View File
@@ -1,244 +0,0 @@
/* Measure __strcpy_chk functions.
Copyright (C) 2013-2017 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.
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/>. */
#ifndef STRCPY_RESULT
# define STRCPY_RESULT(dst, len) dst
# define TEST_MAIN
# define TEST_NAME "strcpy_chk"
# include "bench-string.h"
/* This test case implicitly tests the availability of the __chk_fail
symbol, which is part of the public ABI and may be used
externally. */
extern void __attribute__ ((noreturn)) __chk_fail (void);
char *simple_strcpy_chk (char *, const char *, size_t);
extern char *normal_strcpy (char *, const char *, size_t)
__asm ("strcpy");
extern char *__strcpy_chk (char *, const char *, size_t);
IMPL (simple_strcpy_chk, 0)
IMPL (normal_strcpy, 1)
IMPL (__strcpy_chk, 2)
char *
simple_strcpy_chk (char *dst, const char *src, size_t len)
{
char *ret = dst;
if (! len)
__chk_fail ();
while ((*dst++ = *src++) != '\0')
if (--len == 0)
__chk_fail ();
return ret;
}
#endif
#include <fcntl.h>
#include <paths.h>
#include <setjmp.h>
#include <signal.h>
#include <support/support.h>
volatile int chk_fail_ok;
jmp_buf chk_fail_buf;
static void
handler (int sig)
{
if (chk_fail_ok)
{
chk_fail_ok = 0;
longjmp (chk_fail_buf, 1);
}
else
_exit (127);
}
typedef char *(*proto_t) (char *, const char *, size_t);
static void
do_one_test (impl_t *impl, char *dst, const char *src,
size_t len, size_t dlen)
{
char *res;
size_t i, iters = INNER_LOOP_ITERS;
timing_t start, stop, cur;
if (dlen <= len)
{
if (impl->test == 1)
return;
chk_fail_ok = 1;
if (setjmp (chk_fail_buf) == 0)
{
res = CALL (impl, dst, src, dlen);
printf ("*** Function %s (%zd; %zd) did not __chk_fail\n",
impl->name, len, dlen);
chk_fail_ok = 0;
ret = 1;
}
return;
}
else
res = CALL (impl, dst, src, dlen);
if (res != STRCPY_RESULT (dst, len))
{
printf ("Wrong result in function %s %p %p\n", impl->name,
res, STRCPY_RESULT (dst, len));
ret = 1;
return;
}
if (strcmp (dst, src) != 0)
{
printf ("Wrong result in function %s dst \"%s\" src \"%s\"\n",
impl->name, dst, src);
ret = 1;
return;
}
TIMING_NOW (start);
for (i = 0; i < iters; ++i)
{
CALL (impl, dst, src, dlen);
}
TIMING_NOW (stop);
TIMING_DIFF (cur, start, stop);
TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
do_test (size_t align1, size_t align2, size_t len, size_t dlen, int max_char)
{
size_t i;
char *s1, *s2;
align1 &= 7;
if (align1 + len >= page_size)
return;
align2 &= 7;
if (align2 + len >= page_size)
return;
s1 = (char *) buf1 + align1;
s2 = (char *) buf2 + align2;
for (i = 0; i < len; i++)
s1[i] = 32 + 23 * i % (max_char - 32);
s1[len] = 0;
if (dlen > len)
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len, dlen);
if (dlen > len)
putchar ('\n');
}
static int
test_main (void)
{
size_t i;
set_fortify_handler (handler);
test_init ();
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
putchar ('\n');
for (i = 0; i < 16; ++i)
{
do_test (0, 0, i, i + 1, 127);
do_test (0, 0, i, i + 1, 255);
do_test (0, i, i, i + 1, 127);
do_test (i, 0, i, i + 1, 255);
}
for (i = 1; i < 8; ++i)
{
do_test (0, 0, 8 << i, (8 << i) + 1, 127);
do_test (8 - i, 2 * i, (8 << i), (8 << i) + 1, 127);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 2 * i, (8 << i), (8 << i) + 1, 127);
do_test (2 * i, i, (8 << i), (8 << i) + 1, 255);
do_test (i, i, (8 << i), (8 << i) + 1, 127);
do_test (i, i, (8 << i), (8 << i) + 1, 255);
}
for (i = 0; i < 16; ++i)
{
do_test (0, 0, i, i + 256, 127);
do_test (0, 0, i, i + 256, 255);
do_test (0, i, i, i + 256, 127);
do_test (i, 0, i, i + 256, 255);
}
for (i = 1; i < 8; ++i)
{
do_test (0, 0, 8 << i, (8 << i) + 256, 127);
do_test (8 - i, 2 * i, (8 << i), (8 << i) + 256, 127);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 2 * i, (8 << i), (8 << i) + 256, 127);
do_test (2 * i, i, (8 << i), (8 << i) + 256, 255);
do_test (i, i, (8 << i), (8 << i) + 256, 127);
do_test (i, i, (8 << i), (8 << i) + 256, 255);
}
for (i = 0; i < 16; ++i)
{
do_test (0, 0, i, i, 127);
do_test (0, 0, i, i + 2, 255);
do_test (0, i, i, i + 3, 127);
do_test (i, 0, i, i + 4, 255);
}
for (i = 1; i < 8; ++i)
{
do_test (0, 0, 8 << i, (8 << i) - 15, 127);
do_test (8 - i, 2 * i, (8 << i), (8 << i) + 5, 127);
}
for (i = 1; i < 8; ++i)
{
do_test (i, 2 * i, (8 << i), (8 << i) + i, 127);
do_test (2 * i, i, (8 << i), (8 << i) + (i - 1), 255);
do_test (i, i, (8 << i), (8 << i) + i + 2, 127);
do_test (i, i, (8 << i), (8 << i) + i + 3, 255);
}
return 0;
}
#include <support/test-driver.c>
-80
View File
@@ -1,80 +0,0 @@
/* Measure strcspn functions.
Copyright (C) 2013-2017 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.
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/>. */
#define STRPBRK_RESULT(s, pos) (pos)
#define RES_TYPE size_t
#define TEST_MAIN
#ifndef WIDE
# define TEST_NAME "strcspn"
#else
# define TEST_NAME "wcscspn"
#endif /* WIDE */
#include "bench-string.h"
#ifndef WIDE
# define STRCSPN strcspn
# define CHAR char
# define SIMPLE_STRCSPN simple_strcspn
# define STUPID_STRCSPN stupid_strcspn
# define STRLEN strlen
#else
# include <wchar.h>
# define STRCSPN wcscspn
# define CHAR wchar_t
# define SIMPLE_STRCSPN simple_wcscspn
# define STUPID_STRCSPN stupid_wcscspn
# define STRLEN wcslen
#endif /* WIDE */
typedef size_t (*proto_t) (const CHAR *, const CHAR *);
size_t SIMPLE_STRCSPN (const CHAR *, const CHAR *);
size_t STUPID_STRCSPN (const CHAR *, const CHAR *);
IMPL (STUPID_STRCSPN, 0)
IMPL (SIMPLE_STRCSPN, 0)
IMPL (STRCSPN, 1)
size_t
SIMPLE_STRCSPN (const CHAR *s, const CHAR *rej)
{
const CHAR *r, *str = s;
CHAR c;
while ((c = *s++) != '\0')
for (r = rej; *r != '\0'; ++r)
if (*r == c)
return s - str - 1;
return s - str - 1;
}
size_t
STUPID_STRCSPN (const CHAR *s, const CHAR *rej)
{
size_t ns = STRLEN (s), nrej = STRLEN (rej);
size_t i, j;
for (i = 0; i < ns; ++i)
for (j = 0; j < nrej; ++j)
if (s[i] == rej[j])
return i;
return i;
}
#undef CHAR
#undef STRLEN
#include "bench-strpbrk.c"
-211
View File
@@ -1,211 +0,0 @@
/* Measure string and memory functions.
Copyright (C) 2013-2017 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.
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 <getopt.h>
#include <sys/cdefs.h>
typedef struct
{
const char *name;
void (*fn) (void);
long test;
} impl_t;
extern impl_t __start_impls[], __stop_impls[];
#define IMPL(name, test) \
impl_t tst_ ## name \
__attribute__ ((section ("impls"), aligned (sizeof (void *)))) \
= { __STRING (name), (void (*) (void))name, test };
#ifdef TEST_MAIN
# ifndef _GNU_SOURCE
# define _GNU_SOURCE
# endif
# undef __USE_STRING_INLINES
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <sys/mman.h>
# include <sys/param.h>
# include <unistd.h>
# include <fcntl.h>
# include <error.h>
# include <errno.h>
# include <time.h>
# include <ifunc-impl-list.h>
# define GL(x) _##x
# define GLRO(x) _##x
# include "bench-timing.h"
# define TEST_FUNCTION test_main
# ifndef TIMEOUT
# define TIMEOUT (4 * 60)
# endif
# define OPT_ITERATIONS 10000
# define OPT_RANDOM 10001
# define OPT_SEED 10002
# define INNER_LOOP_ITERS 64
unsigned char *buf1, *buf2;
int ret, do_srandom;
unsigned int seed;
size_t page_size;
# ifndef ITERATIONS
size_t iterations = 100000;
# define ITERATIONS_OPTIONS \
{ "iterations", required_argument, NULL, OPT_ITERATIONS },
# define ITERATIONS_PROCESS \
case OPT_ITERATIONS: \
iterations = strtoul (optarg, NULL, 0); \
break;
# define ITERATIONS iterations
# else
# define ITERATIONS_OPTIONS
# define ITERATIONS_PROCESS
# endif
# define CMDLINE_OPTIONS ITERATIONS_OPTIONS \
{ "random", no_argument, NULL, OPT_RANDOM }, \
{ "seed", required_argument, NULL, OPT_SEED },
static void __attribute__ ((used))
cmdline_process_function (int c)
{
switch (c)
{
ITERATIONS_PROCESS
case OPT_RANDOM:
{
int fdr = open ("/dev/urandom", O_RDONLY);
if (fdr < 0 || read (fdr, &seed, sizeof(seed)) != sizeof (seed))
seed = time (NULL);
if (fdr >= 0)
close (fdr);
do_srandom = 1;
break;
}
case OPT_SEED:
seed = strtoul (optarg, NULL, 0);
do_srandom = 1;
break;
}
}
# define CMDLINE_PROCESS cmdline_process_function
# define CALL(impl, ...) \
(* (proto_t) (impl)->fn) (__VA_ARGS__)
# ifdef TEST_NAME
/* Increase size of FUNC_LIST if assert is triggered at run-time. */
static struct libc_ifunc_impl func_list[32];
static int func_count;
static int impl_count = -1;
static impl_t *impl_array;
# define FOR_EACH_IMPL(impl, notall) \
impl_t *impl; \
int count; \
if (impl_count == -1) \
{ \
impl_count = 0; \
if (func_count != 0) \
{ \
int f; \
impl_t *skip = NULL, *a; \
for (impl = __start_impls; impl < __stop_impls; ++impl) \
if (strcmp (impl->name, TEST_NAME) == 0) \
skip = impl; \
else \
impl_count++; \
a = impl_array = malloc ((impl_count + func_count) * \
sizeof (impl_t)); \
for (impl = __start_impls; impl < __stop_impls; ++impl) \
if (impl != skip) \
*a++ = *impl; \
for (f = 0; f < func_count; f++) \
if (func_list[f].usable) \
{ \
a->name = func_list[f].name; \
a->fn = func_list[f].fn; \
a->test = 1; \
a++; \
} \
impl_count = a - impl_array; \
} \
else \
{ \
impl_count = __stop_impls - __start_impls; \
impl_array = __start_impls; \
} \
} \
impl = impl_array; \
for (count = 0; count < impl_count; ++count, ++impl) \
if (!notall || impl->test)
# else /* !TEST_NAME */
# define FOR_EACH_IMPL(impl, notall) \
for (impl_t *impl = __start_impls; impl < __stop_impls; ++impl) \
if (!notall || impl->test)
# endif /* !TEST_NAME */
# ifndef BUF1PAGES
# define BUF1PAGES 1
# endif
static void
test_init (void)
{
# ifdef TEST_NAME
func_count = __libc_ifunc_impl_list (TEST_NAME, func_list,
(sizeof func_list
/ sizeof func_list[0]));
# endif
page_size = 2 * getpagesize ();
# ifdef MIN_PAGE_SIZE
if (page_size < MIN_PAGE_SIZE)
page_size = MIN_PAGE_SIZE;
# endif
buf1 = mmap (0, (BUF1PAGES + 1) * page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (buf1 == MAP_FAILED)
error (EXIT_FAILURE, errno, "mmap failed");
if (mprotect (buf1 + BUF1PAGES * page_size, page_size, PROT_NONE))
error (EXIT_FAILURE, errno, "mprotect failed");
buf2 = mmap (0, 2 * page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (buf2 == MAP_FAILED)
error (EXIT_FAILURE, errno, "mmap failed");
if (mprotect (buf2 + page_size, page_size, PROT_NONE))
error (EXIT_FAILURE, errno, "mprotect failed");
if (do_srandom)
{
printf ("Setting seed to 0x%x\n", seed);
srandom (seed);
}
memset (buf1, 0xa5, BUF1PAGES * page_size);
memset (buf2, 0x5a, page_size);
}
#endif /* TEST_MAIN */

Some files were not shown because too many files have changed in this diff Show More