mirror of
git://sourceware.org/git/glibc.git
synced 2026-09-09 05:59:27 +08:00
Compare commits
103
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
313f9d1cdb | ||
|
|
dacc52e192 | ||
|
|
56ddc4bb74 | ||
|
|
6c7deb9def | ||
|
|
710cfbb02e | ||
|
|
44dbdf3777 | ||
|
|
2efa76efeb | ||
|
|
d636be38ab | ||
|
|
36157661ee | ||
|
|
a4a10e2d63 | ||
|
|
290e2ca5da | ||
|
|
c2c83ab3c0 | ||
|
|
ebe5fd942f | ||
|
|
f771e5b84d | ||
|
|
70fb5f24b6 | ||
|
|
f603960ee0 | ||
|
|
ccdf9fd82b | ||
|
|
18655a1455 | ||
|
|
f9ec44fb98 | ||
|
|
a5b9372e3d | ||
|
|
a4a88a24a9 | ||
|
|
68941973fa | ||
|
|
3262a69480 | ||
|
|
c4ae002d9d | ||
|
|
03cb6a1e39 | ||
|
|
bf1f1f4e4a | ||
|
|
969cfcda4c | ||
|
|
4701db37e5 | ||
|
|
4deedd0948 | ||
|
|
d0575953ec | ||
|
|
01d137496b | ||
|
|
b1cc14cb09 | ||
|
|
aa152ec6ad | ||
|
|
c87c885303 | ||
|
|
a780093062 | ||
|
|
a584fc6a6b | ||
|
|
c97164f05b | ||
|
|
7ee7b70342 | ||
|
|
23d488f45e | ||
|
|
07e2253d98 | ||
|
|
b1cd3047ad | ||
|
|
87b8eeddb0 | ||
|
|
0a0ddbbe67 | ||
|
|
52d150a187 | ||
|
|
c432414bf8 | ||
|
|
d328df16a2 | ||
|
|
cba457a16f | ||
|
|
475cfe06fa | ||
|
|
e875bad50a | ||
|
|
a5cceee5d5 | ||
|
|
5c2c150929 | ||
|
|
ee38f2391d | ||
|
|
b2e2a03ffd | ||
|
|
51da0dcf51 | ||
|
|
870a58b0b6 | ||
|
|
7705c6c561 | ||
|
|
ef626d54ac | ||
|
|
cb8ad6d56a | ||
|
|
3f860e1ac8 | ||
|
|
9210e448bf | ||
|
|
d0f6ed789f | ||
|
|
626b157664 | ||
|
|
1f3ae5ae37 | ||
|
|
c9dab1b7ac | ||
|
|
c8bfc69629 | ||
|
|
2a31410e40 | ||
|
|
3ff6565150 | ||
|
|
26330c1c48 | ||
|
|
4da50f4b07 | ||
|
|
e80cfa6941 | ||
|
|
0f1ea04f8a | ||
|
|
9cf557216c | ||
|
|
53f32b044f | ||
|
|
ac37d9836e | ||
|
|
e40d82c4ee | ||
|
|
e926cb1774 | ||
|
|
1e639628d1 | ||
|
|
a447f6830f | ||
|
|
10bf3b7655 | ||
|
|
8eccea8011 | ||
|
|
6e1f9be792 | ||
|
|
ffbb82ecfe | ||
|
|
e38af591a8 | ||
|
|
297676350b | ||
|
|
5d45e59ea6 | ||
|
|
127bcb269a | ||
|
|
a1223d6604 | ||
|
|
917dc587df | ||
|
|
cd816bef95 | ||
|
|
94c11628f5 | ||
|
|
e856702a04 | ||
|
|
223e614daf | ||
|
|
4c7cb20430 | ||
|
|
b9e0df9847 | ||
|
|
f27dc66bb9 | ||
|
|
6dca80c9c7 | ||
|
|
6b23316e66 | ||
|
|
f84a1e4190 | ||
|
|
8573480189 | ||
|
|
b0a411e5dd | ||
|
|
5ccf88c235 | ||
|
|
9478a09b67 | ||
|
|
14795b319a |
-29
@@ -1,29 +0,0 @@
|
||||
*.d *.o *.so *.po *.go *.bo stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz *.bz2
|
||||
=*
|
||||
TODO AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
|
||||
configparms
|
||||
|
||||
sun[43]* i[345]86* hp300*
|
||||
|
||||
ieeetest hppa-sysdeps regex
|
||||
|
||||
gpl2lgpl.sed
|
||||
distinfo
|
||||
distinfo
|
||||
|
||||
test-include
|
||||
analysis
|
||||
docs
|
||||
releases
|
||||
|
||||
libc.prj .libc.prcs_aux
|
||||
libc.proj .snprj
|
||||
|
||||
TODO.html
|
||||
|
||||
autom4te*.cache
|
||||
|
||||
rtkaio
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
*~
|
||||
*.d
|
||||
*.o
|
||||
*.so
|
||||
*.po
|
||||
*.go
|
||||
*.bo
|
||||
stamp.*
|
||||
*.stamp
|
||||
*.ustamp
|
||||
*.udeps
|
||||
*.gz
|
||||
*.Z
|
||||
*.tar
|
||||
*.tgz
|
||||
*.bz2
|
||||
=*
|
||||
TODO
|
||||
AUTHORS
|
||||
copyr-*
|
||||
copying.*
|
||||
glibc-*
|
||||
|
||||
configparms
|
||||
|
||||
ieeetest
|
||||
regex
|
||||
|
||||
gpl2lgpl.sed
|
||||
distinfo
|
||||
|
||||
test-include
|
||||
analysis
|
||||
docs
|
||||
releases
|
||||
|
||||
libc.prj
|
||||
.libc.prcs_aux
|
||||
libc.proj
|
||||
.snprj
|
||||
|
||||
TODO.html
|
||||
|
||||
autom4te*.cache
|
||||
|
||||
rtkaio
|
||||
@@ -1,3 +1,526 @@
|
||||
2009-11-01 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* malloc/hooks.c (free_check): Restore locking and call _int_free
|
||||
appropriately.
|
||||
|
||||
2009-10-28 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* Makefile (dist-prepare): New target.
|
||||
(tag-for-dist): Target removed.
|
||||
(glibc-%.tar): Pattern rule removed.
|
||||
(%.tar): New pattern rule, does simple use of git archive.
|
||||
(dist-version): Remove variable definition.
|
||||
(dist): Just depend on that. Add .tar.xz dependency.
|
||||
If dist-version variable not set on command line, depend on
|
||||
dist-prepare, re-invoke with dist-version set via git describe.
|
||||
|
||||
* Makerules (%.xz): New pattern rule.
|
||||
|
||||
2009-11-03 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list: Add
|
||||
readahead.
|
||||
|
||||
2009-11-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* misc/sys/uio.h (preadv, pwritev): Fix type of last argument
|
||||
when -D_FILE_OFFSET_BITS=64.
|
||||
|
||||
* sysdeps/unix/sysv/linux/ia64/bits/fcntl.h (fallocate): Fix types
|
||||
of last two arguments when -D_FILE_OFFSET_BITS=64.
|
||||
* sysdeps/unix/sysv/linux/i386/bits/fcntl.h (fallocate): Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/bits/fcntl.h (fallocate): Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h (fallocate): Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h (fallocate): Likewise.
|
||||
* sysdeps/unix/sysv/linux/sparc/bits/fcntl.h (fallocate): Likewise.
|
||||
* sysdeps/unix/sysv/linux/sh/bits/fcntl.h (fallocate): Likewise.
|
||||
|
||||
2009-09-05 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure.in: Support binutils 2.100 and 3.0.
|
||||
|
||||
2009-09-07 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* locale/programs/ld-collate.c (struct locale_collate_t): Add
|
||||
unnamed_section_defined field.
|
||||
(collate_read): Test and set unnamed_section_defined.
|
||||
|
||||
* posix/getconf.c (vars): Handle POSIX2_LINE_MAX in addition to
|
||||
_POSIX2_LINE_MAX.
|
||||
|
||||
2009-09-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure.in: Support binutils 2.20.
|
||||
|
||||
2009-09-01 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
* hesiod/nss_hesiod/hesiod-grp.c (internal_gid_from_group): Fix
|
||||
parsing of group entry.
|
||||
|
||||
2009-09-02 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
* libio/wfileops.c (_IO_wfile_seekoff): Account for readahead in
|
||||
external buffer. Always discard readahead in internal buffer.
|
||||
* libio/Makefile (tests): Add bug-wsetpos.
|
||||
* libio/bug-wsetpos.c: New file.
|
||||
|
||||
2009-08-31 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
* libio/wfileops.c (_IO_wfile_seekoff): Remove dead code and
|
||||
reformulate in-buffer optimisation check to match code in
|
||||
_IO_new_file_seekoff.
|
||||
|
||||
2009-08-31 Joshua W. Boyer <jwboyer@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc32/power6/memcpy.S: Change srdi instruction
|
||||
to srwi in 32-bit memcpy for power6.
|
||||
|
||||
2009-08-31 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10560]
|
||||
* malloc/malloc.c: Add local assert definition to avoid problems with
|
||||
memory allocation in the real one.
|
||||
|
||||
2009-08-25 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* math/s_fdiml.c (__fdiml): Use fpclassify instead of fpclassifyl.
|
||||
|
||||
2009-08-24 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* math/s_fdim.c: In case of overflows set errno.
|
||||
* math/s_fdimf.c: Likewise.
|
||||
* math/s_fdiml.c: Likewise.
|
||||
|
||||
2009-08-23 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* posix/regcomp.c (parse_dup_op): Verify the expression is correctly
|
||||
terminated.
|
||||
* posix/Makefile (tests): Add bug-regex29.
|
||||
* posix/bug-regex29.c: New file.
|
||||
|
||||
* posix/unistd.h: Define _POSIX_VERSION and _POSIX2_* correctly if
|
||||
older POSIX versions are selected.
|
||||
|
||||
2009-08-10 SUGIOKA Toshinobu <sugioka@itonet.co.jp>
|
||||
|
||||
* stdlib/longlong.h [__sh__] (udiv_qrnnd, sub_ddmmss): Add "t" to
|
||||
clobber list.
|
||||
|
||||
2009-07-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* malloc/Makefile (CFLAGS-obstack.c): Add $(uses-callbacks).
|
||||
|
||||
2009-07-30 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/ia64/backtrace.c (backtrace_helper): Stop backtrace when
|
||||
we make no more progress.
|
||||
|
||||
2009-07-25 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10448]
|
||||
* sysdeps/posix/getaddrinfo.c (gaih_inet): If NSS module contains no
|
||||
callback we must touch the status to avoid using stale value.
|
||||
|
||||
2009-06-16 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* login/Makefile: Build pt_chown as PIE.
|
||||
|
||||
2009-06-16 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* login/Makefile: If necessary link pt_chown with -lcap.
|
||||
|
||||
2009-06-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* Makeconfig (+link-pie): Define.
|
||||
(+prectorS): Define.
|
||||
(+postctorS): Define.
|
||||
* elf/Makefile ($(objpfx)tst-pie1): Use $(+link-pie).
|
||||
* nscd/Makefile ($(objpfx)nscd): Likewise.
|
||||
|
||||
2009-05-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/accept4.c: Include kernel-features.h.
|
||||
(accept4): If __NR_accept4 is not defined, but __NR_socketcall
|
||||
is, either do nothing at all if __ASSUME_ACCEPT4, or
|
||||
call __internal_accept4 and handle EINVAL -> ENOSYS translation.
|
||||
* sysdeps/unix/sysv/linux/internal_accept4.S: New file.
|
||||
* sysdeps/unix/sysv/linux/i386/accept4.S (SOCKOP_accept4): Don't
|
||||
define.
|
||||
* sysdeps/unix/sysv/linux/i386/internal_accept4.S: New file.
|
||||
* sysdeps/unix/sysv/linux/Makefile (sysdep-routines): Add
|
||||
internal_accept4 in socket directory.
|
||||
|
||||
2009-07-26 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10422]
|
||||
* sysdeps/unix/sysv/linux/eventfd.c: Add compatibility for old
|
||||
kernels, dropped when eventfd2 support was added.
|
||||
* sysdeps/unix/sysv/linux/signalfd.c: Add compatibility for old
|
||||
kernels, dropped when signalfd4 support was added.
|
||||
* sysdeps/unix/sysv/linux/kernel-features.h: More CLOEXEC syscalls
|
||||
added, name them.
|
||||
|
||||
[BZ #10452]
|
||||
* resolv/res_send.c (send_dg): Pass full SERVFAIL, NOTIMP, REFUSED
|
||||
replies up.
|
||||
|
||||
2009-07-16 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nscd/cache.c (cache_add): Use atomic_compare_and_exchange_bool_rel
|
||||
instead of atomic_compare_and_exchange_bool_acq to ensure pointer
|
||||
is written before the list head update.
|
||||
Patch by Andreas Schwab <aschwab@redhat.com>.
|
||||
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* malloc/malloc.c [ATOMIC_FASTBINS] (_int_free): Make check for
|
||||
corruption thread-safe.
|
||||
|
||||
2009-07-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* include/atomic.h (catomic_compare_and_exchange_val_rel): If arch
|
||||
overrides atomic_compare_and_exchange_val_rel, define to
|
||||
atomic_compare_and_exchange_val_rel by default, otherwise default
|
||||
to catomic_compare_and_exchange_val_acq.
|
||||
(catomic_compare_and_exchange_bool_rel): If arch overrides
|
||||
atomic_compare_and_exchange_bool_rel, define to
|
||||
atomic_compare_and_exchange_bool_rel by default.
|
||||
* malloc/malloc.c (_int_free): Revert 2009-07-02 change.
|
||||
Use catomic_compare_and_exchange_val_rel instead of
|
||||
catomic_compare_and_exchange_val_acq.
|
||||
|
||||
2009-07-07 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf/Makefile: Don't build modules for tst-audit3 for anything
|
||||
but x86-64 targets.
|
||||
|
||||
2009-07-10 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/epoll.h: Fix comment.
|
||||
|
||||
2009-07-03 Andreas Schwab <aschwab@redhat.com>
|
||||
|
||||
* sysdeps/powerpc/sysdep.h (PPC_FEATURE_ARCH_2_06): Fix value.
|
||||
(PPC_FEATURE_HAS_VSX): Likewise.
|
||||
|
||||
2009-06-30 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf/Makefile (distribute): Remove tst-audit.sh. Add
|
||||
tst-audit2.c, tst-audit3.c, tst-auditmod3a.c, tst-auditmod3b.c.
|
||||
(tests): Add tst-audit3 for x86_64.
|
||||
(modules-names): Add tst-auditmod3a, tst-auditmod3b.
|
||||
($(objpfx)tst-audit3): Define.
|
||||
($(objpfx)tst-audit3.out): Define.
|
||||
(tst-audit3-ENV): Define.
|
||||
* elf/tst-audit3.c: New file.
|
||||
* elf/tst-auditmod3a.c: New file.
|
||||
* elf/tst-auditmod3b.c: New file.
|
||||
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Save
|
||||
and restore xmm6.
|
||||
|
||||
2009-07-02 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* malloc/malloc.c [ATOMIC_FASTBINS] (_int_free): Add full barrier when
|
||||
adding to fast bin list.
|
||||
|
||||
2009-07-01 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nis/nss_nis/nis-network.c (_nss_nis_getnetbyaddr_r): Don't use
|
||||
inet_makeaddr. This worked only with class-based networks.
|
||||
* nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyaddr_r):
|
||||
Likewise.
|
||||
|
||||
* nss/nss_files/files-network.c (netbyaddr): If type is AF_UNSPEC,
|
||||
recognize all types.
|
||||
* nss/getent.c (networks_keys): Pass AF_UNSPEC instead of AF_UNIX
|
||||
to getnetbyaddr. Fix network parameter to getnetbyaddr. It must
|
||||
be in host byte order.
|
||||
|
||||
2009-06-24 Andreas Schwab <aschwab@redhat.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S: Fix cfa offset
|
||||
for saved registers.
|
||||
* sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S: Likewise.
|
||||
* sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S: Likewise.
|
||||
* sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S: Likewise.
|
||||
|
||||
2009-06-23 Andreas Schwab <aschwab@redhat.com>
|
||||
|
||||
* time/tzfile.c (__tzfile_read): Don't use an empty TZ string.
|
||||
|
||||
2009-06-18 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/bits/socket.h: Define PF_IEEE802154 and
|
||||
AF_IEEE802154.
|
||||
* sysdeps/unix/sysv/linux/sparc/bits/socket.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/net/if_arp.h: Define ARPHRD_IEEE802154
|
||||
and ARPHRD_IEEE802154_PHY.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sparc/bits/socket.h: Add missing definitions
|
||||
relative to generic Linux version.
|
||||
|
||||
2009-06-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/x86_64/memchr.S (memchr): Use unsigned instead of signed
|
||||
comparisons.
|
||||
* string/test-memchr.c (do_random_tests): Test very large lengths
|
||||
as well.
|
||||
|
||||
2009-04-22 Ryan S. Arnold <rsa@us.ibm.com>
|
||||
|
||||
[BZ #10107]
|
||||
* sysdeps/powerpc/powerpc32/power6/memcpy.S (memcpy): Replace cmpldi
|
||||
with cmplwi.
|
||||
* sysdeps/powerpc/powerpc32/power6/memset.S (memset): Likewise.
|
||||
|
||||
2009-06-15 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10166]
|
||||
* sysdeps/unix/sysv/linux/grantpt.c: Remove shortcut which was used
|
||||
when the slave device is in devpts or devfs.
|
||||
|
||||
[BZ #10183]
|
||||
* posix/tst-cpucount.c: Don't try more than CPU_SETSIZE bits.
|
||||
|
||||
[BZ #10195]
|
||||
* inet/netinet/icmp6.h (struct nd_opt_home_agent_info): Change type
|
||||
of nd_opt_home_agent_info_preference to uint16_t.
|
||||
Patch by Arnaud Ebalard <arno@natisbad.org>.
|
||||
|
||||
[BZ #10203]
|
||||
* nis/nss_nis/nis-pwd.c (internal_nis_endpwent): Free all buffers,
|
||||
not just the currently used one and those which follow.
|
||||
Patch by Joe Landers <jlanders@vmware.com>.
|
||||
|
||||
[BZ #10196]
|
||||
* libio/tst-fgetwc.c (do_test): Use de_DE.UTF-8 as locale name.
|
||||
* libio/Makefile: Run tst-fgetwc with necessary envvar.
|
||||
Patch by Bruce Dubbs <bdubbs@linuxfromscratch.org>.
|
||||
|
||||
* time/tzfile.c (__tzfile_read): Correct computation of tzspec_len.
|
||||
|
||||
[BZ #10211]
|
||||
* time/tzfile.c (__tzfile_compute): If we use the envvar format still
|
||||
handle leap seconds if they are available.
|
||||
Patch by Akinori Hattori <hattya@gentoo.org>.
|
||||
|
||||
2009-06-11 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* resolv/res_send.c (send_dg): Remember we switched to
|
||||
single-request mode.
|
||||
|
||||
2009-06-09 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* dlfcn/dlfcn.h: Remove comma at end of enum.
|
||||
Patch by J.H.M. Dassen <rdassen@redhat.com>.
|
||||
|
||||
* libio/fileops.c (_IO_new_file_fopen): Don't prematurely stop
|
||||
parsing mode string.
|
||||
|
||||
2009-06-03 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* elf/dl-sysdep.c (_dl_show_auxv): Terminate correct string.
|
||||
|
||||
2009-05-30 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* configure.in: Move AC_CANONICAL_HOST before first use of $host
|
||||
and $build.
|
||||
* configure: Regenerated.
|
||||
|
||||
2009-05-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/ieee754/ldbl-128/s_expm1l.c: Include <errno.h>.
|
||||
(__expm1l): Set errno to ERANGE on overflow.
|
||||
* sysdeps/ieee754/ldbl-128/s_tanl.c: Include <errno.h>.
|
||||
(__tanl): Set errno to EDOM for ±Inf.
|
||||
* sysdeps/ieee754/ldbl-128/s_cosl.c: Include <errno.h>.
|
||||
(__cosl): Set errno to EDOM for ±Inf.
|
||||
* sysdeps/ieee754/ldbl-128/s_sinl.c: Include <errno.h>.
|
||||
(__sinl): Set errno to EDOM for ±Inf.
|
||||
|
||||
2009-05-22 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_sinl.c: Set errno for ±Inf.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_cosl.c: Likewise.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_tanl.c: Likewise.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: Set errno for overflow.
|
||||
|
||||
2009-05-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
[BZ #10162]
|
||||
* sysdeps/ia64/memchr.S: Use speculative load.
|
||||
|
||||
2009-05-21 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/kernel-features.h: Don't define
|
||||
__ASSUME_ACCEPT4 for IA-64.
|
||||
|
||||
2009-05-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/accept4.c (__NR_accept4): Don't define.
|
||||
|
||||
* sysdeps/unix/sysv/linux/socketcall.h (SOCKOP_paccept): Remove.
|
||||
(SOCKOP_accept4): Define.
|
||||
|
||||
2009-05-20 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
Sun approved the change of the license.
|
||||
* sunrpc/auth_des.c: Replace license text.
|
||||
* sunrpc/auth_none.c: Likewise.
|
||||
* sunrpc/auth_unix.c: Likewise.
|
||||
* sunrpc/authdes_prot.c: Likewise.
|
||||
* sunrpc/authuxprot.c: Likewise.
|
||||
* sunrpc/bindrsvprt.c: Likewise.
|
||||
* sunrpc/clnt_gen.c: Likewise.
|
||||
* sunrpc/clnt_perr.c: Likewise.
|
||||
* sunrpc/clnt_raw.c: Likewise.
|
||||
* sunrpc/clnt_simp.c: Likewise.
|
||||
* sunrpc/clnt_tcp.c: Likewise.
|
||||
* sunrpc/clnt_udp.c: Likewise.
|
||||
* sunrpc/clnt_unix.c: Likewise.
|
||||
* sunrpc/des_crypt.c: Likewise.
|
||||
* sunrpc/des_soft.c: Likewise.
|
||||
* sunrpc/get_myaddr.c: Likewise.
|
||||
* sunrpc/getrpcport.c: Likewise.
|
||||
* sunrpc/key_call.c: Likewise.
|
||||
* sunrpc/key_prot.c: Likewise.
|
||||
* sunrpc/openchild.c: Likewise.
|
||||
* sunrpc/pm_getmaps.c: Likewise.
|
||||
* sunrpc/pm_getport.c: Likewise.
|
||||
* sunrpc/pmap_clnt.c: Likewise.
|
||||
* sunrpc/pmap_prot.c: Likewise.
|
||||
* sunrpc/pmap_prot2.c: Likewise.
|
||||
* sunrpc/pmap_rmt.c: Likewise.
|
||||
* sunrpc/rpc/auth.h: Likewise.
|
||||
* sunrpc/rpc/auth_unix.h: Likewise.
|
||||
* sunrpc/rpc/clnt.h: Likewise.
|
||||
* sunrpc/rpc/des_crypt.h: Likewise.
|
||||
* sunrpc/rpc/key_prot.h: Likewise.
|
||||
* sunrpc/rpc/netdb.h: Likewise.
|
||||
* sunrpc/rpc/pmap_clnt.h: Likewise.
|
||||
* sunrpc/rpc/pmap_prot.h: Likewise.
|
||||
* sunrpc/rpc/pmap_rmt.h: Likewise.
|
||||
* sunrpc/rpc/rpc.h: Likewise.
|
||||
* sunrpc/rpc/rpc_des.h: Likewise.
|
||||
* sunrpc/rpc/rpc_msg.h: Likewise.
|
||||
* sunrpc/rpc/svc.h: Likewise.
|
||||
* sunrpc/rpc/svc_auth.h: Likewise.
|
||||
* sunrpc/rpc/types.h: Likewise.
|
||||
* sunrpc/rpc/xdr.h: Likewise.
|
||||
* sunrpc/rpc_clntout.c: Likewise.
|
||||
* sunrpc/rpc_cmsg.c: Likewise.
|
||||
* sunrpc/rpc_common.c: Likewise.
|
||||
* sunrpc/rpc_cout.c: Likewise.
|
||||
* sunrpc/rpc_dtable.c: Likewise.
|
||||
* sunrpc/rpc_hout.c: Likewise.
|
||||
* sunrpc/rpc_main.c: Likewise.
|
||||
* sunrpc/rpc_parse.c: Likewise.
|
||||
* sunrpc/rpc_parse.h: Likewise.
|
||||
* sunrpc/rpc_prot.c: Likewise.
|
||||
* sunrpc/rpc_sample.c: Likewise.
|
||||
* sunrpc/rpc_scan.c: Likewise.
|
||||
* sunrpc/rpc_scan.h: Likewise.
|
||||
* sunrpc/rpc_svcout.c: Likewise.
|
||||
* sunrpc/rpc_tblout.c: Likewise.
|
||||
* sunrpc/rpc_util.c: Likewise.
|
||||
* sunrpc/rpc_util.h: Likewise.
|
||||
* sunrpc/rpcinfo.c: Likewise.
|
||||
* sunrpc/rpcsvc/bootparam_prot.x: Likewise.
|
||||
* sunrpc/rpcsvc/key_prot.x: Likewise.
|
||||
* sunrpc/rpcsvc/klm_prot.x: Likewise.
|
||||
* sunrpc/rpcsvc/mount.x: Likewise.
|
||||
* sunrpc/rpcsvc/nfs_prot.x: Likewise.
|
||||
* sunrpc/rpcsvc/rex.x: Likewise.
|
||||
* sunrpc/rpcsvc/rstat.x: Likewise.
|
||||
* sunrpc/rpcsvc/rusers.x: Likewise.
|
||||
* sunrpc/rpcsvc/sm_inter.x: Likewise.
|
||||
* sunrpc/rpcsvc/spray.x: Likewise.
|
||||
* sunrpc/rpcsvc/yppasswd.x: Likewise.
|
||||
* sunrpc/rtime.c: Likewise.
|
||||
* sunrpc/svc.c: Likewise.
|
||||
* sunrpc/svc_auth.c: Likewise.
|
||||
* sunrpc/svc_authux.c: Likewise.
|
||||
* sunrpc/svc_raw.c: Likewise.
|
||||
* sunrpc/svc_run.c: Likewise.
|
||||
* sunrpc/svc_simple.c: Likewise.
|
||||
* sunrpc/svc_tcp.c: Likewise.
|
||||
* sunrpc/svc_udp.c: Likewise.
|
||||
* sunrpc/svc_unix.c: Likewise.
|
||||
* sunrpc/svcauth_des.c: Likewise.
|
||||
* sunrpc/xcrypt.c: Likewise.
|
||||
* sunrpc/xdr.c: Likewise.
|
||||
* sunrpc/xdr_array.c: Likewise.
|
||||
* sunrpc/xdr_float.c: Likewise.
|
||||
* sunrpc/xdr_mem.c: Likewise.
|
||||
* sunrpc/xdr_rec.c: Likewise.
|
||||
* sunrpc/xdr_ref.c: Likewise.
|
||||
* sunrpc/xdr_sizeof.c: Likewise.
|
||||
* sunrpc/xdr_stdio.c: Likewise.
|
||||
|
||||
2009-05-18 Jakub Jelinek <jakub@redhat.com>
|
||||
Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c (MINIMUM_HASHENTRY_SIZE): Define.
|
||||
(__nscd_cache_search): Assume each entry in the
|
||||
hash chain needs one hashentry and half of datahead. Use
|
||||
MINIMUM_HASHENTRY_SIZE instead of sizeof(hashentry).
|
||||
|
||||
2009-05-16 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10159]
|
||||
* stdlib/stdlib.h (__WAIT_INT): Match the definition in <sys/wait.h>.
|
||||
|
||||
* nscd/nscd_helper.c (__nscd_cache_search): Fix exit condition in last
|
||||
patch.
|
||||
|
||||
2009-05-15 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c (__nscd_cache_search): Introduce loop counter.
|
||||
Use it if we absolutely cannot reach any more correct list elements
|
||||
because that many do not fit into the currently mapped database.
|
||||
|
||||
2009-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c: Include stddef.h.
|
||||
(__nscd_cache_search): Add datalen argument. Use atomic_forced_read
|
||||
in a couple of places. Return NULL if trail is not less than
|
||||
datasize, don't consider dataheads with length smaller than
|
||||
offsetof (struct datahead, data) + datalen.
|
||||
* nscd/nscd_client.h (__nscd_cache_search): Adjust prototype.
|
||||
* nscd/nscd_gethst_r.c (nscd_gethst_r): Adjust callers.
|
||||
* nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise.
|
||||
* nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
|
||||
* nscd/nscd_getai.c (__nscd_getai): Likewise.
|
||||
* nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise.
|
||||
* nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise.
|
||||
|
||||
* nscd/selinux.c (nscd_avc_destroy): Removed.
|
||||
* nscd/selinux.h (nscd_avc_destroy): Likewise.
|
||||
* nscd/nscd.c (termination_handler): Don't call
|
||||
nscd_avc_destroy.
|
||||
|
||||
2009-05-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* include/atomic.h: Formatting.
|
||||
(catomic_compare_and_exchange_val_acq): Don't define if already
|
||||
defined by bits/atomic.h.
|
||||
|
||||
2009-05-10 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* version.h (VERSION): Bump to 2.10.1.
|
||||
|
||||
* nss/getXXbyYY_r.c: If NO_COMPAT_NEEDED is defined don't define any
|
||||
compatibility functions.
|
||||
* nss/getXXent_r.c: Likewise.
|
||||
* gshadow/getsgent_r.c: Define NO_COMPAT_NEEDED.
|
||||
* gshadow/getsgnam_r.c: Likewise.
|
||||
* gshadow/Version: Remove duplicate entries.
|
||||
|
||||
* sysdeps/x86_64/cacheinfo.c (intel_02_cache_info): Add missing entries
|
||||
for recent processor.
|
||||
* sysdeps/unix/sysv/linux/i386/sysconf.c (intel_02_cache_info):
|
||||
Likewise.
|
||||
|
||||
2009-05-09 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* version.h (VERSION): Bump for 2.10 release.
|
||||
|
||||
+16
@@ -434,6 +434,19 @@ ifndef +link
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
$(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||
endif
|
||||
# Command for linking PIE programs with the C library.
|
||||
ifndef +link-pie
|
||||
+link-pie = $(CC) -pie -Wl,-O1 -nostdlib -nostartfiles -o $@ \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||
$(addprefix $(csu-objpfx),S$(start-installed-name)) \
|
||||
$(+preinit) $(+prectorS) \
|
||||
$(filter-out $(addprefix $(csu-objpfx),start.o \
|
||||
S$(start-installed-name))\
|
||||
$(+preinit) $(link-extra-libs) \
|
||||
$(common-objpfx)libc% $(+postinit),$^) \
|
||||
$(link-extra-libs) $(link-libc) $(+postctorS) $(+postinit)
|
||||
endif
|
||||
# Command for statically linking programs with the C library.
|
||||
ifndef +link-static
|
||||
+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||
@@ -538,6 +551,9 @@ ifeq ($(elf),yes)
|
||||
+postinit = $(addprefix $(csu-objpfx),crtn.o)
|
||||
+prector = `$(CC) --print-file-name=crtbegin.o`
|
||||
+postctor = `$(CC) --print-file-name=crtend.o`
|
||||
# Variants of the two previous definitions for linking PIE programs.
|
||||
+prectorS = `$(CC) --print-file-name=crtbeginS.o`
|
||||
+postctorS = `$(CC) --print-file-name=crtendS.o`
|
||||
+interp = $(addprefix $(elf-objpfx),interp.os)
|
||||
endif
|
||||
csu-objpfx = $(common-objpfx)csu/
|
||||
|
||||
@@ -347,51 +347,38 @@ TAGS:
|
||||
| $(ETAGS) -o $@ -
|
||||
|
||||
# Make the distribution tarfile.
|
||||
.PHONY: dist tag-for-dist
|
||||
.PHONY: dist dist-prepare
|
||||
|
||||
generated := $(generated) stubs.h
|
||||
|
||||
files-for-dist := README FAQ INSTALL NOTES configure
|
||||
files-for-dist := README FAQ INSTALL NOTES configure ChangeLog NEWS
|
||||
|
||||
tag-of-stem = glibc-$(subst .,_,$*)
|
||||
dist-selector = -r $(tag-of-stem)
|
||||
# Regenerate stuff, then error if these things are not committed yet.
|
||||
dist-prepare: $(files-for-dist)
|
||||
conf=`find sysdeps $(addsuffix /sysdeps,$(sysdeps-add-ons)) \
|
||||
-name configure`; \
|
||||
$(MAKE) $$conf && \
|
||||
git diff --stat HEAD -- $^ $$conf \
|
||||
| $(AWK) '{ print; rc=1 } END { exit rc }'
|
||||
|
||||
# Add-ons in the main repository but distributed in their own tar files.
|
||||
dist-separate = libidn
|
||||
|
||||
glibc-%.tar $(dist-separate:%=glibc-%-%.tar): $(files-for-dist) \
|
||||
$(foreach D,$(dist-separate),\
|
||||
$D/configure)
|
||||
@rm -fr glibc-$*
|
||||
$(MAKE) -q `find sysdeps $(addsuffix /sysdeps,$(sysdeps-add-ons)) \
|
||||
-name configure`
|
||||
cvs $(CVSOPTS) -Q export -d glibc-$* $(dist-selector) libc
|
||||
# Touch all the configure scripts going into the tarball since cvs export
|
||||
# might have delivered configure.in newer than configure.
|
||||
find glibc-$* -name configure -print | xargs touch
|
||||
$(dist-do-separate-dirs)
|
||||
tar cf glibc-$*.tar glibc-$*
|
||||
rm -fr glibc-$*
|
||||
define dist-do-separate-dirs
|
||||
$(foreach dir,$(dist-separate),
|
||||
@rm -fr glibc-$(dir)-$*
|
||||
mv glibc-$*/$(dir) glibc-$(dir)-$*
|
||||
tar cf glibc-$(dir)-$*.tar glibc-$(dir)-$*
|
||||
rm -fr glibc-$(dir)-$*
|
||||
)
|
||||
endef
|
||||
%.tar: FORCE
|
||||
git archive --prefix=$*/ $* > $@.new
|
||||
mv -f $@.new $@
|
||||
|
||||
# Do `make dist dist-version=X.Y.Z' to make tar files of an older version.
|
||||
dist-version = $(version)
|
||||
|
||||
dist: $(foreach Z,.bz2 .gz,glibc-$(dist-version).tar$Z \
|
||||
$(foreach D,$(dist-separate),\
|
||||
glibc-$D-$(dist-version).tar$Z))
|
||||
ifneq (,$(strip $(dist-version)))
|
||||
dist: $(foreach Z,.bz2 .gz .xz,$(dist-version).tar$Z)
|
||||
md5sum $^
|
||||
|
||||
tag-for-dist: tag-$(dist-version)
|
||||
tag-%: $(files-for-dist)
|
||||
cvs $(CVSOPTS) -Q tag -c $(tag-of-stem)
|
||||
else
|
||||
dist: dist-prepare
|
||||
@if v=`git describe`; then \
|
||||
echo Distribution version $$v; \
|
||||
$(MAKE) dist dist-version=$$v; \
|
||||
else \
|
||||
false; \
|
||||
fi
|
||||
endif
|
||||
|
||||
define format-me
|
||||
@rm -f $@
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1991-2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991-2006,2007,2008,2009 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
|
||||
@@ -1335,6 +1335,7 @@ echo-headers:
|
||||
|
||||
%.bz2: %; bzip2 -9vk $<
|
||||
%.gz: %; gzip -9vnc $< > $@.new && mv -f $@.new $@
|
||||
%.xz: %; xz -9evk $<
|
||||
|
||||
# Common cleaning targets.
|
||||
|
||||
|
||||
@@ -47,6 +47,13 @@ Version 2.10
|
||||
* Handling for group shadow files has been added.
|
||||
Implemented by Ulrich Drepper.
|
||||
|
||||
* DNS IPv4-IPv6 parallel lookup now deals better with broken DNS
|
||||
servers (the case, e.g., for some people using the built-in DNS
|
||||
server in ADSL modems/routers). There is a once-per-process timeout
|
||||
in case of a broken server. To avoid it, users can run nscd or put
|
||||
'options single-request' in /etc/resolv.conf.
|
||||
Implemented by Ulrich Drepper.
|
||||
|
||||
|
||||
Version 2.9
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -726,14 +726,6 @@ base_machine
|
||||
add_on_subdirs
|
||||
add_ons
|
||||
subdirs
|
||||
host_os
|
||||
host_vendor
|
||||
host_cpu
|
||||
host
|
||||
build_os
|
||||
build_vendor
|
||||
build_cpu
|
||||
build
|
||||
libc_cv_nss_crypt
|
||||
experimental_malloc
|
||||
multi_arch
|
||||
@@ -756,6 +748,14 @@ CPPFLAGS
|
||||
LDFLAGS
|
||||
CFLAGS
|
||||
CC
|
||||
host_os
|
||||
host_vendor
|
||||
host_cpu
|
||||
host
|
||||
build_os
|
||||
build_vendor
|
||||
build_cpu
|
||||
build
|
||||
target_alias
|
||||
host_alias
|
||||
build_alias
|
||||
@@ -2011,6 +2011,90 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
|
||||
|
||||
|
||||
|
||||
# Make sure we can run config.sub.
|
||||
$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
|
||||
{ { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
|
||||
$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
|
||||
{ $as_echo "$as_me:$LINENO: checking build system type" >&5
|
||||
$as_echo_n "checking build system type... " >&6; }
|
||||
if test "${ac_cv_build+set}" = set; then
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_build_alias=$build_alias
|
||||
test "x$ac_build_alias" = x &&
|
||||
ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
|
||||
test "x$ac_build_alias" = x &&
|
||||
{ { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
|
||||
$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
|
||||
{ { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
|
||||
$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
|
||||
$as_echo "$ac_cv_build" >&6; }
|
||||
case $ac_cv_build in
|
||||
*-*-*) ;;
|
||||
*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
|
||||
$as_echo "$as_me: error: invalid value of canonical build" >&2;}
|
||||
{ (exit 1); exit 1; }; };;
|
||||
esac
|
||||
build=$ac_cv_build
|
||||
ac_save_IFS=$IFS; IFS='-'
|
||||
set x $ac_cv_build
|
||||
shift
|
||||
build_cpu=$1
|
||||
build_vendor=$2
|
||||
shift; shift
|
||||
# Remember, the first character of IFS is used to create $*,
|
||||
# except with old shells:
|
||||
build_os=$*
|
||||
IFS=$ac_save_IFS
|
||||
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
|
||||
|
||||
|
||||
{ $as_echo "$as_me:$LINENO: checking host system type" >&5
|
||||
$as_echo_n "checking host system type... " >&6; }
|
||||
if test "${ac_cv_host+set}" = set; then
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
if test "x$host_alias" = x; then
|
||||
ac_cv_host=$ac_cv_build
|
||||
else
|
||||
ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
|
||||
{ { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
|
||||
$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
|
||||
$as_echo "$ac_cv_host" >&6; }
|
||||
case $ac_cv_host in
|
||||
*-*-*) ;;
|
||||
*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
|
||||
$as_echo "$as_me: error: invalid value of canonical host" >&2;}
|
||||
{ (exit 1); exit 1; }; };;
|
||||
esac
|
||||
host=$ac_cv_host
|
||||
ac_save_IFS=$IFS; IFS='-'
|
||||
set x $ac_cv_host
|
||||
shift
|
||||
host_cpu=$1
|
||||
host_vendor=$2
|
||||
shift; shift
|
||||
# Remember, the first character of IFS is used to create $*,
|
||||
# except with old shells:
|
||||
host_os=$*
|
||||
IFS=$ac_save_IFS
|
||||
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
|
||||
|
||||
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
@@ -3844,90 +3928,6 @@ else
|
||||
fi
|
||||
|
||||
|
||||
# Make sure we can run config.sub.
|
||||
$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
|
||||
{ { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
|
||||
$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
|
||||
{ $as_echo "$as_me:$LINENO: checking build system type" >&5
|
||||
$as_echo_n "checking build system type... " >&6; }
|
||||
if test "${ac_cv_build+set}" = set; then
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_build_alias=$build_alias
|
||||
test "x$ac_build_alias" = x &&
|
||||
ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
|
||||
test "x$ac_build_alias" = x &&
|
||||
{ { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
|
||||
$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
|
||||
{ { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
|
||||
$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
|
||||
$as_echo "$ac_cv_build" >&6; }
|
||||
case $ac_cv_build in
|
||||
*-*-*) ;;
|
||||
*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
|
||||
$as_echo "$as_me: error: invalid value of canonical build" >&2;}
|
||||
{ (exit 1); exit 1; }; };;
|
||||
esac
|
||||
build=$ac_cv_build
|
||||
ac_save_IFS=$IFS; IFS='-'
|
||||
set x $ac_cv_build
|
||||
shift
|
||||
build_cpu=$1
|
||||
build_vendor=$2
|
||||
shift; shift
|
||||
# Remember, the first character of IFS is used to create $*,
|
||||
# except with old shells:
|
||||
build_os=$*
|
||||
IFS=$ac_save_IFS
|
||||
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
|
||||
|
||||
|
||||
{ $as_echo "$as_me:$LINENO: checking host system type" >&5
|
||||
$as_echo_n "checking host system type... " >&6; }
|
||||
if test "${ac_cv_host+set}" = set; then
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
if test "x$host_alias" = x; then
|
||||
ac_cv_host=$ac_cv_build
|
||||
else
|
||||
ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
|
||||
{ { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
|
||||
$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
|
||||
$as_echo "$ac_cv_host" >&6; }
|
||||
case $ac_cv_host in
|
||||
*-*-*) ;;
|
||||
*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
|
||||
$as_echo "$as_me: error: invalid value of canonical host" >&2;}
|
||||
{ (exit 1); exit 1; }; };;
|
||||
esac
|
||||
host=$ac_cv_host
|
||||
ac_save_IFS=$IFS; IFS='-'
|
||||
set x $ac_cv_host
|
||||
shift
|
||||
host_cpu=$1
|
||||
host_vendor=$2
|
||||
shift; shift
|
||||
# Remember, the first character of IFS is used to create $*,
|
||||
# except with old shells:
|
||||
host_os=$*
|
||||
IFS=$ac_save_IFS
|
||||
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
|
||||
|
||||
|
||||
|
||||
# The way shlib-versions is used to generate soversions.mk uses a
|
||||
# fairly simplistic model for name recognition that can't distinguish
|
||||
# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
|
||||
@@ -4839,7 +4839,7 @@ $as_echo_n "checking version of $AS... " >&6; }
|
||||
ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
2.1[3-9]*)
|
||||
2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9]*|[3-9].*)
|
||||
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
|
||||
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
|
||||
|
||||
@@ -4902,7 +4902,7 @@ $as_echo_n "checking version of $LD... " >&6; }
|
||||
ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
2.1[3-9]*)
|
||||
2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9]*|3-9.*)
|
||||
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
|
||||
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
|
||||
|
||||
|
||||
+4
-4
@@ -6,6 +6,8 @@ AC_CONFIG_SRCDIR([include/features.h])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_AUX_DIR([scripts])
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
AC_PROG_CC
|
||||
if test $host != $build; then
|
||||
AC_CHECK_PROGS(BUILD_CC, gcc cc)
|
||||
@@ -316,8 +318,6 @@ else
|
||||
fi
|
||||
AC_SUBST(libc_cv_nss_crypt)
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
# The way shlib-versions is used to generate soversions.mk uses a
|
||||
# fairly simplistic model for name recognition that can't distinguish
|
||||
# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
|
||||
@@ -897,10 +897,10 @@ AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
|
||||
# Accept binutils 2.13 or newer.
|
||||
AC_CHECK_PROG_VER(AS, $AS, --version,
|
||||
[GNU assembler.* \([0-9]*\.[0-9.]*\)],
|
||||
[2.1[3-9]*], AS=: critic_missing="$critic_missing as")
|
||||
[2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9]*|[3-9].*], AS=: critic_missing="$critic_missing as")
|
||||
AC_CHECK_PROG_VER(LD, $LD, --version,
|
||||
[GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
|
||||
[2.1[3-9]*], LD=: critic_missing="$critic_missing ld")
|
||||
[2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9]*]|[3-9].*, LD=: critic_missing="$critic_missing ld")
|
||||
|
||||
# We need the physical current working directory. We cannot use the
|
||||
# "pwd -P" shell builtin since that's not portable. Instead we try to
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
specs
|
||||
@@ -0,0 +1 @@
|
||||
specs
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
+2
-3
@@ -1,6 +1,5 @@
|
||||
/* User functions for run-time dynamic loading.
|
||||
Copyright (C) 1995-1999,2000,2001,2003,2004,2006
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2001,2003,2004,2006,2009 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
|
||||
@@ -164,7 +163,7 @@ enum
|
||||
segment, or if the calling thread has not allocated a block for it. */
|
||||
RTLD_DI_TLS_DATA = 10,
|
||||
|
||||
RTLD_DI_MAX = 10,
|
||||
RTLD_DI_MAX = 10
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
+13
-9
@@ -89,7 +89,8 @@ distribute := rtld-Rules \
|
||||
unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \
|
||||
unload6mod1.c unload6mod2.c unload6mod3.c \
|
||||
unload7mod1.c unload7mod2.c \
|
||||
tst-auditmod1.c tst-audit.sh \
|
||||
tst-audit1.c tst-audit2.c tst-audit3.c \
|
||||
tst-auditmod1.c tst-auditmod3a.c tst-auditmod3b.c \
|
||||
order2mod1.c order2mod2.c order2mod3.c order2mod4.c \
|
||||
tst-stackguard1.c tst-stackguard1-static.c \
|
||||
tst-array5.c tst-array5-static.c tst-array5dep.c \
|
||||
@@ -176,6 +177,9 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
|
||||
# reldep9
|
||||
test-srcs = tst-pathopt
|
||||
tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
|
||||
ifeq (x86_64,$(config-machine))
|
||||
tests += tst-audit3
|
||||
endif
|
||||
endif
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
tests: $(objpfx)tst-pie1.out
|
||||
@@ -224,6 +228,9 @@ endif
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
modules-names += tst-piemod1
|
||||
endif
|
||||
ifeq (x86_64,$(config-machine))
|
||||
modules-names += tst-auditmod3a tst-auditmod3b
|
||||
endif
|
||||
modules-execstack-yes = tst-execstack-mod
|
||||
extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))
|
||||
# We need this variable to be sure the test modules get the right CPPFLAGS.
|
||||
@@ -826,14 +833,7 @@ $(objpfx)tst-pie1.out: $(objpfx)tst-pie1
|
||||
$< > $@
|
||||
|
||||
$(objpfx)tst-pie1: $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so
|
||||
$(LINK.o) -pie -Wl,-O1 \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) \
|
||||
$(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
|
||||
$(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
|
||||
$(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
|
||||
-o $@ $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so \
|
||||
$(common-objpfx)libc_nonshared.a
|
||||
$(+link-pie)
|
||||
|
||||
generated += tst-pie1 tst-pie1.out tst-pie1.o
|
||||
endif
|
||||
@@ -914,6 +914,10 @@ tst-audit1-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so
|
||||
$(objpfx)tst-audit2.out: $(objpfx)tst-auditmod1.so
|
||||
tst-audit2-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so
|
||||
|
||||
$(objpfx)tst-audit3: $(objpfx)tst-auditmod3a.so
|
||||
$(objpfx)tst-audit3.out: $(objpfx)tst-auditmod3b.so
|
||||
tst-audit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod3b.so
|
||||
|
||||
$(objpfx)tst-global1: $(libdl)
|
||||
$(objpfx)tst-global1.out: $(objpfx)testobj6.so $(objpfx)testobj2.so
|
||||
|
||||
|
||||
+1
-1
@@ -335,7 +335,7 @@ _dl_show_auxv (void)
|
||||
|
||||
/* Unknown value: print a generic line. */
|
||||
char buf2[17];
|
||||
buf[sizeof (buf2) - 1] = '\0';
|
||||
buf2[sizeof (buf2) - 1] = '\0';
|
||||
const char *val2 = _itoa ((unsigned long int) av->a_un.a_val,
|
||||
buf2 + sizeof buf2 - 1, 16, 0);
|
||||
const char *val = _itoa ((unsigned long int) av->a_type,
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/* Test case for x86-64 preserved registers in dynamic linker. */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <emmintrin.h>
|
||||
|
||||
extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i,
|
||||
__m128i, __m128i, __m128i, __m128i);
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
__m128i xmm = _mm_setzero_si128 ();
|
||||
__m128i ret = audit_test (xmm, xmm, xmm, xmm, xmm, xmm, xmm, xmm);
|
||||
|
||||
if (memcmp (&xmm, &ret, sizeof (ret)))
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/* Test case for x86-64 preserved registers in dynamic linker. */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <emmintrin.h>
|
||||
|
||||
__m128i
|
||||
audit_test (__m128i x0, __m128i x1, __m128i x2, __m128i x3,
|
||||
__m128i x4, __m128i x5, __m128i x6, __m128i x7)
|
||||
{
|
||||
__m128i xmm = _mm_setzero_si128 ();
|
||||
|
||||
if (memcmp (&xmm, &x0, sizeof (xmm))
|
||||
|| memcmp (&xmm, &x1, sizeof (xmm))
|
||||
|| memcmp (&xmm, &x2, sizeof (xmm))
|
||||
|| memcmp (&xmm, &x3, sizeof (xmm))
|
||||
|| memcmp (&xmm, &x4, sizeof (xmm))
|
||||
|| memcmp (&xmm, &x5, sizeof (xmm))
|
||||
|| memcmp (&xmm, &x6, sizeof (xmm))
|
||||
|| memcmp (&xmm, &x7, sizeof (xmm)))
|
||||
abort ();
|
||||
|
||||
return xmm;
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
/* Verify that changing xmm registers in audit library won't affect
|
||||
function parameter passing/return. */
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <bits/wordsize.h>
|
||||
#include <gnu/lib-names.h>
|
||||
#include <emmintrin.h>
|
||||
|
||||
unsigned int
|
||||
la_version (unsigned int v)
|
||||
{
|
||||
setlinebuf (stdout);
|
||||
|
||||
printf ("version: %u\n", v);
|
||||
|
||||
char buf[20];
|
||||
sprintf (buf, "%u", v);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
void
|
||||
la_activity (uintptr_t *cookie, unsigned int flag)
|
||||
{
|
||||
if (flag == LA_ACT_CONSISTENT)
|
||||
printf ("activity: consistent\n");
|
||||
else if (flag == LA_ACT_ADD)
|
||||
printf ("activity: add\n");
|
||||
else if (flag == LA_ACT_DELETE)
|
||||
printf ("activity: delete\n");
|
||||
else
|
||||
printf ("activity: unknown activity %u\n", flag);
|
||||
}
|
||||
|
||||
char *
|
||||
la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag)
|
||||
{
|
||||
char buf[100];
|
||||
const char *flagstr;
|
||||
if (flag == LA_SER_ORIG)
|
||||
flagstr = "LA_SET_ORIG";
|
||||
else if (flag == LA_SER_LIBPATH)
|
||||
flagstr = "LA_SER_LIBPATH";
|
||||
else if (flag == LA_SER_RUNPATH)
|
||||
flagstr = "LA_SER_RUNPATH";
|
||||
else if (flag == LA_SER_CONFIG)
|
||||
flagstr = "LA_SER_CONFIG";
|
||||
else if (flag == LA_SER_DEFAULT)
|
||||
flagstr = "LA_SER_DEFAULT";
|
||||
else if (flag == LA_SER_SECURE)
|
||||
flagstr = "LA_SER_SECURE";
|
||||
else
|
||||
{
|
||||
sprintf (buf, "unknown flag %d", flag);
|
||||
flagstr = buf;
|
||||
}
|
||||
printf ("objsearch: %s, %s\n", name, flagstr);
|
||||
|
||||
return (char *) name;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie)
|
||||
{
|
||||
printf ("objopen: %ld, %s\n", lmid, l->l_name);
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
void
|
||||
la_preinit (uintptr_t *cookie)
|
||||
{
|
||||
printf ("preinit\n");
|
||||
}
|
||||
|
||||
unsigned int
|
||||
la_objclose (uintptr_t *cookie)
|
||||
{
|
||||
printf ("objclose\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uintptr_t
|
||||
la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook,
|
||||
uintptr_t *defcook, unsigned int *flags, const char *symname)
|
||||
{
|
||||
printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n",
|
||||
symname, (long int) sym->st_value, ndx, *flags);
|
||||
|
||||
return sym->st_value;
|
||||
}
|
||||
|
||||
uintptr_t
|
||||
la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
|
||||
uintptr_t *defcook, unsigned int *flags, const char *symname)
|
||||
{
|
||||
printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n",
|
||||
symname, (long int) sym->st_value, ndx, *flags);
|
||||
|
||||
return sym->st_value;
|
||||
}
|
||||
|
||||
#define pltenter la_x86_64_gnu_pltenter
|
||||
#define pltexit la_x86_64_gnu_pltexit
|
||||
#define La_regs La_x86_64_regs
|
||||
#define La_retval La_x86_64_retval
|
||||
#define int_retval lrv_rax
|
||||
|
||||
#include <tst-audit.h>
|
||||
|
||||
ElfW(Addr)
|
||||
pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
|
||||
uintptr_t *defcook, La_regs *regs, unsigned int *flags,
|
||||
const char *symname, long int *framesizep)
|
||||
{
|
||||
printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n",
|
||||
symname, (long int) sym->st_value, ndx, *flags);
|
||||
|
||||
__m128i xmm = _mm_set1_epi32 (-1);
|
||||
asm volatile ("movdqa %0, %%xmm0" : : "x" (xmm) : "xmm0" );
|
||||
asm volatile ("movdqa %0, %%xmm1" : : "x" (xmm) : "xmm1" );
|
||||
asm volatile ("movdqa %0, %%xmm2" : : "x" (xmm) : "xmm2" );
|
||||
asm volatile ("movdqa %0, %%xmm3" : : "x" (xmm) : "xmm3" );
|
||||
asm volatile ("movdqa %0, %%xmm4" : : "x" (xmm) : "xmm4" );
|
||||
asm volatile ("movdqa %0, %%xmm5" : : "x" (xmm) : "xmm5" );
|
||||
asm volatile ("movdqa %0, %%xmm6" : : "x" (xmm) : "xmm6" );
|
||||
asm volatile ("movdqa %0, %%xmm7" : : "x" (xmm) : "xmm7" );
|
||||
|
||||
return sym->st_value;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
|
||||
uintptr_t *defcook, const La_regs *inregs, La_retval *outregs,
|
||||
const char *symname)
|
||||
{
|
||||
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
|
||||
symname, (long int) sym->st_value, ndx, outregs->int_retval);
|
||||
|
||||
__m128i xmm = _mm_set1_epi32 (-1);
|
||||
asm volatile ("movdqa %0, %%xmm0" : : "x" (xmm) : "xmm0" );
|
||||
asm volatile ("movdqa %0, %%xmm1" : : "x" (xmm) : "xmm1" );
|
||||
asm volatile ("movdqa %0, %%xmm2" : : "x" (xmm) : "xmm2" );
|
||||
asm volatile ("movdqa %0, %%xmm3" : : "x" (xmm) : "xmm3" );
|
||||
asm volatile ("movdqa %0, %%xmm4" : : "x" (xmm) : "xmm4" );
|
||||
asm volatile ("movdqa %0, %%xmm5" : : "x" (xmm) : "xmm5" );
|
||||
asm volatile ("movdqa %0, %%xmm6" : : "x" (xmm) : "xmm6" );
|
||||
asm volatile ("movdqa %0, %%xmm7" : : "x" (xmm) : "xmm7" );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
+1
-1
@@ -7,7 +7,7 @@ libc {
|
||||
fgetsgent; fgetsgent_r;
|
||||
|
||||
# g*
|
||||
getsgent; getsgent_r; getsgnam; getsgnam_r; getsgent_r; getsgnam_r;
|
||||
getsgent; getsgent_r; getsgnam; getsgnam_r;
|
||||
|
||||
# p*
|
||||
putsgent;
|
||||
|
||||
@@ -26,5 +26,6 @@
|
||||
#define ENDFUNC_NAME endsgent
|
||||
#define DATABASE_NAME gshadow
|
||||
#define BUFLEN 1024
|
||||
#define NO_COMPAT_NEEDED 1
|
||||
|
||||
#include "../nss/getXXent_r.c"
|
||||
|
||||
@@ -26,5 +26,6 @@
|
||||
#define ADD_PARAMS const char *name
|
||||
#define ADD_VARIABLES name
|
||||
#define BUFLEN 1024
|
||||
#define NO_COMPAT_NEEDED 1
|
||||
|
||||
#include "../nss/getXXbyYY_r.c"
|
||||
|
||||
@@ -139,21 +139,19 @@ internal_gid_from_group (void *context, const char *groupname, gid_t *group)
|
||||
{
|
||||
char *p = *grp_res;
|
||||
|
||||
/* Skip to third field. */
|
||||
while (*p != '\0' && *p != ':')
|
||||
++p;
|
||||
while (*p != '\0' && *p == ':')
|
||||
if (*p != '\0')
|
||||
++p;
|
||||
while (*p != '\0' && *p != ':')
|
||||
++p;
|
||||
while (*p != '\0' && *p == ':')
|
||||
++p;
|
||||
if (*p == ':')
|
||||
if (*p != '\0')
|
||||
{
|
||||
char *endp;
|
||||
char *q = ++p;
|
||||
long int val;
|
||||
|
||||
q = p;
|
||||
while (*q != '\0' && *q != ':')
|
||||
++q;
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
+32
-21
@@ -95,14 +95,26 @@
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined catomic_compare_and_exchange_val_acq \
|
||||
&& defined __arch_c_compare_and_exchange_val_32_acq
|
||||
# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \
|
||||
#ifndef catomic_compare_and_exchange_val_acq
|
||||
# ifdef __arch_c_compare_and_exchange_val_32_acq
|
||||
# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \
|
||||
__atomic_val_bysize (__arch_c_compare_and_exchange_val,acq, \
|
||||
mem, newval, oldval)
|
||||
#else
|
||||
# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \
|
||||
# else
|
||||
# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \
|
||||
atomic_compare_and_exchange_val_acq (mem, newval, oldval)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef catomic_compare_and_exchange_val_rel
|
||||
# ifndef atomic_compare_and_exchange_val_rel
|
||||
# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) \
|
||||
catomic_compare_and_exchange_val_acq (mem, newval, oldval)
|
||||
# else
|
||||
# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) \
|
||||
atomic_compare_and_exchange_val_rel (mem, newval, oldval)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -112,12 +124,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef catomic_compare_and_exchange_val_rel
|
||||
# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) \
|
||||
atomic_compare_and_exchange_val_acq (mem, newval, oldval)
|
||||
#endif
|
||||
|
||||
|
||||
/* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL.
|
||||
Return zero if *MEM was changed or non-zero if no exchange happened. */
|
||||
#ifndef atomic_compare_and_exchange_bool_acq
|
||||
@@ -125,8 +131,8 @@
|
||||
# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
|
||||
__atomic_bool_bysize (__arch_compare_and_exchange_bool,acq, \
|
||||
mem, newval, oldval)
|
||||
# else
|
||||
# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
|
||||
# else
|
||||
# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
|
||||
({ /* Cannot use __oldval here, because macros later in this file might \
|
||||
call this macro with __oldval argument. */ \
|
||||
__typeof (oldval) __atg3_old = (oldval); \
|
||||
@@ -142,8 +148,8 @@
|
||||
# define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
|
||||
__atomic_bool_bysize (__arch_c_compare_and_exchange_bool,acq, \
|
||||
mem, newval, oldval)
|
||||
# else
|
||||
# define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
|
||||
# else
|
||||
# define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
|
||||
({ /* Cannot use __oldval here, because macros later in this file might \
|
||||
call this macro with __oldval argument. */ \
|
||||
__typeof (oldval) __atg4_old = (oldval); \
|
||||
@@ -154,15 +160,20 @@
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef atomic_compare_and_exchange_bool_rel
|
||||
# define atomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
|
||||
atomic_compare_and_exchange_bool_acq (mem, newval, oldval)
|
||||
#ifndef catomic_compare_and_exchange_bool_rel
|
||||
# ifndef atomic_compare_and_exchange_bool_rel
|
||||
# define catomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
|
||||
catomic_compare_and_exchange_bool_acq (mem, newval, oldval)
|
||||
# else
|
||||
# define catomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
|
||||
atomic_compare_and_exchange_bool_rel (mem, newval, oldval)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef catomic_compare_and_exchange_bool_rel
|
||||
# define catomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
|
||||
catomic_compare_and_exchange_bool_acq (mem, newval, oldval)
|
||||
#ifndef atomic_compare_and_exchange_bool_rel
|
||||
# define atomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
|
||||
atomic_compare_and_exchange_bool_acq (mem, newval, oldval)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991-1997,2000,2006 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991-1997,2000,2006,2009 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
|
||||
@@ -339,7 +339,7 @@ struct nd_opt_home_agent_info
|
||||
uint8_t nd_opt_home_agent_info_type;
|
||||
uint8_t nd_opt_home_agent_info_len;
|
||||
uint16_t nd_opt_home_agent_info_reserved;
|
||||
int16_t nd_opt_home_agent_info_preference;
|
||||
uint16_t nd_opt_home_agent_info_preference;
|
||||
uint16_t nd_opt_home_agent_info_lifetime;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -1,8 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
|
||||
mpn-copy.mk
|
||||
distinfo
|
||||
+2
-1
@@ -58,7 +58,7 @@ tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc \
|
||||
tst-memstream1 tst-memstream2 \
|
||||
tst-wmemstream1 tst-wmemstream2 \
|
||||
bug-memstream1 bug-wmemstream1 \
|
||||
tst-setvbuf1 tst-popen1 tst-fgetwc
|
||||
tst-setvbuf1 tst-popen1 tst-fgetwc bug-wsetpos
|
||||
test-srcs = test-freopen
|
||||
|
||||
all: # Make this the default target; it will be defined in Rules.
|
||||
@@ -153,6 +153,7 @@ tst-ungetwc2-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
bug-ungetwc2-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-swscanf-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
bug-ftell-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-fgetwc-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
|
||||
generated = tst-fopenloc.mtrace tst-fopenloc.check
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/* Test program for fsetpos on a wide character stream. */
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <wchar.h>
|
||||
|
||||
static void do_prepare (void);
|
||||
#define PREPARE(argc, argv) do_prepare ()
|
||||
static int do_test (void);
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include <test-skeleton.c>
|
||||
|
||||
static const char pattern[] = "12345";
|
||||
static char *temp_file;
|
||||
|
||||
static void
|
||||
do_prepare (void)
|
||||
{
|
||||
int fd = create_temp_file ("bug-wsetpos.", &temp_file);
|
||||
if (fd == -1)
|
||||
{
|
||||
printf ("cannot create temporary file: %m\n");
|
||||
exit (1);
|
||||
}
|
||||
write (fd, pattern, sizeof (pattern));
|
||||
close (fd);
|
||||
}
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
FILE *fp = fopen (temp_file, "r");
|
||||
fpos_t pos;
|
||||
wchar_t c;
|
||||
|
||||
if (fp == NULL)
|
||||
{
|
||||
printf ("fdopen: %m\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
c = fgetwc (fp); assert (c == L'1');
|
||||
c = fgetwc (fp); assert (c == L'2');
|
||||
|
||||
if (fgetpos (fp, &pos) == EOF)
|
||||
{
|
||||
printf ("fgetpos: %m\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
rewind (fp);
|
||||
if (ferror (fp))
|
||||
{
|
||||
printf ("rewind: %m\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
c = fgetwc (fp); assert (c == L'1');
|
||||
|
||||
if (fsetpos (fp, &pos) == EOF)
|
||||
{
|
||||
printf ("fsetpos: %m\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
c = fgetwc (fp);
|
||||
if (c != L'3')
|
||||
{
|
||||
puts ("fsetpos failed");
|
||||
return 1;
|
||||
}
|
||||
|
||||
puts ("Test succeeded.");
|
||||
return 0;
|
||||
}
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007, 2008
|
||||
/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Written by Per Bothner <bothner@cygnus.com>.
|
||||
@@ -319,11 +319,11 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
|
||||
continue;
|
||||
case 'c':
|
||||
fp->_flags2 |= _IO_FLAGS2_NOTCANCEL;
|
||||
break;
|
||||
continue;
|
||||
#ifdef O_CLOEXEC
|
||||
case 'e':
|
||||
oflags |= O_CLOEXEC;
|
||||
break;
|
||||
continue;
|
||||
#endif
|
||||
default:
|
||||
/* Ignore. */
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
if (setlocale (LC_ALL, "de_DE.utf8") == NULL)
|
||||
if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
|
||||
{
|
||||
puts ("setlocale failed");
|
||||
return 1;
|
||||
|
||||
+24
-77
@@ -631,8 +631,12 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
|
||||
clen = (*cv->__codecvt_do_encoding) (cv);
|
||||
|
||||
if (clen > 0)
|
||||
offset -= (fp->_wide_data->_IO_read_end
|
||||
- fp->_wide_data->_IO_read_ptr) * clen;
|
||||
{
|
||||
offset -= (fp->_wide_data->_IO_read_end
|
||||
- fp->_wide_data->_IO_read_ptr) * clen;
|
||||
/* Adjust by readahead in external buffer. */
|
||||
offset -= fp->_IO_read_end - fp->_IO_read_ptr;
|
||||
}
|
||||
else
|
||||
{
|
||||
int nread;
|
||||
@@ -678,88 +682,28 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
|
||||
if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
|
||||
&& !_IO_in_backup (fp))
|
||||
{
|
||||
/* Offset relative to start of main get area. */
|
||||
_IO_off64_t rel_offset = (offset - fp->_offset
|
||||
+ (fp->_IO_read_end - fp->_IO_read_base));
|
||||
if (rel_offset >= 0)
|
||||
_IO_off64_t start_offset = (fp->_offset
|
||||
- (fp->_IO_read_end - fp->_IO_buf_base));
|
||||
if (offset >= start_offset && offset < fp->_offset)
|
||||
{
|
||||
#if 0
|
||||
if (_IO_in_backup (fp))
|
||||
_IO_switch_to_main_get_area (fp);
|
||||
#endif
|
||||
if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
|
||||
{
|
||||
enum __codecvt_result status;
|
||||
struct _IO_codecvt *cd = fp->_codecvt;
|
||||
const char *read_ptr_copy;
|
||||
enum __codecvt_result status;
|
||||
struct _IO_codecvt *cd = fp->_codecvt;
|
||||
const char *read_ptr_copy;
|
||||
|
||||
fp->_IO_read_ptr = fp->_IO_read_base + rel_offset;
|
||||
_IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
|
||||
|
||||
/* Now set the pointer for the internal buffer. This
|
||||
might be an iterative process. Though the read
|
||||
pointer is somewhere in the current external buffer
|
||||
this does not mean we can convert this whole buffer
|
||||
at once fitting in the internal buffer. */
|
||||
fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
|
||||
read_ptr_copy = fp->_IO_read_base;
|
||||
fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_base;
|
||||
do
|
||||
{
|
||||
wchar_t buffer[1024];
|
||||
wchar_t *ignore;
|
||||
status = (*cd->__codecvt_do_in) (cd,
|
||||
&fp->_wide_data->_IO_state,
|
||||
read_ptr_copy,
|
||||
fp->_IO_read_ptr,
|
||||
&read_ptr_copy,
|
||||
buffer,
|
||||
buffer
|
||||
+ (sizeof (buffer)
|
||||
/ sizeof (buffer[0])),
|
||||
&ignore);
|
||||
if (status != __codecvt_ok && status != __codecvt_partial)
|
||||
{
|
||||
fp->_flags |= _IO_ERR_SEEN;
|
||||
goto dumb;
|
||||
}
|
||||
}
|
||||
while (read_ptr_copy != fp->_IO_read_ptr);
|
||||
|
||||
fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_base;
|
||||
|
||||
_IO_mask_flags (fp, 0, _IO_EOF_SEEN);
|
||||
goto resync;
|
||||
}
|
||||
#ifdef TODO
|
||||
/* If we have streammarkers, seek forward by reading ahead. */
|
||||
if (_IO_have_markers (fp))
|
||||
{
|
||||
int to_skip = rel_offset
|
||||
- (fp->_IO_read_ptr - fp->_IO_read_base);
|
||||
if (ignore (to_skip) != to_skip)
|
||||
goto dumb;
|
||||
_IO_mask_flags (fp, 0, _IO_EOF_SEEN);
|
||||
goto resync;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#ifdef TODO
|
||||
if (rel_offset < 0 && rel_offset >= Bbase () - Bptr ())
|
||||
{
|
||||
if (!_IO_in_backup (fp))
|
||||
_IO_switch_to_backup_area (fp);
|
||||
gbump (fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
|
||||
_IO_setg (fp, fp->_IO_buf_base,
|
||||
fp->_IO_buf_base + (offset - start_offset),
|
||||
fp->_IO_read_end);
|
||||
_IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
|
||||
_IO_wsetg (fp, fp->_wide_data->_IO_buf_base,
|
||||
fp->_wide_data->_IO_buf_base,
|
||||
fp->_wide_data->_IO_buf_base);
|
||||
_IO_wsetp (fp, fp->_wide_data->_IO_buf_base,
|
||||
fp->_wide_data->_IO_buf_base);
|
||||
_IO_mask_flags (fp, 0, _IO_EOF_SEEN);
|
||||
goto resync;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef TODO
|
||||
INTUSE(_IO_unsave_markers) (fp);
|
||||
#endif
|
||||
|
||||
if (fp->_flags & _IO_NO_READS)
|
||||
goto dumb;
|
||||
|
||||
@@ -792,6 +736,9 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
|
||||
_IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + delta,
|
||||
fp->_IO_buf_base + count);
|
||||
_IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
|
||||
_IO_wsetg (fp, fp->_wide_data->_IO_buf_base,
|
||||
fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base);
|
||||
_IO_wsetp (fp, fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base);
|
||||
fp->_offset = result + count;
|
||||
_IO_mask_flags (fp, 0, _IO_EOF_SEEN);
|
||||
return offset;
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995-2003, 2005-2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995-2003, 2005-2008, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
|
||||
|
||||
@@ -203,6 +203,8 @@ struct locale_collate_t
|
||||
struct section_list *current_section;
|
||||
/* There always can be an unnamed section. */
|
||||
struct section_list unnamed_section;
|
||||
/* Flag whether the unnamed section has been defined. */
|
||||
bool unnamed_section_defined;
|
||||
/* To make handling of errors easier we have another section. */
|
||||
struct section_list error_section;
|
||||
/* Sometimes we are defining the values for collating symbols before
|
||||
@@ -634,7 +636,7 @@ find_element (struct linereader *ldfile, struct locale_collate_t *collate,
|
||||
if (find_entry (&collate->seq_table, str, len, &result) != 0)
|
||||
{
|
||||
/* Nope, not define yet. So we see whether it is a
|
||||
collation symbol. */
|
||||
collation symbol. */
|
||||
void *ptr;
|
||||
|
||||
if (find_entry (&collate->sym_table, str, len, &ptr) == 0)
|
||||
@@ -788,7 +790,7 @@ insert_weights (struct linereader *ldfile, struct element_t *elem,
|
||||
if (*cp == '<')
|
||||
{
|
||||
/* Ahh, it's a bsymbol or an UCS4 value. If it's
|
||||
the latter we have to unify the name. */
|
||||
the latter we have to unify the name. */
|
||||
const char *startp = ++cp;
|
||||
size_t len;
|
||||
|
||||
@@ -1302,8 +1304,8 @@ order for `%.*s' already defined at %s:%Zu"),
|
||||
else
|
||||
{
|
||||
/* Determine the range. To do so we have to determine the
|
||||
common prefix of the both names and then the numeric
|
||||
values of both ends. */
|
||||
common prefix of the both names and then the numeric
|
||||
values of both ends. */
|
||||
size_t lenfrom = strlen (startp->name);
|
||||
size_t lento = strlen (endp->name);
|
||||
char buf[lento + 1];
|
||||
@@ -2222,14 +2224,14 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
|
||||
else
|
||||
{
|
||||
/* The entries in the list are sorted by length and then
|
||||
alphabetically. This is the order in which we will add the
|
||||
elements to the collation table. This allows simply walking
|
||||
alphabetically. This is the order in which we will add the
|
||||
elements to the collation table. This allows simply walking
|
||||
the table in sequence and stopping at the first matching
|
||||
entry. Since the longer sequences are coming first in the
|
||||
list they have the possibility to match first, just as it
|
||||
has to be. In the worst case we are walking to the end of
|
||||
the list where we put, if no singlebyte sequence is defined
|
||||
in the locale definition, the weights for UNDEFINED.
|
||||
entry. Since the longer sequences are coming first in the
|
||||
list they have the possibility to match first, just as it
|
||||
has to be. In the worst case we are walking to the end of
|
||||
the list where we put, if no singlebyte sequence is defined
|
||||
in the locale definition, the weights for UNDEFINED.
|
||||
|
||||
To reduce the length of the search list we compress them a bit.
|
||||
This happens by collecting sequences of consecutive byte
|
||||
@@ -2297,7 +2299,7 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
|
||||
obstack_1grow_fast (&extrapool, curp->mbs[i]);
|
||||
|
||||
/* Now find the end of the consecutive sequence and
|
||||
add all the indeces in the indirect pool. */
|
||||
add all the indeces in the indirect pool. */
|
||||
do
|
||||
{
|
||||
weightidx = output_weight (&weightpool, collate, curp);
|
||||
@@ -2312,7 +2314,7 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
|
||||
obstack_int32_grow (&indirectpool, weightidx);
|
||||
|
||||
/* And add the end byte sequence. Without length this
|
||||
time. */
|
||||
time. */
|
||||
for (i = 1; i < curp->nmbs; ++i)
|
||||
obstack_1grow_fast (&extrapool, curp->mbs[i]);
|
||||
}
|
||||
@@ -2356,7 +2358,7 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
|
||||
& (__alignof__ (int32_t) - 1)) == 0);
|
||||
|
||||
/* If the final entry in the list is not a single character we
|
||||
add an UNDEFINED entry here. */
|
||||
add an UNDEFINED entry here. */
|
||||
if (lastp->nmbs != 1)
|
||||
{
|
||||
int added = ((sizeof (int32_t) + 1 + 1 + __alignof__ (int32_t) - 1)
|
||||
@@ -3293,7 +3295,7 @@ error while adding equivalent collating symbol"));
|
||||
else
|
||||
{
|
||||
/* One should not be allowed to open the same
|
||||
section twice. */
|
||||
section twice. */
|
||||
if (sp->first != NULL)
|
||||
lr_error (ldfile, _("\
|
||||
%s: multiple order definitions for section `%s'"),
|
||||
@@ -3349,7 +3351,7 @@ error while adding equivalent collating symbol"));
|
||||
section. */
|
||||
collate->current_section = &collate->unnamed_section;
|
||||
|
||||
if (collate->unnamed_section.first != NULL)
|
||||
if (collate->unnamed_section_defined)
|
||||
lr_error (ldfile, _("\
|
||||
%s: multiple order definitions for unnamed section"),
|
||||
"LC_COLLATE");
|
||||
@@ -3359,6 +3361,7 @@ error while adding equivalent collating symbol"));
|
||||
the collate->sections list. */
|
||||
collate->unnamed_section.next = collate->sections;
|
||||
collate->sections = &collate->unnamed_section;
|
||||
collate->unnamed_section_defined = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3579,9 +3582,9 @@ error while adding equivalent collating symbol"));
|
||||
else
|
||||
{
|
||||
/* This is bad. The section after which we have to
|
||||
reorder does not exist. Therefore we cannot
|
||||
process the whole rest of this reorder
|
||||
specification. */
|
||||
reorder does not exist. Therefore we cannot
|
||||
process the whole rest of this reorder
|
||||
specification. */
|
||||
lr_error (ldfile, _("%s: section `%.*s' not known"),
|
||||
"LC_COLLATE", (int) arg->val.str.lenmb,
|
||||
arg->val.str.startmb);
|
||||
@@ -3657,9 +3660,9 @@ error while adding equivalent collating symbol"));
|
||||
if (state == 0)
|
||||
{
|
||||
/* We are outside an `order_start' region. This means
|
||||
we must only accept definitions of values for
|
||||
collation symbols since these are purely abstract
|
||||
values and don't need directions associated. */
|
||||
we must only accept definitions of values for
|
||||
collation symbols since these are purely abstract
|
||||
values and don't need directions associated. */
|
||||
void *ptr;
|
||||
|
||||
if (find_entry (&collate->seq_table, symstr, symlen, &ptr) == 0)
|
||||
@@ -3741,7 +3744,7 @@ error while adding equivalent collating symbol"));
|
||||
seqp->next->last = seqp->last;
|
||||
|
||||
/* We also have to check whether this entry is the
|
||||
first or last of a section. */
|
||||
first or last of a section. */
|
||||
if (seqp->section->first == seqp)
|
||||
{
|
||||
if (seqp->section->first == seqp->section->last)
|
||||
@@ -3798,7 +3801,7 @@ error while adding equivalent collating symbol"));
|
||||
}
|
||||
|
||||
/* Process the rest of the line which might change
|
||||
the collation rules. */
|
||||
the collation rules. */
|
||||
arg = lr_token (ldfile, charmap, result, repertoire,
|
||||
verbose);
|
||||
if (arg->tok != tok_eof && arg->tok != tok_eol)
|
||||
@@ -3810,8 +3813,8 @@ error while adding equivalent collating symbol"));
|
||||
else if (was_ellipsis != tok_none)
|
||||
{
|
||||
/* Using the information in the `ellipsis_weight'
|
||||
element and this and the last value we have to handle
|
||||
the ellipsis now. */
|
||||
element and this and the last value we have to handle
|
||||
the ellipsis now. */
|
||||
assert (state == 1);
|
||||
|
||||
handle_ellipsis (ldfile, symstr, symlen, was_ellipsis, charmap,
|
||||
@@ -3871,7 +3874,7 @@ error while adding equivalent collating symbol"));
|
||||
case tok_ellipsis3: /* absolute ellipsis */
|
||||
case tok_ellipsis4: /* symbolic decimal ellipsis */
|
||||
/* This is the symbolic (decimal or hexadecimal) or absolute
|
||||
ellipsis. */
|
||||
ellipsis. */
|
||||
if (was_ellipsis != tok_none)
|
||||
goto err_label;
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
2009-06-16 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10011]
|
||||
* locales/de_AT: Define week, first_weekday, first_workday.
|
||||
Patch by Paul Marcher <flyer@gmail.com>.
|
||||
|
||||
2009-05-04 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* localedata/locales/bn_BD: Remove comment about missing collation
|
||||
|
||||
@@ -121,6 +121,9 @@ t_fmt_ampm ""
|
||||
date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
|
||||
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
|
||||
<U0025><U005A><U0020><U0025><U0059>"
|
||||
week 7;19971130;4
|
||||
first_weekday 2
|
||||
first_workday 2
|
||||
END LC_TIME
|
||||
|
||||
LC_PAPER
|
||||
|
||||
+19
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1996-1998,2000-2002,2003,2007 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-1998,2000-2003,2007, 2009 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
|
||||
@@ -54,6 +54,24 @@ otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
|
||||
$(resolvobjdir)/libresolv.a $(common-objpfx)libc.a
|
||||
endif
|
||||
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
pt_chown-cflags += $(pie-ccflag)
|
||||
endif
|
||||
ifeq (yes,$(have-ssp))
|
||||
pt_chown-cflags += -fstack-protector
|
||||
endif
|
||||
ifeq (yes,$(have-libcap))
|
||||
libcap = -lcap
|
||||
endif
|
||||
CFLAGS-pt_chown.c = $(pt_chown-cflags)
|
||||
LDLIBS-pt_chown = $(libcap)
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
LDFLAGS-pt_chown = -Wl,-z,now
|
||||
|
||||
$(objpfx)pt_chown: $(objpfx)pt_chown.o
|
||||
$(+link-pie)
|
||||
endif
|
||||
|
||||
# pt_chown needs to be setuid root.
|
||||
$(inst_libexecdir)/pt_chown: $(objpfx)pt_chown $(+force)
|
||||
$(make-target-directory)
|
||||
|
||||
@@ -29,6 +29,10 @@
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#ifdef HAVE_LIBCAP
|
||||
# include <sys/capability.h>
|
||||
# include <sys/prctl.h>
|
||||
#endif
|
||||
|
||||
#include "pty-private.h"
|
||||
|
||||
@@ -99,7 +103,7 @@ static int
|
||||
do_pt_chown (void)
|
||||
{
|
||||
char *pty;
|
||||
struct stat st;
|
||||
struct stat64 st;
|
||||
struct group *p;
|
||||
gid_t gid;
|
||||
|
||||
@@ -110,7 +114,7 @@ do_pt_chown (void)
|
||||
|
||||
/* Check that the returned slave pseudo terminal is a
|
||||
character device. */
|
||||
if (stat (pty, &st) < 0 || !S_ISCHR(st.st_mode))
|
||||
if (stat64 (pty, &st) < 0 || !S_ISCHR (st.st_mode))
|
||||
return FAIL_EINVAL;
|
||||
|
||||
/* Get the group ID of the special `tty' group. */
|
||||
@@ -135,16 +139,43 @@ int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
uid_t euid = geteuid ();
|
||||
uid_t uid = getuid ();
|
||||
int remaining;
|
||||
|
||||
/* Normal invocation of this program is with no arguments and
|
||||
with privileges.
|
||||
FIXME: Should use capable (CAP_CHOWN|CAP_FOWNER). */
|
||||
if (argc == 1 && euid == 0)
|
||||
return do_pt_chown ();
|
||||
{
|
||||
#ifdef HAVE_LIBCAP
|
||||
/* Drop privileges. */
|
||||
if (uid != euid)
|
||||
{
|
||||
static const cap_value_t cap_list[] =
|
||||
{ CAP_CHOWN, CAP_FOWNER };
|
||||
# define ncap_list (sizeof (cap_list) / sizeof (cap_list[0]))
|
||||
cap_t caps = cap_init ();
|
||||
if (caps == NULL)
|
||||
error (FAIL_ENOMEM, errno,
|
||||
_("Failed to initialize drop of capabilities"));
|
||||
|
||||
/* There is no reason why these should not work. */
|
||||
cap_set_flag (caps, CAP_PERMITTED, ncap_list, cap_list, CAP_SET);
|
||||
cap_set_flag (caps, CAP_EFFECTIVE, ncap_list, cap_list, CAP_SET);
|
||||
|
||||
int res = cap_set_proc (caps);
|
||||
|
||||
cap_free (caps);
|
||||
|
||||
if (__builtin_expect (res != 0, 0))
|
||||
error (FAIL_EXEC, errno, _("cap_set_proc failed"));
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Normal invocation of this program is with no arguments and
|
||||
with privileges. */
|
||||
return do_pt_chown ();
|
||||
}
|
||||
|
||||
/* We aren't going to be using privileges, so drop them right now. */
|
||||
setuid (getuid ());
|
||||
setuid (uid);
|
||||
|
||||
/* Set locale via LC_ALL. */
|
||||
setlocale (LC_ALL, "");
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -104,6 +104,7 @@ $(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o)
|
||||
include ../Rules
|
||||
|
||||
CFLAGS-mcheck-init.c = $(PIC-ccflag)
|
||||
CFLAGS-obstack.c = $(uses-callbacks)
|
||||
|
||||
$(objpfx)libmcheck.a: $(objpfx)mcheck-init.o
|
||||
-rm -f $@
|
||||
|
||||
+20
-17
@@ -162,8 +162,8 @@ mem2chunk_check(mem, magic_p) Void_t* mem; unsigned char **magic_p;
|
||||
((char*)p + sz)>=(mp_.sbrk_base+main_arena.system_mem) )) ||
|
||||
sz<MINSIZE || sz&MALLOC_ALIGN_MASK || !inuse(p) ||
|
||||
( !prev_inuse(p) && (p->prev_size&MALLOC_ALIGN_MASK ||
|
||||
(contig && (char*)prev_chunk(p)<mp_.sbrk_base) ||
|
||||
next_chunk(prev_chunk(p))!=p) ))
|
||||
(contig && (char*)prev_chunk(p)<mp_.sbrk_base) ||
|
||||
next_chunk(prev_chunk(p))!=p) ))
|
||||
return NULL;
|
||||
magic = MAGICBYTE(p);
|
||||
for(sz += SIZE_SZ-1; (c = ((unsigned char*)p)[sz]) != magic; sz -= c) {
|
||||
@@ -177,9 +177,9 @@ mem2chunk_check(mem, magic_p) Void_t* mem; unsigned char **magic_p;
|
||||
first. */
|
||||
offset = (unsigned long)mem & page_mask;
|
||||
if((offset!=MALLOC_ALIGNMENT && offset!=0 && offset!=0x10 &&
|
||||
offset!=0x20 && offset!=0x40 && offset!=0x80 && offset!=0x100 &&
|
||||
offset!=0x200 && offset!=0x400 && offset!=0x800 && offset!=0x1000 &&
|
||||
offset<0x2000) ||
|
||||
offset!=0x20 && offset!=0x40 && offset!=0x80 && offset!=0x100 &&
|
||||
offset!=0x200 && offset!=0x400 && offset!=0x800 && offset!=0x1000 &&
|
||||
offset<0x2000) ||
|
||||
!chunk_is_mmapped(p) || (p->size & PREV_INUSE) ||
|
||||
( (((unsigned long)p - p->prev_size) & page_mask) != 0 ) ||
|
||||
( (sz = chunksize(p)), ((p->prev_size + sz) & page_mask) != 0 ) )
|
||||
@@ -276,13 +276,17 @@ free_check(mem, caller) Void_t* mem; const Void_t *caller;
|
||||
mchunkptr p;
|
||||
|
||||
if(!mem) return;
|
||||
(void)mutex_lock(&main_arena.mutex);
|
||||
p = mem2chunk_check(mem, NULL);
|
||||
if(!p) {
|
||||
(void)mutex_unlock(&main_arena.mutex);
|
||||
|
||||
malloc_printerr(check_action, "free(): invalid pointer", mem);
|
||||
return;
|
||||
}
|
||||
#if HAVE_MMAP
|
||||
if (chunk_is_mmapped(p)) {
|
||||
(void)mutex_unlock(&main_arena.mutex);
|
||||
munmap_chunk(p);
|
||||
return;
|
||||
}
|
||||
@@ -291,12 +295,11 @@ free_check(mem, caller) Void_t* mem; const Void_t *caller;
|
||||
memset(mem, 0, chunksize(p) - (SIZE_SZ+1));
|
||||
#endif
|
||||
#ifdef ATOMIC_FASTBINS
|
||||
_int_free(&main_arena, p, 0);
|
||||
_int_free(&main_arena, p, 1);
|
||||
#else
|
||||
(void)mutex_lock(&main_arena.mutex);
|
||||
_int_free(&main_arena, p);
|
||||
(void)mutex_unlock(&main_arena.mutex);
|
||||
#endif
|
||||
(void)mutex_unlock(&main_arena.mutex);
|
||||
}
|
||||
|
||||
static Void_t*
|
||||
@@ -345,13 +348,13 @@ realloc_check(oldmem, bytes, caller)
|
||||
if(oldsize - SIZE_SZ >= nb)
|
||||
newmem = oldmem; /* do nothing */
|
||||
else {
|
||||
/* Must alloc, copy, free. */
|
||||
if (top_check() >= 0)
|
||||
/* Must alloc, copy, free. */
|
||||
if (top_check() >= 0)
|
||||
newmem = _int_malloc(&main_arena, bytes+1);
|
||||
if (newmem) {
|
||||
MALLOC_COPY(BOUNDED_N(newmem, bytes+1), oldmem, oldsize - 2*SIZE_SZ);
|
||||
munmap_chunk(oldp);
|
||||
}
|
||||
if (newmem) {
|
||||
MALLOC_COPY(BOUNDED_N(newmem, bytes+1), oldmem, oldsize - 2*SIZE_SZ);
|
||||
munmap_chunk(oldp);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -367,7 +370,7 @@ realloc_check(oldmem, bytes, caller)
|
||||
nb = chunksize(newp);
|
||||
if(oldp<newp || oldp>=chunk_at_offset(newp, nb)) {
|
||||
memset((char*)oldmem + 2*sizeof(mbinptr), 0,
|
||||
oldsize - (2*sizeof(mbinptr)+2*SIZE_SZ+1));
|
||||
oldsize - (2*sizeof(mbinptr)+2*SIZE_SZ+1));
|
||||
} else if(nb > oldsize+SIZE_SZ) {
|
||||
memset((char*)BOUNDED_N(chunk2mem(newp), bytes) + oldsize,
|
||||
0, nb - (oldsize+SIZE_SZ));
|
||||
@@ -626,7 +629,7 @@ public_sET_STATe(Void_t* msptr)
|
||||
mark_bin(&main_arena, i);
|
||||
} else {
|
||||
/* Oops, index computation from chunksize must have changed.
|
||||
Link the whole list into unsorted_chunks. */
|
||||
Link the whole list into unsorted_chunks. */
|
||||
first(b) = last(b) = b;
|
||||
b = unsorted_chunks(&main_arena);
|
||||
ms->av[2*i+2]->bk = b;
|
||||
@@ -667,7 +670,7 @@ public_sET_STATe(Void_t* msptr)
|
||||
/* Check whether it is safe to enable malloc checking, or whether
|
||||
it is necessary to disable it. */
|
||||
if (ms->using_malloc_checking && !using_malloc_checking &&
|
||||
!disallow_malloc_check)
|
||||
!disallow_malloc_check)
|
||||
__malloc_check_init ();
|
||||
else if (!ms->using_malloc_checking && using_malloc_checking) {
|
||||
__malloc_hook = NULL;
|
||||
|
||||
+468
-425
File diff suppressed because it is too large
Load Diff
@@ -1,14 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz *.bz2
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
|
||||
*.dvi* *.info* *.c.texi *.ps *.pdf
|
||||
*.toc *.aux *.log *.tmp
|
||||
*.cp *.cps *.fn *.fns *.vr *.vrs *.tp *.tps *.ky *.kys *.pg *.pgs
|
||||
|
||||
texis top-menu.texi chapters.texi summary.texi stamp-*
|
||||
distinfo dir-add.texinfo dir-add.texi
|
||||
|
||||
libm-err.texi
|
||||
@@ -0,0 +1,29 @@
|
||||
*.aux
|
||||
*.c.texi
|
||||
*.cp
|
||||
*.cps
|
||||
*.dvi*
|
||||
*.fn
|
||||
*.fns
|
||||
*.info*
|
||||
*.ky
|
||||
*.kys
|
||||
*.log
|
||||
*.pdf
|
||||
*.pg
|
||||
*.pgs
|
||||
*.ps
|
||||
*.tmp
|
||||
*.toc
|
||||
*.tp
|
||||
*.tps
|
||||
*.vr
|
||||
*.vrs
|
||||
chapters.texi
|
||||
dir-add.texi
|
||||
dir-add.texinfo
|
||||
libm-err.texi
|
||||
stamp-*
|
||||
summary.texi
|
||||
texis
|
||||
top-menu.texi
|
||||
+1
-1
@@ -1234,7 +1234,7 @@ file_mbsrtowcs (int input, int output)
|
||||
/* @r{If any characters must be carried forward,}
|
||||
@r{put them at the beginning of @code{buffer}.} */
|
||||
if (filled > 0)
|
||||
memmove (inp, buffer, filled);
|
||||
memmove (buffer, inp, filled);
|
||||
@}
|
||||
|
||||
return 1;
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
+10
-2
@@ -1,5 +1,5 @@
|
||||
/* Return positive difference between arguments.
|
||||
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 2004, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
|
||||
double
|
||||
@@ -31,7 +32,14 @@ __fdim (double x, double y)
|
||||
/* Raise invalid flag. */
|
||||
return x - y;
|
||||
|
||||
return x <= y ? 0 : x - y;
|
||||
if (x <= y)
|
||||
return 0.0;
|
||||
|
||||
double r = x - y;
|
||||
if (fpclassify (r) == FP_INFINITE)
|
||||
__set_errno (ERANGE);
|
||||
|
||||
return r;
|
||||
}
|
||||
weak_alias (__fdim, fdim)
|
||||
#ifdef NO_LONG_DOUBLE
|
||||
|
||||
+10
-2
@@ -1,5 +1,5 @@
|
||||
/* Return positive difference between arguments.
|
||||
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 2004, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
|
||||
float
|
||||
@@ -31,6 +32,13 @@ __fdimf (float x, float y)
|
||||
/* Raise invalid flag. */
|
||||
return x - y;
|
||||
|
||||
return x <= y ? 0 : x - y;
|
||||
if (x <= y)
|
||||
return 0.0f;
|
||||
|
||||
float r = x - y;
|
||||
if (fpclassify (r) == FP_INFINITE)
|
||||
__set_errno (ERANGE);
|
||||
|
||||
return r;
|
||||
}
|
||||
weak_alias (__fdimf, fdimf)
|
||||
|
||||
+10
-2
@@ -1,5 +1,5 @@
|
||||
/* Return positive difference between arguments.
|
||||
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 2004, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
|
||||
long double
|
||||
@@ -31,6 +32,13 @@ __fdiml (long double x, long double y)
|
||||
/* Raise invalid flag. */
|
||||
return x - y;
|
||||
|
||||
return x <= y ? 0 : x - y;
|
||||
if (x <= y)
|
||||
return 0.0f;
|
||||
|
||||
long double r = x - y;
|
||||
if (fpclassify (r) == FP_INFINITE)
|
||||
__set_errno (ERANGE);
|
||||
|
||||
return r;
|
||||
}
|
||||
weak_alias (__fdiml, fdiml)
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
+2
-2
@@ -80,10 +80,10 @@ extern ssize_t pwritev (int __fd, __const struct iovec *__iovec, int __count,
|
||||
# else
|
||||
# ifdef __REDIRECT
|
||||
extern ssize_t __REDIRECT (preadv, (int __fd, __const struct iovec *__iovec,
|
||||
int __count, __off_t __offset),
|
||||
int __count, __off64_t __offset),
|
||||
preadv64) __wur;
|
||||
extern ssize_t __REDIRECT (pwritev, (int __fd, __const struct iovec *__iovec,
|
||||
int __count, __off_t __offset),
|
||||
int __count, __off64_t __offset),
|
||||
pwritev64) __wur;
|
||||
# else
|
||||
# define preadv preadv64
|
||||
|
||||
@@ -241,7 +241,7 @@ _nss_nis_getnetbyaddr_r (uint32_t addr, int type, struct netent *net,
|
||||
if (__builtin_expect (yp_get_default_domain (&domain), 0))
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
|
||||
struct in_addr in = inet_makeaddr (addr, 0);
|
||||
struct in_addr in = { .s_addr = htonl (addr) };
|
||||
char *buf = inet_ntoa (in);
|
||||
size_t blen = strlen (buf);
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1996-1998,2001,2002,2003,2006 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996-1998,2001-2003,2006,2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
|
||||
|
||||
@@ -116,7 +116,7 @@ internal_nis_endpwent (void)
|
||||
oldkeylen = 0;
|
||||
}
|
||||
|
||||
struct response_t *curr = intern.next;
|
||||
struct response_t *curr = intern.start;
|
||||
|
||||
while (curr != NULL)
|
||||
{
|
||||
|
||||
@@ -433,7 +433,7 @@ _nss_nisplus_getnetbyaddr_r (uint32_t addr, const int type,
|
||||
char buf2[18];
|
||||
int olderr = errno;
|
||||
|
||||
struct in_addr in = inet_makeaddr (addr, 0);
|
||||
struct in_addr in = { .s_addr = htonl (addr) };
|
||||
strcpy (buf2, inet_ntoa (in));
|
||||
size_t b2len = strlen (buf2);
|
||||
|
||||
|
||||
@@ -1,3 +1,57 @@
|
||||
2009-09-07 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
* sysdeps/pthread/bits/libc-lock.h (BP_SYM): Remove space before paren.
|
||||
|
||||
2009-09-02 Suzuki K P <suzuki@in.ibm.com>
|
||||
Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #7094]
|
||||
* sysdeps/unix/sysv/linux/timer_create.c (timer_create):
|
||||
Initialize the sigev_notify field for newly created timer to make sure
|
||||
the timer gets deleted from the active timer's list upon timer_delete.
|
||||
|
||||
2009-08-27 Andrew Stubbs <ams@codesourcery.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):
|
||||
Correct a logic error.
|
||||
|
||||
2009-08-11 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Add CFI
|
||||
directives.
|
||||
|
||||
2009-08-10 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Add CFI
|
||||
directives.
|
||||
* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise.
|
||||
|
||||
2009-07-27 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10418]
|
||||
* pthread_mutex_unlock.c (__pthread_mutex_unlock_full): Use _rel
|
||||
instead of of _acq variants of cmpxchg.
|
||||
|
||||
2009-06-11 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10262]
|
||||
* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
|
||||
(LOAD_FUTEX_WAIT_ABS): Fix futex parameter in case private futexes
|
||||
cannot be assumed.
|
||||
Patch by Bryan Kadzban <bz-glibc@kdzbn.homelinux.net>.
|
||||
|
||||
2009-05-15 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* cancellation.c (__pthread_disable_asynccancel): Correct the bits
|
||||
to test when deciding on the delay.
|
||||
* libc-cancellation.c (__libc_disable_asynccancel): Likewise.
|
||||
* pthread_cancel.c: Close race between deciding on sending a signal
|
||||
and setting the CANCELING_BIT bit.
|
||||
|
||||
* cancellation.c (__pthread_disable_asynccancel): Don't return if
|
||||
thread is canceled.
|
||||
* libc-cancellation.c (__libc_disable_asynccancel): Likewise.
|
||||
|
||||
2009-04-27 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* cancellation.c (__pthread_disable_asynccancel): Use THREAD_ATOMIC_AND
|
||||
|
||||
+13
-5
@@ -70,15 +70,13 @@ __pthread_disable_asynccancel (int oldtype)
|
||||
return;
|
||||
|
||||
struct pthread *self = THREAD_SELF;
|
||||
int newval;
|
||||
|
||||
#ifdef THREAD_ATOMIC_AND
|
||||
THREAD_ATOMIC_AND (self, cancelhandling, ~CANCELTYPE_BITMASK);
|
||||
#else
|
||||
int oldval = THREAD_GETMEM (self, cancelhandling);
|
||||
|
||||
while (1)
|
||||
{
|
||||
int newval = oldval & ~CANCELTYPE_BITMASK;
|
||||
newval = oldval & ~CANCELTYPE_BITMASK;
|
||||
|
||||
if (newval == oldval)
|
||||
break;
|
||||
@@ -91,5 +89,15 @@ __pthread_disable_asynccancel (int oldtype)
|
||||
/* Prepare the next round. */
|
||||
oldval = curval;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* We cannot return when we are being canceled. Upon return the
|
||||
thread might be things which would have to be undone. The
|
||||
following loop should loop until the cancellation signal is
|
||||
delivered. */
|
||||
while (__builtin_expect ((newval & (CANCELING_BITMASK | CANCELED_BITMASK))
|
||||
== CANCELING_BITMASK, 0))
|
||||
{
|
||||
lll_futex_wait (&self->cancelhandling, newval, LLL_PRIVATE);
|
||||
newval = THREAD_GETMEM (self, cancelhandling);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,15 +86,13 @@ __libc_disable_asynccancel (int oldtype)
|
||||
return;
|
||||
|
||||
struct pthread *self = THREAD_SELF;
|
||||
int newval;
|
||||
|
||||
#ifdef THREAD_ATOMIC_AND
|
||||
THREAD_ATOMIC_AND (self, cancelhandling, ~CANCELTYPE_BITMASK);
|
||||
#else
|
||||
int oldval = THREAD_GETMEM (self, cancelhandling);
|
||||
|
||||
while (1)
|
||||
{
|
||||
int newval = oldval & ~CANCELTYPE_BITMASK;
|
||||
newval = oldval & ~CANCELTYPE_BITMASK;
|
||||
|
||||
if (newval == oldval)
|
||||
break;
|
||||
@@ -107,7 +105,17 @@ __libc_disable_asynccancel (int oldtype)
|
||||
/* Prepare the next round. */
|
||||
oldval = curval;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* We cannot return when we are being canceled. Upon return the
|
||||
thread might be things which would have to be undone. The
|
||||
following loop should loop until the cancellation signal is
|
||||
delivered. */
|
||||
while (__builtin_expect ((newval & (CANCELING_BITMASK | CANCELED_BITMASK))
|
||||
== CANCELING_BITMASK, 0))
|
||||
{
|
||||
lll_futex_wait (&self->cancelhandling, newval, LLL_PRIVATE);
|
||||
newval = THREAD_GETMEM (self, cancelhandling);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2004, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@@ -44,6 +44,7 @@ pthread_cancel (th)
|
||||
int newval;
|
||||
do
|
||||
{
|
||||
again:
|
||||
oldval = pd->cancelhandling;
|
||||
newval = oldval | CANCELING_BITMASK | CANCELED_BITMASK;
|
||||
|
||||
@@ -59,7 +60,10 @@ pthread_cancel (th)
|
||||
if (CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS (newval))
|
||||
{
|
||||
/* Mark the cancellation as "in progress". */
|
||||
atomic_bit_set (&pd->cancelhandling, CANCELING_BIT);
|
||||
if (atomic_compare_and_exchange_bool_acq (&pd->cancelhandling,
|
||||
oldval | CANCELING_BITMASK,
|
||||
oldval))
|
||||
goto again;
|
||||
|
||||
/* The cancellation handler will take care of marking the
|
||||
thread as canceled. */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2005-2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005-2008, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@@ -213,7 +213,7 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
|
||||
|
||||
/* Unlock. */
|
||||
if ((mutex->__data.__lock & FUTEX_WAITERS) != 0
|
||||
|| atomic_compare_and_exchange_bool_acq (&mutex->__data.__lock, 0,
|
||||
|| atomic_compare_and_exchange_bool_rel (&mutex->__data.__lock, 0,
|
||||
THREAD_GETMEM (THREAD_SELF,
|
||||
tid)))
|
||||
{
|
||||
@@ -263,7 +263,7 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
|
||||
oldval = mutex->__data.__lock;
|
||||
newval = oldval & PTHREAD_MUTEX_PRIO_CEILING_MASK;
|
||||
}
|
||||
while (atomic_compare_and_exchange_bool_acq (&mutex->__data.__lock,
|
||||
while (atomic_compare_and_exchange_bool_rel (&mutex->__data.__lock,
|
||||
newval, oldval));
|
||||
|
||||
if ((oldval & ~PTHREAD_MUTEX_PRIO_CEILING_MASK) > 1)
|
||||
|
||||
@@ -529,7 +529,7 @@ extern int __pthread_atfork (void (*__prepare) (void),
|
||||
# if _LIBC
|
||||
# include <bp-sym.h>
|
||||
# else
|
||||
# define BP_SYM (sym) sym
|
||||
# define BP_SYM(sym) sym
|
||||
# endif
|
||||
weak_extern (BP_SYM (__pthread_mutex_init))
|
||||
weak_extern (BP_SYM (__pthread_mutex_destroy))
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
# define LOAD_FUTEX_WAIT_ABS(reg) \
|
||||
xorl $FUTEX_PRIVATE_FLAG, reg ; \
|
||||
andl %gs:PRIVATE_FUTEX, reg ; \
|
||||
orl $FUTEX_WAIT | FUTEX_CLOCK_REALTIME, reg
|
||||
orl $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg
|
||||
# define LOAD_FUTEX_WAKE(reg) \
|
||||
xorl $FUTEX_PRIVATE_FLAG, reg ; \
|
||||
andl %gs:PRIVATE_FUTEX, reg ; \
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
# define LOAD_PRIVATE_FUTEX_WAIT(reg,tmp,tmp2) \
|
||||
stc gbr, tmp ; \
|
||||
mov.w 99f, reg ; \
|
||||
add reg, tmp ; \
|
||||
add reg, tmp ; \
|
||||
bra 98f ; \
|
||||
mov.l @tmp, reg ; \
|
||||
99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \
|
||||
@@ -61,7 +61,7 @@
|
||||
# define LOAD_PRIVATE_FUTEX_WAIT(reg,tmp,tmp2) \
|
||||
stc gbr, tmp ; \
|
||||
mov.w 99f, reg ; \
|
||||
add reg, tmp ; \
|
||||
add reg, tmp ; \
|
||||
mov.l @tmp, reg ; \
|
||||
bra 98f ; \
|
||||
mov #FUTEX_WAIT, tmp ; \
|
||||
@@ -71,7 +71,7 @@
|
||||
# define LOAD_PRIVATE_FUTEX_WAKE(reg,tmp,tmp2) \
|
||||
stc gbr, tmp ; \
|
||||
mov.w 99f, reg ; \
|
||||
add reg, tmp ; \
|
||||
add reg, tmp ; \
|
||||
mov.l @tmp, reg ; \
|
||||
bra 98f ; \
|
||||
mov #FUTEX_WAKE, tmp ; \
|
||||
@@ -81,7 +81,7 @@
|
||||
# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \
|
||||
stc gbr, tmp ; \
|
||||
mov.w 99f, tmp2 ; \
|
||||
add tmp2, tmp ; \
|
||||
add tmp2, tmp ; \
|
||||
mov.l @tmp, tmp2 ; \
|
||||
bra 98f ; \
|
||||
mov #FUTEX_PRIVATE_FLAG, tmp ; \
|
||||
@@ -93,7 +93,7 @@
|
||||
# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \
|
||||
stc gbr, tmp ; \
|
||||
mov.w 99f, tmp2 ; \
|
||||
add tmp2, tmp ; \
|
||||
add tmp2, tmp ; \
|
||||
mov.l @tmp, tmp2 ; \
|
||||
bra 98f ; \
|
||||
mov #FUTEX_PRIVATE_FLAG, tmp ; \
|
||||
@@ -107,7 +107,7 @@
|
||||
# define LOAD_FUTEX_WAIT_ABS(reg,tmp,tmp2) \
|
||||
stc gbr, tmp ; \
|
||||
mov.w 99f, tmp2 ; \
|
||||
add tmp2, tmp ; \
|
||||
add tmp2, tmp ; \
|
||||
mov.l @tmp, tmp2 ; \
|
||||
bra 98f ; \
|
||||
mov #FUTEX_PRIVATE_FLAG, tmp ; \
|
||||
@@ -123,7 +123,7 @@
|
||||
# define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \
|
||||
stc gbr, tmp ; \
|
||||
mov.w 99f, tmp2 ; \
|
||||
add tmp2, tmp ; \
|
||||
add tmp2, tmp ; \
|
||||
mov.l @tmp, tmp2 ; \
|
||||
bra 98f ; \
|
||||
mov #FUTEX_PRIVATE_FLAG, tmp ; \
|
||||
@@ -253,7 +253,7 @@ __lll_timedlock_wait:
|
||||
mov #2, r6
|
||||
cmp/eq r6, r2
|
||||
bf/s 2f
|
||||
mov r2, r6
|
||||
mov r6, r2
|
||||
|
||||
1:
|
||||
mov #2, r6
|
||||
@@ -327,7 +327,7 @@ __lll_timedlock_wait:
|
||||
|
||||
tst r3, r3
|
||||
bt 6f
|
||||
|
||||
|
||||
1:
|
||||
/* Get current time. */
|
||||
mov r15, r4
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2003,2004, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003,2004, 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
|
||||
|
||||
@@ -167,6 +167,7 @@ timer_create (clock_id, evp, timerid)
|
||||
/* Copy the thread parameters the user provided. */
|
||||
newp->sival = evp->sigev_value;
|
||||
newp->thrfunc = evp->sigev_notify_function;
|
||||
newp->sigev_notify = SIGEV_THREAD;
|
||||
|
||||
/* We cannot simply copy the thread attributes since the
|
||||
implementation might keep internal information for
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
.type __pthread_rwlock_rdlock,@function
|
||||
.align 16
|
||||
__pthread_rwlock_rdlock:
|
||||
cfi_startproc
|
||||
xorq %r10, %r10
|
||||
|
||||
/* Get the lock. */
|
||||
@@ -167,6 +168,7 @@ __pthread_rwlock_rdlock:
|
||||
subq $MUTEX, %rdi
|
||||
#endif
|
||||
jmp 13b
|
||||
cfi_endproc
|
||||
.size __pthread_rwlock_rdlock,.-__pthread_rwlock_rdlock
|
||||
|
||||
.globl pthread_rwlock_rdlock
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007, 2009 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 @@
|
||||
.type __pthread_rwlock_unlock,@function
|
||||
.align 16
|
||||
__pthread_rwlock_unlock:
|
||||
cfi_startproc
|
||||
/* Get the lock. */
|
||||
movl $1, %esi
|
||||
xorl %eax, %eax
|
||||
@@ -119,7 +120,7 @@ __pthread_rwlock_unlock:
|
||||
#endif
|
||||
callq __lll_unlock_wake
|
||||
jmp 8b
|
||||
|
||||
cfi_endproc
|
||||
.size __pthread_rwlock_unlock,.-__pthread_rwlock_unlock
|
||||
|
||||
.globl pthread_rwlock_unlock
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
.type __pthread_rwlock_wrlock,@function
|
||||
.align 16
|
||||
__pthread_rwlock_wrlock:
|
||||
cfi_startproc
|
||||
xorq %r10, %r10
|
||||
|
||||
/* Get the lock. */
|
||||
@@ -155,6 +156,7 @@ __pthread_rwlock_wrlock:
|
||||
subq $MUTEX, %rdi
|
||||
#endif
|
||||
jmp 13b
|
||||
cfi_endproc
|
||||
.size __pthread_rwlock_wrlock,.-__pthread_rwlock_wrlock
|
||||
|
||||
.globl pthread_rwlock_wrlock
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
2009-08-23 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* td_ta_map_lwp2thr.c (__td_ta_lookup_th_unique): Move ta_ok check
|
||||
and LOG call back to ...
|
||||
(td_ta_map_lwp2thr): ... here.
|
||||
Reported by Maciej W. Rozycki <macro@codesourcery.com>.
|
||||
|
||||
2009-05-25 Aurelien Jarno <aurelien@aurel32.net>
|
||||
|
||||
[BZ #10200]
|
||||
* db-symbols.awk: Use the last field for the symbol name instead
|
||||
of the 8th one.
|
||||
|
||||
2009-03-19 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* td_symbol_list.c (DB_LOOKUP_NAME, DB_LOOKUP_NAME_TH_UNIQUE):
|
||||
|
||||
@@ -14,7 +14,7 @@ NF == 0 { in_symtab=0; next }
|
||||
|
||||
!in_symtab { next }
|
||||
|
||||
NF >= 8 && $7 != "UND" { seen[$8] = 1 }
|
||||
NF >= 8 && $7 != "UND" { seen[$NF] = 1 }
|
||||
|
||||
END {
|
||||
status = 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Which thread is running on an LWP?
|
||||
Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003,2004,2007,2009 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
|
||||
@@ -33,12 +33,6 @@ __td_ta_lookup_th_unique (const td_thragent_t *ta_arg,
|
||||
prgregset_t regs;
|
||||
psaddr_t addr;
|
||||
|
||||
LOG ("td_ta_map_lwp2thr");
|
||||
|
||||
/* Test whether the TA parameter is ok. */
|
||||
if (! ta_ok (ta))
|
||||
return TD_BADTA;
|
||||
|
||||
if (ta->ta_howto == ta_howto_unknown)
|
||||
{
|
||||
/* We need to read in from the inferior the instructions what to do. */
|
||||
@@ -181,6 +175,12 @@ td_ta_map_lwp2thr (const td_thragent_t *ta_arg,
|
||||
{
|
||||
td_thragent_t *const ta = (td_thragent_t *) ta_arg;
|
||||
|
||||
LOG ("td_ta_map_lwp2thr");
|
||||
|
||||
/* Test whether the TA parameter is ok. */
|
||||
if (! ta_ok (ta))
|
||||
return TD_BADTA;
|
||||
|
||||
/* We cannot rely on thread registers and such information at all
|
||||
before __pthread_initialize_minimal has gotten far enough. They
|
||||
sometimes contain garbage that would confuse us, left by the kernel
|
||||
|
||||
+2
-9
@@ -1,5 +1,4 @@
|
||||
# Copyright (C) 1998,2000,2002,2003,2004,2005,2006,2007,2008
|
||||
# Free Software Foundation, Inc.
|
||||
# Copyright (C) 1998,2000,2002-2009 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
|
||||
@@ -128,13 +127,7 @@ ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
relro-LDFLAGS += -Wl,-z,now
|
||||
|
||||
$(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
|
||||
$(LINK.o) -pie -Wl,-O1 $(nscd-cflags) \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(relro-LDFLAGS) \
|
||||
$(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
|
||||
$(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
|
||||
$(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
|
||||
-o $@ $^ $(LDLIBS-nscd) $(common-objpfx)libc_nonshared.a
|
||||
$(+link-pie)
|
||||
endif
|
||||
|
||||
# This makes sure -DNOT_IN_libc is passed for all these modules.
|
||||
|
||||
+1
-1
@@ -179,7 +179,7 @@ cache_add (int type, const void *key, size_t len, struct datahead *packet,
|
||||
/* Put the new entry in the first position. */
|
||||
do
|
||||
newp->next = table->head->array[hash];
|
||||
while (atomic_compare_and_exchange_bool_acq (&table->head->array[hash],
|
||||
while (atomic_compare_and_exchange_bool_rel (&table->head->array[hash],
|
||||
(ref_t) ((char *) newp
|
||||
- table->data),
|
||||
(ref_t) newp->next));
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2007
|
||||
/* Copyright (c) 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
|
||||
@@ -44,7 +44,7 @@
|
||||
/* Path for the configuration file. */
|
||||
#define _PATH_NSCDCONF "/etc/nscd.conf"
|
||||
|
||||
/* Maximu allowed length for the key. */
|
||||
/* Maximum allowed length for the key. */
|
||||
#define MAXKEYLEN 1024
|
||||
|
||||
|
||||
@@ -329,7 +329,8 @@ static inline int __nscd_drop_map_ref (struct mapped_database *map,
|
||||
extern struct datahead *__nscd_cache_search (request_type type,
|
||||
const char *key,
|
||||
size_t keylen,
|
||||
const struct mapped_database *mapped);
|
||||
const struct mapped_database *mapped,
|
||||
size_t datalen);
|
||||
|
||||
/* Wrappers around read, readv and write that only read/write less than LEN
|
||||
bytes on error or EOF. */
|
||||
|
||||
@@ -488,10 +488,6 @@ termination_handler (int signum)
|
||||
msync (dbs[cnt].head, dbs[cnt].memsize, MS_ASYNC);
|
||||
}
|
||||
|
||||
/* Shutdown the SELinux AVC. */
|
||||
if (selinux_enabled)
|
||||
nscd_avc_destroy ();
|
||||
|
||||
_exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,4 +1,5 @@
|
||||
/* Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
|
||||
|
||||
@@ -75,7 +76,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
struct datahead *found = __nscd_cache_search (GETAI, key, keylen,
|
||||
mapped);
|
||||
mapped, sizeof ai_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
respdata = (char *) (&found->data[0].aidata + 1);
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1998-2000, 2002-2005, 2006, 2007
|
||||
/* Copyright (C) 1998-2000, 2002-2005, 2006, 2007, 2009
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
|
||||
@@ -107,7 +107,8 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
|
||||
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
sizeof gr_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
len = (const uint32_t *) (&found->data[0].grdata + 1);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* Copyright (C) 1998-2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1998-2005, 2006, 2007, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
@@ -137,7 +138,8 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
/* No const qualifier, as it can change during garbage collection. */
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
sizeof hst_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
h_name = (char *) (&found->data[0].hstdata + 1);
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1998, 1999, 2003, 2004, 2005, 2007
|
||||
/* Copyright (C) 1998, 1999, 2003, 2004, 2005, 2007, 2009
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
|
||||
@@ -104,7 +104,8 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
|
||||
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
sizeof pw_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
pw_name = (const char *) (&found->data[0].pwdata + 1);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2007.
|
||||
|
||||
@@ -104,7 +104,8 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
|
||||
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
sizeof serv_resp);
|
||||
|
||||
if (found != NULL)
|
||||
{
|
||||
|
||||
+32
-10
@@ -21,6 +21,7 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
@@ -467,23 +468,36 @@ __nscd_get_map_ref (request_type type, const char *name,
|
||||
}
|
||||
|
||||
|
||||
/* Using sizeof (hashentry) is not always correct to determine the size of
|
||||
the data structure as found in the nscd cache. The program could be
|
||||
a 64-bit process and nscd could be a 32-bit process. In this case
|
||||
sizeof (hashentry) would overestimate the size. The following is
|
||||
the minimum size of such an entry, good enough for our tests here. */
|
||||
#define MINIMUM_HASHENTRY_SIZE \
|
||||
(offsetof (struct hashentry, dellist) + sizeof (int32_t))
|
||||
|
||||
|
||||
/* Don't return const struct datahead *, as eventhough the record
|
||||
is normally constant, it can change arbitrarily during nscd
|
||||
garbage collection. */
|
||||
struct datahead *
|
||||
__nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
const struct mapped_database *mapped)
|
||||
const struct mapped_database *mapped, size_t datalen)
|
||||
{
|
||||
unsigned long int hash = __nis_hash (key, keylen) % mapped->head->module;
|
||||
size_t datasize = mapped->datasize;
|
||||
|
||||
ref_t trail = mapped->head->array[hash];
|
||||
trail = atomic_forced_read (trail);
|
||||
ref_t work = trail;
|
||||
size_t loop_cnt = datasize / (MINIMUM_HASHENTRY_SIZE
|
||||
+ offsetof (struct datahead, data) / 2);
|
||||
int tick = 0;
|
||||
|
||||
while (work != ENDREF && work + sizeof (struct hashentry) <= datasize)
|
||||
while (work != ENDREF && work + MINIMUM_HASHENTRY_SIZE <= datasize)
|
||||
{
|
||||
struct hashentry *here = (struct hashentry *) (mapped->data + work);
|
||||
ref_t here_key, here_packet;
|
||||
|
||||
#ifndef _STRING_ARCH_unaligned
|
||||
/* Although during garbage collection when moving struct hashentry
|
||||
@@ -498,13 +512,14 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
|
||||
if (type == here->type
|
||||
&& keylen == here->len
|
||||
&& here->key + keylen <= datasize
|
||||
&& memcmp (key, mapped->data + here->key, keylen) == 0
|
||||
&& here->packet + sizeof (struct datahead) <= datasize)
|
||||
&& (here_key = atomic_forced_read (here->key)) + keylen <= datasize
|
||||
&& memcmp (key, mapped->data + here_key, keylen) == 0
|
||||
&& ((here_packet = atomic_forced_read (here->packet))
|
||||
+ sizeof (struct datahead) <= datasize))
|
||||
{
|
||||
/* We found the entry. Increment the appropriate counter. */
|
||||
struct datahead *dh
|
||||
= (struct datahead *) (mapped->data + here->packet);
|
||||
= (struct datahead *) (mapped->data + here_packet);
|
||||
|
||||
#ifndef _STRING_ARCH_unaligned
|
||||
if ((uintptr_t) dh & (__alignof__ (*dh) - 1))
|
||||
@@ -513,14 +528,17 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
|
||||
/* See whether we must ignore the entry or whether something
|
||||
is wrong because garbage collection is in progress. */
|
||||
if (dh->usable && here->packet + dh->allocsize <= datasize)
|
||||
if (dh->usable
|
||||
&& here_packet + dh->allocsize <= datasize
|
||||
&& (here_packet + offsetof (struct datahead, data) + datalen
|
||||
<= datasize))
|
||||
return dh;
|
||||
}
|
||||
|
||||
work = here->next;
|
||||
work = atomic_forced_read (here->next);
|
||||
/* Prevent endless loops. This should never happen but perhaps
|
||||
the database got corrupted, accidentally or deliberately. */
|
||||
if (work == trail)
|
||||
if (work == trail || loop_cnt-- == 0)
|
||||
break;
|
||||
if (tick)
|
||||
{
|
||||
@@ -532,7 +550,11 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
if ((uintptr_t) trailelem & (__alignof__ (*trailelem) - 1))
|
||||
return NULL;
|
||||
#endif
|
||||
trail = trailelem->next;
|
||||
|
||||
if (trail + MINIMUM_HASHENTRY_SIZE > datasize)
|
||||
return NULL;
|
||||
|
||||
trail = atomic_forced_read (trailelem->next);
|
||||
}
|
||||
tick = 1 - tick;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
|
||||
|
||||
@@ -55,7 +55,8 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
struct datahead *found = __nscd_cache_search (INITGROUPS, user,
|
||||
userlen, mapped);
|
||||
userlen, mapped,
|
||||
sizeof initgr_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
respdata = (char *) (&found->data[0].initgrdata + 1);
|
||||
|
||||
+1
-12
@@ -1,5 +1,5 @@
|
||||
/* SELinux access controls for nscd.
|
||||
Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Matthew Rickard <mjricka@epoch.ncsc.mil>, 2004.
|
||||
|
||||
@@ -418,15 +418,4 @@ nscd_avc_print_stats (struct avc_cache_stats *cstats)
|
||||
cstats->cav_probes, cstats->cav_misses);
|
||||
}
|
||||
|
||||
|
||||
/* Clean up the AVC before exiting. */
|
||||
void
|
||||
nscd_avc_destroy (void)
|
||||
{
|
||||
avc_destroy ();
|
||||
#ifdef HAVE_LIBAUDIT
|
||||
audit_close (audit_fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* HAVE_SELINUX */
|
||||
|
||||
+1
-4
@@ -1,5 +1,5 @@
|
||||
/* Header for nscd SELinux access controls.
|
||||
Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004, 2006, 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Matthew Rickard <mjricka@epoch.ncsc.mil>, 2004.
|
||||
|
||||
@@ -35,8 +35,6 @@ struct avc_cache_stats;
|
||||
|
||||
/* Initialize the userspace AVC. */
|
||||
extern void nscd_avc_init (void);
|
||||
/* Destroy the userspace AVC. */
|
||||
extern void nscd_avc_destroy (void);
|
||||
/* Determine if we are running on an SELinux kernel. */
|
||||
extern void nscd_selinux_enabled (int *selinux_enabled);
|
||||
/* Check if the client has permission for the request type. */
|
||||
@@ -55,7 +53,6 @@ extern void install_real_capabilities (cap_t new_caps);
|
||||
#else
|
||||
# define selinux_enabled 0
|
||||
# define nscd_avc_init() (void) 0
|
||||
# define nscd_avc_destroy() (void) 0
|
||||
# define nscd_selinux_enabled(selinux_enabled) (void) 0
|
||||
# define nscd_request_avc_has_perm(fd, req) 0
|
||||
# define nscd_avc_cache_stats(cstats) (void) 0
|
||||
|
||||
+4
-2
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1996-2004, 2006, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996-2004, 2006, 2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
@@ -301,7 +301,9 @@ done:
|
||||
}
|
||||
|
||||
|
||||
#ifndef FUNCTION2_NAME
|
||||
#ifdef NO_COMPAT_NEEDED
|
||||
strong_alias (INTERNAL (REENTRANT_NAME), REENTRANT_NAME);
|
||||
#elif !defined FUNCTION2_NAME
|
||||
# include <shlib-compat.h>
|
||||
# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1_2)
|
||||
# define OLD(name) OLD1 (name)
|
||||
|
||||
+12
-8
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1996-2000,2002,2004,2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996-2000,2002,2004,2007, 2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
@@ -170,10 +170,13 @@ INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen,
|
||||
}
|
||||
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1_2)
|
||||
#define OLD(name) OLD1 (name)
|
||||
#define OLD1(name) __old_##name
|
||||
#ifdef NO_COMPAT_NEEDED
|
||||
strong_alias (INTERNAL (REENTRANT_GETNAME), REENTRANT_GETNAME);
|
||||
#else
|
||||
# include <shlib-compat.h>
|
||||
# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1_2)
|
||||
# define OLD(name) OLD1 (name)
|
||||
# define OLD1(name) __old_##name
|
||||
|
||||
int
|
||||
attribute_compat_text_section
|
||||
@@ -189,20 +192,21 @@ OLD (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define do_symbol_version(real, name, version) \
|
||||
# define do_symbol_version(real, name, version) \
|
||||
compat_symbol (libc, real, name, version)
|
||||
do_symbol_version (OLD (REENTRANT_GETNAME), REENTRANT_GETNAME, GLIBC_2_0);
|
||||
#endif
|
||||
# endif
|
||||
|
||||
/* As INTERNAL (REENTRANT_GETNAME) may be hidden, we need an alias
|
||||
in between so that the REENTRANT_GETNAME@@GLIBC_2.1.2 is not
|
||||
hidden too. */
|
||||
strong_alias (INTERNAL (REENTRANT_GETNAME), NEW (REENTRANT_GETNAME));
|
||||
|
||||
#define do_default_symbol_version(real, name, version) \
|
||||
# define do_default_symbol_version(real, name, version) \
|
||||
versioned_symbol (libc, real, name, version)
|
||||
do_default_symbol_version (NEW (REENTRANT_GETNAME),
|
||||
REENTRANT_GETNAME, GLIBC_2_1_2);
|
||||
#endif
|
||||
|
||||
static_link_warning (SETFUNC_NAME)
|
||||
static_link_warning (ENDFUNC_NAME)
|
||||
|
||||
+1
-1
@@ -469,7 +469,7 @@ networks_keys (int number, char *key[])
|
||||
for (i = 0; i < number; ++i)
|
||||
{
|
||||
if (isdigit (key[i][0]))
|
||||
net = getnetbyaddr (inet_addr (key[i]), AF_UNIX);
|
||||
net = getnetbyaddr (ntohl (inet_addr (key[i])), AF_UNSPEC);
|
||||
else
|
||||
net = getnetbyname (key[i]);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Networks file parser in nss_files module.
|
||||
Copyright (C) 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996-1998, 2000, 2001, 2009 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
|
||||
@@ -81,7 +81,8 @@ DB_LOOKUP (netbyname, ,,
|
||||
|
||||
DB_LOOKUP (netbyaddr, ,,
|
||||
{
|
||||
if (result->n_addrtype == type && result->n_net == net)
|
||||
if ((type == AF_UNSPEC || result->n_addrtype == type)
|
||||
&& result->n_net == net)
|
||||
/* Bingo! */
|
||||
break;
|
||||
}, uint32_t net, int type)
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -82,6 +82,7 @@ tests := tstgetopt testfnm runtests runptests \
|
||||
bug-regex17 bug-regex18 bug-regex19 bug-regex20 \
|
||||
bug-regex21 bug-regex22 bug-regex23 bug-regex24 \
|
||||
bug-regex25 bug-regex26 bug-regex27 bug-regex28 \
|
||||
bug-regex29 \
|
||||
tst-nice tst-nanosleep tst-regex2 \
|
||||
transbug tst-rxspencer tst-pcre tst-boost \
|
||||
bug-ga1 tst-vfork1 tst-vfork2 tst-vfork3 tst-waitid \
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
#include <regex.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
regex_t r;
|
||||
int e = regcomp(&r, "xy\\{4,5,7\\}zabc", 0);
|
||||
char buf[100];
|
||||
regerror(e, &r, buf, sizeof (buf));
|
||||
printf ("e = %d (%s)\n", e, buf);
|
||||
int res = e != REG_BADBR;
|
||||
|
||||
e = regcomp(&r, "xy\\{4,5a\\}zabc", 0);
|
||||
regerror(e, &r, buf, sizeof (buf));
|
||||
printf ("e = %d (%s)\n", e, buf);
|
||||
res |= e != REG_BADBR;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
||||
@@ -484,6 +484,7 @@ static const struct conf vars[] =
|
||||
#endif
|
||||
#ifdef _SC_LINE_MAX
|
||||
{ "_POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
|
||||
{ "POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
|
||||
#endif
|
||||
#ifdef _SC_2_LOCALEDEF
|
||||
{ "POSIX2_LOCALEDEF", _SC_2_LOCALEDEF, SYSCONF },
|
||||
|
||||
+1
-1
@@ -2481,7 +2481,7 @@ parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa,
|
||||
return elem;
|
||||
}
|
||||
|
||||
if (BE (end != -1 && start > end, 0))
|
||||
if (BE ((end != -1 && start > end) || token->type != OP_CLOSE_DUP_NUM, 0))
|
||||
{
|
||||
/* First number greater than second. */
|
||||
*err = REG_BADBR;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user