Compare commits

...
Author SHA1 Message Date
Andreas Schwab 4f2b767fef glibc 2.14.1 release 2011-10-07 11:48:55 +02:00
Andreas Schwab a882ce88c5 NEWS for 2.14.1 2011-10-07 11:48:49 +02:00
Andreas Schwab 2ae6256336 Correctly reparse group line after enlarging the buffer
(cherry picked from commit 32c76b63be)
2011-10-07 11:46:18 +02:00
Andreas Schwab 8bd683657e Avoid race between {,__de}allocate_stack and __reclaim_stacks during fork
(cherry picked from commit 7a775e6b3d)
2011-09-15 16:12:19 +02:00
Andreas Schwab 69c1dfc1a7 Fix setxid race handling exiting threads
(cherry picked from commit 523df51151)
2011-09-07 14:43:35 +02:00
Jiri Olsa 184d66c5b9 rtld, i386: Fix cfi directive in audit trampoline code
_dl_runtime_profile function has wrong cfi directive when
rewinding stack back for the pltexit path.

Only 8 bytes - 2 'pop edx' instructions from the pltentry-only
code should be rewinded back.

With attached patch, I'm able to rewind stack correctly
throught the rtld code from audit library callback.
(cherry picked from commit fbeb5f4db1)
2011-09-07 14:43:35 +02:00
Andreas Schwab 3cca60520b Fix scope handling during dl_close
(cherry picked from commit 39dd69dfb9)
2011-09-07 11:48:41 +02:00
Andreas Schwab 8c0c0e8819 Fix spurious nop at start of __strspn_ia32
(cherry picked from commit 2cae499541)
2011-09-07 11:48:06 +02:00
Andreas Schwab e9f35ea6af Revert "Don't crash when dependencies are missing"
This reverts commit f2092faf2b.
(cherry picked from commit f55ffe58e9)
2011-09-07 11:47:10 +02:00
Andreas Schwab 435e230ccc Correct cycle detection during dependency sorting
(cherry picked from commit e888bcbe4f)
2011-09-07 11:46:19 +02:00
Ulrich Drepper 2b160af814 Add test for BZ 13114
(cherry picked from commit 5c43483f0c)
2011-09-07 11:44:40 +02:00
Andreas Jaeger fcec7096ab Fix fopen (non-existing-file, "re") errno
(cherry picked from commit a101b025af)
2011-09-07 11:43:38 +02:00
Ulrich Drepper 9ddfa2b9ad Fix minor CFI problem in regular x86-64 trampoline
(cherry picked from commit 0276a718c0)
2011-09-07 11:42:48 +02:00
Ulrich Drepper 7be2249733 Fix CFI info in x86-64 trampolines for non-AVX code
(cherry picked from commit c88f17668b)
2011-09-07 11:41:54 +02:00
Roland McGrath 4eddf93f5c Clean up locale/Makefile variables for -D switches.
(cherry picked from commit 675456ef83)
2011-08-15 10:42:56 +02:00
Ulrich Drepper f370dd3dc5 Fix compile problem
l10nflist compiles for localedef now.  Optimize a bit.
(cherry picked from commit f9ddf089f1)
2011-08-15 10:42:30 +02:00
Ulrich Drepper f47fcd632e Locale-independent parsing in libintl
(cherry picked from commit 89edf2e911)
2011-08-15 10:42:16 +02:00
Andreas Schwab 3ae1021bea Fix stack alignment on x86_64
(cherry picked from commit a724d1b9bf)
2011-08-09 16:42:12 +02:00
Andreas Schwab e2a309033d Properly tokenize nameserver line for servers with IPv6 address
(cherry picked from commit 9be9bfcc9d)
2011-08-05 10:04:14 +02:00
Andreas Schwab c57be1aeee Fix encoding name for IDN in getaddrinfo
(cherry picked from commit 2e96f1c73b)
2011-08-05 10:03:29 +02:00
Andreas Schwab 8cb4ac4610 Fix inline strncat/strncmp on x86
(cherry picked from commit 8c1a459f9a)
2011-08-05 10:00:57 +02:00
Ulrich Drepper fcbeae78e4 One more typo in AVX test
(cherry picked from commit bba33c289b)
2011-07-25 10:05:45 +02:00
Ulrich Drepper d2f2a3fd9d One more change to XSAVE patch
(cherry picked from commit 1aae088a8a)
2011-07-25 10:05:22 +02:00
Andreas Schwab d73a25eba3 Fix AVX check
(cherry picked from commit 1d002f2539)
2011-07-25 10:04:58 +02:00
Ulrich Drepper 722bff7a4c Fix check for AVX enablement
The AVX bit is set if the CPU supports AVX.  But this doesn't mean the
kernel does.  Add checks according to Intel's documentation.
(cherry picked from commit 5644ef5461)
2011-07-25 10:04:42 +02:00
Ulrich Drepper 63072fc617 Check for overflows in expressions
Some passed in values might cause overflows in expressions.
(cherry picked from commit 90bb2039e9)
2011-07-21 14:49:27 +02:00
Ulrich Drepper 1390c85454 Force :a_x86_64_ymm to be 16-byte aligned
(cherry picked from commit 6986b98a18)
2011-07-21 12:53:27 +02:00
Andreas Schwab 6e23b0ab48 Use size_t for strlen results
(cherry picked from commit 28b59fca7a)
2011-07-21 12:22:54 +02:00
Andreas Schwab 680b74830a Fix alloca accounting in strxfm
(cherry picked from commit e0e7228480)
2011-07-21 12:21:42 +02:00
Ulrich Drepper f6244abb8c Avoid possible crashes in anormal nscd exits
(cherry picked from commit feb1eb0be7)
2011-07-21 12:21:26 +02:00
Andreas Jaeger b3c34b4a97 Add test case strtod underflow
(cherry picked from commit 04d08991c4)
2011-07-21 12:19:50 +02:00
Andreas Dilger 51f8ca9648 Handle Lustre filesystem
(cherry picked from commit de283087c7)
2011-07-21 12:18:50 +02:00
Ulrich Drepper 77b2540f78 Handle W; without long options in getopt
(cherry picked from commit 01636b2140)
2011-07-21 12:17:04 +02:00
Ulrich Drepper af6207d539 Change error code for underflows in strtod
(cherry picked from commit 9895c8bc62)
2011-07-21 12:15:33 +02:00
Ulrich Drepper 1a1fbe1558 Fix robust mutex handling after fork
(cherry picked from commit 6f8326cacd)
2011-07-04 14:37:05 +02:00
Andreas Schwab 01d737a470 Make sure RES_USE_INET6 is always restored
(cherry picked from commit 89f654c57b)
2011-06-30 13:15:03 +02:00
Ulrich Drepper 3ad68d2c0b Fix quoting in some installed shell scripts
(cherry picked from commit 5c0b8d9013)
2011-06-30 11:22:36 +02:00
Andreas Schwab 96147940d8 Fix crash in GB18030 encoder
(cherry picked from commit a417218158)
2011-06-28 13:30:52 +02:00
Andreas Schwab 5ec98a06e7 Fix Ipv4&IPv6 lookup in getaddrinfo
Problem introduced in the last patch.
(cherry picked from commit e12df166d3)
2011-06-24 16:14:25 +02:00
Ulrich Drepper 0e779ef2a9 Fix IPv6-only lookups through getaddrinfo
A recent patch introduced a problem where IPv6 lookups happily returned
IPv4 addresses.
(cherry picked from commit c0244a9ded)
2011-06-22 10:49:40 +02:00
Ulrich Drepper 5babac1535 Fix typo in recent resolver change which causes segvs
(cherry picked from commit 57912a71cc)
2011-06-16 10:46:25 +02:00
Andreas Schwab fe6a22b68c Improve 64-bit build
An imperfect version of fxstatat64 was used in ld.so.
(cherry picked from commit ee22793dd0)
2011-06-16 10:46:18 +02:00
Andreas Jaeger 74cab7c660 Quash two memset undeclared warnings.
(cherry picked from commit c71ca1f89c)
2011-06-16 10:45:06 +02:00
Ulrich Drepper 039ab4445d Fix memory leak in getaddrinfo
(cherry picked from commit 3154bfb8c7)
2011-06-14 13:14:41 +02:00
60 changed files with 857 additions and 181 deletions
+236
View File
@@ -1,3 +1,239 @@
2011-10-07 Andreas Schwab <schwab@redhat.com>
* version.h (VERSION): Bump for 2.14.1 release.
2011-09-27 Andreas Schwab <schwab@redhat.com>
* nss/nss_files/files-initgroups.c (_nss_files_initgroups_dyn):
Reread the line before reparsing it.
2011-08-29 Jiri Olsa <jolsa@redhat.com>
* sysdeps/i386/dl-trampoline.S (_dl_runtime_profile): Fix cfi
directive.
2011-08-24 Andreas Schwab <schwab@redhat.com>
* elf/Makefile: Add rules to build and run unload8 test.
* elf/unload8.c: New file.
* elf/unload8mod1.c: New file.
* elf/unload8mod1x.c: New file.
* elf/unload8mod2.c: New file.
* elf/unload8mod3.c: New file.
* elf/dl-close.c (_dl_close_worker): Reset private search list if
it wasn't used.
2011-08-23 Andreas Schwab <schwab@redhat.com>
* sysdeps/i386/i686/multiarch/strspn.S (ENTRY): Add missing
backslash.
2011-08-22 Andreas Schwab <schwab@redhat.com>
* elf/dl-deps.c (_dl_map_object_deps): Move check for missing
dependencies back to end of function.
2011-08-16 Andreas Schwab <schwab@redhat.com>
[BZ #11724]
* elf/dl-deps.c (_dl_map_object_deps): Only assume cycle when
object is seen twice.
* elf/dl-fini.c (_dl_sort_fini): Likewise.
* elf/Makefile (distribute): Add tst-initorder2.c.
(tests): Add tst-initorder2.
(modules-names): Add tst-initorder2a tst-initorder2b
tst-initorder2c tst-initorder2d. Add rules to build them.
($(objpfx)tst-initorder2.out): New rule.
* elf/tst-initorder2.c: New file.
* elf/tst-initorder2.exp: New file.
2011-08-20 Ulrich Drepper <drepper@gmail.com>
[BZ #13114]
* stdio-common/Makefile (tests): Add bug24.
* stdio-common/bug24.c: New file.
2011-08-19 Andreas Jaeger <aj@suse.de>
[BZ #13114]
* libio/fileops.c (_IO_new_file_fopen): Fix handling of
non-existant file when using close-on-exec mode.
2011-08-20 Ulrich Drepper <drepper@gmail.com>
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_resolve): Fix CFI for
the very first instruction.
2011-08-20 Ulrich Drepper <drepper@gmail.com>
* sysdeps/x86_64/dl-trampoline.h: If MORE_CODE is defined, restore
the CFI state in the end.
* sysdeps/x86_64/dl-trampoline.S: Define MORE_CODE before first
inclusion of dl-trampoline.h.
Based on a patch by Jiri Olsa <jolsa@redhat.com>.
2011-08-14 Roland McGrath <roland@hack.frob.com>
* locale/Makefile (locale-CPPFLAGS): Renamed CPPFLAGS-locale-programs.
(locale-CPPFLAGS): New variable; put LOCALEDIR, LOCALE_ALIAS_PATH and
-Iprograms here.
(cppflags-iterator.mk sequence): Use locale-programs in place of nonlib.
(localedef-modules): Add localedef.
(locale-modules): Add locale.
2011-08-13 Ulrich Drepper <drepper@gmail.com>
* intl/l10nflist.c (_nl_normalize_codeset): Make it compile outside
of libc. Make tolower call locale-independent. Optimize a bit by
using isdigit instead of isalnum.
* locale/Makefile (locale-CPPFLAGS): Add -DNOT_IN_libc.
2011-08-11 Ulrich Drepper <drepper@gmail.com>
* intl/l10nflist.c (_nl_make_l10nflist): Use locale-independent
classification.
2011-07-22 Andreas Schwab <schwab@redhat.com>
* resolv/res_init.c (__res_vinit): Properly tokenize nameserver
line.
2011-07-26 Andreas Schwab <schwab@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Don't discard result of
encoding to ACE if AI_IDN.
2011-07-25 Andreas Schwab <schwab@redhat.com>
* sysdeps/i386/i486/bits/string.h (__strncat_g): Correctly handle
__n bigger than INT_MAX+1.
(__strncmp_g): Likewise.
2011-07-23 Ulrich Drepper <drepper@gmail.com>
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix one more
typo.
(_dl_x86_64_save_sse): Likewise.
2011-07-22 Ulrich Drepper <drepper@gmail.com>
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix test for
OSXSAVE.
(_dl_x86_64_save_sse): Likewise.
2011-07-21 Andreas Schwab <schwab@redhat.com>
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix last
change.
(_dl_x86_64_save_sse): Use correct AVX check.
2011-07-20 Ulrich Drepper <drepper@gmail.com>
[BZ #13007]
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): More complete
check for AVX enablement so that we don't crash with old kernels and
new hardware.
* elf/tst-audit4.c: Add same checks here.
* elf/tst-audit6.c: Likewise.
2011-07-20 Ulrich Drepper <drepper@gmail.com>
[BZ #12852]
* posix/glob.c (glob): Check passed in values before using them in
expressions to avoid some overflows.
(glob_in_dir): Likewise.
2011-07-20 Ulrich Drepper <drepper@gmail.com>
* sysdeps/x86_64/bits/link.h (La_x86_64_ymm): Force 16-byte alignment.
2011-07-20 Andreas Schwab <schwab@redhat.com>
* resolv/res_query.c (__libc_res_nquerydomain): Use size_t for
strlen results.
2011-07-19 Andreas Schwab <schwab@redhat.com>
* string/strxfrm_l.c (STRXFRM): Fix alloca accounting.
2011-07-19 Ulrich Drepper <drepper@gmail.com>
* nscd/nscd.c (termination_handler): Don't do anything for a database
if it has not yet been initialized.
2011-07-05 Andreas Jaeger <aj@suse.de>
[BZ#9696]
* stdlib/tst-strtod.c: Add testcase.
2011-07-07 Ulrich Drepper <drepper@gmail.com>
[BZ #12868]
* sysdeps/unix/sysv/linux/linux_fsinfo.h: Define Lustre constants.
* sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags):
Handle Lustre.
* sysdeps/unix/sysv/linux/pathconf.c (__statfs_link_max): Likewise.
(__statfs_filesize_max): Likewise.
Patch mostly by Andreas Dilger <adilger@whamcloud.com>.
2011-07-06 Ulrich Drepper <drepper@gmail.com>
[BZ #12922]
* posix/getopt.c (_getopt_internal_r): When "W;" is in short options
but no long options are defined, just return 'W'.
2011-06-22 Marek Polacek <mpolacek@redhat.com>
[BZ #9696]
* stdlib/strtod_l.c (round_and_return): Set ERANGE instead of EDOM.
2011-06-30 Andreas Schwab <schwab@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Make sure RES_USE_INET6
is always restored.
2011-06-28 Ulrich Drepper <drepper@gmail.com>
[BZ #12935]
* malloc/memusage.sh: Fix quoting in message.
* debug/xtrace.sh: Likewise.
2011-06-27 Andreas Schwab <schwab@redhat.com>
* iconvdata/gb18030.c (BODY for TO_LOOP): Fix encoding of non-BMP
two-byte characters.
2011-06-22 Andreas Schwab <schwab@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Fix last change.
2011-06-21 Ulrich Drepper <drepper@gmail.com>
[BZ #12885]
* sysdeps/posix/getaddrinfo.c (gaih_inet): When looking up only IPv6
addresses using gethostbyname4_r ignore IPv4 addresses.
2011-06-15 Ulrich Drepper <drepper@gmail.com>
* resolv/res_send.c (__libc_res_nsend): Fix typos in last patch. We
need to dereference resplen2.
2011-06-14 Andreas Schwab <schwab@redhat.com>
* sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c: New file.
2011-06-14 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/check_native.c: Include <string.h> for
memset declaration.
2011-06-10 Andreas Schwab <schwab@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Fix logic allocating
tmpbuf.
2011-06-07 David S. Miller <davem@davemloft.net>
* sysdeps/sparc/sparc32/dl-irel.h (elf_irela): Pass dl_hwcap to
+8 -1
View File
@@ -1,10 +1,17 @@
GNU C Library NEWS -- history of user-visible changes. 2011-6-4
GNU C Library NEWS -- history of user-visible changes. 2011-10-07
Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
See the end for copying conditions.
Please send GNU C library bug reports via <http://sources.redhat.com/bugzilla/>
using `glibc' in the "product" field.
Version 2.14.1
* The following bugs are resolved with this release:
9696, 11724, 12841, 12849, 12852, 12868, 12885, 12922, 12935, 13007,
13114
Version 2.14
* The following bugs are resolved with this release:
+1 -1
View File
@@ -30,7 +30,7 @@ do_usage() {
# Refer to --help option.
help_info() {
printf >&2 $"Try \`%s --help' or `%s --usage' for more information.\n" xtrace xtrace
printf >&2 $"Try \`%s --help' or \`%s --usage' for more information.\n" xtrace xtrace
exit 1
}
+33 -6
View File
@@ -90,6 +90,7 @@ distribute := rtld-Rules \
unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \
unload6mod1.c unload6mod2.c unload6mod3.c \
unload7mod1.c unload7mod2.c \
unload8mod1.c unload8mod1x.c unload8mod2.c unload8mod3.c \
tst-audit1.c tst-audit2.c tst-audit3.c tst-audit4.c \
tst-auditmod1.c tst-auditmod3a.c tst-auditmod3b.c \
tst-auditmod4a.c tst-auditmod4b.c \
@@ -120,9 +121,10 @@ distribute := rtld-Rules \
ifuncmain7pie.c ifuncmain7static.c \
tst-unique1.c tst-unique1mod1.c tst-unique1mod2.c \
tst-unique2.c tst-unique2mod1.c tst-unique2mod2.c \
tst-initordera1.c tst-initordera2.c tst-initorderb1.c \
tst-initorderb2.c tst-initordera3.c tst-initordera4.c \
tst-initorder.c
tst-initordera1.c tst-initordera2.c tst-initorderb1.c \
tst-initorderb2.c tst-initordera3.c tst-initordera4.c \
tst-initorder.c \
tst-initorder2.c
CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables
@@ -221,11 +223,11 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \
tst-dlmodcount tst-dlopenrpath tst-deep1 \
tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \
unload3 unload4 unload5 unload6 unload7 tst-global1 order2 \
unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
tst-audit1 tst-audit2 \
tst-stackguard1 tst-addr1 tst-thrlock \
tst-unique1 tst-unique2 tst-unique3 tst-unique4 \
tst-initorder
tst-initorder tst-initorder2
# reldep9
test-srcs = tst-pathopt
selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
@@ -279,6 +281,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
unload4mod1 unload4mod2 unload4mod3 unload4mod4 \
unload6mod1 unload6mod2 unload6mod3 \
unload7mod1 unload7mod2 \
unload8mod1 unload8mod1x unload8mod2 unload8mod3 \
order2mod1 order2mod2 order2mod3 order2mod4 \
tst-unique1mod1 tst-unique1mod2 \
tst-unique2mod1 tst-unique2mod2 \
@@ -286,7 +289,8 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
tst-unique4lib \
tst-initordera1 tst-initorderb1 \
tst-initordera2 tst-initorderb2 \
tst-initordera3 tst-initordera4
tst-initordera3 tst-initordera4 \
tst-initorder2a tst-initorder2b tst-initorder2c tst-initorder2d
ifeq (yes,$(have-initfini-array))
modules-names += tst-array2dep tst-array5dep
endif
@@ -568,6 +572,9 @@ $(objpfx)unload6mod2.so: $(libdl)
$(objpfx)unload6mod3.so: $(libdl)
$(objpfx)unload7mod1.so: $(libdl)
$(objpfx)unload7mod2.so: $(objpfx)unload7mod1.so
$(objpfx)unload8mod1.so: $(objpfx)unload8mod2.so
$(objpfx)unload8mod2.so: $(objpfx)unload8mod3.so
$(objpfx)unload8mod3.so: $(libdl)
$(objpfx)tst-initordera2.so: $(objpfx)tst-initordera1.so
$(objpfx)tst-initorderb2.so: $(objpfx)tst-initorderb1.so $(objpfx)tst-initordera2.so
$(objpfx)tst-initordera3.so: $(objpfx)tst-initorderb2.so $(objpfx)tst-initorderb1.so
@@ -881,6 +888,9 @@ $(objpfx)unload7: $(libdl)
$(objpfx)unload7.out: $(objpfx)unload7mod1.so $(objpfx)unload7mod2.so
unload7-ENV = MALLOC_PERTURB_=85
$(objpfx)unload8: $(libdl)
$(objpfx)unload8.out: $(objpfx)unload8mod1.so $(objpfx)unload8mod1x.so
ifdef libdl
$(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a
$(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so
@@ -1156,6 +1166,23 @@ $(objpfx)tst-initorder.out: $(objpfx)tst-initorder
$< > $@
cmp $@ tst-initorder.exp > /dev/null
$(objpfx)tst-initorder2: $(objpfx)tst-initorder2a.so $(objpfx)tst-initorder2d.so $(objpfx)tst-initorder2c.so
$(objpfx)tst-initorder2a.so: $(objpfx)tst-initorder2b.so
$(objpfx)tst-initorder2b.so: $(objpfx)tst-initorder2c.so
$(objpfx)tst-initorder2c.so: $(objpfx)tst-initorder2d.so
define o-iterator-doit
$(objpfx)tst-initorder2$o.os: tst-initorder2.c; \
$$(compile-command.c) -DNAME=\"$o\"
endef
object-suffixes-left := a b c d
include $(o-iterator)
$(objpfx)tst-initorder2.out: $(objpfx)tst-initorder2
$(elf-objpfx)${rtld-installed-name} \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@
cmp $@ tst-initorder2.exp > /dev/null
ifeq (yes,$(config-cflags-avx))
AVX-CFLAGS=-mavx
ifeq (yes,$(config-cflags-novzeroupper))
+7
View File
@@ -430,6 +430,13 @@ _dl_close_worker (struct link_map *map)
imap->l_scope_max = new_size;
}
else if (new_list != NULL)
{
/* We didn't change the scope array, so reset the search
list. */
imap->l_searchlist.r_list = NULL;
imap->l_searchlist.r_nlist = 0;
}
/* The loader is gone, so mark the object as not having one.
Note: l_idx != IDX_STILL_USED -> object will be removed. */
+11 -10
View File
@@ -491,10 +491,6 @@ _dl_map_object_deps (struct link_map *map,
if (errno == 0 && errno_saved != 0)
__set_errno (errno_saved);
if (errno_reason)
_dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname,
NULL, errstring);
struct link_map **old_l_initfini = NULL;
if (map->l_initfini != NULL && map->l_type == lt_loaded)
{
@@ -626,12 +622,12 @@ Filters not supported with LD_TRACE_PRELINKING"));
/* We can skip looking for the binary itself which is at the front
of the search list. */
i = 1;
bool seen[nlist];
memset (seen, false, nlist * sizeof (seen[0]));
char seen[nlist];
memset (seen, 0, nlist * sizeof (seen[0]));
while (1)
{
/* Keep track of which object we looked at this round. */
seen[i] = true;
seen[i] += seen[i] < 2;
struct link_map *thisp = l_initfini[i];
/* Find the last object in the list for which the current one is
@@ -652,15 +648,16 @@ Filters not supported with LD_TRACE_PRELINKING"));
(k - i) * sizeof (l_initfini[0]));
l_initfini[k] = thisp;
if (seen[i + 1])
if (seen[i + 1] > 1)
{
++i;
goto next_clear;
}
char this_seen = seen[i];
memmove (&seen[i], &seen[i + 1],
(k - i) * sizeof (seen[0]));
seen[k] = true;
seen[k] = this_seen;
goto next;
}
@@ -671,7 +668,7 @@ Filters not supported with LD_TRACE_PRELINKING"));
if (++i == nlist)
break;
next_clear:
memset (&seen[i], false, (nlist - i) * sizeof (seen[0]));
memset (&seen[i], 0, (nlist - i) * sizeof (seen[0]));
next:;
}
@@ -690,4 +687,8 @@ Filters not supported with LD_TRACE_PRELINKING"));
}
if (old_l_initfini != NULL)
map->l_orig_initfini = old_l_initfini;
if (errno_reason)
_dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname,
NULL, errstring);
}
+8 -7
View File
@@ -40,12 +40,12 @@ _dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps,
/* We can skip looking for the binary itself which is at the front
of the search list for the main namespace. */
unsigned int i = ns == LM_ID_BASE;
bool seen[nmaps];
memset (seen, false, nmaps * sizeof (seen[0]));
char seen[nmaps];
memset (seen, 0, nmaps * sizeof (seen[0]));
while (1)
{
/* Keep track of which object we looked at this round. */
seen[i] = true;
seen[i] += seen[i] < 2;
struct link_map *thisp = maps[i];
/* Do not handle ld.so in secondary namespaces and object which
@@ -80,14 +80,15 @@ _dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps,
used[k] = here_used;
}
if (seen[i + 1])
if (seen[i + 1] > 1)
{
++i;
goto next_clear;
}
char this_seen = seen[i];
memmove (&seen[i], &seen[i + 1], (k - i) * sizeof (seen[0]));
seen[k] = true;
seen[k] = this_seen;
goto next;
}
@@ -97,7 +98,7 @@ _dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps,
unsigned int m = maps[k]->l_reldeps->act;
struct link_map **relmaps = &maps[k]->l_reldeps->list[0];
/* Look through the relocation dependencies of the object. */
/* Look through the relocation dependencies of the object. */
while (m-- > 0)
if (__builtin_expect (relmaps[m] == thisp, 0))
goto move;
@@ -110,7 +111,7 @@ _dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps,
if (++i == nmaps)
break;
next_clear:
memset (&seen[i], false, (nmaps - i) * sizeof (seen[0]));
memset (&seen[i], 0, (nmaps - i) * sizeof (seen[0]));
next:;
}
+18 -4
View File
@@ -6,16 +6,30 @@
#include <cpuid.h>
#include <immintrin.h>
static int
avx_enabled (void)
{
unsigned int eax, ebx, ecx, edx;
if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0
|| (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE))
return 0;
/* Check the OS has AVX and SSE saving enabled. */
asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
return (eax & 6) == 6;
}
extern __m256i audit_test (__m256i, __m256i, __m256i, __m256i,
__m256i, __m256i, __m256i, __m256i);
int
main (void)
{
unsigned int eax, ebx, ecx, edx;
/* Run AVX test only if AVX is supported. */
if (__get_cpuid (1, &eax, &ebx, &ecx, &edx)
&& (ecx & bit_AVX))
if (avx_enabled ())
{
__m256i ymm = _mm256_setzero_si256 ();
__m256i ret = audit_test (ymm, ymm, ymm, ymm, ymm, ymm, ymm, ymm);
+18 -4
View File
@@ -8,14 +8,28 @@
extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i,
__m128i, __m128i, __m128i, __m128i);
int
main (void)
static int
avx_enabled (void)
{
unsigned int eax, ebx, ecx, edx;
if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0
|| (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE))
return 0;
/* Check the OS has AVX and SSE saving enabled. */
asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
return (eax & 6) == 6;
}
int
main (void)
{
/* Run AVX test only if AVX is supported. */
if (__get_cpuid (1, &eax, &ebx, &ecx, &edx)
&& (ecx & bit_AVX))
if (avx_enabled ())
{
__m128i xmm = _mm_setzero_si128 ();
__m128i ret = audit_test (xmm, xmm, xmm, xmm, xmm, xmm, xmm, xmm);
+20
View File
@@ -0,0 +1,20 @@
#include <stdio.h>
#ifndef NAME
int
main (void)
{
puts ("main");
}
#else
static void __attribute__ ((constructor))
init (void)
{
puts ("init: " NAME);
}
static void __attribute__ ((destructor))
fini (void)
{
puts ("fini: " NAME);
}
#endif
+9
View File
@@ -0,0 +1,9 @@
init: d
init: c
init: b
init: a
main
fini: a
fini: b
fini: c
fini: d
+33
View File
@@ -0,0 +1,33 @@
#include <dlfcn.h>
#include <stdio.h>
int
main (void)
{
void *h = dlopen ("$ORIGIN/unload8mod1.so", RTLD_LAZY);
if (h == NULL)
{
puts ("dlopen unload8mod1.so failed");
return 1;
}
void *h2 = dlopen ("$ORIGIN/unload8mod1x.so", RTLD_LAZY);
if (h2 == NULL)
{
puts ("dlopen unload8mod1x.so failed");
return 1;
}
dlclose (h2);
int (*mod1) (void) = dlsym (h, "mod1");
if (mod1 == NULL)
{
puts ("dlsym failed");
return 1;
}
mod1 ();
dlclose (h);
return 0;
}
+7
View File
@@ -0,0 +1,7 @@
extern void mod2 (void);
void
mod1 (void)
{
mod2 ();
}
+1
View File
@@ -0,0 +1 @@
int mod1x;
+7
View File
@@ -0,0 +1,7 @@
extern void mod3 (void);
void
mod2 (void)
{
mod3 ();
}
+27
View File
@@ -0,0 +1,27 @@
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
void
mod3_fini2 (void)
{
}
void
mod3_fini (void)
{
mod3_fini2 ();
}
void
mod3 (void)
{
void *h = dlopen ("$ORIGIN/unload8mod2.so", RTLD_LAZY);
if (h == NULL)
{
puts ("dlopen unload8mod2.so failed");
exit (1);
}
atexit (mod3_fini);
}
+6 -6
View File
@@ -18233,17 +18233,17 @@ static const unsigned char __ucs_to_gb18030_tab2[][2] =
len = 0; \
} \
else if (ch == 0x20087) \
idx = 0xfe51; \
cp = (const unsigned char *) "\xfe\x51"; \
else if (ch == 0x20089) \
idx = 0xfe52; \
cp = (const unsigned char *) "\xfe\x52"; \
else if (ch == 0x200CC) \
idx = 0xfe53; \
cp = (const unsigned char *) "\xfe\x53"; \
else if (ch == 0x215d7) \
idx = 0xfe6c; \
cp = (const unsigned char *) "\xfe\x6c"; \
else if (ch == 0x2298F) \
idx = 0xfe76; \
cp = (const unsigned char *) "\xfe\x76"; \
else if (ch == 0x241FE) \
idx = 0xfe91; \
cp = (const unsigned char *) "\xfe\x91"; \
else \
len = 0; \
\
+14 -10
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1995-2002, 2004, 2005 Free Software Foundation, Inc.
/* Copyright (C) 1995-2002, 2004, 2005, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
@@ -134,7 +134,7 @@ argz_next__ (argz, argz_len, entry)
if (entry)
{
if (entry < argz + argz_len)
entry = strchr (entry, '\0') + 1;
entry = strchr (entry, '\0') + 1;
return entry >= argz + argz_len ? NULL : (char *) entry;
}
@@ -332,13 +332,18 @@ _nl_normalize_codeset (codeset, name_len)
char *retval;
char *wp;
size_t cnt;
#ifdef NOT_IN_libc
locale_t locale = newlocale (0, "C", NULL);
#else
# define locale _nl_C_locobj_ptr
#endif
for (cnt = 0; cnt < name_len; ++cnt)
if (isalnum ((unsigned char) codeset[cnt]))
if (__isalnum_l ((unsigned char) codeset[cnt], locale))
{
++len;
if (isalpha ((unsigned char) codeset[cnt]))
if (! __isdigit_l ((unsigned char) codeset[cnt], locale))
only_digit = 0;
}
@@ -346,15 +351,14 @@ _nl_normalize_codeset (codeset, name_len)
if (retval != NULL)
{
wp = retval;
if (only_digit)
wp = stpcpy (retval, "iso");
else
wp = retval;
wp = stpcpy (wp, "iso");
for (cnt = 0; cnt < name_len; ++cnt)
if (isalpha ((unsigned char) codeset[cnt]))
*wp++ = tolower ((unsigned char) codeset[cnt]);
else if (isdigit ((unsigned char) codeset[cnt]))
if (__isalpha_l ((unsigned char) codeset[cnt], locale))
*wp++ = __tolower_l ((unsigned char) codeset[cnt], locale);
else if (__isdigit_l ((unsigned char) codeset[cnt], locale))
*wp++ = codeset[cnt];
*wp = '\0';
+14 -16
View File
@@ -345,23 +345,22 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
result = _IO_file_open (fp, filename, omode|oflags, oprot, read_write,
is32not64);
#ifndef __ASSUME_O_CLOEXEC
if ((fp->_flags2 & _IO_FLAGS2_CLOEXEC) != 0 && __have_o_cloexec <= 0)
{
int fd = _IO_fileno (fp);
if (__have_o_cloexec == 0)
{
int flags = __fcntl (fd, F_GETFD);
__have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1;
}
if (__have_o_cloexec < 0)
__fcntl (fd, F_SETFD, FD_CLOEXEC);
}
#endif
#ifdef _LIBC
if (result != NULL)
{
#ifndef __ASSUME_O_CLOEXEC
if ((fp->_flags2 & _IO_FLAGS2_CLOEXEC) != 0 && __have_o_cloexec <= 0)
{
int fd = _IO_fileno (fp);
if (__have_o_cloexec == 0)
{
int flags = __fcntl (fd, F_GETFD);
__have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1;
}
if (__have_o_cloexec < 0)
__fcntl (fd, F_SETFD, FD_CLOEXEC);
}
#endif
/* Test whether the mode string specifies the conversion. */
cs = strstr (last_recognized + 1, ",ccs=");
if (cs != NULL)
@@ -432,7 +431,6 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
result->_mode = 1;
}
}
#endif /* GNU libc */
return result;
}
+19 -12
View File
@@ -1,4 +1,5 @@
# Copyright (C) 1991,1992,1995-2003,2005,2009 Free Software Foundation, Inc.
# Copyright (C) 1991,1992,1995-2003,2005,2009,2011
# 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
@@ -59,10 +60,11 @@ vpath %.c programs ../crypt
vpath %.h programs
vpath %.gperf programs
localedef-modules := $(categories:%=ld-%) charmap linereader locfile \
localedef-modules := localedef $(categories:%=ld-%) \
charmap linereader locfile \
repertoire locarchive
localedef-aux := md5
locale-modules := locale-spec
locale-modules := locale locale-spec
lib-modules := charmap-dir simple-hash xmalloc xstrdup
@@ -90,22 +92,27 @@ endif
localepath = "$(localedir):$(i18ndir)"
locale-CPPFLAGS := -DLOCALE_PATH='$(localepath)' \
-DLOCALEDIR='"$(localedir)"' \
-DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \
-DCHARMAP_PATH='"$(i18ndir)/charmaps"' \
-DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \
-DLOCSRCDIR='"$(i18ndir)/locales"' -DHAVE_CONFIG_H \
-Iprograms
# -Iprograms doesn't really belong here, but this gets it at the head
# of the list instead of the tail, where CPPFLAGS-$(lib) gets added.
# We need it before the standard -I's to see programs/config.h first.
locale-CPPFLAGS = -DLOCALEDIR='"$(localedir)"' \
-DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \
-Iprograms
CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \
-DCHARMAP_PATH='"$(i18ndir)/charmaps"' \
-DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \
-DLOCSRCDIR='"$(i18ndir)/locales"' \
-DHAVE_CONFIG_H -DNOT_IN_libc
CFLAGS-charmap.c = -Wno-write-strings -Wno-char-subscripts
CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts
CFLAGS-charmap-dir.c = -Wno-write-strings
# This makes sure -DNOT_IN_libc is passed for all these modules.
# This makes sure -DNOT_IN_libc et al are passed for all these modules.
cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \
$(locale-modules) $(lib-modules))
lib := nonlib
lib := locale-programs
include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
+1 -1
View File
@@ -24,7 +24,7 @@ TEXTDOMAIN=libc
# Print usage message.
do_usage() {
printf >&2 $"Try \`%s --help' or `%s --usage' for more information.\n" memusage memusage
printf >&2 $"Try \`%s --help' or \`%s --usage' for more information.\n" memusage memusage
exit 1
}
+35
View File
@@ -1,3 +1,38 @@
2011-09-15 Andreas Schwab <schwab@redhat.com>
* sysdeps/pthread/list.h: Define only list_t if __need_list_t is
defined.
(list_add): Add atomic_write_barrier.
* descr.h: Define __need_list_t before including <list.h>.
* nptl-init.c: Include <list.h>
* allocatestack.c: Likewise.
2011-08-31 Andreas Schwab <schwab@redhat.com>
* allocatestack.c (setxid_mark_thread): Ensure that the exiting
thread is woken up.
2011-08-08 Andreas Schwab <schwab@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/cancellation.S: Maintain aligned
stack.
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
2011-06-30 Ulrich Drepper <drepper@gmail.com>
* nptl-init.c (__nptl_set_robust): New function.
(pthread_functions): Add reference.
* npthreadP.h: Declare __nptl_set_robust.
* sysdeps/pthread/pthread-functions.h (pthread_functions): Add
ptr_set_robust member.
* sysdeps/unix/sysv/linux/fork.c: Call set_robust_list syscall in
child if threads are used.
2011-06-14 Andreas Jaeger <aj@suse.de>
* pthread_rwlock_init.c: Include <string.h> for memset declaration.
2011-05-11 Ulrich Drepper <drepper@gmail.com>
[BZ #386]
+11 -1
View File
@@ -28,6 +28,7 @@
#include <dl-sysdep.h>
#include <dl-tls.h>
#include <tls.h>
#include <list.h>
#include <lowlevellock.h>
#include <kernel-features.h>
@@ -999,7 +1000,16 @@ setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
/* If the thread is exiting right now, ignore it. */
if ((ch & EXITING_BITMASK) != 0)
return;
{
/* Release the futex if there is no other setxid in
progress. */
if ((ch & SETXID_BITMASK) == 0)
{
t->setxid_futex = 1;
lll_futex_wake (&t->setxid_futex, 1, LLL_PRIVATE);
}
return;
}
}
while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
ch | SETXID_BITMASK, ch));
+1
View File
@@ -26,6 +26,7 @@
#include <stdbool.h>
#include <sys/types.h>
#include <hp-timing.h>
#define __need_list_t
#include <list.h>
#include <lowlevellock.h>
#include <pthreaddef.h>
+21 -2
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2002-2007, 2008, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2002-2007, 2008, 2009, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -29,6 +29,7 @@
#include <atomic.h>
#include <ldsodefs.h>
#include <tls.h>
#include <list.h>
#include <fork.h>
#include <version.h>
#include <shlib-compat.h>
@@ -67,6 +68,13 @@ static const char nptl_version[] __attribute_used__ = VERSION;
extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
#endif
#ifdef SHARED
static
#else
extern
#endif
void __nptl_set_robust (struct pthread *);
#ifdef SHARED
static void nptl_freeres (void);
@@ -130,7 +138,8 @@ static const struct pthread_functions pthread_functions =
.ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
.ptr__nptl_setxid = __nptl_setxid,
/* For now only the stack cache needs to be freed. */
.ptr_freeres = nptl_freeres
.ptr_freeres = nptl_freeres,
.ptr_set_robust = __nptl_set_robust
};
# define ptr_pthread_functions &pthread_functions
#else
@@ -147,7 +156,17 @@ nptl_freeres (void)
__unwind_freeres ();
__free_stacks (0);
}
static
#endif
void
__nptl_set_robust (struct pthread *self)
{
INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (set_robust_list, err, 2, &self->robust_head,
sizeof (struct robust_list_head));
}
/* For asynchronous cancellation we use a signal. This is the handler. */
+8 -5
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2002-2007, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2002-2007, 2009, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -555,17 +555,20 @@ extern void __pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffe
/* Old cleanup interfaces, still used in libc.so. */
extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
void (*routine) (void *), void *arg);
void (*routine) (void *), void *arg);
extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
int execute);
int execute);
extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
void (*routine) (void *), void *arg);
void (*routine) (void *), void *arg);
extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
int execute);
int execute);
extern void __nptl_deallocate_tsd (void) attribute_hidden;
extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
#ifndef SHARED
extern void __nptl_set_robust (struct pthread *self);
#endif
extern void __free_stacks (size_t limit) attribute_hidden;
+2 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2002, 2007, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2002,2007,2009,2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -18,6 +18,7 @@
02111-1307 USA. */
#include "pthreadP.h"
#include <string.h>
#include <kernel-features.h>
+23 -8
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2002, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2002, 2009, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -18,27 +18,39 @@
02111-1307 USA. */
#ifndef _LIST_H
#define _LIST_H 1
#ifndef __need_list_t
# define _LIST_H 1
#endif
/* The definitions of this file are adopted from those which can be
found in the Linux kernel headers to enable people familiar with
the latter find their way in these sources as well. */
#if defined __need_list_t || defined _LIST_H
# ifndef __list_t_defined
# define __list_t_defined
/* Basic type for the double-link list. */
typedef struct list_head
{
struct list_head *next;
struct list_head *prev;
} list_t;
# endif
# undef __need_list_t
#endif
#ifdef _LIST_H
# include <atomic.h>
/* Define a variable with the head and tail of the list. */
#define LIST_HEAD(name) \
# define LIST_HEAD(name) \
list_t name = { &(name), &(name) }
/* Initialize a new list head. */
#define INIT_LIST_HEAD(ptr) \
# define INIT_LIST_HEAD(ptr) \
(ptr)->next = (ptr)->prev = (ptr)
@@ -49,6 +61,7 @@ list_add (list_t *newp, list_t *head)
newp->next = head->next;
newp->prev = head;
head->next->prev = newp;
atomic_write_barrier ();
head->next = newp;
}
@@ -78,26 +91,28 @@ list_splice (list_t *add, list_t *head)
/* Get typed element from list at a given position. */
#define list_entry(ptr, type, member) \
# define list_entry(ptr, type, member) \
((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
/* Iterate forward over the elements of the list. */
#define list_for_each(pos, head) \
# define list_for_each(pos, head) \
for (pos = (head)->next; pos != (head); pos = pos->next)
/* Iterate forward over the elements of the list. */
#define list_for_each_prev(pos, head) \
# define list_for_each_prev(pos, head) \
for (pos = (head)->prev; pos != (head); pos = pos->prev)
/* Iterate backwards over the elements list. The list elements can be
removed from the list while doing this. */
#define list_for_each_prev_safe(pos, p, head) \
# define list_for_each_prev_safe(pos, p, head) \
for (pos = (head)->prev, p = pos->prev; \
pos != (head); \
pos = p, p = pos->prev)
#endif /* _LIST_H */
#endif /* list.h */
+2 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
/* Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -97,6 +97,7 @@ struct pthread_functions
void (*ptr__nptl_deallocate_tsd) (void);
int (*ptr__nptl_setxid) (struct xid_command *);
void (*ptr_freeres) (void);
void (*ptr_set_robust) (struct pthread *);
};
/* Variable in libc.so. */
+26 -7
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2002, 2003, 2007, 2008 Free Software Foundation, Inc.
/* Copyright (C) 2002, 2003, 2007, 2008, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -29,6 +29,7 @@
#include <ldsodefs.h>
#include <bits/stdio-lock.h>
#include <atomic.h>
#include <pthreadP.h>
unsigned long int *__fork_generation_pointer;
@@ -86,8 +87,8 @@ __libc_fork (void)
just go away. The unloading code works in the order of the
list.
While executing the registered handlers we are building a
list of all the entries so that we can go backward later on. */
While executing the registered handlers we are building a
list of all the entries so that we can go backward later on. */
while (1)
{
/* Execute the handler if there is one. */
@@ -154,6 +155,24 @@ __libc_fork (void)
GL(dl_cpuclock_offset) = now;
#endif
#ifdef __NR_set_robust_list
/* Initialize the robust mutex list which has been reset during
the fork. We do not check for errors since if it fails here
it failed at process start as well and noone could have used
robust mutexes. We also do not have to set
self->robust_head.futex_offset since we inherit the correct
value from the parent. */
# ifdef SHARED
if (__builtin_expect (__libc_pthread_functions_init, 0))
PTHFCT_CALL (ptr_set_robust, (self));
# else
extern __typeof (__nptl_set_robust) __nptl_set_robust
__attribute__((weak));
if (__builtin_expect (__nptl_set_robust != NULL, 0))
__nptl_set_robust (self);
# endif
#endif
/* Reset the file list. These are recursive mutexes. */
fresetlockfiles ();
@@ -170,10 +189,10 @@ __libc_fork (void)
allp->handler->child_handler ();
/* Note that we do not have to wake any possible waiter.
This is the only thread in the new process. The count
may have been bumped up by other threads doing a fork.
We reset it to 1, to avoid waiting for non-existing
thread(s) to release the count. */
This is the only thread in the new process. The count
may have been bumped up by other threads doing a fork.
We reset it to 1, to avoid waiting for non-existing
thread(s) to release the count. */
allp->handler->refcntr = 1;
/* XXX We could at this point look through the object pool
@@ -1,4 +1,4 @@
/* Copyright (C) 2009 Free Software Foundation, Inc.
/* Copyright (C) 2009, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2009.
@@ -71,7 +71,9 @@ ENTRY(__pthread_enable_asynccancel)
1: ret
3: movq $TCB_PTHREAD_CANCELED, %fs:RESULT
3: subq $8, %rsp
cfi_adjust_cfa_offset(8)
movq $TCB_PTHREAD_CANCELED, %fs:RESULT
lock
orl $TCB_EXITING_BITMASK, %fs:CANCELHANDLING
movq %fs:CLEANUP_JMP_BUF, %rdi
@@ -1,4 +1,4 @@
/* Copyright (C) 2002-2005, 2007, 2009, 2010 Free Software Foundation, Inc.
/* Copyright (C) 2002-2005, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -63,9 +63,9 @@ __pthread_cond_timedwait:
cfi_adjust_cfa_offset(8)
cfi_rel_offset(%r15, 0)
#ifdef __ASSUME_FUTEX_CLOCK_REALTIME
# define FRAME_SIZE 32
# define FRAME_SIZE (32+8)
#else
# define FRAME_SIZE 48
# define FRAME_SIZE (48+8)
#endif
subq $FRAME_SIZE, %rsp
cfi_adjust_cfa_offset(FRAME_SIZE)
@@ -1,4 +1,4 @@
/* Copyright (C) 2002-2007, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2002-2007, 2009, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -45,7 +45,7 @@ __pthread_cond_wait:
cfi_lsda(DW_EH_PE_udata4, .LexceptSTART)
#endif
#define FRAME_SIZE 32
#define FRAME_SIZE (32+8)
leaq -FRAME_SIZE(%rsp), %rsp
cfi_adjust_cfa_offset(FRAME_SIZE)
+4
View File
@@ -1,3 +1,7 @@
2011-09-15 Andreas Schwab <schwab@redhat.com>
* thread_dbP.h: Include <list.h>
2009-08-23 Roland McGrath <roland@redhat.com>
* td_ta_map_lwp2thr.c (__td_ta_lookup_th_unique): Move ta_ok check
+2 -1
View File
@@ -1,5 +1,5 @@
/* Private header for thread debug library
Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
Copyright (C) 2003, 2004, 2007, 2011 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
@@ -29,6 +29,7 @@
#include "proc_service.h"
#include "thread_db.h"
#include "../nptl/pthreadP.h" /* This is for *_BITMASK only. */
#include <list.h>
/* Indeces for the symbol names. */
enum
+1 -1
View File
@@ -477,7 +477,7 @@ termination_handler (int signum)
/* Synchronize memory. */
for (int cnt = 0; cnt < lastdb; ++cnt)
{
if (!dbs[cnt].enabled)
if (!dbs[cnt].enabled || dbs[cnt].head == NULL)
continue;
/* Make sure nobody keeps using the database. */
+8 -4
View File
@@ -52,8 +52,10 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
gid_t *groups = *groupsp;
/* We have to iterate over the entire file. */
while (!feof_unlocked (stream))
while (1)
{
fpos_t pos;
fgetpos (stream, &pos);
ssize_t n = getline (&line, &linelen, stream);
if (n < 0)
{
@@ -64,9 +66,8 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
}
struct group grp;
int res;
while ((res = _nss_files_parse_grent (line, &grp, buffer, buflen,
errnop)) == -1)
int res = _nss_files_parse_grent (line, &grp, buffer, buflen, errnop);
if (res == -1)
{
size_t newbuflen = 2 * buflen;
if (buffer_use_malloc || ! __libc_use_alloca (buflen + newbuflen))
@@ -85,6 +86,9 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
}
else
buffer = extend_alloca (buffer, buflen, newbuflen);
/* Reread current line, the parser has clobbered it. */
fsetpos (stream, &pos);
continue;
}
if (res > 0 && grp.gr_gid != group)
+7 -2
View File
@@ -871,6 +871,9 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
/* Convenience. Treat POSIX -W foo same as long option --foo */
if (temp[0] == 'W' && temp[1] == ';')
{
if (longopts == NULL)
goto no_longs;
char *nameend;
const struct option *p;
const struct option *pfound = NULL;
@@ -1086,8 +1089,10 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
}
return pfound->val;
}
d->__nextchar = NULL;
return 'W'; /* Let the application handle it. */
no_longs:
d->__nextchar = NULL;
return 'W'; /* Let the application handle it. */
}
if (temp[1] == ':')
{
+34 -8
View File
@@ -46,6 +46,12 @@
#include <pwd.h>
#if defined HAVE_STDINT_H || defined _LIBC
# include <stdint.h>
#elif !defined UINTPTR_MAX
# define UINTPTR_MAX (~((size_t) 0))
#endif
#include <errno.h>
#ifndef __set_errno
# define __set_errno(val) errno = (val)
@@ -436,6 +442,10 @@ glob (pattern, flags, errfunc, pglob)
else
{
size_t i;
if (pglob->gl_offs >= ~((size_t) 0) / sizeof (char *))
return GLOB_NOSPACE;
pglob->gl_pathv = (char **) malloc ((pglob->gl_offs + 1)
* sizeof (char *));
if (pglob->gl_pathv == NULL)
@@ -954,10 +964,8 @@ glob (pattern, flags, errfunc, pglob)
int newcount = pglob->gl_pathc + pglob->gl_offs;
char **new_gl_pathv;
new_gl_pathv
= (char **) realloc (pglob->gl_pathv,
(newcount + 1 + 1) * sizeof (char *));
if (new_gl_pathv == NULL)
if (newcount > UINTPTR_MAX - (1 + 1)
|| newcount + 1 + 1 > ~((size_t) 0) / sizeof (char *))
{
nospace:
free (pglob->gl_pathv);
@@ -965,6 +973,12 @@ glob (pattern, flags, errfunc, pglob)
pglob->gl_pathc = 0;
return GLOB_NOSPACE;
}
new_gl_pathv
= (char **) realloc (pglob->gl_pathv,
(newcount + 1 + 1) * sizeof (char *));
if (new_gl_pathv == NULL)
goto nospace;
pglob->gl_pathv = new_gl_pathv;
if (flags & GLOB_MARK)
@@ -1104,14 +1118,19 @@ glob (pattern, flags, errfunc, pglob)
int newcount = pglob->gl_pathc + pglob->gl_offs;
char **new_gl_pathv;
if (newcount > UINTPTR_MAX - 2
|| newcount + 2 > ~((size_t) 0) / sizeof (char *))
{
nospace2:
globfree (&dirs);
return GLOB_NOSPACE;
}
new_gl_pathv = (char **) realloc (pglob->gl_pathv,
(newcount + 2)
* sizeof (char *));
if (new_gl_pathv == NULL)
{
globfree (&dirs);
return GLOB_NOSPACE;
}
goto nospace2;
pglob->gl_pathv = new_gl_pathv;
pglob->gl_pathv[newcount] = __strdup (pattern);
@@ -1636,6 +1655,13 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
{
result = 0;
if (pglob->gl_pathc > UINTPTR_MAX - pglob->gl_offs
|| pglob->gl_pathc + pglob->gl_offs > UINTPTR_MAX - nfound
|| pglob->gl_pathc + pglob->gl_offs + nfound > UINTPTR_MAX - 1
|| (pglob->gl_pathc + pglob->gl_offs + nfound + 1
> UINTPTR_MAX / sizeof (char *)))
goto memory_error;
char **new_gl_pathv;
new_gl_pathv
= (char **) realloc (pglob->gl_pathv,
+1 -1
View File
@@ -318,7 +318,7 @@ __res_vinit(res_state statp, int preinit) {
struct in6_addr a6;
char *el;
if ((el = strchr(cp, '\n')) != NULL)
if ((el = strpbrk(cp, " \t\n")) != NULL)
*el = '\0';
if ((el = strchr(cp, SCOPE_DELIMITER)) != NULL)
*el = '\0';
+1 -1
View File
@@ -543,7 +543,7 @@ __libc_res_nquerydomain(res_state statp,
{
char nbuf[MAXDNAME];
const char *longname = nbuf;
int n, d;
size_t n, d;
#ifdef DEBUG
if (statp->options & RES_DEBUG)
+2 -2
View File
@@ -549,7 +549,7 @@ __libc_res_nsend(res_state statp, const u_char *buf, int buflen,
ns, ansp, ansp2, nansp2, resplen2);
if (n < 0)
return (-1);
if (n == 0 && (buf2 == NULL || resplen2 == 0))
if (n == 0 && (buf2 == NULL || *resplen2 == 0))
goto next_ns;
} else {
/* Use datagrams. */
@@ -559,7 +559,7 @@ __libc_res_nsend(res_state statp, const u_char *buf, int buflen,
ansp2, nansp2, resplen2);
if (n < 0)
return (-1);
if (n == 0 && (buf2 == NULL || resplen2 == 0))
if (n == 0 && (buf2 == NULL || *resplen2 == 0))
goto next_ns;
if (v_circuit)
// XXX Check whether both requests failed or
+1 -1
View File
@@ -60,7 +60,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \
scanf16 scanf17 tst-setvbuf1 tst-grouping bug23
scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24
test-srcs = tst-unbputc tst-printf
+26
View File
@@ -0,0 +1,26 @@
#include <stdio.h>
#include <errno.h>
static int
do_test (void)
{
FILE *fp = fopen ("/foobar_does_no_exit", "re");
if (fp != NULL)
{
/* A joker created this file. Ignore the test. */
fclose (fp);
return 0;
}
if (errno == ENOENT)
{
printf ("no bug\n");
return 0;
}
printf ("bug : expected ENOENT, got: %m\n");
return 1;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"
+2 -2
View File
@@ -1,5 +1,5 @@
/* Convert string representing a number to float value, using given locale.
Copyright (C) 1997,1998,2002,2004,2005,2006,2007,2008,2009,2010
Copyright (C) 1997,1998,2002,2004,2005,2006,2007,2008,2009,2010,2011
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -185,7 +185,7 @@ round_and_return (mp_limb_t *retval, int exponent, int negative,
if (shift > MANT_DIG)
{
__set_errno (EDOM);
__set_errno (ERANGE);
return 0.0;
}
+2 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991,1996-2001,2003,2009 Free Software Foundation, Inc.
/* Copyright (C) 1991,1996-2001,2003,2009,2011 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
@@ -72,6 +72,7 @@ static const struct ltest tests[] =
{ "+InFiNiTy", HUGE_VAL, '\0', 0 },
#endif
{ "0x80000Ap-23", 0x80000Ap-23, '\0', 0 },
{ "1e-324", 0, '\0', ERANGE },
{ NULL, 0, '\0', 0 }
};
+3 -2
View File
@@ -1,4 +1,5 @@
/* Copyright (C) 1995-1997,2002,2004-2006,2010 Free Software Foundation, Inc.
/* Copyright (C) 1995-1997,2002,2004-2006,2010,2011
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@gnu.org>, 1995.
@@ -150,7 +151,7 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
values. But since there is no limit on the length of the string
we have to use `malloc' if the string is too long. We should be
very conservative here. */
if (! __libc_use_alloca (srclen))
if (! __libc_use_alloca ((srclen + 1) * (sizeof (int32_t) + 1)))
{
idxarr = (int32_t *) malloc ((srclen + 1) * (sizeof (int32_t) + 1));
rulearr = (unsigned char *) &idxarr[srclen];
+2 -2
View File
@@ -1,5 +1,5 @@
/* PLT trampolines. i386 version.
Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
Copyright (C) 2004, 2005, 2007, 2011 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
@@ -99,7 +99,7 @@ _dl_runtime_profile:
+4 %edx
%esp free
*/
cfi_adjust_cfa_offset (12)
cfi_adjust_cfa_offset (8)
1: movl %ebx, (%esp)
cfi_rel_offset (ebx, 0)
movl %edx, %ebx # This is the frame buffer size
+8 -8
View File
@@ -1,6 +1,6 @@
/* Optimized, inlined string functions. i486 version.
Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2004,2007
Free Software Foundation, Inc.
Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2004,2007,2011
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
@@ -1058,8 +1058,8 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
"movl %4, %3\n\t"
"decl %1\n\t"
"1:\n\t"
"decl %3\n\t"
"js 2f\n\t"
"subl $1,%3\n\t"
"jc 2f\n\t"
"movb (%2),%b0\n\t"
"movsb\n\t"
"testb %b0,%b0\n\t"
@@ -1078,8 +1078,8 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
"leal 1(%1),%1\n\t"
"jne 1b\n"
"2:\n\t"
"decl %3\n\t"
"js 3f\n\t"
"subl $1,%3\n\t"
"jc 3f\n\t"
"movb (%2),%b0\n\t"
"leal 1(%2),%2\n\t"
"movb %b0,(%1)\n\t"
@@ -1219,8 +1219,8 @@ __strncmp_g (__const char *__s1, __const char *__s2, size_t __n)
register int __res;
__asm__ __volatile__
("1:\n\t"
"decl %3\n\t"
"js 2f\n\t"
"subl $1,%3\n\t"
"jc 2f\n\t"
"movb (%1),%b0\n\t"
"incl %1\n\t"
"cmpb %b0,(%2)\n\t"
+2 -2
View File
@@ -76,8 +76,8 @@ END(strspn)
# define ENTRY(name) \
.type __strspn_ia32, @function; \
.globl __strspn_ia32; \
.p2align 4
__strspn_ia32: cfi_startproc; \
.p2align 4; \
__strspn_ia32: cfi_startproc; \
CALL_MCOUNT
# undef END
# define END(name) \
+40 -5
View File
@@ -432,7 +432,10 @@ gaih_inet (const char *name, const struct gaih_service *service,
/* In case the output string is the same as the input string
no new string has been allocated. */
if (p != name)
malloc_name = true;
{
name = p;
malloc_name = true;
}
}
#endif
@@ -821,13 +824,14 @@ gaih_inet (const char *name, const struct gaih_service *service,
size_t tmpbuflen = 1024;
malloc_tmpbuf = !__libc_use_alloca (alloca_used + tmpbuflen);
assert (tmpbuf == NULL);
if (malloc_tmpbuf)
if (!malloc_tmpbuf)
tmpbuf = alloca_account (tmpbuflen, alloca_used);
else
{
tmpbuf = malloc (tmpbuflen);
if (tmpbuf == NULL)
{
_res.options |= old_res_options & RES_USE_INET6;
result = -EAI_MEMORY;
goto free_and_return;
}
@@ -872,6 +876,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
2 * tmpbuflen);
if (newp == NULL)
{
_res.options |= old_res_options & RES_USE_INET6;
result = -EAI_MEMORY;
goto free_and_return;
}
@@ -881,16 +886,44 @@ gaih_inet (const char *name, const struct gaih_service *service,
}
}
no_inet6_data = no_data;
if (status == NSS_STATUS_SUCCESS)
{
assert (!no_data);
no_data = 1;
if ((req->ai_flags & AI_CANONNAME) != 0 && canon == NULL)
canon = (*pat)->name;
while (*pat != NULL)
pat = &((*pat)->next);
{
if ((*pat)->family == AF_INET
&& req->ai_family == AF_INET6
&& (req->ai_flags & AI_V4MAPPED) != 0)
{
uint32_t *pataddr = (*pat)->addr;
(*pat)->family = AF_INET6;
pataddr[3] = pataddr[0];
pataddr[2] = htonl (0xffff);
pataddr[1] = 0;
pataddr[0] = 0;
pat = &((*pat)->next);
no_data = 0;
}
else if (req->ai_family == AF_UNSPEC
|| (*pat)->family == req->ai_family)
{
pat = &((*pat)->next);
no_data = 0;
if (req->ai_family == AF_INET6)
got_ipv6 = true;
}
else
*pat = ((*pat)->next);
}
}
no_inet6_data = no_data;
}
else
{
@@ -963,6 +996,8 @@ gaih_inet (const char *name, const struct gaih_service *service,
canonbuf = malloc (max_fqdn_len);
if (canonbuf == NULL)
{
_res.options
|= old_res_options & RES_USE_INET6;
result = -EAI_MEMORY;
goto free_and_return;
}
+2 -1
View File
@@ -1,5 +1,5 @@
/* Determine whether interfaces use native transport. Linux version.
Copyright (C) 2007 Free Software Foundation, Inc.
Copyright (C) 2007,2011 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
@@ -23,6 +23,7 @@
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <net/if.h>
+4 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1998-2006, 2010 Free Software Foundation, Inc.
/* Copyright (C) 1998-2006, 2010, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -115,6 +115,9 @@ __statvfs_getflags (const char *name, int fstype, struct stat64 *st)
case CGROUP_SUPER_MAGIC:
fsname = "cgroup";
break;
case LUSTRE_SUPER_MAGIC:
fsname = "lustre";
break;
}
FILE *mtab = __setmntent ("/proc/mounts", "r");
+6 -1
View File
@@ -1,5 +1,5 @@
/* Constants from kernel header for various FSes.
Copyright (C) 1998-2003,2005,2010 Free Software Foundation, Inc.
Copyright (C) 1998-2003,2005,2010,2011 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
@@ -83,6 +83,9 @@
/* Constant that identifies the `logfs' filesystem. */
#define LOGFS_MAGIC_U32 0xc97e8168u
/* Constant that identifies the `lustre' filesystem. */
#define LUSTRE_SUPER_MAGIC 0x0BD00BD0
/* Constants that identify the `minix2' filesystem. */
#define MINIX2_SUPER_MAGIC 0x2468
#define MINIX2_SUPER_MAGIC2 0x2478
@@ -150,6 +153,8 @@
/* Maximum link counts. */
#define COH_LINK_MAX 10000
#define EXT2_LINK_MAX 32000
#define EXT4_LINK_MAX 65000
#define LUSTRE_LINK_MAX EXT4_LINK_MAX
#define MINIX2_LINK_MAX 65530
#define MINIX_LINK_MAX 250
#define REISERFS_LINK_MAX 64535
+4
View File
@@ -121,6 +121,9 @@ __statfs_link_max (int result, const struct statfs *fsbuf)
case XFS_SUPER_MAGIC:
return XFS_LINK_MAX;
case LUSTRE_SUPER_MAGIC:
return LUSTRE_LINK_MAX;
default:
return LINUX_LINK_MAX;
}
@@ -157,6 +160,7 @@ __statfs_filesize_max (int result, const struct statfs *fsbuf)
case JFS_SUPER_MAGIC:
case VXFS_SUPER_MAGIC:
case CGROUP_SUPER_MAGIC:
case LUSTRE_SUPER_MAGIC:
return 64;
case MSDOS_SUPER_MAGIC:
@@ -0,0 +1,6 @@
/* In this implementation we do not really care whether the call fails
because of missing kernel support since we do not even call the
function in this case. */
#undef __ASSUME_ATFCTS
#define __ASSUME_ATFCTS 1
#include "fxstatat.c"
+4 -3
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2004, 2005, 2009, 2011 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
@@ -65,7 +65,8 @@ __END_DECLS
/* Registers for entry into PLT on x86-64. */
# if __GNUC_PREREQ (4,0)
typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16)));
typedef float La_x86_64_ymm __attribute__ ((__vector_size__ (32)));
typedef float La_x86_64_ymm
__attribute__ ((__vector_size__ (32), __aligned__ (16)));
# else
typedef float La_x86_64_xmm __attribute__ ((__mode__ (__V4SF__)));
# endif
@@ -76,7 +77,7 @@ typedef union
La_x86_64_ymm ymm[2];
# endif
La_x86_64_xmm xmm[4];
} La_x86_64_vector __attribute__ ((aligned(16)));
} La_x86_64_vector __attribute__ ((__aligned__ (16)));
typedef struct La_x86_64_regs
{
+32 -12
View File
@@ -1,5 +1,5 @@
/* PLT trampolines. x86-64 version.
Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
Copyright (C) 2004, 2005, 2007, 2009, 2011 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
@@ -27,8 +27,9 @@
.align 16
cfi_startproc
_dl_runtime_resolve:
cfi_adjust_cfa_offset(16) # Incorporate PLT
subq $56,%rsp
cfi_adjust_cfa_offset(72) # Incorporate PLT
cfi_adjust_cfa_offset(56)
movq %rax,(%rsp) # Preserve registers otherwise clobbered.
movq %rcx, 8(%rsp)
movq %rdx, 16(%rsp)
@@ -139,24 +140,34 @@ L(have_avx):
movl $1, %eax
cpuid
movq %r11,%rbx # Restore rbx
movl $1, %eax
testl $(1 << 28), %ecx
xorl %eax, %eax
// AVX and XSAVE supported?
andl $((1 << 28) | (1 << 27)), %ecx
cmpl $((1 << 28) | (1 << 27)), %ecx
jne 2f
negl %eax
2: movl %eax, L(have_avx)(%rip)
xorl %ecx, %ecx
// Get XFEATURE_ENABLED_MASK
xgetbv
andl $0x6, %eax
cmpl $0x6, %eax
// Nonzero if SSE and AVX state saving is enabled.
sete %al
2: leal -1(%eax,%eax), %eax
movl %eax, L(have_avx)(%rip)
cmpl $0, %eax
1: js L(no_avx)
# define RESTORE_AVX
# define MORE_CODE
# include "dl-trampoline.h"
.align 16
L(no_avx):
# endif
# undef RESTORE_AVX
# include "dl-trampoline.h"
# undef RESTORE_AVX
# include "dl-trampoline.h"
cfi_endproc
.size _dl_runtime_profile, .-_dl_runtime_profile
@@ -176,11 +187,20 @@ _dl_x86_64_save_sse:
movl $1, %eax
cpuid
movq %r11,%rbx # Restore rbx
movl $1, %eax
testl $(1 << 28), %ecx
xorl %eax, %eax
// AVX and XSAVE supported?
andl $((1 << 28) | (1 << 27)), %ecx
cmpl $((1 << 28) | (1 << 27)), %ecx
jne 2f
negl %eax
2: movl %eax, L(have_avx)(%rip)
xorl %ecx, %ecx
// Get XFEATURE_ENABLED_MASK
xgetbv
andl $0x6, %eax
cmpl $0x6, %eax
// Nonzero if SSE and AVX state saving is enabled.
sete %al
2: leal -1(%eax,%eax), %eax
movl %eax, L(have_avx)(%rip)
cmpl $0, %eax
1: js L(no_avx5)
+16 -9
View File
@@ -1,6 +1,6 @@
/* Partial PLT profile trampoline to save and restore x86-64 vector
registers.
Copyright (C) 2009 Free Software Foundation, Inc.
Copyright (C) 2009, 2011 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
@@ -195,14 +195,14 @@
_dl_call_pltexit. The La_x86_64_regs is being pointed by rsp now,
so we just need to allocate the sizeof(La_x86_64_retval) space on
the stack, since the alignment has already been taken care of. */
# ifdef RESTORE_AVX
#ifdef RESTORE_AVX
/* sizeof(La_x86_64_retval). Need extra space for 2 SSE
registers to detect if xmm0/xmm1 registers are changed
by audit module. */
subq $(LRV_SIZE + XMM_SIZE*2), %rsp
# else
#else
subq $LRV_SIZE, %rsp # sizeof(La_x86_64_retval)
# endif
#endif
movq %rsp, %rcx # La_x86_64_retval argument to %rcx.
/* Fill in the La_x86_64_retval structure. */
@@ -212,7 +212,7 @@
movaps %xmm0, LRV_XMM0_OFFSET(%rcx)
movaps %xmm1, LRV_XMM1_OFFSET(%rcx)
# ifdef RESTORE_AVX
#ifdef RESTORE_AVX
/* This is to support AVX audit modules. */
vmovdqu %ymm0, LRV_VECTOR0_OFFSET(%rcx)
vmovdqu %ymm1, LRV_VECTOR1_OFFSET(%rcx)
@@ -221,14 +221,14 @@
by audit module. */
vmovdqa %xmm0, (LRV_SIZE)(%rcx)
vmovdqa %xmm1, (LRV_SIZE + XMM_SIZE)(%rcx)
# endif
#endif
fstpt LRV_ST0_OFFSET(%rcx)
fstpt LRV_ST1_OFFSET(%rcx)
movq 24(%rbx), %rdx # La_x86_64_regs argument to %rdx.
movq 40(%rbx), %rsi # Copy args pushed by PLT in register.
movq 32(%rbx), %rdi # %rdi: link_map, %rsi: reloc_index
movq 32(%rbx), %rdi # %rdi: link_map, %rsi: reloc_index
call _dl_call_pltexit
/* Restore return registers. */
@@ -238,7 +238,7 @@
movaps LRV_XMM0_OFFSET(%rsp), %xmm0
movaps LRV_XMM1_OFFSET(%rsp), %xmm1
# ifdef RESTORE_AVX
#ifdef RESTORE_AVX
/* Check if xmm0/xmm1 registers are changed by audit module. */
vpcmpeqq (LRV_SIZE)(%rsp), %xmm0, %xmm2
vpmovmskb %xmm2, %esi
@@ -253,7 +253,7 @@
vmovdqu LRV_VECTOR1_OFFSET(%rsp), %ymm1
1:
# endif
#endif
fldt LRV_ST1_OFFSET(%rsp)
fldt LRV_ST0_OFFSET(%rsp)
@@ -267,3 +267,10 @@
# (eats the reloc index and link_map)
cfi_adjust_cfa_offset(-48)
retq
#ifdef MORE_CODE
cfi_adjust_cfa_offset(48)
cfi_rel_offset(%rbx, 0)
cfi_def_cfa_register(%rbx)
# undef MORE_CODE
#endif
+1 -1
View File
@@ -1,4 +1,4 @@
/* This file just defines the current version number of libc. */
#define RELEASE "stable"
#define VERSION "2.14"
#define VERSION "2.14.1"