diff -Nru glibc-2.27/debian/changelog glibc-2.27/debian/changelog --- glibc-2.27/debian/changelog 2018-02-23 13:01:23.000000000 +0000 +++ glibc-2.27/debian/changelog 2018-04-16 20:14:20.000000000 +0000 @@ -1,3 +1,87 @@ +glibc (2.27-3ubuntu1) bionic; urgency=medium + + * Merge with Debian, with packaging tweaks and master updated to 2018-03-29. + * testsuite-xfail-debian.mk: Allow tst-backtrace{4,5} and tst-cancelx{20,21} + to fail on the 31-bit build of glibc on s390 (see upstream bug in comment) + + -- Adam Conrad Mon, 16 Apr 2018 14:14:20 -0600 + +glibc (2.27-3) unstable; urgency=medium + + [ Samuel Thibault ] + * hurd-i386/tg-NOFOLLOW.diff: Rename to hurd-i386/git-NOFOLLOW.diff. + * hurd-i386/tg-NOFOLLOW-DIRECTORY.diff: Rename to + hurd-i386/git-NOFOLLOW-DIRECTORY.diff. + * hurd-i386/tg-_dl_random.diff: Rename to hurd-i386/git-_dl_random.diff. + * hurd-i386/tg-exec-static.diff: Rename to hurd-i386/git-exec-static.diff. + * hurd-i386/tg-futimens.diff: Rename to hurd-i386/git-futimens.diff. + * hurd-i386/tg-gai_misc.diff: Rename to hurd-i386/git-gai_misc.diff. + * hurd-i386/tg-grantpt.diff: Rename to hurd-i386/git-grantpt.diff. + * hurd-i386/tg-gscope.diff: Rename to hurd-i386/git-gscope.diff. + * hurd-i386/tg-libpthread-gsync-mutex.diff: Rename to + hurd-i386/git-libpthread-gsync-mutex.diff. + * hurd-i386/tg-libpthread-gsync-spin.diff: Rename to + hurd-i386/git-libpthread-gsync-spin.diff. + * hurd-i386/tg-mlockall.diff: Rename to hurd-i386/git-mlockall.diff. + * hurd-i386/tg-pagesize.diff: Rename to hurd-i386/git-pagesize.diff. + * hurd-i386/tg-reboot-startup.diff: Rename to + hurd-i386/git-reboot-startup.diff. + * hurd-i386/tg-thread-linkspace.diff: Rename to + hurd-i386/git-thread-linkspace.diff. + * hurd-i386/tg-timer_routines.diff: Rename to + hurd-i386/git-timer_routines.diff. + * hurd-i386/tg-tls-threadvar.diff: Rename to + hurd-i386/git-tls-threadvar.diff. + * hurd-i386/tg-tls.diff: Rename to hurd-i386/git-tls.diff. + * hurd-i386/tg-tls_thread_leak.diff: Rename to + hurd-i386/git-tls_thread_leak.diff. + * hurd-i386/tg2.25-tls.diff: Rename to hurd-i386/git2.25-tls.diff. + * hurd-i386/submitted-hurd-abilist.diff: Rename to + hurd-i386/git-hurd-abilist.diff. + * hurd-i386/local-libpthread-stacksize.diff: Rename to + hurd-i386/git-libpthread-stacksize.diff. + + [ Aurelien Jarno ] + * debian/patches/localedata/locales-fr.diff: fix conversion from + format to ascii during the latest rebase. Closes: bug#894078. + * debian/patches/git-updates.diff: update from upstream stable branch: + - Fix a missing reorder-end keyword in et_EE locale. Closes: #894395. + + -- Aurelien Jarno Thu, 29 Mar 2018 21:47:29 +0200 + +glibc (2.27-2) unstable; urgency=medium + + [ Samuel Thibault ] + * debian/patches/hurd-i386/git-UTIME.diff: New patch. + * debian/control: Bump hurd build dep accordingly. + * debian/libc0.3.symbols.hurd-i386: Update accordingly. + + [ Aurelien Jarno ] + * debian/control.in/main: drop the branch from Vcs-Git. + * debian/patches/any/local-bootstrap-headers.diff: update to install + gnu/lib-names-$abi.h. Closes: #892126. + * debian/patches/git-updates.diff: update from upstream stable branch: + - Fix FTBFS on powerpcspe. + - debian/patches/sparc/submitted-sparc32-makecontext.diff: upstreamed. + + [ Helmut Grohne ] + * debian/rules: drop DEB_STAGE and DEB_BUILD_PROFILE support. + * debian/rules: disable tests for stage1. + * debian/control.in/*: drop libc*-dev -> libc* dependencies in stage1. + + -- Aurelien Jarno Fri, 09 Mar 2018 21:48:04 +0100 + +glibc (2.27-1) unstable; urgency=medium + + [ Aurelien Jarno ] + * debian/sysdeps/*.mk: install gnu/lib-names-*.h for multilib builds. + * debian/patches/alpha/submitted-makecontext.diff: new patch to fix + infinite backtrace within a context created by makecontext. + * debian/patches/sparc/submitted-sparc32-makecontext.diff: new patch + to fix infinite backtrace within a context created by makecontext. + + -- Aurelien Jarno Sat, 03 Mar 2018 11:47:56 +0100 + glibc (2.27-0ubuntu2) bionic; urgency=medium * debian/patches/git-updates.diff: Update to 2.27 master at 2018-02-16. @@ -27,7 +111,7 @@ -- Adam Conrad Thu, 22 Feb 2018 03:58:57 -0700 -glibc (2.27-0experimental1) UNRELEASED; urgency=medium +glibc (2.27-0experimental1) experimental; urgency=medium [ Samuel Thibault ] * debian/patches/hurd-i386/git-test-atexit-race-common.diff: New patch, @@ -54,7 +138,7 @@ from the linux-libc-dev dependency, as the file is not generated anymore from the installed kernel headers. - -- Samuel Thibault Sun, 04 Feb 2018 14:05:22 +0100 + -- Aurelien Jarno Sat, 24 Feb 2018 23:49:00 +0100 glibc (2.27-0experimental0) experimental; urgency=medium @@ -257,6 +341,7 @@ [ Samuel Thibault ] * debian/patches/hurd-i386/tg-grantpt.diff: Update patch. + * debian/patches/hurd-i386/git-libpthread-trylock.diff: New patch. -- Aurelien Jarno Sat, 17 Feb 2018 23:20:49 +0100 diff -Nru glibc-2.27/debian/control glibc-2.27/debian/control --- glibc-2.27/debian/control 2018-02-22 10:14:02.000000000 +0000 +++ glibc-2.27/debian/control 2018-04-16 20:02:50.000000000 +0000 @@ -6,8 +6,8 @@ linux-libc-dev (>= 3.9) [linux-any], systemtap-sdt-dev [linux-any], libaudit-dev [linux-any], libcap-dev [linux-any], libselinux-dev [linux-any], mig (>= 1.5-3) [hurd-i386], gnumach-dev (>= 2:1.8+git20170102-1~) [hurd-i386], - hurd-dev (>= 1:0.9.git20171119-4~) [hurd-i386] | hurd-headers-dev [hurd-i386], - hurd-dev (>= 1:0.9.git20171119-4~) [hurd-i386] | libihash-dev [hurd-i386] , + hurd-dev (>= 1:0.9.git20180305~) [hurd-i386] | hurd-headers-dev [hurd-i386], + hurd-dev (>= 1:0.9.git20180305~) [hurd-i386] | libihash-dev [hurd-i386] , kfreebsd-kernel-headers [kfreebsd-any], binutils (>= 2.25), binutils (>= 2.29) [amd64 i386 x32], g++-7, g++-7 (>= 7.2.0-20) [amd64 i386 x32], g++-7-multilib [amd64 armhf armel i386 kfreebsd-amd64 mips mipsel mipsn32 mipsn32el mips64 mips64el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el powerpc ppc64 s390x sparc sparc64 x32] , @@ -19,7 +19,7 @@ Uploaders: Clint Adams , Aurelien Jarno , Adam Conrad , Samuel Thibault Standards-Version: 4.1.3 Vcs-Browser: https://salsa.debian.org/glibc-team/glibc -Vcs-Git: https://salsa.debian.org/glibc-team/glibc.git -b glibc-2.27 +Vcs-Git: https://salsa.debian.org/glibc-team/glibc.git Homepage: https://www.gnu.org/software/libc/libc.html Package: libc-bin @@ -194,7 +194,7 @@ Section: libdevel Priority: optional Multi-Arch: same -Depends: libc6 (= ${binary:Version}), libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] +Depends: libc6 (= ${binary:Version}) , libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] Replaces: hurd-dev (<< 20120408-3) [hurd-i386], kfreebsd-kernel-headers (<< 10.3~4) [kfreebsd-amd64 kfreebsd-i386] Suggests: glibc-doc, manpages-dev Provides: libc-dev, libc6-dev [alpha ia64 hurd-i386 kfreebsd-i386 kfreebsd-amd64], libc6-dev-armel [armel], libc6-dev-armhf [armhf] @@ -283,7 +283,7 @@ Section: libdevel Priority: optional Multi-Arch: same -Depends: libc6.1 (= ${binary:Version}), libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] +Depends: libc6.1 (= ${binary:Version}) , libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] Replaces: hurd-dev (<< 20120408-3) [hurd-i386], kfreebsd-kernel-headers (<< 10.3~4) [kfreebsd-amd64 kfreebsd-i386] Suggests: glibc-doc, manpages-dev Provides: libc-dev, libc6-dev [alpha ia64 hurd-i386 kfreebsd-i386 kfreebsd-amd64], libc6-dev-armel [armel], libc6-dev-armhf [armhf] @@ -372,7 +372,7 @@ Section: libdevel Priority: optional Multi-Arch: same -Depends: libc0.3 (= ${binary:Version}), libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] +Depends: libc0.3 (= ${binary:Version}) , libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] Replaces: hurd-dev (<< 20120408-3) [hurd-i386], kfreebsd-kernel-headers (<< 10.3~4) [kfreebsd-amd64 kfreebsd-i386] Suggests: glibc-doc, manpages-dev Provides: libc-dev, libc6-dev [alpha ia64 hurd-i386 kfreebsd-i386 kfreebsd-amd64], libc6-dev-armel [armel], libc6-dev-armhf [armhf] @@ -461,7 +461,7 @@ Section: libdevel Priority: optional Multi-Arch: same -Depends: libc0.1 (= ${binary:Version}), libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] +Depends: libc0.1 (= ${binary:Version}) , libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] Replaces: hurd-dev (<< 20120408-3) [hurd-i386], kfreebsd-kernel-headers (<< 10.3~4) [kfreebsd-amd64 kfreebsd-i386] Suggests: glibc-doc, manpages-dev Provides: libc-dev, libc6-dev [alpha ia64 hurd-i386 kfreebsd-i386 kfreebsd-amd64], libc6-dev-armel [armel], libc6-dev-armhf [armhf] @@ -531,7 +531,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-i386 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-i386 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32-bit development libraries for AMD64 @@ -556,7 +556,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-sparc (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-sparc (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit Development Libraries for SPARC @@ -581,7 +581,7 @@ Section: libdevel Priority: optional Provides: lib64c-dev -Depends: libc6-sparc64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-sparc64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 64bit Development Libraries for UltraSPARC @@ -606,7 +606,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-s390 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-s390 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit Development Libraries for IBM zSeries @@ -630,7 +630,7 @@ Architecture: i386 x32 Section: libdevel Priority: optional -Depends: libc6-amd64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-amd64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Provides: lib64c-dev Build-Profiles: @@ -656,7 +656,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-powerpc (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-powerpc (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit powerpc development libraries for ppc64 @@ -681,7 +681,7 @@ Section: libdevel Priority: optional Provides: lib64c-dev -Depends: libc6-ppc64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-ppc64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 64bit Development Libraries for PowerPC64 @@ -706,7 +706,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-dev (= ${binary:Version}), libc6-mips32 (= ${binary:Version}), +Depends: libc6-mips32 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), libc6-dev-mipsn32 (= ${binary:Version}) [mips64 mips64el mips64r6 mips64r6el], libc6-dev-mips64 (= ${binary:Version}) [mipsn32 mipsn32el mipsn32r6 mipsn32r6el], ${misc:Depends} @@ -734,7 +734,7 @@ Section: libdevel Priority: optional Provides: libn32c-dev -Depends: libc6-mipsn32 (= ${binary:Version}), libc6-dev-mips64 (= ${binary:Version}) [mips mipsel mipsr6 mipsr6el], libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-mipsn32 (= ${binary:Version}) , libc6-dev-mips64 (= ${binary:Version}) [mips mipsel mipsr6 mipsr6el], libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: n32 Development Libraries for MIPS64 @@ -759,7 +759,7 @@ Section: libdevel Priority: optional Provides: lib64c-dev -Depends: libc6-mips64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-mips64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 64bit Development Libraries for MIPS64 @@ -830,7 +830,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc0.1-i386 (= ${binary:Version}), libc0.1-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc0.1-i386 (= ${binary:Version}) , libc0.1-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit development libraries for AMD64 @@ -854,7 +854,7 @@ Architecture: amd64 i386 Section: libdevel Priority: optional -Depends: libc6-x32 (= ${binary:Version}), libc6-dev-i386 (= ${binary:Version}) [amd64], libc6-dev-amd64 (= ${binary:Version}) [i386], libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-x32 (= ${binary:Version}) , libc6-dev-i386 (= ${binary:Version}) [amd64], libc6-dev-amd64 (= ${binary:Version}) [i386], libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: X32 ABI Development Libraries for AMD64 diff -Nru glibc-2.27/debian/control.in/amd64 glibc-2.27/debian/control.in/amd64 --- glibc-2.27/debian/control.in/amd64 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/amd64 2018-04-16 20:02:33.000000000 +0000 @@ -14,7 +14,7 @@ Architecture: i386 x32 Section: libdevel Priority: optional -Depends: libc6-amd64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-amd64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Provides: lib64c-dev Build-Profiles: diff -Nru glibc-2.27/debian/control.in/armel glibc-2.27/debian/control.in/armel --- glibc-2.27/debian/control.in/armel 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/control.in/armel 2018-04-16 20:02:33.000000000 +0000 @@ -13,7 +13,7 @@ Architecture: armhf Section: libdevel Priority: optional -Depends: libc6-armel (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-armel (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: ARM softfp development libraries for armhf diff -Nru glibc-2.27/debian/control.in/armhf glibc-2.27/debian/control.in/armhf --- glibc-2.27/debian/control.in/armhf 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/control.in/armhf 2018-04-16 20:02:33.000000000 +0000 @@ -13,7 +13,7 @@ Architecture: armel Section: libdevel Priority: optional -Depends: libc6-armhf (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-armhf (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: ARM hard float development libraries for armel diff -Nru glibc-2.27/debian/control.in/i386 glibc-2.27/debian/control.in/i386 --- glibc-2.27/debian/control.in/i386 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/i386 2018-04-16 20:02:33.000000000 +0000 @@ -16,7 +16,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-i386 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-i386 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32-bit development libraries for AMD64 diff -Nru glibc-2.27/debian/control.in/kfreebsd-i386 glibc-2.27/debian/control.in/kfreebsd-i386 --- glibc-2.27/debian/control.in/kfreebsd-i386 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/kfreebsd-i386 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc0.1-i386 (= ${binary:Version}), libc0.1-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc0.1-i386 (= ${binary:Version}) , libc0.1-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit development libraries for AMD64 diff -Nru glibc-2.27/debian/control.in/libc glibc-2.27/debian/control.in/libc --- glibc-2.27/debian/control.in/libc 2018-02-22 10:07:35.000000000 +0000 +++ glibc-2.27/debian/control.in/libc 2018-04-16 20:02:50.000000000 +0000 @@ -35,7 +35,7 @@ Section: libdevel Priority: optional Multi-Arch: same -Depends: @libc@ (= ${binary:Version}), libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] +Depends: @libc@ (= ${binary:Version}) , libc-dev-bin (= ${binary:Version}), ${misc:Depends}, linux-libc-dev [linux-any], kfreebsd-kernel-headers (>= 0.11) [kfreebsd-any], gnumach-dev [hurd-i386], hurd-dev (>= 20080607-3) [hurd-i386] | hurd-headers-dev [hurd-i386] Replaces: hurd-dev (<< 20120408-3) [hurd-i386], kfreebsd-kernel-headers (<< 10.3~4) [kfreebsd-amd64 kfreebsd-i386] Suggests: glibc-doc, manpages-dev Provides: libc-dev, libc6-dev [alpha ia64 hurd-i386 kfreebsd-i386 kfreebsd-amd64], libc6-dev-armel [armel], libc6-dev-armhf [armhf] diff -Nru glibc-2.27/debian/control.in/main glibc-2.27/debian/control.in/main --- glibc-2.27/debian/control.in/main 2018-02-22 10:10:35.000000000 +0000 +++ glibc-2.27/debian/control.in/main 2018-04-16 20:02:50.000000000 +0000 @@ -6,8 +6,8 @@ linux-libc-dev (>= 3.9) [linux-any], systemtap-sdt-dev [linux-any], libaudit-dev [linux-any], libcap-dev [linux-any], libselinux-dev [linux-any], mig (>= 1.5-3) [hurd-i386], gnumach-dev (>= 2:1.8+git20170102-1~) [hurd-i386], - hurd-dev (>= 1:0.9.git20171119-4~) [hurd-i386] | hurd-headers-dev [hurd-i386], - hurd-dev (>= 1:0.9.git20171119-4~) [hurd-i386] | libihash-dev [hurd-i386] , + hurd-dev (>= 1:0.9.git20180305~) [hurd-i386] | hurd-headers-dev [hurd-i386], + hurd-dev (>= 1:0.9.git20180305~) [hurd-i386] | libihash-dev [hurd-i386] , kfreebsd-kernel-headers [kfreebsd-any], binutils (>= 2.25), binutils (>= 2.29) [amd64 i386 x32], g++-7, g++-7 (>= 7.2.0-20) [amd64 i386 x32], g++-7-multilib [amd64 armhf armel i386 kfreebsd-amd64 mips mipsel mipsn32 mipsn32el mips64 mips64el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el powerpc ppc64 s390x sparc sparc64 x32] , @@ -19,7 +19,7 @@ Uploaders: Clint Adams , Aurelien Jarno , Adam Conrad , Samuel Thibault Standards-Version: 4.1.3 Vcs-Browser: https://salsa.debian.org/glibc-team/glibc -Vcs-Git: https://salsa.debian.org/glibc-team/glibc.git -b glibc-2.27 +Vcs-Git: https://salsa.debian.org/glibc-team/glibc.git Homepage: https://www.gnu.org/software/libc/libc.html Package: libc-bin diff -Nru glibc-2.27/debian/control.in/mips32 glibc-2.27/debian/control.in/mips32 --- glibc-2.27/debian/control.in/mips32 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/mips32 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-dev (= ${binary:Version}), libc6-mips32 (= ${binary:Version}), +Depends: libc6-mips32 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), libc6-dev-mipsn32 (= ${binary:Version}) [mips64 mips64el mips64r6 mips64r6el], libc6-dev-mips64 (= ${binary:Version}) [mipsn32 mipsn32el mipsn32r6 mipsn32r6el], ${misc:Depends} diff -Nru glibc-2.27/debian/control.in/mips64 glibc-2.27/debian/control.in/mips64 --- glibc-2.27/debian/control.in/mips64 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/mips64 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib64c-dev -Depends: libc6-mips64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-mips64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 64bit Development Libraries for MIPS64 diff -Nru glibc-2.27/debian/control.in/mipsn32 glibc-2.27/debian/control.in/mipsn32 --- glibc-2.27/debian/control.in/mipsn32 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/mipsn32 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: libn32c-dev -Depends: libc6-mipsn32 (= ${binary:Version}), libc6-dev-mips64 (= ${binary:Version}) [mips mipsel mipsr6 mipsr6el], libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-mipsn32 (= ${binary:Version}) , libc6-dev-mips64 (= ${binary:Version}) [mips mipsel mipsr6 mipsr6el], libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: n32 Development Libraries for MIPS64 diff -Nru glibc-2.27/debian/control.in/powerpc glibc-2.27/debian/control.in/powerpc --- glibc-2.27/debian/control.in/powerpc 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/powerpc 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-powerpc (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-powerpc (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit powerpc development libraries for ppc64 diff -Nru glibc-2.27/debian/control.in/ppc64 glibc-2.27/debian/control.in/ppc64 --- glibc-2.27/debian/control.in/ppc64 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/ppc64 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib64c-dev -Depends: libc6-ppc64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-ppc64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 64bit Development Libraries for PowerPC64 diff -Nru glibc-2.27/debian/control.in/s390 glibc-2.27/debian/control.in/s390 --- glibc-2.27/debian/control.in/s390 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/s390 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-s390 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-s390 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit Development Libraries for IBM zSeries diff -Nru glibc-2.27/debian/control.in/sparc glibc-2.27/debian/control.in/sparc --- glibc-2.27/debian/control.in/sparc 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/sparc 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib32c-dev -Depends: libc6-sparc (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-sparc (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 32bit Development Libraries for SPARC diff -Nru glibc-2.27/debian/control.in/sparc64 glibc-2.27/debian/control.in/sparc64 --- glibc-2.27/debian/control.in/sparc64 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/sparc64 2018-04-16 20:02:33.000000000 +0000 @@ -15,7 +15,7 @@ Section: libdevel Priority: optional Provides: lib64c-dev -Depends: libc6-sparc64 (= ${binary:Version}), libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-sparc64 (= ${binary:Version}) , libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: 64bit Development Libraries for UltraSPARC diff -Nru glibc-2.27/debian/control.in/x32 glibc-2.27/debian/control.in/x32 --- glibc-2.27/debian/control.in/x32 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/control.in/x32 2018-04-16 20:02:33.000000000 +0000 @@ -14,7 +14,7 @@ Architecture: amd64 i386 Section: libdevel Priority: optional -Depends: libc6-x32 (= ${binary:Version}), libc6-dev-i386 (= ${binary:Version}) [amd64], libc6-dev-amd64 (= ${binary:Version}) [i386], libc6-dev (= ${binary:Version}), ${misc:Depends} +Depends: libc6-x32 (= ${binary:Version}) , libc6-dev-i386 (= ${binary:Version}) [amd64], libc6-dev-amd64 (= ${binary:Version}) [i386], libc6-dev (= ${binary:Version}), ${misc:Depends} Recommends: gcc-multilib Build-Profiles: Description: GNU C Library: X32 ABI Development Libraries for AMD64 diff -Nru glibc-2.27/debian/libc0.3.symbols.hurd-i386 glibc-2.27/debian/libc0.3.symbols.hurd-i386 --- glibc-2.27/debian/libc0.3.symbols.hurd-i386 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/libc0.3.symbols.hurd-i386 2018-04-16 20:02:33.000000000 +0000 @@ -114,6 +114,7 @@ __file_sync@Base 2.11 __file_syncfs@Base 2.11 __file_utimes@Base 2.11 + __file_utimens@Base 2.27-2~ __fsys_forward@Base 2.11 __fsys_get_children@Base 2.25-3 __fsys_get_options@Base 2.11 @@ -485,6 +486,7 @@ file_sync@Base 2.11 file_syncfs@Base 2.11 file_utimes@Base 2.11 + file_utimens@Base 2.27-2~ fsys_forward@Base 2.11 fsys_get_children@Base 2.25-3 fsys_get_options@Base 2.11 diff -Nru glibc-2.27/debian/patches/alpha/submitted-makecontext.diff glibc-2.27/debian/patches/alpha/submitted-makecontext.diff --- glibc-2.27/debian/patches/alpha/submitted-makecontext.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/alpha/submitted-makecontext.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,30 @@ +2018-03-01 Aurelien Jarno + + [BZ #22910] + * sysdeps/unix/sysv/linux/alpha/setcontext.S (__startcontext): Set + up CFI directive to forbid further backtracing. + + +--- a/sysdeps/unix/sysv/linux/alpha/makecontext.S ++++ b/sysdeps/unix/sysv/linux/alpha/makecontext.S +@@ -138,10 +138,14 @@ weak_alias (__makecontext, makecontext) + + .align 4 + .ent __startcontext ++ cfi_startproc + __startcontext: + .frame $31, 0, $31, 0 + .prologue 0 + ++ /* Mark ra as undefined in order to stop unwinding here. */ ++ cfi_undefined(ra) ++ + jsr $26, ($27), 0 + ldgp $29, 0($26) + mov $9, $16 +@@ -160,4 +164,5 @@ __startcontext: + + halt + ++ cfi_endproc + .end __startcontext diff -Nru glibc-2.27/debian/patches/any/local-bootstrap-headers.diff glibc-2.27/debian/patches/any/local-bootstrap-headers.diff --- glibc-2.27/debian/patches/any/local-bootstrap-headers.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/any/local-bootstrap-headers.diff 2018-04-16 20:02:33.000000000 +0000 @@ -1,5 +1,9 @@ Taken from EGLIBC, r1484 + r1525 +2018-03-09 Aurelien Jarno + + * Makefile (install-headers): Amend to install gnu/lib-names-$abi.h. + 2014-07-30 Helmut Grohne * With the advent of multilib gnu/stubs.h became a meta-header that @@ -39,7 +43,7 @@ + an empty stubs.h like this will do fine for GCC. */ --- a/Makefile +++ b/Makefile -@@ -177,6 +177,13 @@ +@@ -177,6 +177,14 @@ install-others-nosubdir: $(installed-stubs) endif @@ -48,12 +52,13 @@ +# tree. Otherwise, install gnu/stubs.h later, after the rest of the +# build is done. +ifeq ($(install-bootstrap-headers),yes) -+install-headers: $(inst_includedir)/gnu/stubs.h $(installed-stubs) ++install-headers: $(inst_includedir)/gnu/stubs.h $(installed-stubs) \ ++ $(inst_includedir)/$(lib-names-h-abi) +endif # Since stubs.h is never needed when building the library, we simplify the # hairy installation process by producing it in place only as the last part -@@ -184,6 +191,14 @@ +@@ -184,6 +192,14 @@ # iterates over all the subdirs; subdir_install in each subdir depends on # the subdir's stubs file. Having more direct dependencies would result in # extra iterations over the list for subdirs and many recursive makes. @@ -68,7 +73,7 @@ $(installed-stubs): include/stubs-prologue.h subdir_install $(make-target-directory) @rm -f $(objpfx)stubs.h -@@ -192,6 +207,7 @@ +@@ -192,6 +208,7 @@ then echo 'stubs.h unchanged'; \ else $(INSTALL_DATA) $(objpfx)stubs.h $@; fi rm -f $(objpfx)stubs.h diff -Nru glibc-2.27/debian/patches/any/submitted-bits-fcntl_h-at.diff glibc-2.27/debian/patches/any/submitted-bits-fcntl_h-at.diff --- glibc-2.27/debian/patches/any/submitted-bits-fcntl_h-at.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/any/submitted-bits-fcntl_h-at.diff 2018-04-16 20:02:33.000000000 +0000 @@ -49,7 +49,7 @@ # define SEEK_END 2 /* Seek from end of file. */ #endif /* XPG */ --/* The constants AT_REMOVEDIR and AT_EACCESS have the same value. AT_EASSESS +-/* The constants AT_REMOVEDIR and AT_EACCESS have the same value. AT_EACCESS - is meaningful only to faccessat, while AT_REMOVEDIR is meaningful only to - unlinkat. The two functions do completely different things and therefore, - the flags can be allowed to overlap. For example, passing AT_REMOVEDIR to diff -Nru glibc-2.27/debian/patches/git-updates.diff glibc-2.27/debian/patches/git-updates.diff --- glibc-2.27/debian/patches/git-updates.diff 2018-02-23 12:59:24.000000000 +0000 +++ glibc-2.27/debian/patches/git-updates.diff 2018-04-16 20:12:03.000000000 +0000 @@ -1,10 +1,162 @@ GIT update of https://sourceware.org/git/glibc.git/release/2.27/master from glibc-2.27 diff --git a/ChangeLog b/ChangeLog -index f3fe2716b2..727b2f92c3 100644 +index f3fe2716b2..536fcf1c4f 100644 --- a/ChangeLog +++ b/ChangeLog -@@ -1,3 +1,60 @@ +@@ -1,3 +1,212 @@ ++2018-03-29 Florian Weimer ++ ++ * sysdeps/unix/sysv/linux/i386/tst-bz21269.c (do_test): Also ++ capture SIGBUS. ++ ++2018-03-23 Andrew Senkevich ++ Max Horn ++ ++ [BZ #22644] ++ * sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S: Fixed ++ branch conditions. ++ * string/test-memmove.c (do_test2): New testcase. ++ ++2018-02-22 Andrew Waterman ++ ++ [BZ # 22884] ++ * sysdeps/riscv/rvd/s_fmax.c (__fmax): Handle sNaNs correctly. ++ * sysdeps/riscv/rvd/s_fmin.c (__fmin): Likewise. ++ * sysdeps/riscv/rvf/s_fmaxf.c (__fmaxf): Likewise. ++ * sysdeps/riscv/rvf/s_fminf.c (__fminf): Likewise. ++ ++2018-02-22 DJ Delorie ++ ++ * sysdeps/riscv/tls-macros.h: Do not initialize $gp. ++ ++2018-03-16 Rafal Luzynski ++ ++ [BZ #22963] ++ * localedata/locales/cs_CZ (mon): Rename to... ++ (alt_mon): This. ++ (mon): Import from CLDR (genitive case). ++ ++2018-03-16 Rafal Luzynski ++ ++ [BZ #22937] ++ * localedata/locales/el_CY (abmon): Rename to... ++ (ab_alt_mon): This. ++ (abmon): Import from CLDR (abbreviated genitive case). ++ * localedata/locales/el_GR (abmon): Rename to... ++ (ab_alt_mon): This. ++ (abmon): Import from CLDR (abbreviated genitive case). ++ ++2018-03-16 Rafal Luzynski ++ ++ [BZ #22932] ++ * localedata/locales/lt_LT (abmon): Synchronize with CLDR. ++ ++2018-03-16 Robert Buj ++ ++ [BZ #22848] ++ * localedata/locales/ca_ES (abmon): Rename to... ++ (ab_alt_mon): This, then synchronize with CLDR (nominative case). ++ (mon): Rename to... ++ (alt_mon): This. ++ (abmon): Import from CLDR (genitive case, month names preceded by ++ "de" or "d’"). ++ (mon): Likewise. ++ (abday): Synchronize with CLDR. ++ (d_t_fmt): Likewise. ++ (d_fmt): Likewise. ++ (am_pm): Likewise. ++ ++ (LC_TIME): Improve indentation. ++ (LC_TELEPHONE): Likewise. ++ (LC_NAME): Likewise. ++ (LC_ADDRESS): Likewise. ++ ++2018-03-12 Dmitry V. Levin ++ ++ * po/pt_BR.po: Update translations. ++ ++2018-03-03 Adhemerval Zanella ++ ++ [BZ #21269] ++ * sysdeps/unix/sysv/linux/i386/Makefile (tests): Add tst-bz21269. ++ * sysdeps/unix/sysv/linux/i386/sigaction.c (SET_SA_RESTORER): Clear ++ sa_restorer for vDSO case. ++ * sysdeps/unix/sysv/linux/i386/tst-bz21269.c: New file. ++ ++2018-03-03 Andreas Schwab ++ ++ [BZ #22918] ++ * nss/nsswitch.h (DEFINE_DATABASE): Don't define __nss_*_database. ++ * nss/nsswitch.c (DEFINE_DATABASE): Define __nss_*_database here. ++ * nscd/gai.c (__nss_hosts_database): Readd definition. ++ * posix/tst-rfc3484.c (__nss_hosts_database): Likewise. ++ * posix/tst-rfc3484-3.c (__nss_hosts_database): Likewise. ++ * posix/tst-rfc3484-2.c (__nss_hosts_database): Likewise. ++ ++2018-03-01 DJ Delorie ++ ++ [BZ #22342] ++ * nscd/netgroupcache.c (addinnetgrX): Include trailing NUL in ++ key value. ++ ++2018-02-26 Dmitry V. Levin ++ ++ [BZ #22433] ++ [BZ #22807] ++ * sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h (__ptrace_request): Add ++ PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS, PTRACE_SETFPREGS, ++ PTRACE_GETVRREGS, PTRACE_SETVRREGS, PTRACE_GETEVRREGS, ++ PTRACE_SETEVRREGS, PTRACE_GETREGS64, PTRACE_SETREGS64, ++ PTRACE_GET_DEBUGREG, PTRACE_SET_DEBUGREG, PTRACE_GETVSRREGS, ++ PTRACE_SETVSRREGS, and PTRACE_SINGLEBLOCK. ++ ++2018-02-26 Tulio Magno Quites Machado Filho ++ ++ * sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h: Undefine Linux ++ macros used in __ptrace_request. ++ ++2018-02-21 Mike FABIAN ++ ++ [BZ #22517] ++ * localedata/locales/et_EE (LC_COLLATE): add missing “reorder-end” ++ ++2018-02-21 Rical Jasan ++ ++ * io/fcntl.h: Fix a typo in a comment. ++ ++2018-02-20 Rical Jasan ++ ++ * manual/creature.texi (_ISOC99_SOURCE): Update the dated ++ description. ++ ++ [BZ #16335] ++ * manual/creature.texi (_POSIX_C_SOURCE): Document special values ++ of 199606L, 200112L, and 200809L. ++ (_XOPEN_SOURCE): Document special values of 600 and 700. ++ (_ISOC11_SOURCE): Document macro. ++ (_ATFILE_SOURCE): Likewise. ++ (_FORTIFY_SOURCE): Likewise. ++ ++2018-03-09 Aurelien Jarno ++ ++ [BZ #22919] ++ * sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S (__startcontext): ++ Add nop before __startcontext, add explaining comments. ++ ++2018-03-07 Adhemerval Zanella ++ ++ [BZ #22926] ++ * sysdeps/powerpc/powerpc32/sysdep.h (ABORT_TRANSACTION_IMPL): Define ++ empty for __SPE__. ++ * sysdeps/powerpc/sysdep.h (ABORT_TRANSACTION): Likewise. ++ * sysdeps/unix/sysv/linux/powerpc/elision-lock.c (__lll_lock_elision): ++ Do not build hardware transactional code for __SPE__. ++ * sysdeps/unix/sysv/linux/powerpc/elision-trylock.c ++ (__lll_trylock_elision): Likewise. ++ * sysdeps/unix/sysv/linux/powerpc/elision-unlock.c ++ (__lll_unlock_elision): Likewise. ++ +2018-02-19 Rical Jasan + + [BZ #6889] @@ -65,7 +217,7 @@ 2018-02-01 Dmitry V. Levin * version.h (RELEASE): Set to "stable". -@@ -710,7 +767,9 @@ +@@ -710,7 +919,9 @@ 2018-01-18 Arjun Shankar [BZ #22343] @@ -76,30 +228,47 @@ after padding. (_int_memalign): check for integer overflow before calling diff --git a/NEWS b/NEWS -index a71c1038a8..5571c592bf 100644 +index a71c1038a8..4749f5f432 100644 --- a/NEWS +++ b/NEWS -@@ -5,6 +5,19 @@ See the end for copying conditions. +@@ -5,6 +5,36 @@ See the end for copying conditions. Please send GNU C library bug reports via using `glibc' in the "product" field. +Version 2.27.1 + ++Major new features: ++ ++* Nominative and genitive month names are now supported for the Catalan and ++ Czech languages. The Catalan and Greek languages now support abbreviated ++ alternative month names. ++ +The following bugs are resolved with this release: + + [6889] 'PWD' mentioned but not specified ++ [16335] Feature test macro documentation incomplete and out of date ++ [21269] i386 sigaction sa_restorer handling is wrong ++ [22342] NSCD not properly caching netgroup + [22638] sparc: static binaries are broken if glibc is built by gcc + configured with --enable-default-pie + [22735] Misleading typo in time.h source comment regarding CLOCKS_PER_SECOND + [22797] Linux: use reserved name __key in pkey_get ++ [22807] PTRACE_* constants missing for powerpc + [22818] posix/tst-glob_lstat_compat failure on alpha + [22827] RISC-V ELF64 parser mis-reads flag in ldconfig ++ [22848] ca_ES: update date definitions from CLDR ++ [22918] multiple common of `__nss_shadow_database' ++ [22919] sparc32: backtrace yields infinite backtrace with makecontext ++ [22926] FTBFS on powerpcspe ++ [22932] lt_LT: Update of abbreviated month names from CLDR required ++ [22937] Greek (el_GR, el_CY) locales actually need ab_alt_mon ++ [22963] cs_CZ: Add alternative month names + + Version 2.27 Major new features: -@@ -262,6 +275,10 @@ Security related changes: +@@ -262,6 +292,10 @@ Security related changes: an object size near the value of SIZE_MAX, would return a pointer to a buffer which is too small, instead of NULL. Reported by Jakub Wilk. @@ -110,6 +279,10860 @@ The following bugs are resolved with this release: [866] glob: glob should match dangling symlinks +diff --git a/io/fcntl.h b/io/fcntl.h +index 3d239e8f09..69a4394191 100644 +--- a/io/fcntl.h ++++ b/io/fcntl.h +@@ -139,7 +139,7 @@ typedef __pid_t pid_t; + # define SEEK_END 2 /* Seek from end of file. */ + #endif /* XPG */ + +-/* The constants AT_REMOVEDIR and AT_EACCESS have the same value. AT_EASSESS ++/* The constants AT_REMOVEDIR and AT_EACCESS have the same value. AT_EACCESS + is meaningful only to faccessat, while AT_REMOVEDIR is meaningful only to + unlinkat. The two functions do completely different things and therefore, + the flags can be allowed to overlap. For example, passing AT_REMOVEDIR to +diff --git a/localedata/locales/ca_ES b/localedata/locales/ca_ES +index 914c066dab..f0d744d537 100644 +--- a/localedata/locales/ca_ES ++++ b/localedata/locales/ca_ES +@@ -106,36 +106,67 @@ grouping 0;0 + END LC_NUMERIC + + LC_TIME +-abday "dg";"dl";"dt";"dc";"dj";"dv";"ds" +-day "diumenge";/ +- "dilluns";/ +- "dimarts";/ +- "dimecres";/ +- "dijous";/ +- "divendres";/ +- "dissabte" +-abmon "gen";"feb";/ +- "mar";"abr";/ +- "mai";"jun";/ +- "jul";"ago";/ +- "set";"oct";/ +- "nov";"des" +-mon "gener";/ +- "febrer";/ +- "mar";/ +- "abril";/ +- "maig";/ +- "juny";/ +- "juliol";/ +- "agost";/ +- "setembre";/ +- "octubre";/ +- "novembre";/ +- "desembre" +-d_t_fmt "%a %d %b %Y %T %Z" +-d_fmt "%d//%m//%y" +-t_fmt "%T" +-am_pm "";"" ++abday "dg.";"dl.";"dt.";"dc.";"dj.";"dv.";"ds." ++day "diumenge";/ ++ "dilluns";/ ++ "dimarts";/ ++ "dimecres";/ ++ "dijous";/ ++ "divendres";/ ++ "dissabte" ++ab_alt_mon "gen.";/ ++ "febr.";/ ++ "mar";/ ++ "abr.";/ ++ "maig";/ ++ "juny";/ ++ "jul.";/ ++ "ag.";/ ++ "set.";/ ++ "oct.";/ ++ "nov.";/ ++ "des." ++abmon "de gen.";/ ++ "de febr.";/ ++ "de mar";/ ++ "dabr.";/ ++ "de maig";/ ++ "de juny";/ ++ "de jul.";/ ++ "dag.";/ ++ "de set.";/ ++ "doct.";/ ++ "de nov.";/ ++ "de des." ++alt_mon "gener";/ ++ "febrer";/ ++ "mar";/ ++ "abril";/ ++ "maig";/ ++ "juny";/ ++ "juliol";/ ++ "agost";/ ++ "setembre";/ ++ "octubre";/ ++ "novembre";/ ++ "desembre" ++mon "de gener";/ ++ "de febrer";/ ++ "de mar";/ ++ "dabril";/ ++ "de maig";/ ++ "de juny";/ ++ "de juliol";/ ++ "dagost";/ ++ "de setembre";/ ++ "doctubre";/ ++ "de novembre";/ ++ "de desembre" ++d_t_fmt "%A, %-d %B de %Y, %T %Z" ++d_fmt "%-d//%-m//%y" ++t_fmt "%T" ++am_pm "a. m.";/ ++ "p. m." + t_fmt_ampm "" + week 7;19971130;4 + first_weekday 2 +@@ -146,9 +177,9 @@ copy "i18n" + END LC_PAPER + + LC_TELEPHONE +-tel_int_fmt "+%c %a %l" +-int_prefix "34" +-int_select "00" ++tel_int_fmt "+%c %a %l" ++int_prefix "34" ++int_select "00" + END LC_TELEPHONE + + LC_MEASUREMENT +@@ -156,19 +187,19 @@ copy "i18n" + END LC_MEASUREMENT + + LC_NAME +-name_fmt "%d%t%g%t%m%t%f" ++name_fmt "%d%t%g%t%m%t%f" + END LC_NAME + + LC_ADDRESS +-postal_fmt "%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N" ++postal_fmt "%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N" + country_name "Espanya" +-country_ab2 "ES" +-country_ab3 "ESP" +-country_num 724 +-country_car "E" ++country_ab2 "ES" ++country_ab3 "ESP" ++country_num 724 ++country_car "E" + % català + lang_name "catal" + lang_ab "ca" + lang_term "cat" +-lang_lib "cat" ++lang_lib "cat" + END LC_ADDRESS +diff --git a/localedata/locales/cs_CZ b/localedata/locales/cs_CZ +index f80d3e1b37..8f4c69e493 100644 +--- a/localedata/locales/cs_CZ ++++ b/localedata/locales/cs_CZ +@@ -272,7 +272,7 @@ day "Nedle";/ + "Ptek";/ + "Sobota" + +-mon "leden";/ ++alt_mon "leden";/ + "nor";/ + "bezen";/ + "duben";/ +@@ -334,6 +334,19 @@ abmon "led";/ + % "Nov";/ + % "Dec" + ++mon "ledna";/ ++ "nora";/ ++ "bezna";/ ++ "dubna";/ ++ "kvtna";/ ++ "ervna";/ ++ "ervence";/ ++ "srpna";/ ++ "z";/ ++ "jna";/ ++ "listopadu";/ ++ "prosince" ++ + week 7;19971130;4 + first_weekday 2 + +diff --git a/localedata/locales/el_CY b/localedata/locales/el_CY +index f27a74bb76..28055f335b 100644 +--- a/localedata/locales/el_CY ++++ b/localedata/locales/el_CY +@@ -72,12 +72,18 @@ day "";/ + "";/ + "";/ + "" +-abmon "";"";/ ++ab_alt_mon "";"";/ + "";"";/ + "";"";/ + "";"";/ + "";"";/ + "";"" ++abmon "";"";/ ++ "";"";/ ++ "";"";/ ++ "";"";/ ++ "";"";/ ++ "";"" + alt_mon "";/ + "";/ + "";/ +diff --git a/localedata/locales/el_GR b/localedata/locales/el_GR +index a82ef8c6d9..7362492fbd 100644 +--- a/localedata/locales/el_GR ++++ b/localedata/locales/el_GR +@@ -104,12 +104,18 @@ day "";/ + "";/ + "";/ + "" +-abmon "";"";/ ++ab_alt_mon "";"";/ + "";"";/ + "";"";/ + "";"";/ + "";"";/ + "";"" ++abmon "";"";/ ++ "";"";/ ++ "";"";/ ++ "";"";/ ++ "";"";/ ++ "";"" + alt_mon "";/ + "";/ + "";/ +diff --git a/localedata/locales/et_EE b/localedata/locales/et_EE +index 9cb55b568f..bab7493c98 100644 +--- a/localedata/locales/et_EE ++++ b/localedata/locales/et_EE +@@ -103,6 +103,8 @@ reorder-after + ;;;IGNORE % ü + ;;;IGNORE % Ü + ++reorder-end ++ + END LC_COLLATE + + LC_CTYPE +diff --git a/localedata/locales/lt_LT b/localedata/locales/lt_LT +index c935fcf75e..bec67726e9 100644 +--- a/localedata/locales/lt_LT ++++ b/localedata/locales/lt_LT +@@ -201,12 +201,12 @@ day "Sekmadienis";/ + "Ketvirtadienis";/ + "Penktadienis";/ + "etadienis" +-abmon "Sau";"Vas";/ +- "Kov";"Bal";/ +- "Geg";"Bir";/ +- "Lie";"Rgp";/ +- "Rgs";"Spa";/ +- "Lap";"Grd" ++abmon "saus.";"vas.";/ ++ "kov.";"bal.";/ ++ "geg.";"bir.";/ ++ "liep.";"rugp.";/ ++ "rugs.";"spal.";/ ++ "lapkr.";"gruod." + alt_mon "sausis";/ + "vasaris";/ + "kovas";/ +diff --git a/nscd/gai.c b/nscd/gai.c +index d081747797..576fd0045b 100644 +--- a/nscd/gai.c ++++ b/nscd/gai.c +@@ -45,3 +45,6 @@ + #ifdef HAVE_LIBIDN + # include + #endif ++ ++/* Some variables normally defined in libc. */ ++service_user *__nss_hosts_database attribute_hidden; +diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c +index b832c9315f..2f187b208c 100644 +--- a/nscd/netgroupcache.c ++++ b/nscd/netgroupcache.c +@@ -480,7 +480,7 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, + { + const char *group = key; + key = (char *) rawmemchr (key, '\0') + 1; +- size_t group_len = key - group - 1; ++ size_t group_len = key - group; + const char *host = *key++ ? key : NULL; + if (host != NULL) + key = (char *) rawmemchr (key, '\0') + 1; +diff --git a/nss/nsswitch.c b/nss/nsswitch.c +index d5e655974f..b0f0c11a3e 100644 +--- a/nss/nsswitch.c ++++ b/nss/nsswitch.c +@@ -62,7 +62,7 @@ static service_library *nss_new_service (name_database *database, + + /* Declare external database variables. */ + #define DEFINE_DATABASE(name) \ +- extern service_user *__nss_##name##_database attribute_hidden; \ ++ service_user *__nss_##name##_database attribute_hidden; \ + weak_extern (__nss_##name##_database) + #include "databases.def" + #undef DEFINE_DATABASE +diff --git a/nss/nsswitch.h b/nss/nsswitch.h +index eccb535ef5..63573b9ebc 100644 +--- a/nss/nsswitch.h ++++ b/nss/nsswitch.h +@@ -226,10 +226,10 @@ libc_hidden_proto (__nss_hostname_digits_dots) + #define MAX_NR_ADDRS 48 + + /* Prototypes for __nss_*_lookup2 functions. */ +-#define DEFINE_DATABASE(arg) \ +- service_user *__nss_##arg##_database attribute_hidden; \ +- int __nss_##arg##_lookup2 (service_user **, const char *, \ +- const char *, void **); \ ++#define DEFINE_DATABASE(arg) \ ++ extern service_user *__nss_##arg##_database attribute_hidden; \ ++ int __nss_##arg##_lookup2 (service_user **, const char *, \ ++ const char *, void **); \ + libc_hidden_proto (__nss_##arg##_lookup2) + #include "databases.def" + #undef DEFINE_DATABASE +diff --git a/po/pt_BR.po b/po/pt_BR.po +index b7c1650957..d49d6ec279 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -1,4283 +1,7213 @@ +-# Brazilian portuguese messages for glibc. +-# Copyright 1998, 1999 Free Software Foundation, Inc. ++# Brazilian Portuguese translation for glibc. ++# Copyright © 2018 Free Software Foundation, Inc. ++# This file is distributed under the same license as the glibc package. + # Fabio Dorival Victorelli , 1998. +-# Mrcio Macedo , 1998. ++# Márcio Macedo , 1998. + # Arnaldo Carvalho de Mello , 1998. + # Sandro Nunes Henrique , 1998. + # Rodrigo Stulzer Lopes , 1999. +-# ++# Rafael Fontenelle , 2018. + msgid "" + msgstr "" +-"Project-Id-Version: libc 2.1\n" +-"POT-Creation-Date: 1998-11-28 09:29-0800\n" +-"PO-Revision-Date: 1999-06-29 18:07-0300\n" +-"Last-Translator: Rodrigo Parra Novo \n" +-"Language-Team: Brazilian Portuguese \n" +-"X-Bugs: Report translation errors to the Language-Team address.\n" ++"Project-Id-Version: libc 2.26.9000\n" ++"POT-Creation-Date: 2018-01-10 15:00+0000\n" ++"PO-Revision-Date: 2018-03-11 11:16-0300\n" ++"Last-Translator: Rafael Fontenelle \n" ++"Language-Team: Brazilian Portuguese \n" ++"Language: pt_BR\n" + "MIME-Version: 1.0\n" +-"Content-Type: text/plain; charset=ISO-8859-1\n" +-"Content-Transfer-Encoding: 8-bit\n" +- +-#: nis/nis_print.c:273 +-msgid "\t\tAccess Rights : " +-msgstr "\t\tDireitos de Acesso: " +- +-#: nis/nis_print.c:271 +-msgid "\t\tAttributes : " +-msgstr "\t\tAtributos : " +- +-#: sunrpc/rpc_main.c:1416 +-#, c-format +-msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" +-msgstr "%s [-abkCLNTM][-Dname[=valor]] [-i tamanho] [-I [-K segundos]] [-Y rota] arquivo_entrada\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Bugs: Report translation errors to the Language-Team address.\n" ++"Plural-Forms: nplurals=2; plural=(n > 1);\n" ++"X-Generator: Virtaal 1.0.0-beta1\n" + +-#: sunrpc/rpc_main.c:1418 ++#: argp/argp-help.c:227 + #, c-format +-msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" +-msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o arquivo-sada] [arquivo-entrada]\n" ++msgid "%.*s: ARGP_HELP_FMT parameter requires a value" ++msgstr "%.*s: ARGP_HELP_FMT parâmetro requer um valor" + +-#: sunrpc/rpc_main.c:1421 ++#: argp/argp-help.c:237 + #, c-format +-msgid "\t%s [-n netid]* [-o outfile] [infile]\n" +-msgstr "\t%s [-n id-rede]* [-o arquivo-sada] [arquivo-entrada]\n" ++msgid "%.*s: Unknown ARGP_HELP_FMT parameter" ++msgstr "%.*s: Parâmetro ARGP_HELP_FMT desconhecido" + +-#: sunrpc/rpc_main.c:1420 ++#: argp/argp-help.c:250 + #, c-format +-msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" +-msgstr "\t%s [-s tipo-rede]* [-o arquivo-sada] [arquivo-entrada]\n" ++msgid "Garbage in ARGP_HELP_FMT: %s" ++msgstr "Lixo em ARGP_HELP_FMT: %s" + +-#: nis/nis_print.c:235 +-msgid "\tAccess rights: " +-msgstr "\tDireitos acesso: " ++#: argp/argp-help.c:1214 ++msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." ++msgstr "Parâmetros obrigatórios ou opcionais para opções longas são também obrigatórios ou opcionais para qualquer opção curta correspondente." + +-#: nis/nis_print.c:293 +-#, c-format +-msgid "\tEntry data of type %s\n" +-msgstr "\tEntrada de dados de tipo %s\n" ++#: argp/argp-help.c:1600 ++msgid "Usage:" ++msgstr "Uso:" + +-#: nis/nis_print.c:171 +-#, c-format +-msgid "\tName : %s\n" +-msgstr "\tNome : %s\n" ++#: argp/argp-help.c:1604 ++msgid " or: " ++msgstr " ou: " + +-#: nis/nis_print.c:172 +-msgid "\tPublic Key : " +-msgstr "\tChave pblica: " ++#: argp/argp-help.c:1616 ++msgid " [OPTION...]" ++msgstr " [OPÇÃO...]" + +-#: nis/nis_print.c:234 ++#: argp/argp-help.c:1643 + #, c-format +-msgid "\tType : %s\n" +-msgstr "\tTipo : %s\n" ++msgid "Try `%s --help' or `%s --usage' for more information.\n" ++msgstr "Tente “%s --help” ou “%s --usage” para mais informações.\n" + +-#: nis/nis_print.c:201 ++#: argp/argp-help.c:1671 + #, c-format +-msgid "\tUniversal addresses (%u)\n" +-msgstr "\tEndereo universal (%u)\n" ++msgid "Report bugs to %s.\n" ++msgstr "Relate erros para %s.\n" + +-#: nis/nis_print.c:269 +-#, c-format +-msgid "\t[%d]\tName : %s\n" +-msgstr "\t[%d]\tNome : %s\n" ++#: argp/argp-parse.c:101 ++msgid "Give this help list" ++msgstr "Retorna este arquivo de ajuda" + +-#: nis/nis_print.c:296 +-#, c-format +-msgid "\t[%u] - [%u bytes] " +-msgstr "\t[%u] - [%u bytes] " ++#: argp/argp-parse.c:102 ++msgid "Give a short usage message" ++msgstr "Retorna uma mensagem de uso curta" + +-#: nscd/nscd_stat.c:153 +-msgid "" +-"\n" +-"%s cache:\n" +-"\n" +-"%15s cache is enabled\n" +-"%15Zd suggested size\n" +-"%15ld seconds time to live for positive entries\n" +-"%15ld seconds time to live for negative entries\n" +-"%15ld cache hits on positive entries\n" +-"%15ld cache hits on negative entries\n" +-"%15ld cache misses on positive entries\n" +-"%15ld cache misses on negative entries\n" +-"%15ld%% cache hit rate\n" +-"%15s check /etc/%s for changes\n" +-msgstr "" +-"\n" +-"cache %s:\n" +-"\n" +-"%15s cache est habilitado\n" +-"%15Zd tamanho sugerido%15ld segundos de vida para entradas positivas\n" +-"%15ld segundos de vida para entradas negativas\n" +-"%15ld hits do cache para entradas positivas\n" +-"%15ld hits do cache para entradas negativas\n" +-"%15ld%% quantidade de hits no cache\n" +-"%15s verifique o arquivo /etc/%s para mudanas\n" ++#: argp/argp-parse.c:103 catgets/gencat.c:109 catgets/gencat.c:113 ++#: iconv/iconv_prog.c:60 iconv/iconv_prog.c:61 nscd/nscd.c:105 ++#: nss/makedb.c:120 ++msgid "NAME" ++msgstr "NOME" + +-#: nis/nis_print.c:251 +-msgid "\nGroup Members :\n" +-msgstr "\nMembros do Grupo : \n" ++#: argp/argp-parse.c:104 ++msgid "Set the program name" ++msgstr "Configura o nome do programa" + +-#: nis/nis_print.c:320 +-msgid "\nTime to Live : " +-msgstr "\nTempo de Vida : " ++#: argp/argp-parse.c:105 ++msgid "SECS" ++msgstr "SEG" + +-#: sunrpc/rpcinfo.c:679 +-msgid " rpcinfo -b prognum versnum\n" +-msgstr " rpcinfo -b nmprog nmvers\n" ++#: argp/argp-parse.c:106 ++msgid "Hang for SECS seconds (default 3600)" ++msgstr "Retém por SEG segundos (o padrão é 3600)" + +-#: sunrpc/rpcinfo.c:680 +-msgid " rpcinfo -d prognum versnum\n" +-msgstr " rpcinfo -b nmprog nmvers\n" ++#: argp/argp-parse.c:167 ++msgid "Print program version" ++msgstr "Mostra versão do programa" + +-#: sunrpc/rpcinfo.c:678 +-msgid " rpcinfo -p [ host ]\n" +-msgstr " rpcinfo -p [ host ]\n" ++#: argp/argp-parse.c:183 ++msgid "(PROGRAM ERROR) No version known!?" ++msgstr "(ERRO DE PROGRAMA) Versão desconhecida!?" + +-#: sunrpc/rpcinfo.c:676 +-msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n" +-msgstr " rpcinfo [ -n nmporta ] -t host nmprog [ nmvers ]\n" ++#: argp/argp-parse.c:623 ++#, c-format ++msgid "%s: Too many arguments\n" ++msgstr "%s: Argumentos demais\n" + +-#: nscd/nscd_stat.c:145 nscd/nscd_stat.c:147 +-msgid " no" +-msgstr " no" ++#: argp/argp-parse.c:766 ++msgid "(PROGRAM ERROR) Option should have been recognized!?" ++msgstr "(ERRO DE PROGRAMA) Opção deveria ter sido reconhecida!?" + +-#: nscd/nscd_stat.c:145 nscd/nscd_stat.c:147 +-msgid " yes" +-msgstr " sim" ++#: assert/assert-perr.c:35 ++#, c-format ++msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n" ++msgstr "%s%s%s:%u: %s%sErro inesperado: %s.\n" + +-#: nis/nis_print.c:344 ++#: assert/assert.c:101 + #, c-format +-msgid " Data Length = %u\n" +-msgstr " Tamanho dados = %u\n" ++msgid "" ++"%s%s%s:%u: %s%sAssertion `%s' failed.\n" ++"%n" ++msgstr "" ++"%s%s%s:%u: %s%sAssertiva “%s” falhou.\n" ++"%n" + +-#: nis/nis_print_group_entry.c:121 +-msgid " Explicit members:\n" +-msgstr " Membros explcitos:\n" ++#: catgets/gencat.c:110 ++msgid "Create C header file NAME containing symbol definitions" ++msgstr "Cria arquivo NOME com cabeçalho C contendo definições de símbolos" + +-#: nis/nis_print_group_entry.c:145 nis/nis_print_group_entry.c:161 +-msgid " Explicit nonmembers:\n" +-msgstr " No-membros explcitos:\n" ++#: catgets/gencat.c:112 ++msgid "Do not use existing catalog, force new output file" ++msgstr "Não usa catálogo existente, força um novo arquivo de saída" + +-#: nis/nis_print_group_entry.c:129 +-msgid " Implicit members:\n" +-msgstr " Membros implcitos:\n" ++#: catgets/gencat.c:113 nss/makedb.c:120 ++msgid "Write output to file NAME" ++msgstr "Escreve a saída para o arquivo NOME" + +-#: nis/nis_print_group_entry.c:153 +-msgid " Implicit nonmembers:\n" +-msgstr " No-membros implcitos:\n" ++#: catgets/gencat.c:118 ++msgid "" ++"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" ++"is -, output is written to standard output.\n" ++msgstr "" ++"Gera catálogo de mensagens.\\vSe ARQUIVO-DE-ENTRADA for -, a entrada é lida da entrada padrão.\n" ++"Se ARQUIVO-DE-SAÍDA for -, a saída é escrita para a saída padrão.\n" + +-#: nis/nis_print_group_entry.c:126 +-msgid " No explicit members\n" +-msgstr " Membros no explcitos\n" ++#: catgets/gencat.c:123 ++msgid "" ++"-o OUTPUT-FILE [INPUT-FILE]...\n" ++"[OUTPUT-FILE [INPUT-FILE]...]" ++msgstr "" ++"-o ARQUIVO-SAÍDA [ARQUIVO-ENTRADA]...\n" ++"[ARQUIVO-SAÍDA [ARQUIVO-ENTRADA...]" + +-#: nis/nis_print_group_entry.c:150 +-msgid " No explicit nonmembers\n" +-msgstr "No-membros no explcitos\n" ++#: catgets/gencat.c:229 debug/pcprofiledump.c:209 elf/ldconfig.c:308 ++#: elf/pldd.c:252 elf/sln.c:77 elf/sprof.c:372 iconv/iconv_prog.c:405 ++#: iconv/iconvconfig.c:379 locale/programs/locale.c:275 ++#: locale/programs/localedef.c:427 login/programs/pt_chown.c:89 ++#: malloc/memusagestat.c:563 nss/getent.c:913 nss/makedb.c:369 ++#: posix/getconf.c:503 sysdeps/unix/sysv/linux/lddlibc4.c:61 ++#, c-format ++msgid "" ++"For bug reporting instructions, please see:\n" ++"%s.\n" ++msgstr "" ++"Para instruções sobre como relatar erros, por favor veja:\n" ++"%s.\n" + +-#: nis/nis_print_group_entry.c:134 +-msgid " No implicit members\n" +-msgstr " Membros no implcitos\n" ++#: catgets/gencat.c:245 debug/pcprofiledump.c:225 debug/xtrace.sh:64 ++#: elf/ldconfig.c:324 elf/ldd.bash.in:38 elf/pldd.c:268 elf/sotruss.sh:75 ++#: elf/sprof.c:389 iconv/iconv_prog.c:422 iconv/iconvconfig.c:396 ++#: locale/programs/locale.c:292 locale/programs/localedef.c:453 ++#: login/programs/pt_chown.c:63 malloc/memusage.sh:71 ++#: malloc/memusagestat.c:581 nscd/nscd.c:509 nss/getent.c:86 nss/makedb.c:385 ++#: posix/getconf.c:485 sysdeps/unix/sysv/linux/lddlibc4.c:68 ++#, c-format ++msgid "" ++"Copyright (C) %s Free Software Foundation, Inc.\n" ++"This is free software; see the source for copying conditions. There is NO\n" ++"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" ++msgstr "" ++"Copyright (C) %s Free Software Foundation, Inc.\n" ++"Este é um software livre; leia os fontes para condições de cópia. NÃO HÁ\n" ++"QUALQUER GARANTIA; nem para COMERCIALIZAÇÃO ou ADEQUAÇÃO A QUALQUER\n" ++"PROPÓSITO EME PARTICULAR.\n" + +-#: nis/nis_print_group_entry.c:158 +-msgid " No implicit nonmembers\n" +-msgstr "No-membros no implcitos\n" ++#: catgets/gencat.c:250 debug/pcprofiledump.c:230 debug/xtrace.sh:68 ++#: elf/ldconfig.c:329 elf/pldd.c:273 elf/sprof.c:395 iconv/iconv_prog.c:427 ++#: iconv/iconvconfig.c:401 locale/programs/locale.c:297 ++#: locale/programs/localedef.c:458 malloc/memusage.sh:75 ++#: malloc/memusagestat.c:586 nscd/nscd.c:514 nss/getent.c:91 nss/makedb.c:390 ++#: posix/getconf.c:490 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "Escrito por %s.\n" + +-#: nis/nis_print_group_entry.c:142 +-msgid " No recursive members\n" +-msgstr "Membros no recursivos\n" ++#: catgets/gencat.c:281 ++msgid "*standard input*" ++msgstr "*entrada padrão*" + +-#: nis/nis_print_group_entry.c:166 +-msgid " No recursive nonmembers\n" +-msgstr "No-membros no recursivos\n" ++#: catgets/gencat.c:287 iconv/iconv_charmap.c:167 iconv/iconv_prog.c:290 ++#: nss/makedb.c:246 ++#, c-format ++msgid "cannot open input file `%s'" ++msgstr "não é possível abrir arquivo de entrada “%s”" + +-#: nis/nis_print_group_entry.c:137 +-msgid " Recursive members:\n" +-msgstr " Membros recursivos:\n" ++#: catgets/gencat.c:416 catgets/gencat.c:491 ++msgid "illegal set number" ++msgstr "número de conjunto ilegal" + +-#: sunrpc/rpcinfo.c:574 +-msgid " program vers proto port\n" +-msgstr " programa verso protocolo porta\n" ++#: catgets/gencat.c:443 ++msgid "duplicate set definition" ++msgstr "definição de conjunto duplicada" + +-#: argp/argp-help.c:1571 +-msgid " or: " +-msgstr " ou: " ++#: catgets/gencat.c:445 catgets/gencat.c:617 catgets/gencat.c:669 ++msgid "this is the first definition" ++msgstr "esta é a primeira definição" + +-#: timezone/zic.c:421 ++#: catgets/gencat.c:516 + #, c-format +-msgid " (rule from \"%s\", line %d)" +-msgstr " (regra de \"%s\", linha %d)" +- +-#: argp/argp-help.c:1583 +-msgid " [OPTION...]" +-msgstr " [OPO...]" ++msgid "unknown set `%s'" ++msgstr "conjunto desconhecido “%s”" + +-#: locale/programs/ld-collate.c:370 locale/programs/ld-ctype.c:1291 +-msgid " done\n" +-msgstr " feito\n" ++#: catgets/gencat.c:557 ++msgid "invalid quote character" ++msgstr "caractere de aspas inválido" + +-#: timezone/zic.c:418 ++#: catgets/gencat.c:570 + #, c-format +-msgid "\"%s\", line %d: %s" +-msgstr "\"%s\", linha %d: %s" ++msgid "unknown directive `%s': line ignored" ++msgstr "diretiva desconhecida “%s”: linha ignorada" + +-#: timezone/zic.c:958 +-#, c-format +-msgid "\"Zone %s\" line and -l option are mutually exclusive" +-msgstr "A linha \"Zone %s\" e a opo -l so mutuamente exclusivas" ++#: catgets/gencat.c:615 ++msgid "duplicated message number" ++msgstr "número de mensagem duplicado" + +-#: timezone/zic.c:966 +-#, c-format +-msgid "\"Zone %s\" line and -p option are mutually exclusive" +-msgstr "A linha \"Zone %s\" e a opo -p so mutuamente exclusivas" ++#: catgets/gencat.c:666 ++msgid "duplicated message identifier" ++msgstr "identificador de mensagens duplicado" + +-#: sunrpc/rpc_main.c:1401 +-msgid "\"infile\" is required for template generation flags.\n" +-msgstr "\"arquivo-entrada\" necessrio para gerao de indicadores do modelo.\n" ++#: catgets/gencat.c:723 ++msgid "invalid character: message ignored" ++msgstr "caractere inválido: mensagem ignorada" + +-#: argp/argp-help.c:210 +-#, c-format +-msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +-msgstr "%.*s: ARGP_HELP_FMT parmetro requer um valor" ++#: catgets/gencat.c:766 ++msgid "invalid line" ++msgstr "linha inválida" + +-#: argp/argp-help.c:219 +-#, c-format +-msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +-msgstr "%.*s: Parmetro ARGP_HELP_FMT desconhecido" ++#: catgets/gencat.c:820 ++msgid "malformed line ignored" ++msgstr "linha inválida ignorada" + +-#: timezone/zic.c:768 ++#: catgets/gencat.c:984 catgets/gencat.c:1025 + #, c-format +-msgid "%s in ruleless zone" +-msgstr "%s em uma zona sem regras" ++msgid "cannot open output file `%s'" ++msgstr "não é possível abrir arquivo de saída “%s”" + +-#: assert/assert.c:51 +-#, c-format +-msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" +-msgstr "%s%s%s:%u: %s%sAssertiva `%s' falhou.\n" ++#: catgets/gencat.c:1187 locale/programs/linereader.c:560 ++msgid "invalid escape sequence" ++msgstr "sequência de escape inválida" + +-#: assert/assert-perr.c:52 +-#, c-format +-msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n" +-msgstr "%s%s%s:%u: %s%sErro inesperado: %s.\n" ++#: catgets/gencat.c:1209 ++msgid "unterminated message" ++msgstr "mensagem não terminada" + +-#: stdio-common/psignal.c:47 ++#: catgets/gencat.c:1233 + #, c-format +-msgid "%s%sUnknown signal %d\n" +-msgstr "%s%sSinal desconhecido %d\n" ++msgid "while opening old catalog file" ++msgstr "enquanto abrindo antigo arquivo de catálogo" + +-#: timezone/zic.c:2201 ++#: catgets/gencat.c:1324 + #, c-format +-msgid "%s: %d did not sign extend correctly\n" +-msgstr "%s: %d no fez extenso de sinal corretamente\n" ++msgid "conversion modules not available" ++msgstr "módulos de conversão não estão disponíveis" + +-#: locale/programs/charmap.c:261 ++#: catgets/gencat.c:1350 + #, c-format +-msgid "%s: must be greater than \n" +-msgstr "%s: deve ser maior que \n" ++msgid "cannot determine escape character" ++msgstr "não é possível determinar caractere de escape" + +-#: sunrpc/rpc_main.c:422 +-#, c-format +-msgid "%s: C preprocessor failed with exit code %d\n" +-msgstr "%s: Pr-processador C falhou com cdigo de sada %d\n" ++#: debug/pcprofiledump.c:53 ++msgid "Don't buffer output" ++msgstr "Não usa buffer para a saída" + +-#: sunrpc/rpc_main.c:419 +-#, c-format +-msgid "%s: C preprocessor failed with signal %d\n" +-msgstr "%s: Pr-processador C falhou com sinal %d\n" ++#: debug/pcprofiledump.c:58 ++msgid "Dump information generated by PC profiling." ++msgstr "Despeja a informação gerada pelo perfilador de PC." + +-#: timezone/zic.c:1469 +-#, c-format +-msgid "%s: Can't create %s: %s\n" +-msgstr "%s: No possvel criar %s: %s\n" ++#: debug/pcprofiledump.c:61 ++msgid "[FILE]" ++msgstr "[ARQUIVO]" + +-#: timezone/zic.c:2179 ++#: debug/pcprofiledump.c:108 + #, c-format +-msgid "%s: Can't create directory %s: %s\n" +-msgstr "%s: No possvel criar o diretrio %s: %s\n" ++msgid "cannot open input file" ++msgstr "não foi possível abrir arquivo de entrada" + +-#: timezone/zic.c:620 ++#: debug/pcprofiledump.c:115 + #, c-format +-msgid "%s: Can't link from %s to %s: %s\n" +-msgstr "%s: No possvel criar um link de %s para %s: %s\n" ++msgid "cannot read header" ++msgstr "não foi possível ler cabeçalho" + +-#: timezone/zic.c:794 ++#: debug/pcprofiledump.c:179 + #, c-format +-msgid "%s: Can't open %s: %s\n" +-msgstr "%s: No possvel abrir %s: %s\n" ++msgid "invalid pointer size" ++msgstr "tamanho de ponteiro inválido" + +-#: timezone/zic.c:1459 +-#, c-format +-msgid "%s: Can't remove %s: %s\n" +-msgstr "%s: No possvel remover %s: %s\n" ++#: debug/xtrace.sh:26 debug/xtrace.sh:44 ++msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" ++msgstr "Uso: xtrace [OPÇÃO]... PROGRAMA [OPÇÃOPROGRAMA]...\\n" + +-#: timezone/zic.c:863 +-#, c-format +-msgid "%s: Error closing %s: %s\n" +-msgstr "%s: Erro fechando %s: %s\n" ++#: debug/xtrace.sh:32 elf/sotruss.sh:56 elf/sotruss.sh:67 elf/sotruss.sh:135 ++#: malloc/memusage.sh:26 ++msgid "Try \\`%s --help' or \\`%s --usage' for more information.\\n" ++msgstr "Tente “%s --help” ou “%s --usage” para mais informações.\\n" + +-#: timezone/zic.c:856 +-#, c-format +-msgid "%s: Error reading %s\n" +-msgstr "%s: Erro lendo %s\n" ++#: debug/xtrace.sh:38 ++msgid "%s: option '%s' requires an argument.\\n" ++msgstr "%s: opção “%s” requer um argumento.\\n" + +-#: timezone/zic.c:1535 +-#, c-format +-msgid "%s: Error writing %s\n" +-msgstr "%s: Erro escrevendo %s\n" ++#: debug/xtrace.sh:45 ++msgid "" ++"Trace execution of program by printing currently executed function.\n" ++"\n" ++" --data=FILE Don't run the program, just print the data from FILE.\n" ++"\n" ++" -?,--help Print this help and exit\n" ++" --usage Give a short usage message\n" ++" -V,--version Print version information and exit\n" ++"\n" ++"Mandatory arguments to long options are also mandatory for any corresponding\n" ++"short options.\n" ++"\n" ++msgstr "" ++"Rastreia a execução do programa exibindo a função atualmente executada.\n" ++"\n" ++" --data=ARQUIVO Não executa o programa, apenas exibe os dados\n" ++" do ARQUIVO.\n" ++"\n" ++" -?,--help Exibe essa ajuda e sai\n" ++" --usage Fornece uma curta mensagem de uso\n" ++" -V,--version Exibe informação da versão e sai\n" ++"\n" ++"Argumentos obrigatórios para opções longas são também obrigatórias para opções curtas correspondentes.\n" ++"\n" + +-#: timezone/zdump.c:266 +-#, c-format +-msgid "%s: Error writing standard output " +-msgstr "%s: Erro escrevendo para sada padro " ++#: debug/xtrace.sh:57 elf/ldd.bash.in:55 elf/sotruss.sh:49 ++#: malloc/memusage.sh:64 ++msgid "For bug reporting instructions, please see:\\\\n%s.\\\\n" ++msgstr "Para instruções sobre como relatar erros, por favor veja:\\\\n%s.\\\\n" + +-#: timezone/zic.c:841 +-#, c-format +-msgid "%s: Leap line in non leap seconds file %s\n" +-msgstr "%s: linha Leap no arquivo %s, que no arquivo de ajuste\n" ++#: debug/xtrace.sh:125 ++msgid "xtrace: unrecognized option \\`$1'\\n" ++msgstr "xtrace: opção não reconhecida “$1”\\n" + +-#: timezone/zic.c:359 +-#, c-format +-msgid "%s: Memory exhausted: %s\n" +-msgstr "%s: Memria esgotada: %s\n" ++#: debug/xtrace.sh:138 ++msgid "No program name given\\n" ++msgstr "Nenhum nome de programa dado\\n" + +-#: timezone/zic.c:524 +-#, c-format +-msgid "%s: More than one -L option specified\n" +-msgstr "%s: Mais que uma opo -L foi especificada\n" ++#: debug/xtrace.sh:146 ++#, sh-format ++msgid "executable \\`$program' not found\\n" ++msgstr "“$program” executável não foi encontrado\\n" + +-#: timezone/zic.c:484 +-#, c-format +-msgid "%s: More than one -d option specified\n" +-msgstr "%s: Mais que uma opo -d foi especificada\n" ++#: debug/xtrace.sh:150 ++#, sh-format ++msgid "\\`$program' is no executable\\n" ++msgstr "“$program” não é um executável\\n" + +-#: timezone/zic.c:494 +-#, c-format +-msgid "%s: More than one -l option specified\n" +-msgstr "%s: Mais que uma opo -l especificada\n" ++#: dlfcn/dlinfo.c:63 ++msgid "RTLD_SELF used in code not dynamically loaded" ++msgstr "RTLD_SELF usado em código não carregado dinamicamente" + +-#: timezone/zic.c:504 +-#, c-format +-msgid "%s: More than one -p option specified\n" +-msgstr "%s: Mais que uma opo -p especificada\n" ++#: dlfcn/dlinfo.c:72 ++msgid "unsupported dlinfo request" ++msgstr "requisição dlinfo sem suporte" + +-#: timezone/zic.c:514 +-#, c-format +-msgid "%s: More than one -y option specified\n" +-msgstr "%s: Mais que uma opo -y especificada\n" ++#: dlfcn/dlmopen.c:63 ++msgid "invalid namespace" ++msgstr "espaço de nome inválido" + +-#: argp/argp-parse.c:640 +-#, c-format +-msgid "%s: Too many arguments\n" +-msgstr "%s: Muitos parmetros\n" ++#: dlfcn/dlmopen.c:68 ++msgid "invalid mode" ++msgstr "modo inválido" + +-#: login/programs/database.c:129 +-#, c-format +-msgid "%s: cannot get modification time" +-msgstr "%s: no possvel processar modificaes de horrio" ++#: dlfcn/dlopen.c:64 ++msgid "invalid mode parameter" ++msgstr "parâmetro de modo inválido" + +-#: timezone/zic.c:1900 +-#, c-format +-msgid "%s: command was '%s', result was %d\n" +-msgstr "%s: comando era '%s', resultado era %d\n" ++#: elf/cache.c:69 ++msgid "unknown" ++msgstr "desconhecido" + +-#: locale/programs/charmap.c:677 locale/programs/locfile.c:1008 +-#, c-format +-msgid "%s: error in state machine" +-msgstr "%s: erro na mquina de estados" ++# Operating System (OS) = Sistema Operacional (SO) ++#: elf/cache.c:135 ++msgid "Unknown OS" ++msgstr "SO desconhecido" + +-#: posix/getopt.c:784 ++#: elf/cache.c:140 + #, c-format +-msgid "%s: illegal option -- %c\n" +-msgstr "%s: opo ilegal -- %c\n" ++msgid ", OS ABI: %s %d.%d.%d" ++msgstr ", ABI de SO: %s %d.%d.%d" + +-#: posix/getopt.c:787 ++#: elf/cache.c:157 elf/ldconfig.c:1332 + #, c-format +-msgid "%s: invalid option -- %c\n" +-msgstr "%s: opo invlida -- %c\n" ++msgid "Can't open cache file %s\n" ++msgstr "Não foi possível abrir arquivo de cache %s\n" + +-#: posix/getopt.c:707 ++#: elf/cache.c:171 + #, c-format +-msgid "%s: option `%c%s' doesn't allow an argument\n" +-msgstr "%s: opo `%c%s' no permite um argumento\n" ++msgid "mmap of cache file failed.\n" ++msgstr "mmap de arquivo de cache falhou.\n" + +-#: posix/getopt.c:677 ++#: elf/cache.c:175 elf/cache.c:189 + #, c-format +-msgid "%s: option `%s' is ambiguous\n" +-msgstr "%s: opo `%s' ambgua\n" ++msgid "File is not a cache file.\n" ++msgstr "Arquivo não é um arquivo de cache.\n" + +-#: posix/getopt.c:725 posix/getopt.c:898 ++# %d = número (quantidade) de bibliotecas ++#: elf/cache.c:222 elf/cache.c:232 + #, c-format +-msgid "%s: option `%s' requires an argument\n" +-msgstr "%s: opo `%s' requer um argumento\n" ++msgid "%d libs found in cache `%s'\n" ++msgstr "%d bibliotecas localizadas no cache “%s”\n" + +-#: posix/getopt.c:702 ++#: elf/cache.c:426 + #, c-format +-msgid "%s: option `--%s' doesn't allow an argument\n" +-msgstr "%s: opo `--%s' no permite um argumento\n" ++msgid "Can't create temporary cache file %s" ++msgstr "Não foi possível criar arquivo temporário de cache %s" + +-#: posix/getopt.c:882 ++#: elf/cache.c:434 elf/cache.c:444 elf/cache.c:448 elf/cache.c:453 + #, c-format +-msgid "%s: option `-W %s' doesn't allow an argument\n" +-msgstr "%s: opo `-W %s' no permite um argumento\n" ++msgid "Writing of cache data failed" ++msgstr "Escrita de dados de cache falhou" + +-#: posix/getopt.c:864 ++#: elf/cache.c:458 + #, c-format +-msgid "%s: option `-W %s' is ambiguous\n" +-msgstr "%s: opo `-W %s' ambgua\n" ++msgid "Changing access rights of %s to %#o failed" ++msgstr "Mudança de direitos de acesso de %s para %#o falhou" + +-#: posix/getopt.c:817 posix/getopt.c:947 ++#: elf/cache.c:463 + #, c-format +-msgid "%s: option requires an argument -- %c\n" +-msgstr "%s: opo requer um argumento -- %c\n" ++msgid "Renaming of %s to %s failed" ++msgstr "Renomeio de %s para %s falhou" + +-#: sunrpc/rpc_main.c:287 +-#, c-format +-msgid "%s: output would overwrite %s\n" +-msgstr "%s: sada poder sobrescrever %s\n" ++#: elf/dl-close.c:399 elf/dl-open.c:425 ++msgid "cannot create scope list" ++msgstr "não é possível criar lista de escopo" + +-#: timezone/zic.c:848 timezone/zic.c:1262 timezone/zic.c:1287 +-#, c-format +-msgid "%s: panic: Invalid l_value %d\n" +-msgstr "%s: pnico: l_value invlido %d\n" ++#: elf/dl-close.c:839 ++msgid "shared object not open" ++msgstr "objeto compartilhado não está aberto" + +-#: locale/programs/charmap.c:684 locale/programs/repertoire.c:289 +-#, c-format +-msgid "%s: premature end of file" +-msgstr "%s: fim de arquivo prematuro" ++#: elf/dl-deps.c:111 ++msgid "DST not allowed in SUID/SGID programs" ++msgstr "DST não permitido em programas SUID/SGID" + +-#: sunrpc/rpc_main.c:294 +-#, c-format +-msgid "%s: unable to open " +-msgstr "%s: No foi possvel abrir " ++#: elf/dl-deps.c:124 ++msgid "empty dynamic string token substitution" ++msgstr "substituição de token de string dinâmica vazia" + +-#: posix/getopt.c:758 ++#: elf/dl-deps.c:130 + #, c-format +-msgid "%s: unrecognized option `%c%s'\n" +-msgstr "%s: opo no reconhecida `%c%s'\n" ++msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n" ++msgstr "não foi possível carregar “%s” auxiliar por causa de substituição de token de string dinâmica vazia\n" + +-#: posix/getopt.c:754 +-#, c-format +-msgid "%s: unrecognized option `--%s'\n" +-msgstr "%s: opo no reconhecida `--%s'\n" ++#: elf/dl-deps.c:442 ++msgid "cannot allocate dependency list" ++msgstr "não foi possível alocar lista de dependências" + +-#: timezone/zic.c:443 +-#, c-format +-msgid "" +-"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n" +-"\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +-msgstr "" +-"%s: uso %s [ -s ] [ -v ] [ -l tempolocal ] [ -p regrasposix ] [ -d diretrio ]\n" +-"\t[ -L segundosajuste ] [ -y tipoano ] [ nome do arquivo ... ]\n" ++#: elf/dl-deps.c:479 elf/dl-deps.c:539 ++msgid "cannot allocate symbol search list" ++msgstr "não foi possível alocar lista de pesquisa de símbolos" + +-#: timezone/zdump.c:174 +-#, c-format +-msgid "%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n" +-msgstr "%s: uso %s [ -v ] [ -c cutoff ] nomezona ...\n" ++#: elf/dl-deps.c:519 ++msgid "Filters not supported with LD_TRACE_PRELINKING" ++msgstr "Filtros sem suporte com LD_TRACE_PRELINKING" + +-#: sunrpc/rpc_main.c:307 +-#, c-format +-msgid "%s: while writing output: " +-msgstr "%s: enquanto escrevendo sada: " ++#: elf/dl-error-skeleton.c:80 ++msgid "error while loading shared libraries" ++msgstr "erro ao carregar bibliotecas compartilhadas" + +-#: argp/argp-parse.c:164 +-msgid "(PROGRAM ERROR) No version known!?" +-msgstr "(ERRO DE PROGRAMA) Verso desconhecida!?" ++#: elf/dl-error-skeleton.c:113 ++msgid "DYNAMIC LINKER BUG!!!" ++msgstr "ERRO NO VINCULADOR DINÂMICO!!!" + +-#: argp/argp-parse.c:781 +-msgid "(PROGRAM ERROR) Option should have been recognized!?" +-msgstr "(ERRO DE PROGRAMA) Opo deveria ter sido reconhecida!?" ++#: elf/dl-fptr.c:88 sysdeps/hppa/dl-fptr.c:95 ++msgid "cannot map pages for fdesc table" ++msgstr "não foi possível mapear as páginas para tabela de fdesc" + +-#: nis/nis_print.c:129 +-msgid "(Unknown object)\n" +-msgstr "(Objeto desconhecido)\n" ++#: elf/dl-fptr.c:192 sysdeps/hppa/dl-fptr.c:213 ++msgid "cannot map pages for fptr table" ++msgstr "não foi possível mapear as páginas para tabela de fptr" + +-#: sunrpc/clnt_perr.c:124 +-#, c-format +-msgid "(unknown authentication error - %d)" +-msgstr "(erro de autenticao desconhecido - %d)" ++#: elf/dl-fptr.c:221 sysdeps/hppa/dl-fptr.c:242 ++msgid "internal error: symidx out of range of fptr table" ++msgstr "erro interno: symidx fora de alcance da tabela fptr" + +-#: sunrpc/rpcinfo.c:613 +-msgid "(unknown)" +-msgstr "(desconhecido)" ++#: elf/dl-hwcaps.c:202 elf/dl-hwcaps.c:214 ++msgid "cannot create capability list" ++msgstr "não foi possível criar lista de capacidades" + +-#: elf/sprof.c:574 +-#, c-format +-msgid "*** The file `%s' is stripped: no detailed analysis possible\n" +-msgstr "*** O arquivo `%s' est sem smbolos (stripped): a anlise detalhada impossvel\n" ++#: elf/dl-load.c:369 ++msgid "cannot allocate name record" ++msgstr "não foi possível alocar registro de nome" + +-#: catgets/gencat.c:266 +-msgid "*standard input*" +-msgstr "*entrada padro*" ++#: elf/dl-load.c:455 elf/dl-load.c:568 elf/dl-load.c:657 elf/dl-load.c:753 ++msgid "cannot create cache for search path" ++msgstr "não foi possível criar socket para caminho de pesquisa" + +-#: catgets/gencat.c:120 +-msgid "" +-"-o OUTPUT-FILE [INPUT-FILE]...\n" +-"[OUTPUT-FILE [INPUT-FILE]...]" +-msgstr "" +-"-o ARQUIVO-SADA [ARQUIVO-ENTRADA]...\n" +-"[ARQUIVO-SADA [ARQUIVO-ENTRADA...]" ++#: elf/dl-load.c:551 ++msgid "cannot create RUNPATH/RPATH copy" ++msgstr "não foi possível criar cópia de RUNPATH/RPATH" + +-#: stdio-common/../sysdeps/gnu/errlist.c:778 +-msgid ".lib section in a.out corrupted" +-msgstr "seo .lib corrompida em a.out" ++#: elf/dl-load.c:644 ++msgid "cannot create search path array" ++msgstr "não foi possível criar vetor de caminho de pesquisa" + +-#: sunrpc/clnt_perr.c:110 sunrpc/clnt_perr.c:131 +-#, c-format +-msgid "; low version = %lu, high version = %lu" +-msgstr "; verso baixa = %lu, verso alta = %lu" ++#: elf/dl-load.c:825 ++msgid "cannot stat shared object" ++msgstr "não foi possível obter estado do objeto compartilhado" + +-#: sunrpc/clnt_perr.c:117 +-msgid "; why = " +-msgstr "; porque = " ++#: elf/dl-load.c:902 ++msgid "cannot open zero fill device" ++msgstr "não foi possível abrir dispositivo preenchido com zero" + +-#: locale/programs/charset.c:98 +-#, c-format +-msgid "<%s> and <%s> are illegal names for range" +-msgstr "<%s> e <%s> so nomes ilegais para faixa de caracteres" ++#: elf/dl-load.c:949 elf/dl-load.c:2125 ++msgid "cannot create shared object descriptor" ++msgstr "não foi possível criar descritor de objeto compartilhado" + +-#: locale/programs/ld-ctype.c:342 +-#, c-format +-msgid " character must not be in class `%s'" +-msgstr " caracter no deve estar na classe `%s'" ++#: elf/dl-load.c:968 elf/dl-load.c:1499 elf/dl-load.c:1611 ++msgid "cannot read file data" ++msgstr "não foi possível carregar dados do arquivo" + +-#: locale/programs/ld-ctype.c:330 +-#, c-format +-msgid " character not in class `%s'" +-msgstr " caracter no est na classe `%s'" ++#: elf/dl-load.c:1014 ++msgid "ELF load command alignment not page-aligned" ++msgstr "alinhamento de comando de carregamento de ELF não está alinhado por página" + +-#. TRANS The experienced user will know what is wrong. +-#. TRANS @c This error code is a joke. Its perror text is part of the joke. +-#. TRANS @c Don't change it. +-#: stdio-common/../sysdeps/gnu/errlist.c:603 +-msgid "?" +-msgstr "?" ++#: elf/dl-load.c:1021 ++msgid "ELF load command address/offset not properly aligned" ++msgstr "endereço/deslocamento de comando de carregamento de ELF não alinhado adequadamente" + +-#: sysdeps/unix/sysv/linux/siglist.h:27 +-msgid "Aborted" +-msgstr "Abortado" ++#: elf/dl-load.c:1106 ++msgid "object file has no loadable segments" ++msgstr "arquivo de objeto não possui segmentos carregáveis" + +-#: nis/nis_print.c:318 +-msgid "Access Rights : " +-msgstr "Direitos de Acesso : " ++#: elf/dl-load.c:1115 elf/dl-load.c:1591 ++msgid "cannot dynamically load executable" ++msgstr "não foi possível carregar dinamicamente o executável" + +-#: stdio-common/../sysdeps/gnu/errlist.c:774 +-msgid "Accessing a corrupted shared library" +-msgstr "Acessando uma biblioteca compartilhado corrompida" ++#: elf/dl-load.c:1136 ++msgid "object file has no dynamic section" ++msgstr "arquivo de objeto não possui seção dinâmica" + +-#. TRANS The requested socket address is already in use. @xref{Socket Addresses}. +-#: stdio-common/../sysdeps/gnu/errlist.c:366 +-msgid "Address already in use" +-msgstr "Endereo j em uso" ++#: elf/dl-load.c:1159 ++msgid "shared object cannot be dlopen()ed" ++msgstr "objeto compartilhado não pode ser dlopen()ado" + +-#: posix/../sysdeps/posix/gai_strerror.c:30 +-msgid "Address family for hostname not supported" +-msgstr "Famlia de endereos no suportada para nome de mquina" ++#: elf/dl-load.c:1172 ++msgid "cannot allocate memory for program header" ++msgstr "não foi possível alocar memória para cabeçalho do programa" + +-#. TRANS The address family specified for a socket is not supported; it is +-#. TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. +-#: stdio-common/../sysdeps/gnu/errlist.c:361 +-msgid "Address family not supported by protocol" +-msgstr "Famlia de endereos no suportada pelo protocolo" ++#: elf/dl-load.c:1188 elf/dl-open.c:193 ++msgid "invalid caller" ++msgstr "chamador inválido" + +-#: stdio-common/../sysdeps/gnu/errlist.c:742 +-msgid "Advertise error" +-msgstr "Erro de aviso" ++#: elf/dl-load.c:1211 elf/dl-load.h:130 ++msgid "cannot change memory protections" ++msgstr "não é possível alterar proteções de memória" + +-#: stdio-common/../sysdeps/unix/siglist.c:39 +-#: sysdeps/unix/sysv/linux/siglist.h:33 +-msgid "Alarm clock" +-msgstr "Alarme de tempo" ++#: elf/dl-load.c:1231 ++msgid "cannot enable executable stack as shared object requires" ++msgstr "não foi possível habilitar pilhas de executável como requisitado pelo objeto compartilhado" + +-#. TRANS Argument list too long; used when the arguments passed to a new program +-#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a +-#. TRANS File}) occupy too much memory space. This condition never arises in the +-#. TRANS GNU system. +-#: stdio-common/../sysdeps/gnu/errlist.c:69 +-msgid "Argument list too long" +-msgstr "Lista de argumentos muito longa" ++#: elf/dl-load.c:1244 ++msgid "cannot close file descriptor" ++msgstr "não é possível fechar o descritor de arquivo" + +-#: nis/nis_error.c:65 +-msgid "Attempt to remove a non-empty table" +-msgstr "Tentativa de remoo de uma tabela que no est vazia" ++#: elf/dl-load.c:1499 ++msgid "file too short" ++msgstr "arquivo pequeno demais" + +-#: stdio-common/../sysdeps/gnu/errlist.c:782 +-msgid "Attempting to link in too many shared libraries" +-msgstr "Tentando o link em muitas bibliotecas compartilhadas" ++#: elf/dl-load.c:1534 ++msgid "invalid ELF header" ++msgstr "cabeçalho de ELF inválido" + +-#: sunrpc/clnt_perr.c:273 +-msgid "Authentication OK" +-msgstr "Autenticao OK" ++#: elf/dl-load.c:1546 ++msgid "ELF file data encoding not big-endian" ++msgstr "codificação de dados de arquivo ELF não é big-endian" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:561 +-msgid "Authentication error" +-msgstr "Erro de autenticao" ++#: elf/dl-load.c:1548 ++msgid "ELF file data encoding not little-endian" ++msgstr "codificação de dados de arquivo ELF não é little-endian" + +-#: nis/nis_print.c:105 +-msgid "BOGUS OBJECT\n" +-msgstr "OBJETO FALSO\n" ++#: elf/dl-load.c:1552 ++msgid "ELF file version ident does not match current one" ++msgstr "identificação de versão de arquivo ELF não corresponde ao atual" + +-#. TRANS Bad address; an invalid pointer was detected. +-#. TRANS In the GNU system, this error never happens; you get a signal instead. +-#: stdio-common/../sysdeps/gnu/errlist.c:114 +-msgid "Bad address" +-msgstr "Endereo invlido" ++#: elf/dl-load.c:1556 ++msgid "ELF file OS ABI invalid" ++msgstr "ABI de SO do arquivo ELF inválido" + +-#. TRANS Bad file descriptor; for example, I/O on a descriptor that has been +-#. TRANS closed or reading from a descriptor open only for writing (or vice +-#. TRANS versa). +-#: stdio-common/../sysdeps/gnu/errlist.c:82 +-msgid "Bad file descriptor" +-msgstr "Descritor de arquivo invlido" ++#: elf/dl-load.c:1559 ++msgid "ELF file ABI version invalid" ++msgstr "versão de ABI do arquivo ELF inválido" + +-#: stdio-common/../sysdeps/gnu/errlist.c:730 +-msgid "Bad font file format" +-msgstr "Formato do arquivo fonte invlido " ++#: elf/dl-load.c:1562 ++msgid "nonzero padding in e_ident" ++msgstr "espaçamento não-zero em e_ident" + +-#: stdio-common/../sysdeps/gnu/errlist.c:622 +-msgid "Bad message" +-msgstr "Mensagem invlida" ++#: elf/dl-load.c:1565 ++msgid "internal error" ++msgstr "erro interno" + +-#: stdio-common/../sysdeps/unix/siglist.c:37 +-#: sysdeps/unix/sysv/linux/siglist.h:56 +-msgid "Bad system call" +-msgstr "Chamada de sistema invlida" ++#: elf/dl-load.c:1572 ++msgid "ELF file version does not match current one" ++msgstr "versão de arquivo ELF não corresponde à atual" + +-#: posix/../sysdeps/posix/gai_strerror.c:32 +-msgid "Bad value for ai_flags" +-msgstr "Valor invlido para ai_flags" +- +-#: locale/programs/localedef.c:104 +-msgid "Be strictly POSIX conform" +-msgstr "Se extremamente compatvel com o POSIX" ++#: elf/dl-load.c:1580 ++msgid "only ET_DYN and ET_EXEC can be loaded" ++msgstr "apenas ET_DYN e ET_EXEC podem ser carregados" + +-#: nis/nis_print.c:301 +-msgid "Binary data\n" +-msgstr "Dados binrios\n" ++#: elf/dl-load.c:1596 ++msgid "ELF file's phentsize not the expected size" ++msgstr "phentsize do arquivo ELF não está no tamanho esperado" + +-#. TRANS A file that isn't a block special file was given in a situation that +-#. TRANS requires one. For example, trying to mount an ordinary file as a file +-#. TRANS system in Unix gives this error. +-#: stdio-common/../sysdeps/gnu/errlist.c:121 +-msgid "Block device required" +-msgstr "Dispositivo de bloco requerido" ++#: elf/dl-load.c:2144 ++msgid "wrong ELF class: ELFCLASS64" ++msgstr "classe ELF errada: ELFCLASS64" + +-#: sunrpc/pmap_rmt.c:347 +-msgid "Broadcast poll problem" +-msgstr "Problema em select para broadcast" ++#: elf/dl-load.c:2145 ++msgid "wrong ELF class: ELFCLASS32" ++msgstr "classe ELF errada: ELFCLASS32" + +-#. TRANS Broken pipe; there is no process reading from the other end of a pipe. +-#. TRANS Every library function that returns this error code also generates a +-#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled +-#. TRANS or blocked. Thus, your program will never actually see @code{EPIPE} +-#. TRANS unless it has handled or blocked @code{SIGPIPE}. +-#: stdio-common/../sysdeps/gnu/errlist.c:234 +-#: stdio-common/../sysdeps/unix/siglist.c:38 +-#: sysdeps/unix/sysv/linux/siglist.h:32 +-msgid "Broken pipe" +-msgstr "Pipe quebrado" ++#: elf/dl-load.c:2148 ++msgid "cannot open shared object file" ++msgstr "não é possível abrir arquivo compartilhado" + +-#: stdio-common/../sysdeps/unix/siglist.c:35 +-#: sysdeps/unix/sysv/linux/siglist.h:30 +-msgid "Bus error" +-msgstr "Erro no barramento" ++#: elf/dl-load.h:128 ++msgid "failed to map segment from shared object" ++msgstr "falha no mapeamento de segmento do objeto compartilhado" + +-#: nis/nis_print.c:45 +-msgid "CDS" +-msgstr "CDS" ++#: elf/dl-load.h:132 ++msgid "cannot map zero-fill pages" ++msgstr "não é possível mapear páginas preenchidas com zero" + +-#: stdio-common/../sysdeps/unix/siglist.c:49 +-#: sysdeps/unix/sysv/linux/siglist.h:43 +-msgid "CPU time limit exceeded" +-msgstr "Tempo de CPU excedido" ++#: elf/dl-lookup.c:834 ++msgid "relocation error" ++msgstr "erro de realocação" + +-#: nis/nis_error.c:32 +-msgid "Cache expired" +-msgstr "Tempo expirado" ++#: elf/dl-lookup.c:857 ++msgid "symbol lookup error" ++msgstr "erro de procura por símbolo" + +-#: stdio-common/../sysdeps/gnu/errlist.c:770 +-msgid "Can not access a needed shared library" +-msgstr "No foi possvel acessar uma biblioteca compartilhada" ++#: elf/dl-open.c:101 ++msgid "cannot extend global scope" ++msgstr "não foi possível estender escopo global" + +-#: nis/ypclnt.c:769 +-msgid "Can't bind to server which serves this domain" +-msgstr "No posso executar bind com o servidor deste domnio" ++#: elf/dl-open.c:475 ++msgid "TLS generation counter wrapped! Please report this." ++msgstr "Contador de geração TLS envolto! Por favor, relate isso." + +-#: nis/ypclnt.c:781 +-msgid "Can't communicate with portmapper" +-msgstr "No foi possvel comunicar-se com o portmapper" ++#: elf/dl-open.c:539 ++msgid "invalid mode for dlopen()" ++msgstr "modo inválido para dlopen()" + +-#: nis/ypclnt.c:783 +-msgid "Can't communicate with ypbind" +-msgstr "No foi possvel comunicar-se com o ypbind" ++#: elf/dl-open.c:556 ++msgid "no more namespaces available for dlmopen()" ++msgstr "não há mais espaços de nomes disponíveis para dlmopen()" + +-#: nis/ypclnt.c:785 +-msgid "Can't communicate with ypserv" +-msgstr "No foi possvel comunicar-se com o ypserv" ++#: elf/dl-open.c:580 ++msgid "invalid target namespace in dlmopen()" ++msgstr "espaço de nomes de alvo inválido em dlmopen()" + +-#. TRANS No memory available. The system cannot allocate more virtual memory +-#. TRANS because its capacity is full. +-#: stdio-common/../sysdeps/gnu/errlist.c:103 +-msgid "Cannot allocate memory" +-msgstr "No foi possvel alocar memria" ++#: elf/dl-reloc.c:120 ++msgid "cannot allocate memory in static TLS block" ++msgstr "não foi possível alocar memória em bloco TLS estático" + +-#. TRANS The requested socket address is not available; for example, you tried +-#. TRANS to give a socket a name that doesn't match the local host name. +-#. TRANS @xref{Socket Addresses}. +-#: stdio-common/../sysdeps/gnu/errlist.c:373 +-msgid "Cannot assign requested address" +-msgstr "No foi possvel acessar o endereo requisitado" ++#: elf/dl-reloc.c:205 ++msgid "cannot make segment writable for relocation" ++msgstr "não foi possível fazer segmento gravável para realocação" + +-#: sunrpc/pmap_rmt.c:264 +-msgid "Cannot create socket for broadcast rpc" +-msgstr "No possvel criar socket para rpc de broadcast" ++#: elf/dl-reloc.c:276 ++#, c-format ++msgid "%s: out of memory to store relocation results for %s\n" ++msgstr "%s: memória insuficiente para armazenar resultados de realocação para %s\n" + +-#: stdio-common/../sysdeps/gnu/errlist.c:786 +-msgid "Cannot exec a shared library directly" +-msgstr "No foi possvel executar uma biblioteca compartilhado diretamente" ++#: elf/dl-reloc.c:292 ++msgid "cannot restore segment prot after reloc" ++msgstr "não foi possível restaurar proteção de segmento após realocação" + +-#: sunrpc/rpc_main.c:1406 +-msgid "Cannot have more than one file generation flag!\n" +-msgstr "No possvel ter mais de um indicador de gerao de arquivo!\n" ++#: elf/dl-reloc.c:323 ++msgid "cannot apply additional memory protection after relocation" ++msgstr "não foi possível aplicar proteção de memória adicional após realocação" + +-#: sunrpc/pmap_rmt.c:360 +-msgid "Cannot receive reply to broadcast" +-msgstr "No foi possvel receber resposta para broadcast" ++#: elf/dl-sym.c:136 ++msgid "RTLD_NEXT used in code not dynamically loaded" ++msgstr "RTLD_NEXT usado em código não dinamicamente carregado" + +-#: sunrpc/pmap_clnt.c:74 +-msgid "Cannot register service" +-msgstr "No foi possvel registrar servio" ++#: elf/dl-tls.c:931 ++msgid "cannot create TLS data structures" ++msgstr "não é possível criar estruturas de dados TLS" + +-#. TRANS The socket has already been shut down. +-#: stdio-common/../sysdeps/gnu/errlist.c:434 +-msgid "Cannot send after transport endpoint shutdown" +-msgstr "No possvel enviar aps desligamento do ponto final de transporte" ++#: elf/dl-version.c:148 ++msgid "version lookup error" ++msgstr "erro na procura por versão" + +-#: sunrpc/pmap_rmt.c:322 +-msgid "Cannot send broadcast packet" +-msgstr "No foi possvel enviar pacote de broadcast" ++#: elf/dl-version.c:279 ++msgid "cannot allocate version reference table" ++msgstr "não foi possível alocar tabela de referência de versão" + +-#: sunrpc/pmap_rmt.c:271 +-msgid "Cannot set socket option SO_BROADCAST" +-msgstr "No foi possvel usar opo do socket SO_BROADCAST" ++#: elf/ldconfig.c:142 ++msgid "Print cache" ++msgstr "Mostra o cache" + +-#: sunrpc/rpc_main.c:1193 +-msgid "Cannot specify more than one input file!\n" +-msgstr "Nao possvel especificar mais de um arquivo de entrada!\n" ++#: elf/ldconfig.c:143 ++msgid "Generate verbose messages" ++msgstr "Gera mensagens detalhadas" + +-#: sunrpc/rpc_main.c:1363 +-msgid "Cannot use netid flag with inetd flag!\n" +-msgstr "No possvel user tabela de indicadores com novo estilo!\n" ++#: elf/ldconfig.c:144 ++msgid "Don't build cache" ++msgstr "Não compila o cache" + +-#: sunrpc/rpc_main.c:1375 +-msgid "Cannot use netid flag without TIRPC!\n" +-msgstr "No possvel usar indicador netid sem TIRPC!\n" ++#: elf/ldconfig.c:145 ++msgid "Don't update symbolic links" ++msgstr "Não atualiza links simbólicos" + +-#: sunrpc/rpc_main.c:1382 +-msgid "Cannot use table flags with newstyle!\n" +-msgstr "No possvel usar indicadores de tabelas com novo estilo!\n" ++#: elf/ldconfig.c:146 ++msgid "Change to and use ROOT as root directory" ++msgstr "Muda para e usa ROOT como diretório raiz" + +-#: stdio-common/../sysdeps/gnu/errlist.c:670 +-msgid "Channel number out of range" +-msgstr "Nmero do canal fora do intervalo" ++#: elf/ldconfig.c:146 ++msgid "ROOT" ++msgstr "ROOT" + +-#: nis/nis_print.c:264 +-#, c-format +-msgid "Character Separator : %c\n" +-msgstr "Separador de caracteres \"%c\n" ++#: elf/ldconfig.c:147 ++msgid "CACHE" ++msgstr "CACHE" + +-#: stdio-common/../sysdeps/unix/siglist.c:45 +-#: sysdeps/unix/sysv/linux/siglist.h:39 +-msgid "Child exited" +-msgstr "Filho finalizado" ++#: elf/ldconfig.c:147 ++msgid "Use CACHE as cache file" ++msgstr "Usa CACHE como arquivo de cache" + +-#: sunrpc/clnt_perr.c:283 +-msgid "Client credential too weak" +-msgstr "Credencial do cliente muito fraca" ++#: elf/ldconfig.c:148 ++msgid "CONF" ++msgstr "CONF" + +-#: nis/nis_print.c:266 +-msgid "Columns :\n" +-msgstr "Colunas :\n" ++#: elf/ldconfig.c:148 ++msgid "Use CONF as configuration file" ++msgstr "Usa CONF como arquivo de configuração" + +-#: stdio-common/../sysdeps/gnu/errlist.c:750 +-msgid "Communication error on send" +-msgstr "Erro de communicao ao enviar" ++#: elf/ldconfig.c:149 ++msgid "Only process directories specified on the command line. Don't build cache." ++msgstr "Processa apenas diretórios especificados na linha de comando. Não compila o cache." + +-#: locale/programs/localedef.c:112 +-msgid "Compile locale specification" +-msgstr "Compila especificao localizada" ++#: elf/ldconfig.c:150 ++msgid "Manually link individual libraries." ++msgstr "Vincula manualmente bibliotecas individuais." + +-#. TRANS Go home and have a glass of warm, dairy-fresh milk. +-#: stdio-common/../sysdeps/gnu/errlist.c:613 +-msgid "Computer bought the farm" +-msgstr "O computador comprou a fazenda" ++#: elf/ldconfig.c:151 ++msgid "FORMAT" ++msgstr "FORMATO" + +-#: locale/programs/ld-ctype.c:1253 +-msgid "Computing table size for character classes might take a while..." +-msgstr "O clculo do tamanho da tabela de classes de caracteres pode demorar..." ++#: elf/ldconfig.c:151 ++msgid "Format to use: new, old or compat (default)" ++msgstr "Formato para usar: new, old ou compat (padrão)" + +-#: locale/programs/ld-collate.c:336 +-msgid "Computing table size for collation information might take a while..." +-msgstr "O clculo do tamanho da tabela de informaes de comparao (collation) pode demorar..." ++#: elf/ldconfig.c:152 ++msgid "Ignore auxiliary cache file" ++msgstr "Ignora arquivo de cache auxiliar" + +-#. TRANS A remote host refused to allow the network connection (typically because +-#. TRANS it is not running the requested service). +-#: stdio-common/../sysdeps/gnu/errlist.c:451 +-msgid "Connection refused" +-msgstr "Conexo recusada" ++#: elf/ldconfig.c:160 ++msgid "Configure Dynamic Linker Run Time Bindings." ++msgstr "Configura associações de tempo real do vinculador dinâmico." + +-#. TRANS A network connection was closed for reasons outside the control of the +-#. TRANS local host, such as by the remote machine rebooting or an unrecoverable +-#. TRANS protocol violation. +-#: stdio-common/../sysdeps/gnu/errlist.c:401 +-msgid "Connection reset by peer" +-msgstr "Conexo fechada pela outra ponta" ++#: elf/ldconfig.c:347 ++#, c-format ++msgid "Path `%s' given more than once" ++msgstr "Caminho “%s” fornecido mais de uma vez" + +-#. TRANS A socket operation with a specified timeout received no response during +-#. TRANS the timeout period. +-#: stdio-common/../sysdeps/gnu/errlist.c:445 +-msgid "Connection timed out" +-msgstr "Tempo esgotado para conexo" ++#: elf/ldconfig.c:387 ++#, c-format ++msgid "%s is not a known library type" ++msgstr "%s não é um tipo de memória conhecida" + +-#: stdio-common/../sysdeps/unix/siglist.c:44 +-#: sysdeps/unix/sysv/linux/siglist.h:38 +-msgid "Continued" +-msgstr "Continua" ++#: elf/ldconfig.c:415 ++#, c-format ++msgid "Can't stat %s" ++msgstr "Não foi possível obter estado de %s" + +-#: iconv/iconv_prog.c:66 +-msgid "Convert encoding of given files from one encoding to another." +-msgstr "Converte codificao dos arquivos dados de uma codificao para outra." ++#: elf/ldconfig.c:489 ++#, c-format ++msgid "Can't stat %s\n" ++msgstr "Não foi possível obter estado de %s\n" + +-#: db2/makedb.c:58 +-msgid "Convert key to lower case" +-msgstr "Converte chave para letras minsculas" ++#: elf/ldconfig.c:499 ++#, c-format ++msgid "%s is not a symbolic link\n" ++msgstr "%s não é um link simbólico\n" + +-#: catgets/gencat.c:236 db2/makedb.c:242 elf/sprof.c:359 +-#: iconv/iconv_prog.c:294 locale/programs/locale.c:267 +-#: locale/programs/localedef.c:403 nscd/nscd.c:223 nss/getent.c:65 +-#: posix/getconf.c:624 ++#: elf/ldconfig.c:518 + #, c-format +-msgid "" +-"Copyright (C) %s Free Software Foundation, Inc.\n" +-"This is free software; see the source for copying conditions. There is NO\n" +-"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +-msgstr "" +-"Copyright (C) %s Free Software Foundation, Inc.\n" +-"Este um software free; leia os fontes para condices de cpia. No existe\n" +-"garantia; nem para comrcio ou adequaco para propstios particulares.\n" ++msgid "Can't unlink %s" ++msgstr "Não foi possível desvincular %s" + +-#: nscd/nscd_conf.c:167 ++#: elf/ldconfig.c:524 + #, c-format +-msgid "Could not create log file \"%s\"" +-msgstr "no possvel ler arquivo de registro \"%s\"" ++msgid "Can't link %s to %s" ++msgstr "Não foi possível vincular %s a %s" + +-#: catgets/gencat.c:107 +-msgid "Create C header file NAME containing symbol definitions" +-msgstr "Cria arquivo NOME com cabealho C contendo definies de smbolos " ++# link alterado ++#: elf/ldconfig.c:530 ++msgid " (changed)\n" ++msgstr " (alterado)\n" + +-#: locale/programs/localedef.c:103 +-msgid "Create output even if warning messages were issued" +-msgstr "Cria sada mesmo que mensagens de aviso forem produzidas" ++# link ignorado ++#: elf/ldconfig.c:532 ++msgid " (SKIPPED)\n" ++msgstr " (IGNORADO)\n" + +-#: db2/makedb.c:68 +-msgid "Create simple DB database from textual input." +-msgstr "Cria um base de dados DB simples de uma entrada textual." ++#: elf/ldconfig.c:587 ++#, c-format ++msgid "Can't find %s" ++msgstr "Não foi possível localizar %s" + +-#: nis/nis_print.c:322 ++# `lstat' similar a stat(), mas para links; `stat' = obtém estado de arquivo ++#: elf/ldconfig.c:603 elf/ldconfig.c:769 elf/ldconfig.c:825 elf/ldconfig.c:857 + #, c-format +-msgid "Creation Time : %s" +-msgstr "Horrio de criao : %s" ++msgid "Cannot lstat %s" ++msgstr "Não foi possível obter estado do link %s" + +-#: nis/nss_nisplus/nisplus-publickey.c:89 +-#: nis/nss_nisplus/nisplus-publickey.c:159 ++#: elf/ldconfig.c:610 + #, c-format +-msgid "DES entry for netname %s not unique\n" +-msgstr "Entrada DES para nome de rede (netname) %s no nica\n" ++msgid "Ignored file %s since it is not a regular file." ++msgstr "Arquivo %s ignorado já que agora não é mais um arquivo comum." + +-#: nis/nis_print.c:111 +-msgid "DIRECTORY\n" +-msgstr "DIRETRIO\n" ++#: elf/ldconfig.c:619 ++#, c-format ++msgid "No link created since soname could not be found for %s" ++msgstr "Nenhum link foi criado porque um soname não foi encontrado para %s" + +-#: nis/nis_print.c:41 +-msgid "DNANS" +-msgstr "DNANS" ++#: elf/ldconfig.c:702 ++#, c-format ++msgid "Can't open directory %s" ++msgstr "Não foi possível abrir o diretório %s" + +-#: nis/nis_print.c:37 +-msgid "DNS" +-msgstr "DNS" ++#: elf/ldconfig.c:787 elf/ldconfig.c:845 elf/readlib.c:97 ++#, c-format ++msgid "Input file %s not found.\n" ++msgstr "Arquivo de entrada %s não foi localizado.\n" + +-#: nis/nis_error.c:51 +-msgid "Database for table does not exist" +-msgstr "Base de dados para tabela no existe" ++#: elf/ldconfig.c:794 ++#, c-format ++msgid "Cannot stat %s" ++msgstr "Não foi possível obter estado do arquivo %s" + +-#: nis/ypclnt.c:795 +-msgid "Database is busy" +-msgstr "Base de dados est ocupada" ++#: elf/ldconfig.c:939 ++#, c-format ++msgid "libc5 library %s in wrong directory" ++msgstr "biblioteca libc5 %s em diretório errado" + +-#: nis/nis_print.c:225 +-msgid "Default Access rights :\n" +-msgstr "Direitos de Acesso padro :\n" ++#: elf/ldconfig.c:942 ++#, c-format ++msgid "libc6 library %s in wrong directory" ++msgstr "biblioteca libc6 %s em diretório errado" + +-#. TRANS No default destination address was set for the socket. You get this +-#. TRANS error when you try to transmit data over a connectionless socket, +-#. TRANS without first specifying a destination for the data with @code{connect}. +-#: stdio-common/../sysdeps/gnu/errlist.c:429 +-msgid "Destination address required" +-msgstr "Endereo de destino requerido" ++#: elf/ldconfig.c:945 ++#, c-format ++msgid "libc4 library %s in wrong directory" ++msgstr "biblioteca libc4 %s em diretório errado" + +-#: stdio-common/../sysdeps/gnu/errlist.c:650 +-msgid "Device not a stream" +-msgstr "Dispositivo no um stream" ++#: elf/ldconfig.c:973 ++#, c-format ++msgid "libraries %s and %s in directory %s have same soname but different type." ++msgstr "bibliotecas %s e %s no diretório %s possuem o mesmo soname, mas tipos diferentes." + +-#. TRANS No such device or address. The system tried to use the device +-#. TRANS represented by a file you specified, and it couldn't find the device. +-#. TRANS This can mean that the device file was installed incorrectly, or that +-#. TRANS the physical device is missing or not correctly attached to the +-#. TRANS computer. +-#: stdio-common/../sysdeps/gnu/errlist.c:61 +-msgid "Device not configured" +-msgstr "Dispositivo no configurado" ++#: elf/ldconfig.c:1082 ++#, c-format ++msgid "Warning: ignoring configuration file that cannot be opened: %s" ++msgstr "Aviso: ignorando arquivo de configuração que não pode ser aberto: %s" + +-#. TRANS Resource busy; a system resource that can't be shared is already in use. +-#. TRANS For example, if you try to delete a file that is the root of a currently +-#. TRANS mounted filesystem, you get this error. +-#: stdio-common/../sysdeps/gnu/errlist.c:128 +-msgid "Device or resource busy" +-msgstr "Dispositivo ou recurso est ocupado" ++#: elf/ldconfig.c:1148 ++#, c-format ++msgid "%s:%u: bad syntax in hwcap line" ++msgstr "%s:%u: sintaxe incorreta na linha hwcap" + +-#: nis/nis_print.c:179 ++#: elf/ldconfig.c:1154 + #, c-format +-msgid "Diffie-Hellmann (%d bits)\n" +-msgstr "Diffie-Hellmann (%d bits)\n" ++msgid "%s:%u: hwcap index %lu above maximum %u" ++msgstr "%s:%u: índica de hwcap %lu acima do máximo %u" + +-#: nis/nis_print.c:315 ++#: elf/ldconfig.c:1161 elf/ldconfig.c:1169 + #, c-format +-msgid "Directory : %s\n" +-msgstr "Diretrio : %s\n" ++msgid "%s:%u: hwcap index %lu already defined as %s" ++msgstr "%s:%u: índice de hwcap %lu já definido como %s" + +-#. TRANS Directory not empty, where an empty directory was expected. Typically, +-#. TRANS this error occurs when you are trying to delete a directory. +-#: stdio-common/../sysdeps/gnu/errlist.c:480 +-msgid "Directory not empty" +-msgstr "Diretrio no vazio" ++#: elf/ldconfig.c:1172 ++#, c-format ++msgid "%s:%u: duplicate hwcap %lu %s" ++msgstr "%s:%u: hwcap %lu duplicado %s" + +-#. TRANS The user's disk quota was exceeded. +-#: stdio-common/../sysdeps/gnu/errlist.c:498 +-msgid "Disc quota exceeded" +-msgstr "Cota de disco excedida" ++#: elf/ldconfig.c:1194 ++#, c-format ++msgid "need absolute file name for configuration file when using -r" ++msgstr "necessita de nome de arquivo absoluto para arquivo de configuração quando usado -r" + +-#: nscd/nscd.c:80 +-msgid "Do not fork and display messages on the current tty" +-msgstr "No divide (fork) e mostre mensagens na tty corrente" ++#: elf/ldconfig.c:1201 locale/programs/xmalloc.c:63 malloc/obstack.c:416 ++#: malloc/obstack.c:418 posix/getconf.c:458 posix/getconf.c:697 ++#, c-format ++msgid "memory exhausted" ++msgstr "memória esgotada" + +-#: db2/makedb.c:61 +-msgid "Do not print messages while building database" +-msgstr "No mostra mensagens enquanto constri base de dados" ++#: elf/ldconfig.c:1233 ++#, c-format ++msgid "%s:%u: cannot read directory %s" ++msgstr "%s:%u: não foi possível ler diretório %s" + +-#: catgets/gencat.c:109 +-msgid "Do not use existing catalog, force new output file" +-msgstr "No usar catlogo existente, forar novo arquivo de sada" ++#: elf/ldconfig.c:1281 ++#, c-format ++msgid "relative path `%s' used to build cache" ++msgstr "caminho relativo “%s” usado para compilar o cache" + +-#: nis/ypclnt.c:841 +-msgid "Domain not bound" +-msgstr "Domnio no limitado (not bound)" ++#: elf/ldconfig.c:1311 ++#, c-format ++msgid "Can't chdir to /" ++msgstr "Não foi possível mudar o diretório para /" + +-#: stdio-common/../sysdeps/unix/siglist.c:32 +-#: sysdeps/unix/sysv/linux/siglist.h:53 +-msgid "EMT trap" +-msgstr "trap EMT" ++#: elf/ldconfig.c:1352 ++#, c-format ++msgid "Can't open cache file directory %s\n" ++msgstr "Não foi possível abrir o diretório de arquivo cache %s\n" + +-#: nis/nis_print.c:120 +-msgid "ENTRY\n" +-msgstr "ENTRADA\n" ++#: elf/ldd.bash.in:42 ++msgid "Written by %s and %s.\n" ++msgstr "Escrito por %s e %s.\n" + +-#: nis/nis_print.c:299 +-msgid "Encrypted data\n" +-msgstr "Dado criptografado\n" ++#: elf/ldd.bash.in:47 ++msgid "" ++"Usage: ldd [OPTION]... FILE...\n" ++" --help print this help and exit\n" ++" --version print version information and exit\n" ++" -d, --data-relocs process data relocations\n" ++" -r, --function-relocs process data and function relocations\n" ++" -u, --unused print unused direct dependencies\n" ++" -v, --verbose print all information\n" ++msgstr "" ++"Uso: ldd [OPÇÃO]... ARQUIVO...\n" ++" --help exibe essa ajuda e sai\n" ++" --version exibe informação da versão e sai\n" ++" -d, --data-relocs processa realocações de dados\n" ++" -r, --function-relocs processa realocações de dados e funções\n" ++" -u, --unused exibe dependências diretas não usadas\n" ++" -v, --verbose exibe todas informações\n" ++ ++#: elf/ldd.bash.in:80 ++msgid "ldd: option \\`$1' is ambiguous" ++msgstr "ldd: opção “$1” é ambígua" ++ ++#: elf/ldd.bash.in:87 ++msgid "unrecognized option" ++msgstr "opção não reconhecida" ++ ++#: elf/ldd.bash.in:88 elf/ldd.bash.in:125 ++msgid "Try \\`ldd --help' for more information." ++msgstr "Tente “ldd --help” para mais informações." ++ ++#: elf/ldd.bash.in:124 ++msgid "missing file arguments" ++msgstr "faltando argumento ARQUIVO" ++ ++#. TRANS This is a ``file doesn't exist'' error ++#. TRANS for ordinary files that are referenced in contexts where they are ++#. TRANS expected to already exist. ++#: elf/ldd.bash.in:147 sysdeps/gnu/errlist.c:37 ++msgid "No such file or directory" ++msgstr "Arquivo ou diretório inexistente" + +-#: nis/nis_error.c:52 +-msgid "Entry/Table type mismatch" +-msgstr "Tipo de entrada/tabela incompatveis" ++#: elf/ldd.bash.in:150 inet/rcmd.c:480 ++msgid "not regular file" ++msgstr "não é arquivo normal" + +-#: nis/nis_error.c:56 +-msgid "Error in RPC subsystem" +-msgstr "Erro no subsistema RPC" ++# após "for" vem um nome de arquivo ++#: elf/ldd.bash.in:153 ++msgid "warning: you do not have execution permission for" ++msgstr "aviso: você não tem permissão para execução para" + +-#: nis/nis_error.c:66 +-msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" +-msgstr "Erro acessando arquivo inicial do NIS+. O NIS+ est instalado?" ++#: elf/ldd.bash.in:170 ++msgid "\tnot a dynamic executable" ++msgstr "\tnão é um executável dinâmico" + +-#: string/../sysdeps/mach/_strerror.c:56 +-#: sysdeps/mach/hurd/mips/dl-machine.c:67 +-msgid "Error in unknown error system: " +-msgstr "Falha no erro desconhecido do sistema: " ++#: elf/ldd.bash.in:178 ++msgid "exited with unknown exit code" ++msgstr "saiu com código de saída desconhecido" + +-#: nis/nis_error.c:59 +-msgid "Error while talking to callback proc" +-msgstr "Erro durante a chamada a processo callback" ++# após "for" vem um nome de arquivo ++#: elf/ldd.bash.in:183 ++msgid "error: you do not have read permission for" ++msgstr "erro: você não possui permissão de leitura para" + +-#: inet/ruserpass.c:161 +-msgid "Error: .netrc file is readable by others." +-msgstr "Erro: arquivo .netrc legvel por outros." ++#: elf/pldd-xx.c:105 ++#, c-format ++msgid "cannot find program header of process" ++msgstr "não foi possível localizar cabeçalho do programa do processo" + +-#: stdio-common/../sysdeps/gnu/errlist.c:710 +-msgid "Exchange full" +-msgstr "Troca completa" ++#: elf/pldd-xx.c:110 ++#, c-format ++msgid "cannot read program header" ++msgstr "não foi possível ler o cabeçalho do programa" + +-#. TRANS Invalid executable file format. This condition is detected by the +-#. TRANS @code{exec} functions; see @ref{Executing a File}. +-#: stdio-common/../sysdeps/gnu/errlist.c:75 +-msgid "Exec format error" +-msgstr "Erro no formato exec" ++#: elf/pldd-xx.c:135 ++#, c-format ++msgid "cannot read dynamic section" ++msgstr "não foi possível ler a seção dinâmica" + +-#: locale/programs/localedef.c:190 +-msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" +-msgstr "FATAL: sistema no define `_POSIX2_LOCALEDEF'" ++#: elf/pldd-xx.c:147 ++#, c-format ++msgid "cannot read r_debug" ++msgstr "não foi possível ler r_debug" + +-#: locale/programs/localedef.c:99 +-msgid "FILE contains mapping from symbolic names to UCS4 values" +-msgstr "ARQUIVO contm mapas de nomes simblicos para valores UCS4" ++#: elf/pldd-xx.c:167 ++#, c-format ++msgid "cannot read program interpreter" ++msgstr "não foi possível ler o interpretador de programa" + +-#: sunrpc/clnt_perr.c:287 +-msgid "Failed (unspecified error)" +-msgstr "Falha (erro no especificado)" ++#: elf/pldd-xx.c:197 ++#, c-format ++msgid "cannot read link map" ++msgstr "não foi possível ler o mapa de links" + +-#: stdio-common/../sysdeps/gnu/errlist.c:762 +-msgid "File descriptor in bad state" +-msgstr "Descritor de arquivo em mal estado" ++#: elf/pldd-xx.c:209 ++#, c-format ++msgid "cannot read object name" ++msgstr "não foi possível ler o nome do objeto" + +-#. TRANS File exists; an existing file was specified in a context where it only +-#. TRANS makes sense to specify a new file. +-#: stdio-common/../sysdeps/gnu/errlist.c:134 +-msgid "File exists" +-msgstr "Arquivo existe" ++#: elf/pldd-xx.c:219 ++#, c-format ++msgid "cannot allocate buffer for object name" ++msgstr "não foi possível alocar buffer para o nome de objeto" + +-#: stdio-common/../sysdeps/gnu/errlist.c:726 +-msgid "File locking deadlock error" +-msgstr "Erro de bloqueio em arquivo (deadlock)" ++#: elf/pldd.c:64 ++msgid "List dynamic shared objects loaded into process." ++msgstr "Lista objetos compartilhados dinâmicos carregados no processo." + +-#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for +-#. TRANS Files}) or host name too long (in @code{gethostname} or +-#. TRANS @code{sethostname}; @pxref{Host Identification}). +-#: stdio-common/../sysdeps/gnu/errlist.c:464 +-msgid "File name too long" +-msgstr "Nome de arquivo muito longo" ++#: elf/pldd.c:68 ++msgid "PID" ++msgstr "PID" + +-#: stdio-common/../sysdeps/unix/siglist.c:50 +-#: sysdeps/unix/sysv/linux/siglist.h:44 +-msgid "File size limit exceeded" +-msgstr "Excedido tamanho limite de arquivo" ++#: elf/pldd.c:100 ++#, c-format ++msgid "Exactly one parameter with process ID required.\n" ++msgstr "É necessário exatamente um parâmetro com ID de processo.\n" + +-#. TRANS File too big; the size of a file would be larger than allowed by the system. +-#: stdio-common/../sysdeps/gnu/errlist.c:202 +-msgid "File too large" +-msgstr "Arquivo muito grande" ++#: elf/pldd.c:112 ++#, c-format ++msgid "invalid process ID '%s'" ++msgstr "ID de processo inválido “%s”" + +-#: nis/nis_error.c:37 +-msgid "First/Next chain broken" +-msgstr "Primeira/prxima corrente quebrada" ++#: elf/pldd.c:120 ++#, c-format ++msgid "cannot open %s" ++msgstr "não foi possível abrir %s" + +-#: stdio-common/../sysdeps/unix/siglist.c:33 +-#: sysdeps/unix/sysv/linux/siglist.h:28 +-msgid "Floating point exception" +-msgstr "Exceo de ponto flutuante" ++#: elf/pldd.c:152 ++#, c-format ++msgid "cannot open %s/task" ++msgstr "não foi possível abrir %s/tarefa" + +-#: nis/nis_error.c:67 +-msgid "Full resync required for directory" +-msgstr "Resincronismo total necessrio para o diretrio" ++#: elf/pldd.c:155 ++#, c-format ++msgid "cannot prepare reading %s/task" ++msgstr "não foi possível preparar a leitura de %s/tarefa" + +-#. TRANS Function not implemented. Some functions have commands or options defined +-#. TRANS that might not be supported in all implementations, and this is the kind +-#. TRANS of error you get if you request them and they are not supported. +-#: stdio-common/../sysdeps/gnu/errlist.c:573 +-msgid "Function not implemented" +-msgstr "Funo no implementada" ++#: elf/pldd.c:168 ++#, c-format ++msgid "invalid thread ID '%s'" ++msgstr "ID de thread “%s” inválido" + +-#: nis/nis_print.c:114 +-msgid "GROUP\n" +-msgstr "GRUPO\n" ++#: elf/pldd.c:179 ++#, c-format ++msgid "cannot attach to process %lu" ++msgstr "não foi possível anexar ao processado %lu" + +-#: argp/argp-help.c:231 ++#: elf/pldd.c:294 + #, c-format +-msgid "Garbage in ARGP_HELP_FMT: %s" +-msgstr "Lixo em ARGP_HELP_FMT: %s" ++msgid "cannot get information about process %lu" ++msgstr "não foi possível obter informação sobre o processo %lu" + +-#: catgets/gencat.c:115 +-msgid "" +-"Generate message catalog.\\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +-"is -, output is written to standard output.\n" +-msgstr "" +-"Gera catlogo de mensagens.\\vSe ARQUIVO-DE-ENTRADA -, a entrada lidada entrada padro. Se ARQUIVO-DE-SADA\n" +-" -, a sada escrita para a sada padro.\n" ++#: elf/pldd.c:307 ++#, c-format ++msgid "process %lu is no ELF program" ++msgstr "processo %lu não é um programa ELF" + +-#: nis/nis_error.c:36 +-msgid "Generic system error" +-msgstr "Erro desconhecido de sistema" ++#: elf/readelflib.c:34 ++#, c-format ++msgid "file %s is truncated\n" ++msgstr "arquivo %s está truncado\n" + +-#: locale/programs/locale.c:75 +-msgid "Get locale-specific information." +-msgstr "Pegar informaes especficas de localizao." ++#: elf/readelflib.c:66 ++#, c-format ++msgid "%s is a 32 bit ELF file.\n" ++msgstr "%s é um arquivo ELF de 32 bits.\n" + +-#: argp/argp-parse.c:88 +-msgid "Give a short usage message" +-msgstr "Retorna uma mensagem de uso curta" ++#: elf/readelflib.c:68 ++#, c-format ++msgid "%s is a 64 bit ELF file.\n" ++msgstr "%s é um arquivo ELF de 64 bits.\n" + +-#: argp/argp-parse.c:87 +-msgid "Give this help list" +-msgstr "Retorna este arquivo de ajuda" ++#: elf/readelflib.c:70 ++#, c-format ++msgid "Unknown ELFCLASS in file %s.\n" ++msgstr "ELFCLASS desconhecida em arquivo %s.\n" + +-#. TRANS This error code has no purpose. +-#: stdio-common/../sysdeps/gnu/errlist.c:618 +-msgid "Gratuitous error" +-msgstr "Erro gratuito" ++#: elf/readelflib.c:77 ++#, c-format ++msgid "%s is not a shared object file (Type: %d).\n" ++msgstr "%s não é um arquivo de objeto compartilhado (Tipo: %d).\n" + +-#: nis/nis_print.c:317 ++#: elf/readelflib.c:108 + #, c-format +-msgid "Group : %s\n" +-msgstr "Grupo : %s\n" ++msgid "more than one dynamic segment\n" ++msgstr "mais do que um segmento dinâmico\n" + +-#: nis/nis_print.c:248 +-msgid "Group Flags :" +-msgstr "Indicadores de Grupo :" ++#: elf/readlib.c:103 ++#, c-format ++msgid "Cannot fstat file %s.\n" ++msgstr "Não é possível obter estado do arquivo %s.\n" + +-#: nis/nis_print_group_entry.c:113 ++#: elf/readlib.c:114 + #, c-format +-msgid "Group entry for \"%s.%s\" group:\n" +-msgstr "Entrada de Grupo para grupo \"%s.%s\":\n" ++msgid "File %s is empty, not checked." ++msgstr "Arquivo %s está vazio, não verificado." + +-#: argp/argp-parse.c:91 +-msgid "Hang for SECS seconds (default 3600)" +-msgstr "Pendurar por SEG segundos (o padro 3600)" ++#: elf/readlib.c:120 ++#, c-format ++msgid "File %s is too small, not checked." ++msgstr "Arquivo %s é pequeno demais, não verificado." + +-#: stdio-common/../sysdeps/unix/siglist.c:26 +-#: sysdeps/unix/sysv/linux/siglist.h:22 +-msgid "Hangup" +-msgstr "Desconexo" ++#: elf/readlib.c:130 ++#, c-format ++msgid "Cannot mmap file %s.\n" ++msgstr "Não foi possível executar mmap no arquivo %s.\n" + +-#: nscd/grpcache.c:238 ++#: elf/readlib.c:169 + #, c-format +-msgid "Haven't found \"%d\" in group cache!" +-msgstr "No encontrado \"%d\" no cache de grupo!" ++msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" ++msgstr "%s não é um arquivo ELF – ele tem os magic bytes errados no início.\n" + +-#: nscd/pwdcache.c:235 ++#: elf/sln.c:76 + #, c-format +-msgid "Haven't found \"%d\" in password cache!" +-msgstr "No encontrado \"%d\" no cache de senhas!" ++msgid "" ++"Usage: sln src dest|file\n" ++"\n" ++msgstr "" ++"Uso: sln fonte destino|arquivo\n" ++"\n" + +-#: nscd/grpcache.c:210 ++#: elf/sln.c:97 + #, c-format +-msgid "Haven't found \"%s\" in group cache!" +-msgstr "No encontrado \"%s\" no cache de grupo!" ++msgid "%s: file open error: %m\n" ++msgstr "%s: erro na abertura do arquivo: %m\n" + +-#: nscd/hstcache.c:297 nscd/hstcache.c:328 nscd/hstcache.c:359 +-#: nscd/hstcache.c:390 ++#: elf/sln.c:134 + #, c-format +-msgid "Haven't found \"%s\" in hosts cache!" +-msgstr "No encontrado \"%s\" no cache de mquinas!" ++msgid "No target in line %d\n" ++msgstr "Nenhum alvo na linha %d\n" + +-#: nscd/pwdcache.c:207 ++#: elf/sln.c:164 + #, c-format +-msgid "Haven't found \"%s\" in password cache!" +-msgstr "No encontrado \"%s\" no cache de senhas! " ++msgid "%s: destination must not be a directory\n" ++msgstr "%s: destino não pode ser um diretório\n" + +-#. TRANS The remote host for a requested network connection is down. +-#: stdio-common/../sysdeps/gnu/errlist.c:469 +-msgid "Host is down" +-msgstr "Host est desligado" ++#: elf/sln.c:170 ++#, c-format ++msgid "%s: failed to remove the old destination\n" ++msgstr "%s: falha ao remover o destino antigo\n" + +-#: resolv/herror.c:75 +-msgid "Host name lookup failure" +-msgstr "Falha na procura do nome de host" ++#: elf/sln.c:178 ++#, c-format ++msgid "%s: invalid destination: %s\n" ++msgstr "%s: destino inválido: %s\n" + +-#: stdio-common/../sysdeps/unix/siglist.c:48 +-#: sysdeps/unix/sysv/linux/siglist.h:42 +-msgid "I/O possible" +-msgstr "possvel E/S" ++#: elf/sln.c:189 elf/sln.c:198 ++#, c-format ++msgid "Invalid link from \"%s\" to \"%s\": %s\n" ++msgstr "Link inválido de “%s” para “%s”: %s\n" + +-#: db2/makedb.c:71 ++#: elf/sotruss.sh:32 ++#, sh-format + msgid "" +-"INPUT-FILE OUTPUT-FILE\n" +-"-o OUTPUT-FILE INPUT-FILE\n" +-"-u INPUT-FILE" ++"Usage: sotruss [OPTION...] [--] EXECUTABLE [EXECUTABLE-OPTION...]\n" ++" -F, --from FROMLIST Trace calls from objects on FROMLIST\n" ++" -T, --to TOLIST Trace calls to objects on TOLIST\n" ++"\n" ++" -e, --exit Also show exits from the function calls\n" ++" -f, --follow Trace child processes\n" ++" -o, --output FILENAME Write output to FILENAME (or FILENAME.$PID in case\n" ++"\t\t\t -f is also used) instead of standard error\n" ++"\n" ++" -?, --help Give this help list\n" ++" --usage Give a short usage message\n" ++" --version Print program version" + msgstr "" +-"ARQUIVO-ENTRADA ARQUIVO-SADA\n" +-"-o ARQUIVO-SADA ARQUIVO-ENTRADA\n" +-"-u ARQUIVO-ENTRADA" ++"Uso: sotruss [OPÇÃO...] [--] EXECUTÁVEL [OPÇÃO-EXECUTÁVEL...]\n" ++" -F, --from LISTA-DE Rastreia chamadas a partir de objetos na LISTA-DE\n" ++" -T, --to LISTA-PARA Rastreia chamadas para objetos na LISTA-PARA\n" ++"\n" ++" -e, --exit Também mostra saídas de chamadas de função\n" ++" -f, --follow Rastreia processos filhos\n" ++" -o, --output ARQUIVO Escreve a saída para ARQUIVO (ou ARQUIVO.$PID, caso\n" ++" -f também seja usada) em vez da saída de erro\n" ++"\n" ++" -?, --help Fornece essa lista de ajuda\n" ++" --usage Fornece uma mensagem curta de uso\n" ++" --version Exibe a versão do programa" + +-#: stdio-common/../sysdeps/unix/siglist.c:31 +-msgid "IOT trap" +-msgstr "trap IOT" ++# caractere de nova linha (\n) inserido visando não ultrapassar 80 caracteres. ++#: elf/sotruss.sh:46 ++msgid "Mandatory arguments to long options are also mandatory for any corresponding\\nshort options.\\n" ++msgstr "Argumentos obrigatórios para opções longas são também obrigatórios para\\nqualquer opção curta correspondente.\\n" + +-#: nis/nis_print.c:35 +-msgid "IVY" +-msgstr "IVY" ++#: elf/sotruss.sh:55 ++msgid "%s: option requires an argument -- '%s'\\n" ++msgstr "%s: opção requer um argumento -- “%s”\\n" + +-#: stdio-common/../sysdeps/gnu/errlist.c:626 +-msgid "Identifier removed" +-msgstr "Identificador removido" ++#: elf/sotruss.sh:61 ++msgid "%s: option is ambiguous; possibilities:" ++msgstr "%s: opção é ambígua; possibilidades:" + +-#: stdio-common/../sysdeps/unix/siglist.c:29 +-#: sysdeps/unix/sysv/linux/siglist.h:25 +-msgid "Illegal instruction" +-msgstr "Instruo ilegal" ++#: elf/sotruss.sh:79 ++msgid "Written by %s.\\n" ++msgstr "Escrito por %s.\\n" + +-#: nis/nis_error.c:61 +-msgid "Illegal object type for operation" +-msgstr "Tipo ilegal de objeto para a operao" +- +-#. TRANS Invalid seek operation (such as on a pipe). +-#: stdio-common/../sysdeps/gnu/errlist.c:213 +-msgid "Illegal seek" +-msgstr "Procura ilegal" ++#: elf/sotruss.sh:86 ++msgid "" ++"Usage: %s [-ef] [-F FROMLIST] [-o FILENAME] [-T TOLIST] [--exit]\n" ++"\t [--follow] [--from FROMLIST] [--output FILENAME] [--to TOLIST]\n" ++"\t [--help] [--usage] [--version] [--]\n" ++"\t EXECUTABLE [EXECUTABLE-OPTION...]\\n" ++msgstr "" ++"Uso: %s [-ef] [-F LISTA-DE] [-o ARQUIVO] [-T LISTA-PARA] [--exit]\n" ++"\t [--follow] [--from LISTA-DE] [--output ARQUIVO] [--to LISTA-PARA]\n" ++"\t [--help] [--usage] [--version] [--]\n" ++"\t EXECUTÁVEL [OPÇÃO-EXECUTÁVEL...]\\n" + +-#. TRANS Inappropriate file type or format. The file was the wrong type for the +-#. TRANS operation, or a data file had the wrong format. +-#. TRANS +-#. TRANS On some systems @code{chmod} returns this error if you try to set the +-#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. +-#: stdio-common/../sysdeps/gnu/errlist.c:556 +-msgid "Inappropriate file type or format" +-msgstr "Tipo ou formato de arquivo inapropriado" ++#: elf/sotruss.sh:134 ++msgid "%s: unrecognized option '%c%s'\\n" ++msgstr "%s: opção não reconhecida “%c%s”\\n" + +-#. TRANS Inappropriate I/O control operation, such as trying to set terminal +-#. TRANS modes on an ordinary file. +-#: stdio-common/../sysdeps/gnu/errlist.c:188 +-msgid "Inappropriate ioctl for device" +-msgstr "ioctl inapropriado para dispositivo" ++#: elf/sprof.c:77 ++msgid "Output selection:" ++msgstr "Seleção de saída:" + +-#. TRANS In the GNU system, servers supporting the @code{term} protocol return +-#. TRANS this error for certain operations when the caller is not in the +-#. TRANS foreground process group of the terminal. Users do not usually see this +-#. TRANS error because functions such as @code{read} and @code{write} translate +-#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control}, +-#. TRANS for information on process groups and these signals. +-#: stdio-common/../sysdeps/gnu/errlist.c:589 +-msgid "Inappropriate operation for background process" +-msgstr "Operao inapropriada para processo em background" ++#: elf/sprof.c:79 ++msgid "print list of count paths and their number of use" ++msgstr "mostra lista de número de rotas e seu número de uso" + +-#: sysdeps/unix/sysv/linux/siglist.h:62 +-msgid "Information request" +-msgstr "Requesio de informao" ++#: elf/sprof.c:81 ++msgid "generate flat profile with counts and ticks" ++msgstr "gera perfil com contadores e “ticks”" + +-#: iconv/iconv_prog.c:57 +-msgid "Information:" +-msgstr "Informao:" ++#: elf/sprof.c:82 ++msgid "generate call graph" ++msgstr "gera gráfico de chamadas" + +-#: locale/programs/localedef.c:94 +-msgid "Input Files:" +-msgstr "Arquivos de entrada:" ++#: elf/sprof.c:89 ++msgid "Read and display shared object profiling data." ++msgstr "Lê e mostra dados de perfil do objeto compartilhado." + +-#: iconv/iconv_prog.c:54 +-msgid "Input/Output format specification:" +-msgstr "Especificao de formato de Entrada/Sada:" ++#: elf/sprof.c:94 ++msgid "SHOBJ [PROFDATA]" ++msgstr "SHOBJ [DADOSPERFIL]" + +-#. TRANS Input/output error; usually used for physical read or write errors. +-#: stdio-common/../sysdeps/gnu/errlist.c:52 +-msgid "Input/output error" +-msgstr "Erro de entrada/sada" ++#: elf/sprof.c:433 ++#, c-format ++msgid "failed to load shared object `%s'" ++msgstr "falha no carregamento do objeto compartilhado “%s”" + +-#: nis/ypclnt.c:775 +-msgid "Internal NIS error" +-msgstr "Erro NIS interno" ++#: elf/sprof.c:442 elf/sprof.c:825 elf/sprof.c:923 ++#, c-format ++msgid "cannot create internal descriptor" ++msgstr "não é possível criar descritor interno" + +-#: nis/ypclnt.c:839 +-msgid "Internal ypbind error" +-msgstr "Erro interno de ypbind" ++#: elf/sprof.c:554 ++#, c-format ++msgid "Reopening shared object `%s' failed" ++msgstr "Reabertura de objeto compartilhado “%s” falhou" + +-#: stdio-common/../sysdeps/unix/siglist.c:27 +-#: sysdeps/unix/sysv/linux/siglist.h:23 +-msgid "Interrupt" +-msgstr "Interrupo" ++#: elf/sprof.c:561 elf/sprof.c:656 ++#, c-format ++msgid "reading of section headers failed" ++msgstr "a leitura de cabeçalhos de seção falhou" + +-#. TRANS Interrupted function call; an asynchronous signal occurred and prevented +-#. TRANS completion of the call. When this happens, you should try the call +-#. TRANS again. +-#. TRANS +-#. TRANS You can choose to have functions resume after a signal that is handled, +-#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted +-#. TRANS Primitives}. +-#: stdio-common/../sysdeps/gnu/errlist.c:47 +-msgid "Interrupted system call" +-msgstr "Chamada de sistema interrompida" ++#: elf/sprof.c:569 elf/sprof.c:664 ++#, c-format ++msgid "reading of section header string table failed" ++msgstr "a leitura da tabela de string do cabeçalho da seção falhou" + +-#: stdio-common/../sysdeps/gnu/errlist.c:666 +-msgid "Interrupted system call should be restarted" +-msgstr "Chamada de sistema interrompida deve ser reiniciada" ++#: elf/sprof.c:595 ++#, c-format ++msgid "*** Cannot read debuginfo file name: %m\n" ++msgstr "*** Não foi possível ler o arquivo de debuginfo: %m\n" + +-#: nis/nis_error.c:44 +-msgid "Invalid Object for operation" +-msgstr "Objeto invlido para operao" ++#: elf/sprof.c:616 ++#, c-format ++msgid "cannot determine file name" ++msgstr "não foi possível determinar o nome do arquivo" + +-#. TRANS Invalid argument. This is used to indicate various kinds of problems +-#. TRANS with passing the wrong argument to a library function. +-#: stdio-common/../sysdeps/gnu/errlist.c:164 +-msgid "Invalid argument" +-msgstr "Argumento invlido" ++#: elf/sprof.c:649 ++#, c-format ++msgid "reading of ELF header failed" ++msgstr "a leitura de cabeçalho de ELF falhou" + +-#: posix/regex.c:1018 +-msgid "Invalid back reference" +-msgstr "Referncia anterior invlida" ++#: elf/sprof.c:685 ++#, c-format ++msgid "*** The file `%s' is stripped: no detailed analysis possible\n" ++msgstr "*** O arquivo “%s” está sem símbolos (stripped): análise detalhada é impossível\n" + +-#: posix/regex.c:1016 +-msgid "Invalid character class name" +-msgstr "Nome de classe de caracter invlido" ++#: elf/sprof.c:715 ++#, c-format ++msgid "failed to load symbol data" ++msgstr "falha ao carregar dados de símbolos" + +-#: sunrpc/clnt_perr.c:275 +-msgid "Invalid client credential" +-msgstr "Credencial de cliente invlido" ++#: elf/sprof.c:780 ++#, c-format ++msgid "cannot load profiling data" ++msgstr "impossível carregar dados de perfil" + +-#: sunrpc/clnt_perr.c:279 +-msgid "Invalid client verifier" +-msgstr "Verificador de cliente invlido" ++#: elf/sprof.c:789 ++#, c-format ++msgid "while stat'ing profiling data file" ++msgstr "enquanto obtinha estado do arquivo de dados de perfil" + +-#: posix/regex.c:1015 +-msgid "Invalid collation character" +-msgstr "Caracter de comparao invlido" ++#: elf/sprof.c:797 ++#, c-format ++msgid "profiling data file `%s' does not match shared object `%s'" ++msgstr "arquivo de dados de perfil “%s” não coincide com objetos compartilhados “%s”" + +-#: posix/regex.c:1022 +-msgid "Invalid content of \\{\\}" +-msgstr "Contedo invlido de \\{\\}" ++#: elf/sprof.c:808 ++#, c-format ++msgid "failed to mmap the profiling data file" ++msgstr "falha para mapear (mmap) o arquivo de dados de perfil" + +-#. TRANS An attempt to make an improper link across file systems was detected. +-#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but +-#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). +-#: stdio-common/../sysdeps/gnu/errlist.c:141 +-msgid "Invalid cross-device link" +-msgstr "Link entre dispositivos invlido" ++#: elf/sprof.c:816 ++#, c-format ++msgid "error while closing the profiling data file" ++msgstr "erro ao fechar arquivo de dados de perfil" + +-#: stdio-common/../sysdeps/gnu/errlist.c:702 +-msgid "Invalid exchange" +-msgstr "Troca invlida" ++#: elf/sprof.c:899 ++#, c-format ++msgid "`%s' is no correct profile data file for `%s'" ++msgstr "“%s” não é o arquivo de perfil de dados correto para “%s”" + +-#. TRANS While decoding a multibyte character the function came along an invalid +-#. TRANS or an incomplete sequence of bytes or the given wide character is invalid. +-#: stdio-common/../sysdeps/gnu/errlist.c:579 +-msgid "Invalid or incomplete multibyte or wide character" +-msgstr "Multibyte ou caracter largo invlido" ++#: elf/sprof.c:1080 elf/sprof.c:1138 ++#, c-format ++msgid "cannot allocate symbol data" ++msgstr "não foi possível alocar dados de símbolos" + +-#: posix/regex.c:1025 +-msgid "Invalid preceding regular expression" +-msgstr "Expresso regular precedente invlida" ++#: iconv/iconv_charmap.c:141 iconv/iconv_prog.c:445 ++#, c-format ++msgid "cannot open output file" ++msgstr "não foi possível abrir arquivo de saída" + +-#: posix/regex.c:1023 +-msgid "Invalid range end" +-msgstr "Intervalo final invlida" ++#: iconv/iconv_charmap.c:187 iconv/iconv_prog.c:308 ++#, c-format ++msgid "error while closing input `%s'" ++msgstr "erro ao fechar a entrada “%s”" + +-#: posix/regex.c:1014 +-msgid "Invalid regular expression" +-msgstr "Expresso regular invlida" ++#: iconv/iconv_charmap.c:435 ++#, c-format ++msgid "illegal input sequence at position %Zd" ++msgstr "sequência de entrada ilegal na posição %Zd" + +-#: stdio-common/../sysdeps/gnu/errlist.c:718 +-msgid "Invalid request code" +-msgstr "Cdigo de requisio invlido" ++#: iconv/iconv_charmap.c:454 iconv/iconv_prog.c:536 ++#, c-format ++msgid "incomplete character or shift sequence at end of buffer" ++msgstr "caractere incompleto ou mudança de sequência no final do buffer" + +-#: stdio-common/../sysdeps/gnu/errlist.c:706 +-msgid "Invalid request descriptor" +-msgstr "Descritor de requisio invlido" ++#: iconv/iconv_charmap.c:499 iconv/iconv_charmap.c:535 iconv/iconv_prog.c:579 ++#: iconv/iconv_prog.c:615 ++#, c-format ++msgid "error while reading the input" ++msgstr "erro ao ler a entrada" + +-#: sunrpc/clnt_perr.c:285 +-msgid "Invalid server verifier" +-msgstr "Verificador de servidor invlido" ++#: iconv/iconv_charmap.c:517 iconv/iconv_prog.c:597 ++#, c-format ++msgid "unable to allocate buffer for input" ++msgstr "não foi possível alocar espaço para entrada" + +-#: stdio-common/../sysdeps/gnu/errlist.c:722 +-msgid "Invalid slot" +-msgstr "Slot invlido" ++#: iconv/iconv_prog.c:59 ++msgid "Input/Output format specification:" ++msgstr "Especificação de formato de entrada/saída:" + +-#. TRANS File is a directory; you cannot open a directory for writing, +-#. TRANS or create or remove hard links to it. +-#: stdio-common/../sysdeps/gnu/errlist.c:158 +-msgid "Is a directory" +-msgstr " um diretrio" ++#: iconv/iconv_prog.c:60 ++msgid "encoding of original text" ++msgstr "codificação para o texto original" + +-#: stdio-common/../sysdeps/gnu/errlist.c:806 +-msgid "Is a named type file" +-msgstr " um arquivo tipo nomevel" ++#: iconv/iconv_prog.c:61 ++msgid "encoding for output" ++msgstr "codificação para a saída" + +-#: nis/nis_print.c:187 +-msgid "Kerberos.\n" +-msgstr "Kerberos.\n" ++#: iconv/iconv_prog.c:62 ++msgid "Information:" ++msgstr "Informação:" + +-#: stdio-common/../sysdeps/unix/siglist.c:34 +-#: sysdeps/unix/sysv/linux/siglist.h:29 +-msgid "Killed" +-msgstr "Morto" ++#: iconv/iconv_prog.c:63 ++msgid "list all known coded character sets" ++msgstr "lista todas as coleções de caracteres codificados" + +-#: nis/nis_print.c:123 +-msgid "LINK\n" +-msgstr "LINK\n" ++#: iconv/iconv_prog.c:64 locale/programs/localedef.c:120 ++msgid "Output control:" ++msgstr "Controle de saída:" + +-#: nis/nis_local_names.c:125 +-#, c-format +-msgid "LOCAL entry for UID %d in directory %s not unique\n" +-msgstr "Entrada LOCAL para UID %d no diretrio %s no nica\n" ++#: iconv/iconv_prog.c:65 ++msgid "omit invalid characters from output" ++msgstr "omite caracteres inválidos da saída" + +-#: stdio-common/../sysdeps/gnu/errlist.c:698 +-msgid "Level 2 halted" +-msgstr "Parada de sistema nvel 2" ++#: iconv/iconv_prog.c:66 iconv/iconvconfig.c:128 ++#: locale/programs/localedef.c:113 locale/programs/localedef.c:115 ++#: locale/programs/localedef.c:117 locale/programs/localedef.c:144 ++#: malloc/memusagestat.c:56 ++msgid "FILE" ++msgstr "ARQUIVO" + +-#: stdio-common/../sysdeps/gnu/errlist.c:674 +-msgid "Level 2 not synchronized" +-msgstr "Nvel 2 no sincronizado" ++#: iconv/iconv_prog.c:66 ++msgid "output file" ++msgstr "arquivo de saída" + +-#: stdio-common/../sysdeps/gnu/errlist.c:678 +-msgid "Level 3 halted" +-msgstr "Nvel 3 parado" ++#: iconv/iconv_prog.c:67 ++msgid "suppress warnings" ++msgstr "suprime avisos" + +-#: stdio-common/../sysdeps/gnu/errlist.c:682 +-msgid "Level 3 reset" +-msgstr "Nvel 3 resetado" ++#: iconv/iconv_prog.c:68 ++msgid "print progress information" ++msgstr "mostra informações de progresso" + +-#: nis/nis_error.c:53 +-msgid "Link Points to illegal name" +-msgstr "Vnculo aponta para nome ilegal" ++#: iconv/iconv_prog.c:73 ++msgid "Convert encoding of given files from one encoding to another." ++msgstr "Converte codificação dos arquivos dados de uma codificação para outra." + +-#: stdio-common/../sysdeps/gnu/errlist.c:638 +-msgid "Link has been severed" +-msgstr "Link foi cortado" ++#: iconv/iconv_prog.c:77 ++msgid "[FILE...]" ++msgstr "[ARQUIVO...]" + +-#: stdio-common/../sysdeps/gnu/errlist.c:686 +-msgid "Link number out of range" +-msgstr "Nmero de link fora da faixa" ++#: iconv/iconv_prog.c:230 ++#, c-format ++msgid "conversions from `%s' and to `%s' are not supported" ++msgstr "não há suporte para as conversões de “%s” e para “%s”" + +-#: nis/nis_print.c:282 +-msgid "Linked Object Type : " +-msgstr "Tipo de Objeto Vinculado (linked) : " ++#: iconv/iconv_prog.c:235 ++#, c-format ++msgid "conversion from `%s' is not supported" ++msgstr "não há suporte para a conversão de “%s”" + +-#: nis/nis_print.c:284 ++#: iconv/iconv_prog.c:242 + #, c-format +-msgid "Linked to : %s\n" +-msgstr "Vinculado (linked) para : %s\n" ++msgid "conversion to `%s' is not supported" ++msgstr "não há suporte para a conversão para “%s”" + +-#: nis/ypclnt.c:787 +-msgid "Local domain name not set" +-msgstr "No foi configurado nome de domnio local" ++#: iconv/iconv_prog.c:246 ++#, c-format ++msgid "conversion from `%s' to `%s' is not supported" ++msgstr "não há suporte para a conversão de “%s” para “%s”" + +-#: nis/ypclnt.c:777 +-msgid "Local resource allocation failure" +-msgstr "Falha na alocao de recurso local" ++#: iconv/iconv_prog.c:256 ++#, c-format ++msgid "failed to start conversion processing" ++msgstr "falha ao iniciar o processo de conversão" + +-#: stdio-common/../sysdeps/gnu/errlist.c:734 +-msgid "Machine is not on the network" +-msgstr "A maquina no est na rede" ++#: iconv/iconv_prog.c:354 ++#, c-format ++msgid "error while closing output file" ++msgstr "erro ao fechar o arquivo de saída" + +-#: nis/nis_error.c:45 +-msgid "Malformed Name, or illegal name" +-msgstr "Nome malformado ou ilegal" ++#: iconv/iconv_prog.c:455 ++#, c-format ++msgid "conversion stopped due to problem in writing the output" ++msgstr "a conversão parou devido a problemas de escrita na saída" + +-#: argp/argp-help.c:1182 +-msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." +-msgstr "Parmetros obrigatrios ou opcionais para opes longas so tambm obrigatrios ou opcionais para qualquer opo curta correspondente." ++#: iconv/iconv_prog.c:532 ++#, c-format ++msgid "illegal input sequence at position %ld" ++msgstr "sequência de entrada ilegal na posição %ld" + +-#: nis/nis_print.c:168 +-msgid "Master Server :\n" +-msgstr "Servidor Mestre :\n" ++#: iconv/iconv_prog.c:540 ++#, c-format ++msgid "internal error (illegal descriptor)" ++msgstr "erro interno (descritor ilegal)" + +-#: nis/nis_error.c:75 +-msgid "Master server busy, full dump rescheduled." +-msgstr "Servidor Mestre ocupado, descarregamento completo (dump) remarcado." ++#: iconv/iconv_prog.c:543 ++#, c-format ++msgid "unknown iconv() error %d" ++msgstr "erro iconv() desconhecido: %d" + +-#: posix/../sysdeps/posix/gai_strerror.c:35 +-msgid "Memory allocation failure" +-msgstr "Falha de alocao de memria" ++#: iconv/iconv_prog.c:786 ++msgid "" ++"The following list contains all the coded character sets known. This does\n" ++"not necessarily mean that all combinations of these names can be used for\n" ++"the FROM and TO command line parameters. One coded character set can be\n" ++"listed with several different names (aliases).\n" ++"\n" ++" " ++msgstr "" ++"A lista a seguir contém todos os conjuntos de codificação de caracteres \n" ++"conhecidos. Isto não quer dizer necessariamente que todas as combinações\n" ++"destes nomes podem ser utilizadas nos parâmetros DE e PARA. Um conjunto\n" ++"de caracteres pode ser listado com vários nomes diferentes (apelidos).\n" ++"\n" ++" " + +-#: posix/regex.c:1024 +-msgid "Memory exhausted" +-msgstr "Memria esgotada" ++#: iconv/iconvconfig.c:109 ++msgid "Create fastloading iconv module configuration file." ++msgstr "Cria um arquivo de configuração para carregamento rápido de módulos iconv." + +-#. TRANS The size of a message sent on a socket was larger than the supported +-#. TRANS maximum size. +-#: stdio-common/../sysdeps/gnu/errlist.c:317 +-msgid "Message too long" +-msgstr "Mensagem muito longa" ++#: iconv/iconvconfig.c:113 ++msgid "[DIR...]" ++msgstr "[DIR...]" + +-#: nis/nis_error.c:57 +-msgid "Missing or malformed attribute" +-msgstr "Atributo perdido ou malformado" ++#: iconv/iconvconfig.c:126 locale/programs/localedef.c:123 ++msgid "PATH" ++msgstr "CAMINHO" + +-#: nis/nis_print.c:323 +-#, c-format +-msgid "Mod. Time : %s" +-msgstr "Horrio Mod. : %s" ++#: iconv/iconvconfig.c:127 ++msgid "Prefix used for all file accesses" ++msgstr "Prefixo usado para todos os acessos a arquivos" + +-#: nis/nis_error.c:50 +-msgid "Modification failed" +-msgstr "Modificao falhou" ++#: iconv/iconvconfig.c:128 ++msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" ++msgstr "Coloca saída em ARQUIVO, em vez da localização instalada (--prefix não se aplica a ARQUIVO)" + +-#: nis/nis_error.c:63 +-msgid "Modify operation failed" +-msgstr "Operao de modificao falhou" ++#: iconv/iconvconfig.c:132 ++msgid "Do not search standard directories, only those on the command line" ++msgstr "Não pesquisa por diretórios padrões, e sim apenas por aqueles na linha de comando" + +-#: locale/programs/locale.c:68 +-msgid "Modify output format:" +-msgstr "Formato de modificao de sada:" ++#: iconv/iconvconfig.c:299 ++#, c-format ++msgid "Directory arguments required when using --nostdlib" ++msgstr "Argumentos de diretório são necessários ao usar --nostdlib" + +-#: stdio-common/../sysdeps/gnu/errlist.c:630 +-msgid "Multihop attempted" +-msgstr "Tentativa de Multihop" ++#: iconv/iconvconfig.c:341 ++#, c-format ++msgid "no output file produced because warnings were issued" ++msgstr "nenhum arquivo de saída foi produzido porque avisos foram emitidos" + +-#: catgets/gencat.c:106 catgets/gencat.c:110 db2/makedb.c:59 +-#: locale/programs/localedef.c:115 nscd/nscd.c:77 +-msgid "NAME" +-msgstr "NOME" ++#: iconv/iconvconfig.c:430 ++#, c-format ++msgid "while inserting in search tree" ++msgstr "erro ao inserir na área de pesquisa" + +-#: locale/programs/locale.c:78 +-msgid "" +-"NAME\n" +-"[-a|-m]" +-msgstr "" +-"NOME\n" +-"[-a|-m]" ++#: iconv/iconvconfig.c:1238 ++#, c-format ++msgid "cannot generate output file" ++msgstr "não foi possível gerar o arquivo de saída" + +-#: nis/nis_print.c:31 +-msgid "NIS" +-msgstr "NIS" ++#: inet/rcmd.c:157 ++msgid "rcmd: Cannot allocate memory\n" ++msgstr "rcmd: Não foi possível alocar memória\n" + +-#: nis/ypclnt.c:791 +-msgid "NIS client/server version mismatch - can't supply service" +-msgstr "Verses cliente/servidor NIS no conferem - no possvel oferecer servio" ++#: inet/rcmd.c:174 ++msgid "rcmd: socket: All ports in use\n" ++msgstr "rcmd: socket: Todas as portas em uso\n" + +-#: nis/ypclnt.c:789 +-msgid "NIS map database is bad" +-msgstr "Base de dados de mapas NIS est ruim" ++#: inet/rcmd.c:202 ++#, c-format ++msgid "connect to address %s: " ++msgstr "conectar ao endereço %s: " + +-#: nis/nis_error.c:68 +-msgid "NIS+ operation failed" +-msgstr "Operao NIS+ falhou" ++#: inet/rcmd.c:215 ++#, c-format ++msgid "Trying %s...\n" ++msgstr "Tentando %s...\n" + +-#: nis/nis_error.c:33 +-msgid "NIS+ servers unreachable" +-msgstr "Servidores NIS+ fora do alcance" ++#: inet/rcmd.c:251 ++#, c-format ++msgid "rcmd: write (setting up stderr): %m\n" ++msgstr "rcmd: write (configurando stderr): %m\n" + +-#: nis/nis_error.c:69 +-msgid "NIS+ service is unavailable or not installed" +-msgstr "Servio NIS+ est indisponvel ou no est instalado" ++#: inet/rcmd.c:267 ++#, c-format ++msgid "rcmd: poll (setting up stderr): %m\n" ++msgstr "rcmd: poll (configurando stderr): %m\n" + +-#: nis/nis_print.c:108 +-msgid "NO OBJECT\n" +-msgstr "SEM OBJETO\n" ++#: inet/rcmd.c:270 ++msgid "poll: protocol failure in circuit setup\n" ++msgstr "poll: falha de protocolo na configuração do circuito\n" + +-#: nscd/nscd.c:81 +-msgid "NUMBER" +-msgstr "NMERO" ++#: inet/rcmd.c:302 ++msgid "socket: protocol failure in circuit setup\n" ++msgstr "socket: falha de protocolo na configuração do circuito\n" + +-#: nis/nis_print.c:162 ++#: inet/rcmd.c:326 + #, c-format +-msgid "Name : '%s'\n" +-msgstr "Nome : `%s'\n" ++msgid "rcmd: %s: short read" ++msgstr "rcmd: %s: leitura insuficiente" + +-#: nscd/nscd.c:88 +-msgid "Name Service Cache Daemon." +-msgstr "Servidor de Cache de Nomes." ++#: inet/rcmd.c:478 ++msgid "lstat failed" ++msgstr "lstat falhou" + +-#: nis/nis_error.c:40 +-msgid "Name not served by this server" +-msgstr "Nome no servidor por este servidor" ++#: inet/rcmd.c:485 ++msgid "cannot open" ++msgstr "não foi possível abrir" + +-#: stdio-common/../sysdeps/gnu/errlist.c:758 +-msgid "Name not unique on network" +-msgstr "O nome no nico na rede" ++#: inet/rcmd.c:487 ++msgid "fstat failed" ++msgstr "fstat falhou" + +-#: posix/../sysdeps/posix/gai_strerror.c:37 +-msgid "Name or service not known" +-msgstr "Nome ou servio desconhecido" ++#: inet/rcmd.c:489 ++msgid "bad owner" ++msgstr "dono inválido" + +-#: nis/nis_error.c:49 +-msgid "Name/entry isn't unique" +-msgstr "Nome/entrada no nico" ++#: inet/rcmd.c:491 ++msgid "writeable by other than owner" ++msgstr "permissão de escrita para outros" + +-#: nis/nis_error.c:58 +-msgid "Named object is not searchable" +-msgstr "Objeto nomeado no pesquisvel" ++#: inet/rcmd.c:493 ++msgid "hard linked somewhere" ++msgstr "link absoluto em algum lugar" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:566 +-msgid "Need authenticator" +-msgstr " necessrio um autenticador" ++#: inet/ruserpass.c:165 inet/ruserpass.c:188 ++msgid "out of memory" ++msgstr "memória insuficiente" + +-#. TRANS A network connection was reset because the remote host crashed. +-#: stdio-common/../sysdeps/gnu/errlist.c:389 +-msgid "Network dropped connection on reset" +-msgstr "A rede desconectou-se ao resetar" ++#: inet/ruserpass.c:179 ++msgid "Error: .netrc file is readable by others." ++msgstr "Erro: arquivo .netrc é legível por outros." + +-#. TRANS A socket operation failed because the network was down. +-#: stdio-common/../sysdeps/gnu/errlist.c:378 +-msgid "Network is down" +-msgstr "A rede no responde" ++#: inet/ruserpass.c:180 ++msgid "Remove password or make file unreadable by others." ++msgstr "Remove a senha ou torne arquivo não-legível por outros." + +-#. TRANS A socket operation failed because the subnet containing the remote host +-#. TRANS was unreachable. +-#: stdio-common/../sysdeps/gnu/errlist.c:384 +-msgid "Network is unreachable" +-msgstr "A rede est fora de alcance" ++#: inet/ruserpass.c:199 ++#, c-format ++msgid "Unknown .netrc keyword %s" ++msgstr "Palavra-chave em .netrc desconhecida %s" + +-#: stdio-common/../sysdeps/gnu/errlist.c:694 +-msgid "No CSI structure available" +-msgstr "No h estrutura CSI disponvel" ++#: libidn/nfkc.c:463 ++msgid "Character out of range for UTF-8" ++msgstr "Caractere fora do limite para UTF-8" + +-#: stdio-common/../sysdeps/gnu/errlist.c:802 +-msgid "No XENIX semaphores available" +-msgstr "No h semforos XENIX disponveis" ++#: locale/programs/charmap-dir.c:56 ++#, c-format ++msgid "cannot read character map directory `%s'" ++msgstr "não é possível ler diretório de mapa de caracteres “%s”" + +-#: posix/../sysdeps/posix/gai_strerror.c:36 +-msgid "No address associated with hostname" +-msgstr "No h endereo associado com o nome" ++#: locale/programs/charmap.c:138 ++#, c-format ++msgid "character map file `%s' not found" ++msgstr "arquivo de mapa de caracteres “%s” não foi localizado" + +-#: resolv/herror.c:77 +-msgid "No address associated with name" +-msgstr "No h endereo associado com o nome" ++#: locale/programs/charmap.c:196 ++#, c-format ++msgid "default character map file `%s' not found" ++msgstr "arquivo padrão de mapa de caracteres “%s” não localizado" + +-#: stdio-common/../sysdeps/gnu/errlist.c:714 +-msgid "No anode" +-msgstr "Sem anode" ++#: locale/programs/charmap.c:265 ++#, c-format ++msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant [--no-warnings=ascii]" ++msgstr "mapa de caracteres “%s” não é compatível com ASCII; localidade não é compatível com C ISO [--no-warnings=ascii]" + +-#. TRANS The kernel's buffers for I/O operations are all in use. In GNU, this +-#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the +-#. TRANS other from network operations. +-#: stdio-common/../sysdeps/gnu/errlist.c:408 +-msgid "No buffer space available" +-msgstr "No h espao de buffer disponvel" ++#: locale/programs/charmap.c:343 ++#, c-format ++msgid "%s: must be greater than \n" ++msgstr "%s: deve ser maior que \n" + +-#. TRANS There are no child processes. This error happens on operations that are +-#. TRANS supposed to manipulate child processes, when there aren't any processes +-#. TRANS to manipulate. +-#: stdio-common/../sysdeps/gnu/errlist.c:89 +-msgid "No child processes" +-msgstr "No h processos filhos" ++#: locale/programs/charmap.c:363 locale/programs/charmap.c:380 ++#: locale/programs/repertoire.c:173 ++#, c-format ++msgid "syntax error in prolog: %s" ++msgstr "erro de sintaxe em prolog: %s" + +-#: stdio-common/../sysdeps/gnu/errlist.c:634 +-msgid "No data available" +-msgstr "No h dados disponveis" ++#: locale/programs/charmap.c:364 ++msgid "invalid definition" ++msgstr "definição inválida" + +-#: nis/nis_error.c:73 +-msgid "No file space on server" +-msgstr "No h espao disponvel no servidor" ++#: locale/programs/charmap.c:381 locale/programs/locfile.c:131 ++#: locale/programs/locfile.c:158 locale/programs/repertoire.c:174 ++msgid "bad argument" ++msgstr "argumento inválido" + +-#. TRANS No locks available. This is used by the file locking facilities; see +-#. TRANS @ref{File Locks}. This error is never generated by the GNU system, but +-#. TRANS it can result from an operation to an NFS server running another +-#. TRANS operating system. +-#: stdio-common/../sysdeps/gnu/errlist.c:547 +-msgid "No locks available" +-msgstr "No h locks disponveis" ++#: locale/programs/charmap.c:408 ++#, c-format ++msgid "duplicate definition of <%s>" ++msgstr "definição duplicada de <%s>" + +-#: posix/regex.c:1013 +-msgid "No match" +-msgstr "No confere" ++#: locale/programs/charmap.c:415 ++#, c-format ++msgid "value for <%s> must be 1 or greater" ++msgstr "o valor para <%s> deve ser 1 ou maior" + +-#: stdio-common/../sysdeps/gnu/errlist.c:814 +-msgid "No medium found" +-msgstr "Mdia no encontrada" ++#: locale/programs/charmap.c:427 ++#, c-format ++msgid "value of <%s> must be greater or equal than the value of <%s>" ++msgstr "o valor de <%s> deve ser maior ou igual ao valor de <%s>" + +-#: stdio-common/../sysdeps/gnu/errlist.c:642 +-msgid "No message of desired type" +-msgstr "No h mensagens do tipo desejado" ++#: locale/programs/charmap.c:450 locale/programs/repertoire.c:182 ++#, c-format ++msgid "argument to <%s> must be a single character" ++msgstr "o argumento para <%s> deve ser um caractere simples" + +-#: nis/ypclnt.c:779 +-msgid "No more records in map database" +-msgstr "No h mais registros no banco de dados map" ++#: locale/programs/charmap.c:476 ++msgid "character sets with locking states are not supported" ++msgstr "não há suporte a conjuntos de caracteres com estados de trava" + +-#: posix/regex.c:5515 +-msgid "No previous regular expression" +-msgstr "No h expresso regular anterior" ++#: locale/programs/charmap.c:503 locale/programs/charmap.c:557 ++#: locale/programs/charmap.c:589 locale/programs/charmap.c:683 ++#: locale/programs/charmap.c:738 locale/programs/charmap.c:779 ++#: locale/programs/charmap.c:820 ++#, c-format ++msgid "syntax error in %s definition: %s" ++msgstr "erro de sintaxe na definição %s: %s" + +-#: sunrpc/rpcinfo.c:570 +-msgid "No remote programs registered.\n" +-msgstr "No h programas remotos registrados.\n" ++#: locale/programs/charmap.c:504 locale/programs/charmap.c:684 ++#: locale/programs/charmap.c:780 locale/programs/repertoire.c:229 ++msgid "no symbolic name given" ++msgstr "nenhum nome simbólico dado" + +-#. TRANS The remote host for a requested network connection is not reachable. +-#: stdio-common/../sysdeps/gnu/errlist.c:474 +-msgid "No route to host" +-msgstr "No h rota para o host" ++#: locale/programs/charmap.c:558 ++msgid "invalid encoding given" ++msgstr "codificação inválida dada" + +-#. TRANS No space left on device; write operation on a file failed because the +-#. TRANS disk is full. +-#: stdio-common/../sysdeps/gnu/errlist.c:208 +-msgid "No space left on device" +-msgstr "No h espao disponvel no dispositivo" ++#: locale/programs/charmap.c:567 ++msgid "too few bytes in character encoding" ++msgstr "poucos bytes na codificação do caractere" + +-#. TRANS The wrong type of device was given to a function that expects a +-#. TRANS particular sort of device. +-#: stdio-common/../sysdeps/gnu/errlist.c:147 +-msgid "No such device" +-msgstr "Dispositivo inexistente" ++#: locale/programs/charmap.c:569 ++msgid "too many bytes in character encoding" ++msgstr "muitos bytes na codificação do caractere" + +-#. TRANS No such file or directory. This is a ``file doesn't exist'' error +-#. TRANS for ordinary files that are referenced in contexts where they are +-#. TRANS expected to already exist. +-#: stdio-common/../sysdeps/gnu/errlist.c:31 +-msgid "No such file or directory" +-msgstr "Arquivo ou diretrio no encontrado" ++#: locale/programs/charmap.c:591 locale/programs/charmap.c:739 ++#: locale/programs/charmap.c:822 locale/programs/repertoire.c:295 ++msgid "no symbolic name given for end of range" ++msgstr "nenhum nome simbólico dado para fim do intervalo" ++ ++#: locale/programs/charmap.c:615 locale/programs/ld-address.c:524 ++#: locale/programs/ld-collate.c:2616 locale/programs/ld-collate.c:3774 ++#: locale/programs/ld-ctype.c:2117 locale/programs/ld-ctype.c:2829 ++#: locale/programs/ld-identification.c:397 ++#: locale/programs/ld-measurement.c:213 locale/programs/ld-messages.c:295 ++#: locale/programs/ld-monetary.c:748 locale/programs/ld-name.c:262 ++#: locale/programs/ld-numeric.c:325 locale/programs/ld-paper.c:212 ++#: locale/programs/ld-telephone.c:276 locale/programs/ld-time.c:934 ++#: locale/programs/repertoire.c:312 ++#, c-format ++msgid "%1$s: definition does not end with `END %1$s'" ++msgstr "%1$s: definição não termina com “END %1$s”" ++ ++#: locale/programs/charmap.c:648 ++msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" ++msgstr "apenas definições de WIDTH são permitidas em seguida à definição de CHARMAP" + +-#: nis/ypclnt.c:773 +-msgid "No such key in map" +-msgstr "Chave no est no mapa" ++#: locale/programs/charmap.c:656 locale/programs/charmap.c:719 ++#, c-format ++msgid "value for %s must be an integer" ++msgstr "o valor para %s deve ser um inteiro" + +-#: nis/ypclnt.c:771 +-msgid "No such map in server's domain" +-msgstr "Mapa no encontrado no domnio do servidor" ++#: locale/programs/charmap.c:847 ++#, c-format ++msgid "%s: error in state machine" ++msgstr "%s: erro na máquina de estados" ++ ++#: locale/programs/charmap.c:855 locale/programs/ld-address.c:540 ++#: locale/programs/ld-collate.c:2613 locale/programs/ld-collate.c:3967 ++#: locale/programs/ld-ctype.c:2114 locale/programs/ld-ctype.c:2846 ++#: locale/programs/ld-identification.c:413 ++#: locale/programs/ld-measurement.c:229 locale/programs/ld-messages.c:311 ++#: locale/programs/ld-monetary.c:764 locale/programs/ld-name.c:278 ++#: locale/programs/ld-numeric.c:341 locale/programs/ld-paper.c:228 ++#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:950 ++#: locale/programs/locfile.c:997 locale/programs/repertoire.c:323 ++#, c-format ++msgid "%s: premature end of file" ++msgstr "%s: fim de arquivo prematuro" + +-#. TRANS No process matches the specified process ID. +-#: stdio-common/../sysdeps/gnu/errlist.c:36 +-msgid "No such process" +-msgstr "Processo inexistente" ++#: locale/programs/charmap.c:874 locale/programs/charmap.c:885 ++#, c-format ++msgid "unknown character `%s'" ++msgstr "caractere desconhecido “%s”" ++ ++#: locale/programs/charmap.c:893 ++#, c-format ++msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" ++msgstr "número de bytes para a sequência de bytes de começo e término de intervalo não é o mesmo: %d vs %d" ++ ++#: locale/programs/charmap.c:998 locale/programs/ld-collate.c:2893 ++#: locale/programs/repertoire.c:418 ++msgid "invalid names for character range" ++msgstr "nomes inválidos para intervalo de caracteres" ++ ++#: locale/programs/charmap.c:1010 locale/programs/repertoire.c:430 ++msgid "hexadecimal range format should use only capital characters" ++msgstr "formato de intervalo hexadecimal deve usar apenas caracteres maiúsculos" ++ ++#: locale/programs/charmap.c:1028 locale/programs/repertoire.c:448 ++#, c-format ++msgid "<%s> and <%s> are invalid names for range" ++msgstr "<%s> e <%s> são nomes inválidos para o intervalo" ++ ++#: locale/programs/charmap.c:1034 locale/programs/repertoire.c:455 ++msgid "upper limit in range is smaller than lower limit" ++msgstr "o limite superior do intervalo é menor que o limite inferior" ++ ++#: locale/programs/charmap.c:1092 ++msgid "resulting bytes for range not representable." ++msgstr "bytes resultantes para o intervalo não representáveis." ++ ++#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1563 ++#: locale/programs/ld-ctype.c:430 locale/programs/ld-identification.c:131 ++#: locale/programs/ld-measurement.c:92 locale/programs/ld-messages.c:96 ++#: locale/programs/ld-monetary.c:192 locale/programs/ld-name.c:93 ++#: locale/programs/ld-numeric.c:97 locale/programs/ld-paper.c:89 ++#: locale/programs/ld-telephone.c:92 locale/programs/ld-time.c:158 ++#, c-format ++msgid "No definition for %s category found" ++msgstr "Nenhuma definição para a categoria %s localizada" ++ ++#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 ++#: locale/programs/ld-address.c:199 locale/programs/ld-address.c:228 ++#: locale/programs/ld-address.c:300 locale/programs/ld-address.c:319 ++#: locale/programs/ld-address.c:331 locale/programs/ld-identification.c:144 ++#: locale/programs/ld-measurement.c:103 locale/programs/ld-monetary.c:204 ++#: locale/programs/ld-monetary.c:258 locale/programs/ld-monetary.c:274 ++#: locale/programs/ld-monetary.c:286 locale/programs/ld-name.c:104 ++#: locale/programs/ld-name.c:141 locale/programs/ld-numeric.c:111 ++#: locale/programs/ld-numeric.c:125 locale/programs/ld-paper.c:100 ++#: locale/programs/ld-paper.c:109 locale/programs/ld-telephone.c:103 ++#: locale/programs/ld-telephone.c:160 locale/programs/ld-time.c:174 ++#: locale/programs/ld-time.c:195 ++#, c-format ++msgid "%s: field `%s' not defined" ++msgstr "%s: campo “%s” não definido" + +-#: nis/nis_error.c:60 +-msgid "Non NIS+ namespace encountered" +-msgstr "Namespace NIS+ no encontrado" ++#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:207 ++#: locale/programs/ld-address.c:237 locale/programs/ld-address.c:275 ++#: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:115 ++#, c-format ++msgid "%s: field `%s' must not be empty" ++msgstr "%s: campo “%s” não pode estar vazio" + +-#: posix/../sysdeps/posix/gai_strerror.c:33 +-msgid "Non-recoverable failure in name resolution" +-msgstr "Falha irrecupervel na resoluo de nome" ++#: locale/programs/ld-address.c:168 ++#, c-format ++msgid "%s: invalid escape `%%%c' sequence in field `%s'" ++msgstr "%s: sequência de escape “%%%c” inválida no campo “%s”" + +-#: nis/nis_print.c:176 +-msgid "None.\n" +-msgstr "nenhum.\n" ++#: locale/programs/ld-address.c:218 ++#, c-format ++msgid "%s: terminology language code `%s' not defined" ++msgstr "%s: código de idioma de terminologia “%s” não definido" + +-#: nis/nis_error.c:48 +-msgid "Not Found, no such name" +-msgstr "No encontrado, nome inexistente" ++#: locale/programs/ld-address.c:243 ++#, c-format ++msgid "%s: field `%s' must not be defined" ++msgstr "%s: campo “%s” não pode estar definido" + +-#: stdio-common/../sysdeps/gnu/errlist.c:798 +-msgid "Not a XENIX named type file" +-msgstr "No um arquivo nomevel XENIX" ++#: locale/programs/ld-address.c:257 locale/programs/ld-address.c:286 ++#, c-format ++msgid "%s: language abbreviation `%s' not defined" ++msgstr "%s: abreviação de idioma “%s” não definida" + +-#. TRANS A file that isn't a directory was specified when a directory is required. +-#: stdio-common/../sysdeps/gnu/errlist.c:152 +-msgid "Not a directory" +-msgstr "No um diretrio" ++#: locale/programs/ld-address.c:264 locale/programs/ld-address.c:292 ++#: locale/programs/ld-address.c:325 locale/programs/ld-address.c:337 ++#, c-format ++msgid "%s: `%s' value does not match `%s' value" ++msgstr "%s: o valor “%s” não corresponde ao valor “%s”" + +-#: nis/nis_error.c:30 +-msgid "Not found" +-msgstr "No encontrado" ++#: locale/programs/ld-address.c:311 ++#, c-format ++msgid "%s: numeric country code `%d' not valid" ++msgstr "%s: código numérico do país “%d” não válido" + +-#: nis/nis_error.c:43 +-msgid "Not master server for this domain" +-msgstr "No um servidor mestre para este domnio" ++#: locale/programs/ld-address.c:432 locale/programs/ld-address.c:469 ++#: locale/programs/ld-address.c:507 locale/programs/ld-ctype.c:2478 ++#: locale/programs/ld-identification.c:309 ++#: locale/programs/ld-measurement.c:196 locale/programs/ld-messages.c:264 ++#: locale/programs/ld-monetary.c:503 locale/programs/ld-monetary.c:538 ++#: locale/programs/ld-monetary.c:579 locale/programs/ld-name.c:235 ++#: locale/programs/ld-numeric.c:217 locale/programs/ld-paper.c:195 ++#: locale/programs/ld-telephone.c:251 locale/programs/ld-time.c:839 ++#: locale/programs/ld-time.c:881 ++#, c-format ++msgid "%s: field `%s' declared more than once" ++msgstr "%s: campo “%s” declarado mais de uma vez" + +-#: nis/nis_error.c:39 +-msgid "Not owner" +-msgstr "Dono invlido" ++#: locale/programs/ld-address.c:436 locale/programs/ld-address.c:474 ++#: locale/programs/ld-identification.c:313 locale/programs/ld-messages.c:274 ++#: locale/programs/ld-monetary.c:507 locale/programs/ld-monetary.c:542 ++#: locale/programs/ld-name.c:239 locale/programs/ld-numeric.c:221 ++#: locale/programs/ld-telephone.c:255 locale/programs/ld-time.c:733 ++#: locale/programs/ld-time.c:802 locale/programs/ld-time.c:844 ++#, c-format ++msgid "%s: unknown character in field `%s'" ++msgstr "%s: caractere desconhecido no campo “%s”" + +-#: nis/nis_print.c:263 ++#: locale/programs/ld-address.c:521 locale/programs/ld-collate.c:3772 ++#: locale/programs/ld-ctype.c:2826 locale/programs/ld-identification.c:394 ++#: locale/programs/ld-measurement.c:210 locale/programs/ld-messages.c:293 ++#: locale/programs/ld-monetary.c:746 locale/programs/ld-name.c:260 ++#: locale/programs/ld-numeric.c:323 locale/programs/ld-paper.c:210 ++#: locale/programs/ld-telephone.c:274 locale/programs/ld-time.c:932 + #, c-format +-msgid "Number of Columns : %d\n" +-msgstr "Nmero de Colunas : %d\n" ++msgid "%s: incomplete `END' line" ++msgstr "%s: linha “END” incompleta" + +-#: nis/nis_print.c:358 ++#: locale/programs/ld-address.c:531 locale/programs/ld-collate.c:550 ++#: locale/programs/ld-collate.c:602 locale/programs/ld-collate.c:898 ++#: locale/programs/ld-collate.c:911 locale/programs/ld-collate.c:2582 ++#: locale/programs/ld-collate.c:2603 locale/programs/ld-collate.c:3957 ++#: locale/programs/ld-ctype.c:1846 locale/programs/ld-ctype.c:2104 ++#: locale/programs/ld-ctype.c:2676 locale/programs/ld-ctype.c:2837 ++#: locale/programs/ld-identification.c:404 ++#: locale/programs/ld-measurement.c:220 locale/programs/ld-messages.c:302 ++#: locale/programs/ld-monetary.c:755 locale/programs/ld-name.c:269 ++#: locale/programs/ld-numeric.c:332 locale/programs/ld-paper.c:219 ++#: locale/programs/ld-telephone.c:283 locale/programs/ld-time.c:941 + #, c-format +-msgid "Number of objects : %u\n" +-msgstr "Nmero de objetos : %u\n" ++msgid "%s: syntax error" ++msgstr "%s: erro de sintaxe" + +-#. TRANS Domain error; used by mathematical functions when an argument value does +-#. TRANS not fall into the domain over which the function is defined. +-#: stdio-common/../sysdeps/gnu/errlist.c:240 +-msgid "Numerical argument out of domain" +-msgstr "Argumento numrico fora de domnio" ++#: locale/programs/ld-collate.c:425 ++#, c-format ++msgid "`%.*s' already defined in charmap" ++msgstr "“%.*s” já definido no mapa de caracteres" + +-#. TRANS Range error; used by mathematical functions when the result value is +-#. TRANS not representable because of overflow or underflow. +-#: stdio-common/../sysdeps/gnu/errlist.c:246 +-msgid "Numerical result out of range" +-msgstr "Resultado numrico fora de alcance" ++#: locale/programs/ld-collate.c:434 ++#, c-format ++msgid "`%.*s' already defined in repertoire" ++msgstr "“%.*s” já definido no repertório" + +-#: nis/nis_print.c:362 ++#: locale/programs/ld-collate.c:441 + #, c-format +-msgid "Object #%d:\n" +-msgstr "Objeto #%d:\n" ++msgid "`%.*s' already defined as collating symbol" ++msgstr "“%.*s” já definido como símbolo de comparação" + +-#: nis/nis_print.c:314 ++#: locale/programs/ld-collate.c:448 + #, c-format +-msgid "Object Name : %s\n" +-msgstr "Nome do Objeto: %s\n" ++msgid "`%.*s' already defined as collating element" ++msgstr "“%.*s” já definido como elemento de comparação" + +-#: nis/nis_print.c:324 +-msgid "Object Type : " +-msgstr "Tipo do Objeto: " ++#: locale/programs/ld-collate.c:479 locale/programs/ld-collate.c:505 ++#, c-format ++msgid "%s: `forward' and `backward' are mutually excluding each other" ++msgstr "%s: “forward” e “backward” são mutuamente exclusivas entre si" + +-#. TRANS An attempt was made to NFS-mount a remote file system with a file name that +-#. TRANS already specifies an NFS-mounted file. +-#. TRANS (This is an error on some operating systems, but we expect it to work +-#. TRANS properly on the GNU system, making this error code impossible.) +-#: stdio-common/../sysdeps/gnu/errlist.c:514 +-msgid "Object is remote" +-msgstr "Objeto remoto" ++#: locale/programs/ld-collate.c:489 locale/programs/ld-collate.c:515 ++#: locale/programs/ld-collate.c:531 ++#, c-format ++msgid "%s: `%s' mentioned more than once in definition of weight %d" ++msgstr "%s: “%s” mencionado mais de uma vez na definição de peso %d" + +-#: nis/nis_error.c:42 +-msgid "Object with same name exists" +-msgstr "Objeto com o mesmo nome existe" ++#: locale/programs/ld-collate.c:587 ++#, c-format ++msgid "%s: too many rules; first entry only had %d" ++msgstr "%s: número excessivo de regras; a primeira entrada tinha apenas %d" + +-#: timezone/zic.c:1995 +-msgid "Odd number of quotation marks" +-msgstr "Nmero mpar de aspas" ++#: locale/programs/ld-collate.c:623 ++#, c-format ++msgid "%s: not enough sorting rules" ++msgstr "%s: número insuficiente de regras de ordenação" + +-#: nscd/nscd.c:185 +-msgid "Only root is allowed to use this option!" +-msgstr "Somente o superusurio pode usar esta opo!" ++#: locale/programs/ld-collate.c:788 ++#, c-format ++msgid "%s: empty weight string not allowed" ++msgstr "%s: texto de peso vazio não permitida" + +-#. TRANS An operation is already in progress on an object that has non-blocking +-#. TRANS mode selected. +-#: stdio-common/../sysdeps/gnu/errlist.c:306 +-msgid "Operation already in progress" +-msgstr "Operao j em progresso" ++#: locale/programs/ld-collate.c:883 ++#, c-format ++msgid "%s: weights must use the same ellipsis symbol as the name" ++msgstr "%s: pesos devem usar o mesmo símbolo de elipse que o nome" + +-#. TRANS Operation not permitted; only the owner of the file (or other resource) +-#. TRANS or processes with special privileges can perform the operation. +-#: stdio-common/../sysdeps/gnu/errlist.c:24 +-msgid "Operation not permitted" +-msgstr "Operao no permitida" ++#: locale/programs/ld-collate.c:939 ++#, c-format ++msgid "%s: too many values" ++msgstr "%s: número excessivo de valores" + +-#. TRANS The operation you requested is not supported. Some socket functions +-#. TRANS don't make sense for all types of sockets, and others may not be +-#. TRANS implemented for all communications protocols. In the GNU system, this +-#. TRANS error can happen for many calls when the object does not support the +-#. TRANS particular operation; it is a generic indication that the server knows +-#. TRANS nothing to do for that call. +-#: stdio-common/../sysdeps/gnu/errlist.c:350 +-msgid "Operation not supported" +-msgstr "Operao no suportada " ++#: locale/programs/ld-collate.c:1059 locale/programs/ld-collate.c:1234 ++#, c-format ++msgid "order for `%.*s' already defined at %s:%Zu" ++msgstr "ordem para “%.*s” já definida em %s:%Zu" + +-#. TRANS An operation that cannot complete immediately was initiated on an object +-#. TRANS that has non-blocking mode selected. Some functions that must always +-#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return +-#. TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that +-#. TRANS the operation has begun and will take some time. Attempts to manipulate +-#. TRANS the object before the call completes return @code{EALREADY}. You can +-#. TRANS use the @code{select} function to find out when the pending operation +-#. TRANS has completed; @pxref{Waiting for I/O}. +-#: stdio-common/../sysdeps/gnu/errlist.c:300 +-msgid "Operation now in progress" +-msgstr "Operao agora em progresso" ++#: locale/programs/ld-collate.c:1109 ++#, c-format ++msgid "%s: the start and the end symbol of a range must stand for characters" ++msgstr "%s: o símbolo de início e terminação de um intervalo deve representar caracteres" + +-#. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above). +-#. TRANS The values are always the same, on every operating system. +-#. TRANS +-#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a +-#. TRANS separate error code. +-#: stdio-common/../sysdeps/gnu/errlist.c:288 +-msgid "Operation would block" +-msgstr "Operation causaria bloqueio" ++#: locale/programs/ld-collate.c:1136 ++#, c-format ++msgid "%s: byte sequences of first and last character must have the same length" ++msgstr "%s: sequências de byte de primeiro e último caractere deve ter o mesmo comprimento" + +-#: stdio-common/../sysdeps/gnu/errlist.c:646 +-msgid "Out of streams resources" +-msgstr "Sem recursos de streams" ++#: locale/programs/ld-collate.c:1178 ++#, c-format ++msgid "%s: byte sequence of first character of range is not lower than that of the last character" ++msgstr "%s: sequência de byte do primeiro caractere de intervalo não é menor que aquele do último caractere" + +-#: iconv/iconv_prog.c:59 locale/programs/localedef.c:101 +-msgid "Output control:" +-msgstr "Controle de Sada:" ++#: locale/programs/ld-collate.c:1303 ++#, c-format ++msgid "%s: symbolic range ellipsis must not directly follow `order_start'" ++msgstr "%s: elipse de intervalo simbólico não pode seguir diretamente “order_start”" + +-#: elf/sprof.c:76 +-msgid "Output selection:" +-msgstr "Seleo de Sada:" ++#: locale/programs/ld-collate.c:1307 ++#, c-format ++msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" ++msgstr "%s: elipse de intervalo simbólico não pode estar seguido diretamente por “order_end”" + +-#: nis/nis_print.c:316 ++#: locale/programs/ld-collate.c:1327 locale/programs/ld-ctype.c:1363 + #, c-format +-msgid "Owner : %s\n" +-msgstr "Dono : %s\n" ++msgid "`%s' and `%.*s' are not valid names for symbolic range" ++msgstr "“%s” e “%.*s” não são nomes válidos para intervalo simbólico" + +-#: nis/nis_print.c:126 +-msgid "PRIVATE\n" +-msgstr "PRIVADO\n" ++#: locale/programs/ld-collate.c:1377 locale/programs/ld-collate.c:3708 ++#, c-format ++msgid "%s: order for `%.*s' already defined at %s:%Zu" ++msgstr "%s: ordem para “%.*s” já definida em %s:%Zu" + +-#: stdio-common/../sysdeps/gnu/errlist.c:738 +-msgid "Package not installed" +-msgstr "Pacote no instalado" ++#: locale/programs/ld-collate.c:1386 ++#, c-format ++msgid "%s: `%s' must be a character" ++msgstr "%s: “%s” deve ser um caractere" + +-#: nscd/nscd_conf.c:84 ++#: locale/programs/ld-collate.c:1580 + #, c-format +-msgid "Parse error: %s" +-msgstr "Erro de verificao (parser): %s" ++msgid "%s: `position' must be used for a specific level in all sections or none" ++msgstr "%s: “position” deve ser usado para um nível específico em todas as seções ou nenhuma" + +-#: nis/nis_error.c:54 +-msgid "Partial Success" +-msgstr "Sucesso Parcial" ++#: locale/programs/ld-collate.c:1604 ++#, c-format ++msgid "symbol `%s' not defined" ++msgstr "símbolo “%s” não definido" + +-#: nis/nis_error.c:62 +-msgid "Passed object is not the same object on server" +-msgstr "Objeto passado no o mesmo objeto no servidor" ++#: locale/programs/ld-collate.c:1680 locale/programs/ld-collate.c:1785 ++#, c-format ++msgid "symbol `%s' has the same encoding as" ++msgstr "o símbolo “%s” possui a mesma codificação que" + +-#. TRANS Permission denied; the file permissions do not allow the attempted operation. +-#: nis/nis_error.c:38 nis/ypclnt.c:793 +-#: stdio-common/../sysdeps/gnu/errlist.c:108 +-msgid "Permission denied" +-msgstr "Permisso negada" ++#: locale/programs/ld-collate.c:1684 locale/programs/ld-collate.c:1789 ++#, c-format ++msgid "symbol `%s'" ++msgstr "símbolo “%s”" + +-#: sysdeps/unix/sysv/linux/siglist.h:64 +-msgid "Power failure" +-msgstr "Falha de energia" ++#: locale/programs/ld-collate.c:1852 ++msgid "too many errors; giving up" ++msgstr "número excessivo de erros; desistindo" + +-#: posix/regex.c:1026 +-msgid "Premature end of regular expression" +-msgstr "Fim prematuro da expresso regular" ++#: locale/programs/ld-collate.c:2508 locale/programs/ld-collate.c:3896 ++#, c-format ++msgid "%s: nested conditionals not supported" ++msgstr "%s: condicionais aninhados sem suporte" + +-#: db2/makedb.c:63 +-msgid "Print content of database file, one entry a line" +-msgstr "Mostra o contedo da base de dados do arquivo, um entrada por linha" ++#: locale/programs/ld-collate.c:2526 ++#, c-format ++msgid "%s: more than one 'else'" ++msgstr "%s: mais que um “else”" + +-#: nscd/nscd.c:83 +-msgid "Print current configuration statistic" +-msgstr "Mostra estatstica da configurao atual" ++#: locale/programs/ld-collate.c:2701 ++#, c-format ++msgid "%s: duplicate definition of `%s'" ++msgstr "%s: definição duplicada de “%s”" + +-#: locale/programs/localedef.c:107 +-msgid "Print more messages" +-msgstr "Mostra mais mensagens" ++#: locale/programs/ld-collate.c:2737 ++#, c-format ++msgid "%s: duplicate declaration of section `%s'" ++msgstr "%s: declaração duplicada da seção “%s”" + +-#: argp/argp-parse.c:148 +-msgid "Print program version" +-msgstr "Mostra verso do programa" ++#: locale/programs/ld-collate.c:2873 ++#, c-format ++msgid "%s: unknown character in collating symbol name" ++msgstr "%s: caractere desconhecido no nome de símbolo de comparação" + +-#: nis/nis_error.c:29 +-msgid "Probable success" +-msgstr "Sucesso provvel" ++#: locale/programs/ld-collate.c:3002 ++#, c-format ++msgid "%s: unknown character in equivalent definition name" ++msgstr "%s: caractere desconhecido no nome de definição equivalente" + +-#: nis/nis_error.c:31 +-msgid "Probably not found" +-msgstr "Provavelmente no encontrado" ++#: locale/programs/ld-collate.c:3013 ++#, c-format ++msgid "%s: unknown character in equivalent definition value" ++msgstr "%s: caractere desconhecido no valor de definição equivalente" + +-#: stdio-common/../sysdeps/unix/siglist.c:52 +-#: sysdeps/unix/sysv/linux/siglist.h:46 +-msgid "Profiling timer expired" +-msgstr "Tempo expirado para profiling" ++#: locale/programs/ld-collate.c:3023 ++#, c-format ++msgid "%s: unknown symbol `%s' in equivalent definition" ++msgstr "%s: símbolo desconhecido “%s” na definição equivalente" + +-#: stdio-common/../sysdeps/gnu/errlist.c:690 +-msgid "Protocol driver not attached" +-msgstr "Driver de protocolo no anexado" ++#: locale/programs/ld-collate.c:3032 ++msgid "error while adding equivalent collating symbol" ++msgstr "erro ao adicionar símbolo de colação equivalente" + +-#: stdio-common/../sysdeps/gnu/errlist.c:658 +-msgid "Protocol error" +-msgstr "Erro de protocolo" ++#: locale/programs/ld-collate.c:3070 ++#, c-format ++msgid "duplicate definition of script `%s'" ++msgstr "definição duplicada de script “%s”" + +-#. TRANS The socket communications protocol family you requested is not supported. +-#: stdio-common/../sysdeps/gnu/errlist.c:355 +-msgid "Protocol family not supported" +-msgstr "Famlia de protocolo no suportada" ++#: locale/programs/ld-collate.c:3118 ++#, c-format ++msgid "%s: unknown section name `%.*s'" ++msgstr "%s: nome de seção desconhecida “%.*s”" + +-#. TRANS You specified a socket option that doesn't make sense for the +-#. TRANS particular protocol being used by the socket. @xref{Socket Options}. +-#: stdio-common/../sysdeps/gnu/errlist.c:328 +-msgid "Protocol not available" +-msgstr "Protocolo no disponvel" ++#: locale/programs/ld-collate.c:3147 ++#, c-format ++msgid "%s: multiple order definitions for section `%s'" ++msgstr "%s: múltiplas definições de ordem para a seção “%s”" + +-#. TRANS The socket domain does not support the requested communications protocol +-#. TRANS (perhaps because the requested protocol is completely invalid). +-#. TRANS @xref{Creating a Socket}. +-#: stdio-common/../sysdeps/gnu/errlist.c:335 +-msgid "Protocol not supported" +-msgstr "Protocolo no suportado" ++#: locale/programs/ld-collate.c:3175 ++#, c-format ++msgid "%s: invalid number of sorting rules" ++msgstr "%s: número inválido de regras de ordenação" + +-#. TRANS The socket type does not support the requested communications protocol. +-#: stdio-common/../sysdeps/gnu/errlist.c:322 +-msgid "Protocol wrong type for socket" +-msgstr "Tipo errado de protocolo para socket" ++#: locale/programs/ld-collate.c:3202 ++#, c-format ++msgid "%s: multiple order definitions for unnamed section" ++msgstr "%s: múltiplas definições de ordem para seção sem nome" + +-#: nis/nis_error.c:64 +-msgid "Query illegal for named table" +-msgstr "Pergunta ilegal para tabela nominada" ++#: locale/programs/ld-collate.c:3257 locale/programs/ld-collate.c:3387 ++#: locale/programs/ld-collate.c:3750 ++#, c-format ++msgid "%s: missing `order_end' keyword" ++msgstr "%s: faltando palavra-chave “order_end”" + +-#: stdio-common/../sysdeps/unix/siglist.c:28 +-#: sysdeps/unix/sysv/linux/siglist.h:24 +-msgid "Quit" +-msgstr "Sair" ++#: locale/programs/ld-collate.c:3320 ++#, c-format ++msgid "%s: order for collating symbol %.*s not yet defined" ++msgstr "%s: ordem para símbolo de comparação %.*s ainda não definida" + +-#: stdio-common/../sysdeps/gnu/errlist.c:754 +-msgid "RFS specific error" +-msgstr "Erro especfico de RFS" ++#: locale/programs/ld-collate.c:3338 ++#, c-format ++msgid "%s: order for collating element %.*s not yet defined" ++msgstr "%s: ordem para elemento de comparação %.*s ainda não definida" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:539 +-msgid "RPC bad procedure for program" +-msgstr "Procedimento RPC ruim para programa" ++#: locale/programs/ld-collate.c:3349 ++#, c-format ++msgid "%s: cannot reorder after %.*s: symbol not known" ++msgstr "%s: não foi possível reordenar após %.*s: símbolo desconhecido" + +-#: nis/ypclnt.c:767 +-msgid "RPC failure on NIS operation" +-msgstr "Falha RPC na operao NIS" ++#: locale/programs/ld-collate.c:3401 locale/programs/ld-collate.c:3762 ++#, c-format ++msgid "%s: missing `reorder-end' keyword" ++msgstr "%s: faltando palavra-chave “reorder-end”" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:529 +-msgid "RPC program not available" +-msgstr "Programa RPC no disponvel" ++#: locale/programs/ld-collate.c:3435 locale/programs/ld-collate.c:3633 ++#, c-format ++msgid "%s: section `%.*s' not known" ++msgstr "%s: seção “%.*s” desconhecida" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:534 +-msgid "RPC program version wrong" +-msgstr "Verso incorreta de programa RPC" ++#: locale/programs/ld-collate.c:3500 ++#, c-format ++msgid "%s: bad symbol <%.*s>" ++msgstr "%s: símbolo inválido <%.*s>" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:519 +-msgid "RPC struct is bad" +-msgstr "Estrutura RPC invlida" ++#: locale/programs/ld-collate.c:3696 ++#, c-format ++msgid "%s: cannot have `%s' as end of ellipsis range" ++msgstr "%s: não pode ter “%s” como terminação de intervalo de elipse" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:524 +-msgid "RPC version wrong" +-msgstr "Verso RPC incorreta" ++#: locale/programs/ld-collate.c:3746 ++#, c-format ++msgid "%s: empty category description not allowed" ++msgstr "%s: descrição vazia para categoria não permitida" + +-#: sunrpc/clnt_perr.c:215 +-msgid "RPC: (unknown error code)" +-msgstr "RPC: (cdigo de erro desconhecido)" ++#: locale/programs/ld-collate.c:3765 ++#, c-format ++msgid "%s: missing `reorder-sections-end' keyword" ++msgstr "%s: faltando palavra-chave “reorder-sections-end”" + +-#: sunrpc/clnt_perr.c:176 +-msgid "RPC: Authentication error" +-msgstr "RPC: Erro de autenticao" ++#: locale/programs/ld-collate.c:3929 ++#, c-format ++msgid "%s: '%s' without matching 'ifdef' or 'ifndef'" ++msgstr "%s: “%s” sem “ifdef” ou “ifndef” correspondente" + +-#: sunrpc/clnt_perr.c:166 +-msgid "RPC: Can't decode result" +-msgstr "RPC: Impossvel decodificar resultado" ++#: locale/programs/ld-collate.c:3947 ++#, c-format ++msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'" ++msgstr "%s: “endif” sem “ifdef” ou “ifndef” correspondente" + +-#: sunrpc/clnt_perr.c:164 +-msgid "RPC: Can't encode arguments" +-msgstr "RPC: impossvel codificar argumentos" ++#: locale/programs/ld-ctype.c:448 ++msgid "No character set name specified in charmap" ++msgstr "Nenhum nome de conjunto de caracteres especificado no mapa de caracteres" + +-#: sunrpc/clnt_perr.c:196 +-msgid "RPC: Failed (unspecified error)" +-msgstr "RPC: Falhou (erro no especificado)" ++#: locale/programs/ld-ctype.c:476 ++#, c-format ++msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" ++msgstr "caractere L“\\u%0*x” na classe “%s” deve estar na classe “%s”" + +-#: sunrpc/clnt_perr.c:174 +-msgid "RPC: Incompatible versions of RPC" +-msgstr "RPC: Verses incompatveis de RPC" ++#: locale/programs/ld-ctype.c:490 ++#, c-format ++msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" ++msgstr "caractere L“\\u%0*x” na classe “%s” não pode estar na classe “%s”" + +-#: sunrpc/clnt_perr.c:192 +-msgid "RPC: Port mapper failure" +-msgstr "RPC: Falha no Port mapper" ++#: locale/programs/ld-ctype.c:504 locale/programs/ld-ctype.c:560 ++#, c-format ++msgid "internal error in %s, line %u" ++msgstr "erro interno em %s, linha %u" + +-#: sunrpc/clnt_perr.c:182 +-msgid "RPC: Procedure unavailable" +-msgstr "RPC: Procedimento indisponvel" ++#: locale/programs/ld-ctype.c:532 ++#, c-format ++msgid "character '%s' in class `%s' must be in class `%s'" ++msgstr "caractere “%s” na classe “%s” deve estar na classe “%s”" + +-#: sunrpc/clnt_perr.c:194 +-msgid "RPC: Program not registered" +-msgstr "RPC: Programa no registrado" ++#: locale/programs/ld-ctype.c:547 ++#, c-format ++msgid "character '%s' in class `%s' must not be in class `%s'" ++msgstr "caractere “%s” na classe “%s” não pode estar na classe “%s”" + +-#: sunrpc/clnt_perr.c:178 +-msgid "RPC: Program unavailable" +-msgstr "RPC: Programa indisponvel" ++#: locale/programs/ld-ctype.c:576 locale/programs/ld-ctype.c:611 ++#, c-format ++msgid " character not in class `%s'" ++msgstr " caractere não está na classe “%s”" + +-#: sunrpc/clnt_perr.c:180 +-msgid "RPC: Program/version mismatch" +-msgstr "RPC: Programa/verso incompatveis" +- +-#: sunrpc/clnt_perr.c:186 +-msgid "RPC: Remote system error" +-msgstr "RPC: Erro remoto de sistema" +- +-#: sunrpc/clnt_perr.c:184 +-msgid "RPC: Server can't decode arguments" +-msgstr "RPC: O servidor no pode decodificar os argumentos" +- +-#: sunrpc/clnt_perr.c:162 +-msgid "RPC: Success" +-msgstr "RPC: Sucesso" ++#: locale/programs/ld-ctype.c:587 locale/programs/ld-ctype.c:621 ++#, c-format ++msgid " character must not be in class `%s'" ++msgstr " caractere não pode estar na classe “%s”" + +-#: sunrpc/clnt_perr.c:172 +-msgid "RPC: Timed out" +-msgstr "RPC: Tempo esgotado" ++#: locale/programs/ld-ctype.c:601 ++msgid "character not defined in character map" ++msgstr "caractere não definido no mapa de caracteres" + +-#: sunrpc/clnt_perr.c:170 +-msgid "RPC: Unable to receive" +-msgstr "RPC: Impossvel receber" ++#: locale/programs/ld-ctype.c:735 ++msgid "`digit' category has not entries in groups of ten" ++msgstr "categoria “digit” não possui entradas em grupos de dez" + +-#: sunrpc/clnt_perr.c:168 +-msgid "RPC: Unable to send" +-msgstr "RPC: Impossvel enviar" ++#: locale/programs/ld-ctype.c:784 ++msgid "no input digits defined and none of the standard names in the charmap" ++msgstr "nenhum dígito de entrada definido e nenhum dos nomes padrões no mapa de caracteres" + +-#: sunrpc/clnt_perr.c:188 +-msgid "RPC: Unknown host" +-msgstr "RPC: Host desconhecido" ++#: locale/programs/ld-ctype.c:849 ++msgid "not all characters used in `outdigit' are available in the charmap" ++msgstr "nem todos os caracteres usados em “outdigit” estão disponíveis no mapa de caracteres" + +-#: sunrpc/clnt_perr.c:190 +-msgid "RPC: Unknown protocol" +-msgstr "RPC: Protocolo desconhecido" ++#: locale/programs/ld-ctype.c:866 ++msgid "not all characters used in `outdigit' are available in the repertoire" ++msgstr "nem todos os caracteres usados em “outdigit” estão disponíveis no repertório" + +-#: nis/nis_print.c:184 ++#: locale/programs/ld-ctype.c:1131 + #, c-format +-msgid "RSA (%d bits)\n" +-msgstr "RSA (%d bits)\n" ++msgid "character class `%s' already defined" ++msgstr "classe de caractere “%s” já definida" + +-#: elf/dlsym.c:59 elf/dlvsym.c:62 +-msgid "RTLD_NEXT used in code not dynamically loaded" +-msgstr "RTLD_NEXT usado em cdigo no dinamicamente carregado" ++#: locale/programs/ld-ctype.c:1137 ++#, c-format ++msgid "implementation limit: no more than %Zd character classes allowed" ++msgstr "limite de implementação: não são permitidos mais que %Zd classes de caracteres" + +-#: elf/sprof.c:88 +-msgid "Read and display shared object profiling data" +-msgstr "L e mostra perfil de dados do objeto compartilhado" ++#: locale/programs/ld-ctype.c:1163 ++#, c-format ++msgid "character map `%s' already defined" ++msgstr "mapa de caracteres “%s” já definido" + +-#: nscd/nscd.c:78 +-msgid "Read configuration data from NAME" +-msgstr "L configurao de dados de NOME" ++#: locale/programs/ld-ctype.c:1169 ++#, c-format ++msgid "implementation limit: no more than %d character maps allowed" ++msgstr "limite de implementação: não são permitidos mais que %d mapas de caracteres" + +-#. TRANS An attempt was made to modify something on a read-only file system. +-#: stdio-common/../sysdeps/gnu/errlist.c:218 +-msgid "Read-only file system" +-msgstr "Sistema de arquivos somente para leitura" ++#: locale/programs/ld-ctype.c:1434 locale/programs/ld-ctype.c:1559 ++#: locale/programs/ld-ctype.c:1665 locale/programs/ld-ctype.c:2341 ++#: locale/programs/ld-ctype.c:3299 ++#, c-format ++msgid "%s: field `%s' does not contain exactly ten entries" ++msgstr "%s: campo “%s” não contém exatamente dez entradas" + +-#: string/strsignal.c:66 ++#: locale/programs/ld-ctype.c:1462 locale/programs/ld-ctype.c:2036 + #, c-format +-msgid "Real-time signal %d" +-msgstr "Sinal de tempo-real %d" ++msgid "to-value of range is smaller than from-value " ++msgstr "valor-para de intervalo é menor que o valor-de " + +-#: posix/regex.c:1027 +-msgid "Regular expression too big" +-msgstr "Expresso regular muito longa" ++#: locale/programs/ld-ctype.c:1589 ++msgid "start and end character sequence of range must have the same length" ++msgstr "sequência de caracteres de início e término de intervalo devem ter o mesmo comprimento" + +-#: stdio-common/../sysdeps/gnu/errlist.c:810 +-msgid "Remote I/O error" +-msgstr "Erro de E/S remota" ++#: locale/programs/ld-ctype.c:1596 ++msgid "to-value character sequence is smaller than from-value sequence" ++msgstr "sequência de caracteres do valor-para é menor que a sequência de valor-de" + +-#: stdio-common/../sysdeps/gnu/errlist.c:766 +-msgid "Remote address changed" +-msgstr "Endereo remoto alterado" ++#: locale/programs/ld-ctype.c:1956 locale/programs/ld-ctype.c:2007 ++msgid "premature end of `translit_ignore' definition" ++msgstr "fim prematuro da definição “translit_ignore”" + +-#: inet/ruserpass.c:162 +-msgid "Remove password or make file unreadable by others." +-msgstr "Remova senha ou torne arquivo no-legvel por outros." ++#: locale/programs/ld-ctype.c:1962 locale/programs/ld-ctype.c:2013 ++#: locale/programs/ld-ctype.c:2055 ++msgid "syntax error" ++msgstr "erro de sintaxe" + +-#: elf/sprof.c:537 ++#: locale/programs/ld-ctype.c:2188 + #, c-format +-msgid "Reopening shared object `%s' failed" +-msgstr "Reabertura de objeto compartilhado `%s' falhou" +- +-#: nis/nis_print.c:170 +-msgid "Replicate :\n" +-msgstr "Duplicado :\n" ++msgid "%s: syntax error in definition of new character class" ++msgstr "%s: erro de sintaxe na definição da nova classe de caracteres" + +-#: argp/argp-help.c:1638 ++#: locale/programs/ld-ctype.c:2203 + #, c-format +-msgid "Report bugs to %s.\n" +-msgstr "Reporte erros (bugs) para %s.\n" ++msgid "%s: syntax error in definition of new character map" ++msgstr "%s: erro de sintaxe na definição do novo mapa de caracteres" + +-#: catgets/gencat.c:223 db2/makedb.c:229 iconv/iconv_prog.c:280 +-#: locale/programs/locale.c:254 locale/programs/localedef.c:389 +-msgid "Report bugs using the `glibcbug' script to .\n" +-msgstr "Reportar erros usando o script `glibcbug' para .\n" ++#: locale/programs/ld-ctype.c:2363 ++msgid "ellipsis range must be marked by two operands of same type" ++msgstr "intervalo de elipse deve estar marcado per dois operandos do mesmo tipo" + +-#: nis/ypclnt.c:765 +-msgid "Request arguments bad" +-msgstr "Argumentos de requisio invlidos" ++#: locale/programs/ld-ctype.c:2372 ++msgid "with symbolic name range values the absolute ellipsis `...' must not be used" ++msgstr "com valores de intervalo com nome simbólico, a elipse absoluta “...” não pode ser usada" + +-#: resolv/herror.c:73 +-msgid "Resolver Error 0 (no error)" +-msgstr "Erro de resolvedor 0 (no h erro)" ++#: locale/programs/ld-ctype.c:2387 ++msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" ++msgstr "com valores de intervalo de UCS, deve-se usar a elipse hexadecimal simbólica “..”" + +-#: resolv/herror.c:117 +-msgid "Resolver internal error" +-msgstr "Erro interno do resolvedor" ++#: locale/programs/ld-ctype.c:2401 ++msgid "with character code range values one must use the absolute ellipsis `...'" ++msgstr "com valores de intervalo de código de caracteres, deve-se usar a elipse absoluta “…”" + +-#. TRANS Deadlock avoided; allocating a system resource would have resulted in a +-#. TRANS deadlock situation. The system does not guarantee that it will notice +-#. TRANS all such situations. This error means you got lucky and the system +-#. TRANS noticed; it might just hang. @xref{File Locks}, for an example. +-#: stdio-common/../sysdeps/gnu/errlist.c:97 +-msgid "Resource deadlock avoided" +-msgstr "Evitado deadlock de recurso" ++#: locale/programs/ld-ctype.c:2552 ++#, c-format ++msgid "duplicated definition for mapping `%s'" ++msgstr "definição duplicada para o mapeamento “%s”" + +-#: stdio-common/../sysdeps/unix/siglist.c:54 +-msgid "Resource lost" +-msgstr "Recurso perdido" ++#: locale/programs/ld-ctype.c:2638 locale/programs/ld-ctype.c:2782 ++#, c-format ++msgid "%s: `translit_start' section does not end with `translit_end'" ++msgstr "%s: a seção “translit_start” não termina com “translit_end”" + +-#. TRANS Resource temporarily unavailable; the call might work if you try again +-#. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; +-#. TRANS they are always the same in the GNU C library. +-#. TRANS +-#. TRANS This error can happen in a few different situations: +-#. TRANS +-#. TRANS @itemize @bullet +-#. TRANS @item +-#. TRANS An operation that would block was attempted on an object that has +-#. TRANS non-blocking mode selected. Trying the same operation again will block +-#. TRANS until some external condition makes it possible to read, write, or +-#. TRANS connect (whatever the operation). You can use @code{select} to find out +-#. TRANS when the operation will be possible; @pxref{Waiting for I/O}. +-#. TRANS +-#. TRANS @strong{Portability Note:} In many older Unix systems, this condition +-#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code +-#. TRANS different from @code{EAGAIN}. To make your program portable, you should +-#. TRANS check for both codes and treat them the same. +-#. TRANS +-#. TRANS @item +-#. TRANS A temporary resource shortage made an operation impossible. @code{fork} +-#. TRANS can return this error. It indicates that the shortage is expected to +-#. TRANS pass, so your program can try the call again later and it may succeed. +-#. TRANS It is probably a good idea to delay for a few seconds before trying it +-#. TRANS again, to allow time for other processes to release scarce resources. +-#. TRANS Such shortages are usually fairly serious and affect the whole system, +-#. TRANS so usually an interactive program should report the error to the user +-#. TRANS and return to its command loop. +-#. TRANS @end itemize +-#: stdio-common/../sysdeps/gnu/errlist.c:279 +-msgid "Resource temporarily unavailable" +-msgstr "Recurso temporariamente indisponvel" ++#: locale/programs/ld-ctype.c:2733 ++#, c-format ++msgid "%s: duplicate `default_missing' definition" ++msgstr "%s: definição duplicada de “default_missing”" + +-#: nis/nis_error.c:47 +-msgid "Results Sent to callback proc" +-msgstr "Resultados enviados para processo chamador" ++#: locale/programs/ld-ctype.c:2738 ++msgid "previous definition was here" ++msgstr "definição anterior estava aqui" + +-#: elf/sprof.c:91 +-msgid "SHOBJ [PROFDATA]" +-msgstr "SHOBJ [PROFDATA]" ++#: locale/programs/ld-ctype.c:2760 ++#, c-format ++msgid "%s: no representable `default_missing' definition found" ++msgstr "%s: nenhuma definição representável de “default_missing” localizada" + +-#: nis/nis_print.c:33 +-msgid "SUNYP" +-msgstr "SUNYP" ++#: locale/programs/ld-ctype.c:2877 locale/programs/ld-ctype.c:2973 ++#: locale/programs/ld-ctype.c:2992 locale/programs/ld-ctype.c:3012 ++#: locale/programs/ld-ctype.c:3032 locale/programs/ld-ctype.c:3052 ++#: locale/programs/ld-ctype.c:3072 locale/programs/ld-ctype.c:3111 ++#: locale/programs/ld-ctype.c:3131 locale/programs/ld-ctype.c:3195 ++#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3259 ++#, c-format ++msgid "%s: character `%s' not defined while needed as default value" ++msgstr "%s: caractere “%s” não definido enquanto necessário como valor padrão" + +-#: nis/nis_print.c:265 ++#: locale/programs/ld-ctype.c:2882 locale/programs/ld-ctype.c:2978 ++#: locale/programs/ld-ctype.c:2997 locale/programs/ld-ctype.c:3017 ++#: locale/programs/ld-ctype.c:3037 locale/programs/ld-ctype.c:3057 ++#: locale/programs/ld-ctype.c:3077 locale/programs/ld-ctype.c:3116 ++#: locale/programs/ld-ctype.c:3136 locale/programs/ld-ctype.c:3200 + #, c-format +-msgid "Search Path : %s\n" +-msgstr "Rota de Busca :%s\n" ++msgid "%s: character `%s' in charmap not representable with one byte" ++msgstr "%s: caractere “%s” no mapa de caracteres não representável com um byte" + +-#: stdio-common/../sysdeps/unix/siglist.c:36 +-#: sysdeps/unix/sysv/linux/siglist.h:31 +-msgid "Segmentation fault" +-msgstr "Falha de segmentao" ++#: locale/programs/ld-ctype.c:3242 locale/programs/ld-ctype.c:3265 ++#, c-format ++msgid "%s: character `%s' needed as default value not representable with one byte" ++msgstr "%s: caractere “%s” necessário como valor padrão não representável com um byte" + +-#: nis/nis_error.c:35 +-msgid "Server busy, try again" +-msgstr "Servidor ocupado, tente novamente" ++#: locale/programs/ld-ctype.c:3321 ++msgid "no output digits defined and none of the standard names in the charmap" ++msgstr "nenhum dígito de saída definido e nenhum dos nomes padrões no mapa de caracteres" + +-#: nis/nis_error.c:41 +-msgid "Server out of memory" +-msgstr "Memria do servidor exaurida" ++#: locale/programs/ld-ctype.c:3570 ++#, c-format ++msgid "%s: transliteration data from locale `%s' not available" ++msgstr "%s: dados de transliteração da localidade “%s” não disponíveis" + +-#: sunrpc/clnt_perr.c:277 +-msgid "Server rejected credential" +-msgstr "Servidor rejeitou credencial" ++#: locale/programs/ld-ctype.c:3669 ++#, c-format ++msgid "%s: table for class \"%s\": %lu bytes" ++msgstr "%s: tabela para a classe “%s”: %lu bytes" + +-#: sunrpc/clnt_perr.c:281 +-msgid "Server rejected verifier" +-msgstr "Servidor rejeitou verificador" ++#: locale/programs/ld-ctype.c:3733 ++#, c-format ++msgid "%s: table for map \"%s\": %lu bytes" ++msgstr "%s: tabela para o mapa “%s”: %lu bytes" + +-#: posix/../sysdeps/posix/gai_strerror.c:38 +-msgid "Servname not supported for ai_socktype" +-msgstr "`Servname' no suportado para `ai_socktype'" ++#: locale/programs/ld-ctype.c:3857 ++#, c-format ++msgid "%s: table for width: %lu bytes" ++msgstr "%s: tabela para largura: %lu bytes" + +-#: argp/argp-parse.c:89 +-msgid "Set the program name" +-msgstr "Configura o nome do programa" ++#: locale/programs/ld-identification.c:173 ++#, c-format ++msgid "%s: no identification for category `%s'" ++msgstr "%s: nenhuma identificação para a categoria “%s”" + +-#: nscd/nscd.c:82 +-msgid "Shut the server down" +-msgstr "Encerra o servidor" ++#: locale/programs/ld-identification.c:197 ++#, c-format ++msgid "%s: unknown standard `%s' for category `%s'" ++msgstr "%s: padrão desconhecido “%s” para a categoria “%s”" + +-#: stdio-common/../sysdeps/unix/siglist.c:25 +-msgid "Signal 0" +-msgstr "Sinal 0" ++#: locale/programs/ld-identification.c:380 ++#, c-format ++msgid "%s: duplicate category version definition" ++msgstr "%s: definição duplicada da versão da categoria" + +-#. TRANS A file that isn't a socket was specified when a socket is required. +-#: stdio-common/../sysdeps/gnu/errlist.c:311 +-msgid "Socket operation on non-socket" +-msgstr "Operao socket em um arquivo no-socket" ++#: locale/programs/ld-measurement.c:111 ++#, c-format ++msgid "%s: invalid value for field `%s'" ++msgstr "%s: valor inválido para o campo “%s”" + +-#. TRANS The socket type is not supported. +-#: stdio-common/../sysdeps/gnu/errlist.c:340 +-msgid "Socket type not supported" +-msgstr "Tipo socket no suportado" ++#: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:146 ++#, c-format ++msgid "%s: field `%s' undefined" ++msgstr "%s: campo “%s” indefinido" + +-#. TRANS A network connection was aborted locally. +-#: stdio-common/../sysdeps/gnu/errlist.c:394 +-msgid "Software caused connection abort" +-msgstr "Trmino de conexo causada por software" ++#: locale/programs/ld-messages.c:119 locale/programs/ld-messages.c:152 ++#: locale/programs/ld-monetary.c:264 locale/programs/ld-numeric.c:117 ++#, c-format ++msgid "%s: value for field `%s' must not be an empty string" ++msgstr "%s: valor para campo “%s” não pode estar vazio" + +-#: sunrpc/rpcinfo.c:658 +-msgid "Sorry. You are not root\n" +-msgstr "Lamento. Voc no o superusurio\n" ++#: locale/programs/ld-messages.c:135 locale/programs/ld-messages.c:168 ++#, c-format ++msgid "%s: no correct regular expression for field `%s': %s" ++msgstr "%s: nenhuma expressão regular correta para o campo “%s”: %s" + +-#: locale/programs/localedef.c:97 +-msgid "Source definitions are found in FILE" +-msgstr "Definies fonte so encontrada no ARQUIVO" ++#: locale/programs/ld-monetary.c:228 ++#, c-format ++msgid "%s: value of field `int_curr_symbol' has wrong length" ++msgstr "%s: valor do campo “int_curr_symbol” possui comprimento incorreto" + +-#: stdio-common/../sysdeps/gnu/errlist.c:746 +-msgid "Srmount error" +-msgstr "Erro de Srmount" ++#: locale/programs/ld-monetary.c:245 ++#, c-format ++msgid "%s: value of field `int_curr_symbol' does not correspond to a valid name in ISO 4217 [--no-warnings=intcurrsym]" ++msgstr "%s: valor do campo “int_curr_symbol” não corresponde a um nome válido na ISO 4217 [--no-warnings=intcurrsym]" + +-#: sysdeps/unix/sysv/linux/siglist.h:59 +-msgid "Stack fault" +-msgstr "Falha de pilha" ++#: locale/programs/ld-monetary.c:293 locale/programs/ld-monetary.c:322 ++#, c-format ++msgid "%s: value for field `%s' must be in range %d...%d" ++msgstr "%s: valor para o campo “%s” deve estar no intervalo %d…%d" + +-#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS +-#. TRANS system which is due to file system rearrangements on the server host. +-#. TRANS Repairing this condition usually requires unmounting and remounting +-#. TRANS the NFS file system on the local host. +-#: stdio-common/../sysdeps/gnu/errlist.c:506 +-msgid "Stale NFS file handle" +-msgstr "Manipulador de arquivo NFS corrompido" ++#: locale/programs/ld-monetary.c:549 locale/programs/ld-numeric.c:228 ++#, c-format ++msgid "%s: value for field `%s' must be a single character" ++msgstr "%s: valor para o campo “%s” deve estar em um único caractere" + +-#: nscd/nscd.c:81 +-msgid "Start NUMBER threads" +-msgstr "Iniciar NMERO de linhas (threads)" ++#: locale/programs/ld-monetary.c:646 locale/programs/ld-numeric.c:272 ++#, c-format ++msgid "%s: `-1' must be last entry in `%s' field" ++msgstr "%s: “-1” deve ser o último registro no campo “%s”" + +-#: nis/nis_print.c:357 ++#: locale/programs/ld-monetary.c:668 locale/programs/ld-numeric.c:289 + #, c-format +-msgid "Status : %s\n" +-msgstr "Posio : %s\n" ++msgid "%s: values for field `%s' must be smaller than 127" ++msgstr "%s: valor para o campo “%s” deve ser menor que 127" + +-#: stdio-common/../sysdeps/unix/siglist.c:43 +-#: sysdeps/unix/sysv/linux/siglist.h:37 +-msgid "Stopped" +-msgstr "Parado" ++#: locale/programs/ld-monetary.c:714 ++msgid "conversion rate value cannot be zero" ++msgstr "valor da taxa de conversão não pode ser zero" + +-#: stdio-common/../sysdeps/unix/siglist.c:42 +-#: sysdeps/unix/sysv/linux/siglist.h:36 +-msgid "Stopped (signal)" +-msgstr "Parado (sinal)" ++#: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:124 ++#: locale/programs/ld-telephone.c:147 ++#, c-format ++msgid "%s: invalid escape sequence in field `%s'" ++msgstr "%s: sequência de escape inválida no campo “%s”" + +-#: stdio-common/../sysdeps/unix/siglist.c:46 +-#: sysdeps/unix/sysv/linux/siglist.h:40 +-msgid "Stopped (tty input)" +-msgstr "Parado (entrada tty)" ++#: locale/programs/ld-time.c:245 ++#, c-format ++msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" ++msgstr "%s: sinalizador de direção na string %Zd no campo “era” não é “+” nem “-”" + +-#: stdio-common/../sysdeps/unix/siglist.c:47 +-#: sysdeps/unix/sysv/linux/siglist.h:41 +-msgid "Stopped (tty output)" +-msgstr "Parado (sada tty)" ++#: locale/programs/ld-time.c:255 ++#, c-format ++msgid "%s: direction flag in string %Zd in `era' field is not a single character" ++msgstr "%s: sinalizador de direção na string %Zd no campo “era” não é um único caractere" + +-#: stdio-common/../sysdeps/gnu/errlist.c:790 +-msgid "Streams pipe error" +-msgstr "Erro de pipe streams" ++#: locale/programs/ld-time.c:267 ++#, c-format ++msgid "%s: invalid number for offset in string %Zd in `era' field" ++msgstr "%s: número inválido para deslocamento na string %Zd no campo “era”" + +-#: stdio-common/../sysdeps/gnu/errlist.c:794 +-msgid "Structure needs cleaning" +-msgstr "A estrutura necessita de limpeza" ++#: locale/programs/ld-time.c:274 ++#, c-format ++msgid "%s: garbage at end of offset value in string %Zd in `era' field" ++msgstr "%s: lixo no final do valor do deslocamento na string %Zd no campo “era”" + +-#: nis/nis_error.c:28 nis/ypclnt.c:763 nis/ypclnt.c:837 posix/regex.c:1012 +-#: stdio-common/../sysdeps/gnu/errlist.c:19 +-msgid "Success" +-msgstr "Sucesso" ++#: locale/programs/ld-time.c:324 ++#, c-format ++msgid "%s: invalid starting date in string %Zd in `era' field" ++msgstr "%s: data de início inválida na string %Zd no campo “era”" + +-#: locale/programs/localedef.c:106 +-msgid "Suppress warnings and information messages" +-msgstr "Suprime avisos e mensagens de informao" ++#: locale/programs/ld-time.c:332 ++#, c-format ++msgid "%s: garbage at end of starting date in string %Zd in `era' field " ++msgstr "%s: lixo no final da data início na string %Zd no campo “era” " + +-#: locale/programs/localedef.c:96 +-msgid "Symbolic character names defined in FILE" +-msgstr "Nomes de caracteres simblicos definido en ARQUIVO" ++#: locale/programs/ld-time.c:350 ++#, c-format ++msgid "%s: starting date is invalid in string %Zd in `era' field" ++msgstr "%s: data de início inválida na string %Zd no campo “era”" + +-#: posix/../sysdeps/posix/gai_strerror.c:40 +-msgid "System error" +-msgstr "Erro de sistema" ++#: locale/programs/ld-time.c:398 locale/programs/ld-time.c:424 ++#, c-format ++msgid "%s: invalid stopping date in string %Zd in `era' field" ++msgstr "%s: data de parada inválida na string %Zd no campo “era”" + +-#: locale/programs/locale.c:63 +-msgid "System information:" +-msgstr "Informao do Sistema:" ++#: locale/programs/ld-time.c:406 ++#, c-format ++msgid "%s: garbage at end of stopping date in string %Zd in `era' field" ++msgstr "%s: lixo no final da data de parada na string %Zd no campo “era”" + +-#: nis/ypclnt.c:843 +-msgid "System resource allocation failure" +-msgstr "Falha de alocao de recursos do sistema" ++#: locale/programs/ld-time.c:432 ++#, c-format ++msgid "%s: missing era name in string %Zd in `era' field" ++msgstr "%s: faltando o nome da era na string %Zd no campo “era”" + +-#: locale/programs/localedef.c:384 ++#: locale/programs/ld-time.c:443 + #, c-format +-msgid "" +-"System's directory for character maps : %s\n" +-" repertoire maps: %s\n" +-" locale path : %s\n" +-"%s" +-msgstr "" +-"Diretrio do sistema para mapas de caracteres: %s\n" +-" mapas de repertrio: %s\n" +-" rota de localizao: %s\n" +-"%s" ++msgid "%s: missing era format in string %Zd in `era' field" ++msgstr "%s: faltando o formato era na string %Zd no campo “era”" + +-#: nis/nis_print.c:117 +-msgid "TABLE\n" +-msgstr "TABELA\n" ++#: locale/programs/ld-time.c:488 ++#, c-format ++msgid "%s: third operand for value of field `%s' must not be larger than %d" ++msgstr "%s: terceiro operando para o valor de campo “%s” não pode ser maior que %d" + +-#: nis/nis_print.c:262 ++#: locale/programs/ld-time.c:496 locale/programs/ld-time.c:504 ++#: locale/programs/ld-time.c:512 + #, c-format +-msgid "Table Type : %s\n" +-msgstr "Tipo de Tabela : %s\n" ++msgid "%s: values for field `%s' must not be larger than %d" ++msgstr "%s: valor para o campo “%s” não pode ser maior que %d" + +-#: posix/../sysdeps/posix/gai_strerror.c:31 +-msgid "Temporary failure in name resolution" +-msgstr "Falha temporrio na resoluo de nome" ++#: locale/programs/ld-time.c:717 ++#, c-format ++msgid "%s: too few values for field `%s'" ++msgstr "%s: número insuficiente de valores para o campo “%s”" + +-#: stdio-common/../sysdeps/unix/siglist.c:40 +-#: sysdeps/unix/sysv/linux/siglist.h:34 +-msgid "Terminated" +-msgstr "Terminado" ++#: locale/programs/ld-time.c:762 ++msgid "extra trailing semicolon" ++msgstr "ponto e vírgula extra no final" + +-#. TRANS An attempt to execute a file that is currently open for writing, or +-#. TRANS write to a file that is currently being executed. Often using a +-#. TRANS debugger to run a program is considered having it open for writing and +-#. TRANS will cause this error. (The name stands for ``text file busy''.) This +-#. TRANS is not an error in the GNU system; the text is copied as necessary. +-#: stdio-common/../sysdeps/gnu/errlist.c:197 +-msgid "Text file busy" +-msgstr "rea de texto ocupada" ++#: locale/programs/ld-time.c:765 ++#, c-format ++msgid "%s: too many values for field `%s'" ++msgstr "%s: número excessivo de valores para o campo “%s” de valores" + +-#: iconv/iconv_prog.c:536 +-msgid "" +-"The following list contain all the coded character sets known. This does\n" +-"not necessarily mean that all combinations of these names can be used for\n" +-"the FROM and TO command line parameters. One coded character set can be\n" +-"listed with several different names (aliases).\n" +-" Some of the names are no plain strings but instead regular expressions and\n" +-"they match a variety of names which can be given as parameters to the\n" +-"program.\n" +-"\n" +-" " +-msgstr "" +-"A lista seguinte contm todos os conjuntos de codificao de caracteres \n" +-"conhecidos. Isto no quer dizer necessriamente que todas as combinaes\n" +-"destes nomes podem ser utilizadas nos parmetros FROM e TO. Um conjunto\n" +-"de caracteres pode ser listado com vrios nomes diferentes (apelidos).\n" +-" Alguns destes nomes no strings simples mas sim, expresses regulares, e\n" +-"eles combinam com uma variedade de nomes que podem ser dados como parmetrosao programa.\n" +-"\n" +-" " ++#: locale/programs/linereader.c:130 ++msgid "trailing garbage at end of line" ++msgstr "lixo no final da linha" + +-#: nis/nis_print.c:223 +-msgid "Time to live : " +-msgstr "Tempo de vida : " ++#: locale/programs/linereader.c:298 ++msgid "garbage at end of number" ++msgstr "lixo no final do número" + +-#: stdio-common/../sysdeps/gnu/errlist.c:662 +-msgid "Timer expired" +-msgstr "Tempo expirado" ++#: locale/programs/linereader.c:410 ++msgid "garbage at end of character code specification" ++msgstr "lixo no final da especificação do código de caractere" + +-#: nis/nis_error.c:55 +-msgid "Too Many Attributes" +-msgstr "Muitos atributos" ++#: locale/programs/linereader.c:496 ++msgid "unterminated symbolic name" ++msgstr "nome simbólico não terminado" + +-#. TRANS Too many levels of symbolic links were encountered in looking up a file name. +-#. TRANS This often indicates a cycle of symbolic links. +-#: stdio-common/../sysdeps/gnu/errlist.c:457 +-msgid "Too many levels of symbolic links" +-msgstr "Muitos nveis de links simblicos" ++#: locale/programs/linereader.c:623 ++msgid "illegal escape sequence at end of string" ++msgstr "sequência de escape ilegal no final da string" + +-#. TRANS Too many links; the link count of a single file would become too large. +-#. TRANS @code{rename} can cause this error if the file being renamed already has +-#. TRANS as many links as it can take (@pxref{Renaming Files}). +-#: stdio-common/../sysdeps/gnu/errlist.c:225 +-msgid "Too many links" +-msgstr "Muitos links" ++#: locale/programs/linereader.c:627 locale/programs/linereader.c:847 ++msgid "unterminated string" ++msgstr "string não terminada" + +-#. TRANS The current process has too many files open and can't open any more. +-#. TRANS Duplicate descriptors do count toward this limit. +-#. TRANS +-#. TRANS In BSD and GNU, the number of open files is controlled by a resource +-#. TRANS limit that can usually be increased. If you get this error, you might +-#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; +-#. TRANS @pxref{Limits on Resources}. +-#: stdio-common/../sysdeps/gnu/errlist.c:175 +-msgid "Too many open files" +-msgstr "Muitos arquivos abertos" ++#: locale/programs/linereader.c:808 ++#, c-format ++msgid "symbol `%.*s' not in charmap" ++msgstr "símbolo “%.*s” não está no mapa de caracteres" + +-#. TRANS There are too many distinct file openings in the entire system. Note +-#. TRANS that any number of linked channels count as just one file opening; see +-#. TRANS @ref{Linked Channels}. This error never occurs in the GNU system. +-#: stdio-common/../sysdeps/gnu/errlist.c:182 +-msgid "Too many open files in system" +-msgstr "Muitos arquivos abertos no sistema" ++#: locale/programs/linereader.c:829 ++#, c-format ++msgid "symbol `%.*s' not in repertoire map" ++msgstr "símbolo “%.*s” não está no mapa de repertório" + +-#. TRANS This means that the per-user limit on new process would be exceeded by +-#. TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on +-#. TRANS the @code{RLIMIT_NPROC} limit. +-#: stdio-common/../sysdeps/gnu/errlist.c:487 +-msgid "Too many processes" +-msgstr "Muitos processos" ++#: locale/programs/locale-spec.c:130 ++#, c-format ++msgid "unknown name \"%s\"" ++msgstr "nome desconhecido “%s”" + +-#. TRANS ??? +-#: stdio-common/../sysdeps/gnu/errlist.c:439 +-msgid "Too many references: cannot splice" +-msgstr "Muitas referncias: no possvel unir" ++#: locale/programs/locale.c:70 ++msgid "System information:" ++msgstr "Informação do sistema:" + +-#. TRANS The file quota system is confused because there are too many users. +-#. TRANS @c This can probably happen in a GNU system when using NFS. +-#: stdio-common/../sysdeps/gnu/errlist.c:493 +-msgid "Too many users" +-msgstr "Muitos usurios" ++#: locale/programs/locale.c:72 ++msgid "Write names of available locales" ++msgstr "Escreve nomes das localidades (locales) disponíveis" + +-#: stdio-common/../sysdeps/unix/siglist.c:30 +-#: sysdeps/unix/sysv/linux/siglist.h:26 +-msgid "Trace/breakpoint trap" +-msgstr "Trace/breakpoint trap" ++#: locale/programs/locale.c:74 ++msgid "Write names of available charmaps" ++msgstr "Escreve nomes dos mapas de caracteres disponíveis" + +-#: posix/regex.c:1017 +-msgid "Trailing backslash" +-msgstr "Contrabarra final" ++#: locale/programs/locale.c:75 ++msgid "Modify output format:" ++msgstr "Formato de modificação de saída:" + +-#. TRANS In the GNU system, opening a file returns this error when the file is +-#. TRANS translated by a program and the translator program dies while starting +-#. TRANS up, before it has connected to the file. +-#: stdio-common/../sysdeps/gnu/errlist.c:596 +-msgid "Translator died" +-msgstr "Tradutor morto" ++#: locale/programs/locale.c:76 ++msgid "Write names of selected categories" ++msgstr "Escreve nomes das categorias selecionadas" + +-#. TRANS You tried to connect a socket that is already connected. +-#. TRANS @xref{Connecting}. +-#: stdio-common/../sysdeps/gnu/errlist.c:414 +-msgid "Transport endpoint is already connected" +-msgstr "Ponto final de transporte j est conectado" ++#: locale/programs/locale.c:77 ++msgid "Write names of selected keywords" ++msgstr "Escreve nomes das palavras-chave selecionadas" + +-#. TRANS The socket is not connected to anything. You get this error when you +-#. TRANS try to transmit data over a socket, without first specifying a +-#. TRANS destination for the data. For a connectionless socket (for datagram +-#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. +-#: stdio-common/../sysdeps/gnu/errlist.c:422 +-msgid "Transport endpoint is not connected" +-msgstr "Ponto final de transporte no est conectado" ++#: locale/programs/locale.c:78 ++msgid "Print more information" ++msgstr "Imprime mais informações" + +-#: argp/argp-help.c:1610 +-#, c-format +-msgid "Try `%s --help' or `%s --usage' for more information.\n" +-msgstr "Tente `%s --help' ou `%s --usage' para mais informaes.\n" ++#: locale/programs/locale.c:83 ++msgid "Get locale-specific information." ++msgstr "Obtém informações específicas da localidade." + +-#: inet/rcmd.c:143 +-#, c-format +-msgid "Trying %s...\n" +-msgstr "Tentando %s...\n" ++#: locale/programs/locale.c:86 ++msgid "" ++"NAME\n" ++"[-a|-m]" ++msgstr "" ++"NOME\n" ++"[-a|-m]" + +-#: nis/nis_print.c:163 ++#: locale/programs/locale.c:190 + #, c-format +-msgid "Type : %s\n" +-msgstr "Tipo : %s\n" ++msgid "Cannot set LC_CTYPE to default locale" ++msgstr "Não foi possível definir LC_CTYPE para a localidade padrão" + +-#: nis/nis_print.c:47 +-msgid "UNKNOWN" +-msgstr "DESCONHECIDO" +- +-#: nis/nis_error.c:72 +-msgid "Unable to authenticate NIS+ client" +-msgstr "Impossvel autenticar cliente NIS+" +- +-#: nis/nis_error.c:71 +-msgid "Unable to authenticate NIS+ server" +-msgstr "Impossvel autenticar servidor NIS+" +- +-#: nis/nis_error.c:46 +-msgid "Unable to create callback" +-msgstr "Impossvel criar chamador" +- +-#: nis/nis_error.c:74 +-msgid "Unable to create process on server" +-msgstr "Impossvel criar processo no servidor" +- +-#: nis/nis_print.c:190 ++#: locale/programs/locale.c:192 + #, c-format +-msgid "Unknown (type = %d, bits = %d)\n" +-msgstr "Desconhecido (tipo = %d, bits = %d)\n" ++msgid "Cannot set LC_MESSAGES to default locale" ++msgstr "Não foi possível definir LC_MESSAGES para a localidade padrão" + +-#: inet/ruserpass.c:248 ++#: locale/programs/locale.c:205 + #, c-format +-msgid "Unknown .netrc keyword %s" +-msgstr "Palavra-chave em .netrc desconhecida %s" ++msgid "Cannot set LC_COLLATE to default locale" ++msgstr "Não foi possível definir LC_COLLATE para a localidade padrão" + +-#: nis/ypclnt.c:797 +-msgid "Unknown NIS error code" +-msgstr "Cdigo de erro NIS desconhecido" +- +-#: nss/getent.c:505 ++#: locale/programs/locale.c:221 + #, c-format +-msgid "Unknown database: %s\n" +-msgstr "Base de dados desconhecida: %s\n" +- +-#: posix/../sysdeps/posix/gai_strerror.c:51 +-msgid "Unknown error" +-msgstr "Erro desconhecido" +- +-#: string/../sysdeps/generic/_strerror.c:48 +-#: string/../sysdeps/mach/_strerror.c:86 +-#: sysdeps/mach/hurd/mips/dl-machine.c:82 +-msgid "Unknown error " +-msgstr "Erro desconhecido " +- +-#: resolv/herror.c:74 +-msgid "Unknown host" +-msgstr "Host desconhecido" +- +-#: nis/nis_error.c:34 +-msgid "Unknown object" +-msgstr "Objeto desconhecido" ++msgid "Cannot set LC_ALL to default locale" ++msgstr "Não foi possível definir LC_ALL para a localidade padrão" + +-#: nscd/nscd_conf.c:181 ++#: locale/programs/locale.c:521 + #, c-format +-msgid "Unknown option: %s %s %s" +-msgstr "Opo desconhecida: %s %s %s" +- +-#: resolv/herror.c:120 +-msgid "Unknown resolver error" +-msgstr "Erro desconhecido do resolvedor" +- +-#: resolv/herror.c:76 +-msgid "Unknown server error" +-msgstr "Erro desconhecido de servidor" ++msgid "while preparing output" ++msgstr "enquanto preparava a saída" + +-#: string/strsignal.c:70 +-#, c-format +-msgid "Unknown signal %d" +-msgstr "Sinal desconhecido %d" ++#: locale/programs/localedef.c:112 ++msgid "Input Files:" ++msgstr "Arquivos de entrada:" + +-#: misc/error.c:107 +-msgid "Unknown system error" +-msgstr "Erro desconhecido de sistema" ++#: locale/programs/localedef.c:114 ++msgid "Symbolic character names defined in FILE" ++msgstr "Nomes de caracteres simbólicos definido no ARQUIVO" + +-#: nis/ypclnt.c:845 +-msgid "Unknown ypbind error" +-msgstr "Erro desconhecido de ypbind" ++#: locale/programs/localedef.c:116 ++msgid "Source definitions are found in FILE" ++msgstr "Definições fonte são encontradas no ARQUIVO" + +-#: posix/regex.c:1020 +-msgid "Unmatched ( or \\(" +-msgstr "( ou \\( descasados" ++#: locale/programs/localedef.c:118 ++msgid "FILE contains mapping from symbolic names to UCS4 values" ++msgstr "ARQUIVO contém mapas de nomes simbólicos para valores UCS4" + +-#: posix/regex.c:1028 +-msgid "Unmatched ) or \\)" +-msgstr ") ou \\) descasados" ++#: locale/programs/localedef.c:122 ++msgid "Create output even if warning messages were issued" ++msgstr "Cria saída mesmo que mensagens de aviso forem produzidas" + +-#: posix/regex.c:1019 +-msgid "Unmatched [ or [^" +-msgstr "[ ou [^ descasados" ++#: locale/programs/localedef.c:123 ++msgid "Optional output file prefix" ++msgstr "Prefixo opcional de arquivo de saída" + +-#: posix/regex.c:1021 +-msgid "Unmatched \\{" +-msgstr "\\{ descasado" ++#: locale/programs/localedef.c:124 ++msgid "Strictly conform to POSIX" ++msgstr "Adapta estritamente ao POSIX" + +-#: posix/getconf.c:692 +-#, c-format +-msgid "Unrecognized variable `%s'" +-msgstr "Varivel no reconhecida `%s'" ++#: locale/programs/localedef.c:126 ++msgid "Suppress warnings and information messages" ++msgstr "Suprime avisos e mensagens de informação" + +-#: stdio-common/../sysdeps/unix/siglist.c:41 +-#: sysdeps/unix/sysv/linux/siglist.h:35 +-msgid "Urgent I/O condition" +-msgstr "Condio urgente de E/S" ++#: locale/programs/localedef.c:127 ++msgid "Print more messages" ++msgstr "Mostra mais mensagens" + +-#: argp/argp-help.c:1567 +-msgid "Usage:" +-msgstr "Uso:" ++#: locale/programs/localedef.c:128 locale/programs/localedef.c:131 ++msgid "" ++msgstr "" + +-#: posix/getconf.c:604 +-#, c-format +-msgid "Usage: %s variable_name [pathname]\n" +-msgstr "Uso: %s nome_da_varivel [caminho]\n" ++#: locale/programs/localedef.c:129 ++msgid "Comma-separated list of warnings to disable; supported warnings are: ascii, intcurrsym" ++msgstr "Lista separada por vírgulas de avisos para desabilitar; há suporte para os avisos: ascii, intcurrsym" + +-#: sunrpc/rpcinfo.c:674 +-msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" +-msgstr "Uso: rpcinfo [ -n nmporta ] -u host nmprog [ nmvers ]\n" ++#: locale/programs/localedef.c:132 ++msgid "Comma-separated list of warnings to enable; supported warnings are: ascii, intcurrsym" ++msgstr "Lista separada por vírgulas de avisos para habilitar; há suporte para os avisos: ascii, intcurrsym" + +-#: stdio-common/../sysdeps/unix/siglist.c:55 +-#: sysdeps/unix/sysv/linux/siglist.h:48 +-msgid "User defined signal 1" +-msgstr "Sinal 1 definido pelo usurio" ++#: locale/programs/localedef.c:135 ++msgid "Archive control:" ++msgstr "Controle de pacote:" + +-#: stdio-common/../sysdeps/unix/siglist.c:56 +-#: sysdeps/unix/sysv/linux/siglist.h:49 +-msgid "User defined signal 2" +-msgstr "Sinal 2 definido pelo usurio" ++#: locale/programs/localedef.c:137 ++msgid "Don't add new data to archive" ++msgstr "Não adiciona novos dados ao pacote" + +-#: stdio-common/../sysdeps/gnu/errlist.c:654 +-msgid "Value too large for defined data type" +-msgstr "Valor muito extenso para o tipo de dados definido" ++#: locale/programs/localedef.c:139 ++msgid "Add locales named by parameters to archive" ++msgstr "Adiciona localidades nomeadas por parâmetros ao pacote" + +-#: stdio-common/../sysdeps/unix/siglist.c:51 +-#: sysdeps/unix/sysv/linux/siglist.h:45 +-msgid "Virtual timer expired" +-msgstr "Temporizador virtual expirado" ++#: locale/programs/localedef.c:140 ++msgid "Replace existing archive content" ++msgstr "Substitui o conteúdo de pacote existente" + +-#: timezone/zic.c:1899 +-msgid "Wild result from command execution" +-msgstr "Resultado insensato da execuo do comando" ++#: locale/programs/localedef.c:142 ++msgid "Remove locales named by parameters from archive" ++msgstr "Remove localidades nomeadas por parâmetros do pacote" + +-#: stdio-common/../sysdeps/unix/siglist.c:53 +-#: sysdeps/unix/sysv/linux/siglist.h:47 +-msgid "Window changed" +-msgstr "Janela alterada" ++#: locale/programs/localedef.c:143 ++msgid "List content of archive" ++msgstr "Lista conteúdo do pacote" + +-#: locale/programs/locale.c:67 +-msgid "Write names of available charmaps" +-msgstr "Escreve nomes dos mapas de caracteres (charmaps) disponveis" ++#: locale/programs/localedef.c:145 ++msgid "locale.alias file to consult when making archive" ++msgstr "arquivo localidade.apelido a ser consultado ao criar pacote" + +-#: locale/programs/locale.c:65 +-msgid "Write names of available locales" +-msgstr "Escreve nomes das localizaes (locales) disponveis" ++#: locale/programs/localedef.c:147 ++msgid "Generate little-endian output" ++msgstr "Gera saída em little-endian" + +-#: locale/programs/locale.c:69 +-msgid "Write names of selected categories" +-msgstr "Escreve nomes das categorias selecionadasd" ++#: locale/programs/localedef.c:149 ++msgid "Generate big-endian output" ++msgstr "Gera saída em big-endian" + +-#: locale/programs/locale.c:70 +-msgid "Write names of selected keywords" +-msgstr "Escreve nomes das palavras-chave selecionadas" ++#: locale/programs/localedef.c:154 ++msgid "Compile locale specification" ++msgstr "Compila especificação localizada" + +-#: catgets/gencat.c:110 db2/makedb.c:59 +-msgid "Write output to file NAME" +-msgstr "Escreve a sada para o arquivo NOME" ++#: locale/programs/localedef.c:157 ++msgid "" ++"NAME\n" ++"[--add-to-archive|--delete-from-archive] FILE...\n" ++"--list-archive [FILE]" ++msgstr "" ++"NOME\n" ++"[--add-to-archive|--delete-from-archive] ARQUIVO...\n" ++"--list-archive [ARQUIVO]" + +-#: catgets/gencat.c:241 db2/makedb.c:247 elf/sprof.c:365 +-#: iconv/iconv_prog.c:299 locale/programs/locale.c:272 +-#: locale/programs/localedef.c:408 nscd/nscd.c:228 nss/getent.c:70 +-#: posix/getconf.c:629 ++#: locale/programs/localedef.c:232 + #, c-format +-msgid "Written by %s.\n" +-msgstr "Escrito por %s.\n" +- +-#: stdio-common/../sysdeps/gnu/errlist.c:818 +-msgid "Wrong medium type" +-msgstr "Tipo de mdia incorreta" ++msgid "cannot create directory for output files" ++msgstr "não foi possível criar diretório para os arquivos de saída" + +-#: nis/nis_print.c:39 +-msgid "X500" +-msgstr "X500" +- +-#: nis/nis_print.c:43 +-msgid "XCHS" +-msgstr "XCHS" ++#: locale/programs/localedef.c:243 ++msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" ++msgstr "FATAL: sistema não define “_POSIX2_LOCALEDEF”" + +-#: nis/ypclnt.c:185 ++#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 ++#: locale/programs/localedef.c:663 locale/programs/localedef.c:683 + #, c-format +-msgid "YPBINDPROC_DOMAIN: %s\n" +-msgstr "YPBINDPROC_DOMAIN: %s\n" ++msgid "cannot open locale definition file `%s'" ++msgstr "não é possível abrir arquivo de definição da localidade “%s”" + +-#: nis/nis_error.c:70 +-msgid "Yes, 42 is the meaning of life" +-msgstr "Sim, 42 o sentido da vida" ++#: locale/programs/localedef.c:297 ++#, c-format ++msgid "cannot write output files to `%s'" ++msgstr "não é possível escrever arquivo de saída para “%s”" + +-#. TRANS You did @strong{what}? +-#: stdio-common/../sysdeps/gnu/errlist.c:608 +-msgid "You really blew it this time" +-msgstr "Voc realmente o destruiu desta vez" ++#: locale/programs/localedef.c:303 ++msgid "no output file produced because errors were issued" ++msgstr "nenhum arquivo de saída foi produzido porque erros foram emitidos" + +-#: timezone/zic.c:1063 +-msgid "Zone continuation line end time is not after end time of previous line" +-msgstr "Tempo final da linha de zona no est aps o tempo final da linha anterior" ++#: locale/programs/localedef.c:431 ++#, c-format ++msgid "" ++"System's directory for character maps : %s\n" ++"\t\t repertoire maps: %s\n" ++"\t\t locale path : %s\n" ++"%s" ++msgstr "" ++"Diretório do sistema para mapas de caracteres: %s\n" ++" mapas de repertórios: %s\n" ++" caminho da localidade: %s\n" ++"%s" + +-#: iconv/iconv_prog.c:70 +-msgid "[FILE...]" +-msgstr "[ARQUIVO...]" ++#: locale/programs/localedef.c:631 ++msgid "circular dependencies between locale definitions" ++msgstr "dependências circulares entre definições de localidade" + +-#: locale/programs/charmap.c:481 locale/programs/locfile.c:471 +-#: locale/programs/repertoire.c:278 ++#: locale/programs/localedef.c:637 + #, c-format +-msgid "`%1$s' definition does not end with `END %1$s'" +-msgstr "`%1$s' definio no termina com `END %1$s'" ++msgid "cannot add already read locale `%s' a second time" ++msgstr "não foi possível adicionar localidade já lida “%s” uma segunda vez" + +-#: elf/sprof.c:766 ++#: locale/programs/locarchive.c:133 locale/programs/locarchive.c:380 + #, c-format +-msgid "`%s' is no correct profile data file for `%s'" +-msgstr "`%s' no o arquivo deperfil de dados correto para `%s'" ++msgid "cannot create temporary file: %s" ++msgstr "não foi possível criar arquivo temporário: %s" + +-#: locale/programs/ld-monetary.c:369 locale/programs/ld-numeric.c:193 ++#: locale/programs/locarchive.c:167 locale/programs/locarchive.c:430 + #, c-format +-msgid "`-1' must be last entry in `%s' field in `%s' category" +-msgstr "`-1' deve ser o ltimo registro no `%s' campo na `%s' categoria" +- +-#: locale/programs/ld-collate.c:1666 +-msgid "`...' must only be used in `...' and `UNDEFINED' entries" +-msgstr "`...' deve ser usado apenas em `...' e entradas `UNDEFINED'" +- +-#: locale/programs/locfile.c:668 +-msgid "`from' expected after first argument to `collating-element'" +-msgstr "`from' esperado aps primeiro argumento para `collating-element'" +- +-#: locale/programs/ld-collate.c:1118 +-msgid "`from' string in collation element declaration contains unknown character" +-msgstr "string `from' na declarao de elemento de comparao contm caracter desconhecido" ++msgid "cannot initialize archive file" ++msgstr "não foi possível inicializar o arquivo do pacote" + +-#: posix/../sysdeps/posix/gai_strerror.c:34 +-msgid "ai_family not supported" +-msgstr "Famlia de protocolo (ai_family) no suportada" +- +-#: posix/../sysdeps/posix/gai_strerror.c:39 +-msgid "ai_socktype not supported" +-msgstr "Tipo socket (ai_socktype) no suportado" +- +-#: nscd/nscd.c:121 +-msgid "already running" +-msgstr "j est rodando" +- +-#: locale/programs/charmap.c:352 locale/programs/repertoire.c:152 ++#: locale/programs/locarchive.c:174 locale/programs/locarchive.c:437 + #, c-format +-msgid "argument to <%s> must be a single character" +-msgstr "argumento para <%s> deve ser um caracter simples" ++msgid "cannot resize archive file" ++msgstr "não foi possível redimensionar o arquivo do pacote" + +-#: locale/programs/locfile.c:240 ++#: locale/programs/locarchive.c:189 locale/programs/locarchive.c:452 ++#: locale/programs/locarchive.c:674 + #, c-format +-msgid "argument to `%s' must be a single character" +-msgstr "argumento para `%s' deve ser um caracter simples" +- +-#: sunrpc/auth_unix.c:321 +-msgid "auth_none.c - Fatal marshalling problem" +-msgstr "auth_none.c - Problema fatal de marshalling" +- +-#: sunrpc/auth_unix.c:116 sunrpc/auth_unix.c:122 sunrpc/auth_unix.c:151 +-msgid "authunix_create: out of memory\n" +-msgstr "authunix_create: no h memria suficiente\n" +- +-#: locale/programs/charmap.c:297 locale/programs/locfile.c:234 +-#: locale/programs/locfile.c:261 locale/programs/repertoire.c:144 +-msgid "bad argument" +-msgstr "argumento invlido" +- +-#: inet/rcmd.c:318 +-msgid "bad owner" +-msgstr "dono invlido" +- +-#: timezone/zic.c:1185 +-msgid "blank FROM field on Link line" +-msgstr "campo FROM em branco na linha Link" +- +-#: timezone/zic.c:1189 +-msgid "blank TO field on Link line" +-msgstr "campo TO em branco na linha Link" +- +-#: malloc/mcheck.c:208 +-msgid "block freed twice\n" +-msgstr "bloco liberado duas vezes\n" +- +-#: malloc/mcheck.c:211 +-msgid "bogus mcheck_status, library is buggy\n" +-msgstr "mcheck_status invlido, biblioteca est com problemas\n" +- +-#: sunrpc/pmap_rmt.c:185 +-msgid "broadcast: ioctl (get interface configuration)" +-msgstr "broadcast: ioctl (obter configurao de interface)" ++msgid "cannot map archive header" ++msgstr "não foi possível mapear o cabeçalho do pacote" + +-#: sunrpc/pmap_rmt.c:194 +-msgid "broadcast: ioctl (get interface flags)" +-msgstr "broadcast: ioctl (obter flags de interface)" +- +-#: login/programs/request.c:167 +-msgid "buffer overflow" +-msgstr "estouro de buffer" +- +-#: sunrpc/svc_udp.c:446 +-msgid "cache_set: could not allocate new rpc_buffer" +-msgstr "cache_set: no foi possvel alocar novo rpc_buffer" +- +-#: sunrpc/svc_udp.c:440 +-msgid "cache_set: victim alloc failed" +-msgstr "cache_set: alocao de vtima falhou" ++#: locale/programs/locarchive.c:211 ++#, c-format ++msgid "failed to create new locale archive" ++msgstr "falha ao criar o novo pacote de localidade" + +-#: sunrpc/svc_udp.c:429 +-msgid "cache_set: victim not found" +-msgstr "cache_set: vtima no localizada" ++#: locale/programs/locarchive.c:223 ++#, c-format ++msgid "cannot change mode of new locale archive" ++msgstr "não foi possível alterar o modo do novo arquivo de localidade" + +-#: timezone/zic.c:1726 +-msgid "can't determine time zone abbreviation to use just after until time" +-msgstr "no possvel determinar abreviao para zona de tempo" ++#: locale/programs/locarchive.c:324 ++msgid "cannot read data from locale archive" ++msgstr "não foi possível ler dados do pacote de localidade" + +-#: sunrpc/svc_simple.c:75 ++#: locale/programs/locarchive.c:355 + #, c-format +-msgid "can't reassign procedure number %d\n" +-msgstr "no possvel reassinalar nmero de procedimento %d\n" ++msgid "cannot map locale archive file" ++msgstr "não foi possível mapear o arquivo do pacote de localidade" + +-#: locale/programs/localedef.c:279 ++#: locale/programs/locarchive.c:460 + #, c-format +-msgid "cannot `stat' locale file `%s'" +-msgstr "no possvel acessar arquivo de locale `%s'" ++msgid "cannot lock new archive" ++msgstr "não foi possível travar o novo pacote" + +-#: elf/sprof.c:935 elf/sprof.c:987 +-msgid "cannot allocate symbol data" +-msgstr "No foi possvel alocar memria" ++#: locale/programs/locarchive.c:529 ++#, c-format ++msgid "cannot extend locale archive file" ++msgstr "não foi possível estender o arquivo do pacote de localidade" + +-#: elf/sprof.c:719 elf/sprof.c:777 +-msgid "cannot create internal descriptor" +-msgstr "no possvel criar descritor interno" ++#: locale/programs/locarchive.c:538 ++#, c-format ++msgid "cannot change mode of resized locale archive" ++msgstr "não foi possível alterar o modo do arquivo de localidade redimensionado" + +-#: elf/sprof.c:417 +-msgid "cannot create internal descriptors" +-msgstr "no possivel criar descritores internos" ++#: locale/programs/locarchive.c:546 ++#, c-format ++msgid "cannot rename new archive" ++msgstr "não foi possível renomear o novo pacote" + +-#: nscd/connections.c:180 ++#: locale/programs/locarchive.c:608 + #, c-format +-msgid "cannot enable socket to accept connections: %s" +-msgstr "impossvel habilitar soquete para aceitar coneces: %s" ++msgid "cannot open locale archive \"%s\"" ++msgstr "não foi possível abrir pacote de localidade “%s”" + +-#: sunrpc/rpc_main.c:342 ++#: locale/programs/locarchive.c:613 + #, c-format +-msgid "cannot find C preprocessor: %s \n" +-msgstr "impossvel encontrar pr-processador C: %s\n" ++msgid "cannot stat locale archive \"%s\"" ++msgstr "não foi possível obter estado do pacote de localidade “%s”" + +-#: sunrpc/rpc_main.c:350 +-msgid "cannot find any C preprocessor (cpp)\n" +-msgstr "impossvel encontrar qualquer pr-processador C (cpp)\n" ++#: locale/programs/locarchive.c:632 ++#, c-format ++msgid "cannot lock locale archive \"%s\"" ++msgstr "não foi possível travar o pacote de localidade “%s”" + +-#: nscd/connections.c:205 ++#: locale/programs/locarchive.c:655 + #, c-format +-msgid "cannot handle old request version %d; current version is %d" +-msgstr "impossvel lidar com requisies de verses antigas %d; a verso atual %d" ++msgid "cannot read archive header" ++msgstr "não foi possível ler o cabeçalho do pacote" + +-#: locale/programs/ld-collate.c:1324 ++#: locale/programs/locarchive.c:728 + #, c-format +-msgid "cannot insert collation element `%.*s'" +-msgstr "no possvel inserir elemento de comparao `%.*s'" ++msgid "locale '%s' already exists" ++msgstr "localidade “%s” já existe" + +-#: locale/programs/ld-collate.c:1503 locale/programs/ld-collate.c:1510 +-msgid "cannot insert into result table" +-msgstr "no possvel inserir na tabela de resultados" ++#: locale/programs/locarchive.c:1003 locale/programs/locarchive.c:1018 ++#: locale/programs/locarchive.c:1030 locale/programs/locarchive.c:1042 ++#: locale/programs/locfile.c:350 ++#, c-format ++msgid "cannot add to locale archive" ++msgstr "não foi possível adicionar ao pacote de localidade" + +-#: locale/programs/ld-collate.c:1175 locale/programs/ld-collate.c:1218 ++#: locale/programs/locarchive.c:1203 + #, c-format +-msgid "cannot insert new collating symbol definition: %s" +-msgstr "no possvel inserir nova definio de smbolo de comparao: %s" ++msgid "locale alias file `%s' not found" ++msgstr "arquivo de apelido de localidade “%s” não localizado" + +-#: elf/sprof.c:674 +-msgid "cannot load profiling data" +-msgstr "impossvel carregar perfis de dados" ++#: locale/programs/locarchive.c:1351 ++#, c-format ++msgid "Adding %s\n" ++msgstr "Adicionando %s\n" + +-#: inet/rcmd.c:314 +-msgid "cannot open" +-msgstr "impossvel abrir" ++#: locale/programs/locarchive.c:1357 ++#, c-format ++msgid "stat of \"%s\" failed: %s: ignored" ++msgstr "obtenção de estado de “%s” falhou: %s: ignorado" + +-#: sysdeps/unix/sysv/linux/lddlibc4.c:64 ++#: locale/programs/locarchive.c:1363 + #, c-format +-msgid "cannot open `%s'" +-msgstr "no possvel abrir `%s'" ++msgid "\"%s\" is no directory; ignored" ++msgstr "“%s” não é um diretório; ignorado" + +-#: db2/makedb.c:146 ++#: locale/programs/locarchive.c:1370 + #, c-format +-msgid "cannot open database file `%s': %s" +-msgstr "no possvel abrir arquivo de banco de dados `%s': %s" ++msgid "cannot open directory \"%s\": %s: ignored" ++msgstr "não foi possível abrir o diretório “%s”: %s: ignorado" + +-#: catgets/gencat.c:272 db2/makedb.c:167 iconv/iconv_prog.c:177 ++#: locale/programs/locarchive.c:1438 + #, c-format +-msgid "cannot open input file `%s'" +-msgstr "no possvel abrir arquivo de entrada `%s'" ++msgid "incomplete set of locale files in \"%s\"" ++msgstr "definição incompleta dos arquivos de localização em “%s”" + +-#: locale/programs/localedef.c:198 ++#: locale/programs/locarchive.c:1502 + #, c-format +-msgid "cannot open locale definition file `%s'" +-msgstr "no possvel abrir arquivo de definio locale `%s'" ++msgid "cannot read all files in \"%s\": ignored" ++msgstr "não foi possível ler todos os arquivos em “%s”: ignorado" + +-#: iconv/iconv_prog.c:155 +-msgid "cannot open output file" +-msgstr "no possvel abrir arquivo de sada" ++#: locale/programs/locarchive.c:1572 ++#, c-format ++msgid "locale \"%s\" not in archive" ++msgstr "localidade “%s” não está no pacote" + +-#: catgets/gencat.c:774 catgets/gencat.c:815 db2/makedb.c:181 ++#: locale/programs/locfile.c:137 + #, c-format +-msgid "cannot open output file `%s'" +-msgstr "no possvel abrir arquivo de sada `%s'" ++msgid "argument to `%s' must be a single character" ++msgstr "argumento para “%s” deve ser um caractere simples" ++ ++#: locale/programs/locfile.c:257 ++msgid "syntax error: not inside a locale definition section" ++msgstr "erro de sintaxe: não está dentro de uma seção de definição de localidade" + +-#: locale/programs/locfile.c:1129 ++#: locale/programs/locfile.c:799 + #, c-format + msgid "cannot open output file `%s' for category `%s'" +-msgstr "no possvel abrir arquivo de sada `%s' para categoria `%s'" ++msgstr "não foi possível abrir o arquivo de saída “%s” para a categoria “%s”" + +-#: nscd/connections.c:162 ++#: locale/programs/locfile.c:822 + #, c-format +-msgid "cannot open socket: %s" +-msgstr "no possvel abrir soquete: `%s'" +- +-#: locale/programs/ld-collate.c:1370 +-msgid "cannot process order specification" +-msgstr "no possvel processar specificao de ordem" ++msgid "failure while writing data for category `%s'" ++msgstr "falha ao escrever dados para categoria “%s”" + +-#: locale/programs/locale.c:449 ++#: locale/programs/locfile.c:917 + #, c-format +-msgid "cannot read character map directory `%s'" +-msgstr "no possvel ler diretrio de mapa de caracter `%s'" ++msgid "cannot create output file `%s' for category `%s'" ++msgstr "não foi possível criar o arquivo de saída “%s” para a categoria “%s”" + +-#: nscd/connections.c:122 +-msgid "cannot read configuration file; this is fatal" +-msgstr "impossvel ler arquivo de configurao; isto fatal" ++#: locale/programs/locfile.c:953 ++msgid "expecting string argument for `copy'" ++msgstr "esperando argumento em string para “copy”" + +-#: login/programs/request.c:91 +-msgid "cannot read from client" +-msgstr "no possvel ler do cliente" ++#: locale/programs/locfile.c:957 ++msgid "locale name should consist only of portable characters" ++msgstr "nome de localidade deve consistir apenas em caracteres portáteis" + +-#: sysdeps/unix/sysv/linux/lddlibc4.c:68 +-#, c-format +-msgid "cannot read header from `%s'" +-msgstr "no possvel ler cabealho de `%s'" ++#: locale/programs/locfile.c:976 ++msgid "no other keyword shall be specified when `copy' is used" ++msgstr "nenhuma outra palavra-chave deve ser especificada quando “copy” é usado" + +-#: locale/programs/locale.c:306 ++#: locale/programs/locfile.c:990 + #, c-format +-msgid "cannot read locale directory `%s'" +-msgstr "no possvel ler diretrio locale `%s'" ++msgid "`%1$s' definition does not end with `END %1$s'" ++msgstr "“%1$s” definição não termina com “END %1$s”" + +-#: locale/programs/localedef.c:303 ++#: locale/programs/repertoire.c:228 locale/programs/repertoire.c:269 ++#: locale/programs/repertoire.c:294 + #, c-format +-msgid "cannot read locale file `%s'" +-msgstr "no possvel ler arquivo locale `%s'" ++msgid "syntax error in repertoire map definition: %s" ++msgstr "erro de sintaxe no mapa de repertório: %s" + +-#: locale/programs/locfile.c:288 locale/programs/locfile.c:306 +-#: locale/programs/locfile.c:324 locale/programs/locfile.c:342 +-#: locale/programs/locfile.c:360 locale/programs/locfile.c:378 +-#, c-format +-msgid "cannot read repertoire map `%s'" +-msgstr "no possvel ler mapa de repertrio `%s'" ++#: locale/programs/repertoire.c:270 ++msgid "no or value given" ++msgstr "valores ou não dados" + +-#: nscd/nscd_stat.c:127 +-msgid "cannot read statistics data" +-msgstr "impossvel ler dados de estatstica" ++#: locale/programs/repertoire.c:330 ++msgid "cannot save new repertoire map" ++msgstr "não foi possível salvar novo mapa de repertório" + +-#: nscd/cache.c:141 nscd/connections.c:148 ++#: locale/programs/repertoire.c:341 + #, c-format +-msgid "cannot stat() file `%s': %s" +-msgstr "no possvel ler atributos do arquivo `%s': %s" ++msgid "repertoire map file `%s' not found" ++msgstr "arquivo de mapa de repertório “%s” não foi encontrado" + +-#: locale/programs/localedef.c:328 ++#: login/programs/pt_chown.c:79 + #, c-format +-msgid "cannot write output files to `%s'" +-msgstr "no possvel escrever arquivo de sada para `%s'" ++msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n" ++msgstr "Define o dono, grupo e permissão de acesso ao pseudoterminal escravo correspondente ao pseudoterminal mestre passado no descritor de arquivo “%d”. Esse é um programa auxiliar para a função “grantpt”. Ele não tem a intenção de ser executado diretamente da linha de comando.\n" + +-#: nscd/connections.c:229 nscd/connections.c:250 ++#: login/programs/pt_chown.c:93 + #, c-format +-msgid "cannot write result: %s" +-msgstr "no possvel escrever resultado: %s" ++msgid "" ++"The owner is set to the current user, the group is set to `%s', and the access permission is set to `%o'.\n" ++"\n" ++"%s" ++msgstr "" ++"O dono está definido como o usuário atual, o grupo está definido para “%s” e a permissão de acesso está definida para “%o”.\n" ++"\n" ++"%s" + +-#: nscd/nscd_stat.c:86 ++#: login/programs/pt_chown.c:204 + #, c-format +-msgid "cannot write statistics: %s" +-msgstr "no possvel escrever estatisticas: %s" ++msgid "too many arguments" ++msgstr "número excessivo de argumentos" + +-#: login/programs/request.c:120 +-msgid "cannot write to client" +-msgstr "no possvel escrever para o cliente" ++#: login/programs/pt_chown.c:212 ++#, c-format ++msgid "needs to be installed setuid `root'" ++msgstr "precisa ser instalado com setuid “root”" + +-#: locale/programs/localedef.c:442 +-msgid "category data requested more than once: should not happen" +-msgstr "categoria de dados requisitada mais que uma vez: isto no deveria acontecer" ++#: malloc/mcheck.c:344 ++msgid "memory is consistent, library is buggy\n" ++msgstr "a memória está consistente; a biblioteca está problemática\n" + +-#: locale/programs/ld-ctype.c:269 +-#, c-format +-msgid "character %s'%s' in class `%s' must be in class `%s'" +-msgstr "caracter %s'%s' na classe `%s' deve estar na classe `%s'" ++#: malloc/mcheck.c:347 ++msgid "memory clobbered before allocated block\n" ++msgstr "memória sobrescrita antes do bloco alocado\n" + +-#: locale/programs/ld-ctype.c:294 +-#, c-format +-msgid "character %s'%s' in class `%s' must not be in class `%s'" +-msgstr "caracter %s'%s' na classe `%s' no deve estar na classe `%s'" ++#: malloc/mcheck.c:350 ++msgid "memory clobbered past end of allocated block\n" ++msgstr "memória sobrescrita após o fim do bloco alocado\n" + +-#: locale/programs/ld-ctype.c:320 +-msgid "character not defined in character map" +-msgstr "caracter no definido no mapa de caracteres" ++#: malloc/mcheck.c:353 ++msgid "block freed twice\n" ++msgstr "bloco liberado duas vezes\n" + +-#: locale/programs/ld-ctype.c:964 locale/programs/ld-ctype.c:1029 +-#: locale/programs/ld-ctype.c:1040 locale/programs/ld-ctype.c:1051 +-#: locale/programs/ld-ctype.c:1062 locale/programs/ld-ctype.c:1073 +-#: locale/programs/ld-ctype.c:1084 locale/programs/ld-ctype.c:1113 +-#: locale/programs/ld-ctype.c:1124 locale/programs/ld-ctype.c:1165 +-#: locale/programs/ld-ctype.c:1194 locale/programs/ld-ctype.c:1206 +-#, c-format +-msgid "character `%s' not defined while needed as default value" +-msgstr "caracter `%s' no definido enquanto necessrio como valor default" ++#: malloc/mcheck.c:356 ++msgid "bogus mcheck_status, library is buggy\n" ++msgstr "mcheck_status inválido; a biblioteca está problemática\n" + +-#: locale/programs/ld-ctype.c:825 +-#, c-format +-msgid "character class `%s' already defined" +-msgstr "classe de caracter `%s' j definida" ++#: malloc/memusage.sh:32 ++msgid "%s: option '%s' requires an argument\\n" ++msgstr "%s: a opção “%s” requer um argumento\\n" + +-#: locale/programs/ld-ctype.c:857 +-#, c-format +-msgid "character map `%s' already defined" +-msgstr "mapa de caracteres `%s' j definido" ++#: malloc/memusage.sh:38 ++msgid "" ++"Usage: memusage [OPTION]... PROGRAM [PROGRAMOPTION]...\n" ++"Profile memory usage of PROGRAM.\n" ++"\n" ++" -n,--progname=NAME Name of the program file to profile\n" ++" -p,--png=FILE Generate PNG graphic and store it in FILE\n" ++" -d,--data=FILE Generate binary data file and store it in FILE\n" ++" -u,--unbuffered Don't buffer output\n" ++" -b,--buffer=SIZE Collect SIZE entries before writing them out\n" ++" --no-timer Don't collect additional information through timer\n" ++" -m,--mmap Also trace mmap & friends\n" ++"\n" ++" -?,--help Print this help and exit\n" ++" --usage Give a short usage message\n" ++" -V,--version Print version information and exit\n" ++"\n" ++" The following options only apply when generating graphical output:\n" ++" -t,--time-based Make graph linear in time\n" ++" -T,--total Also draw graph of total memory use\n" ++" --title=STRING Use STRING as title of the graph\n" ++" -x,--x-size=SIZE Make graphic SIZE pixels wide\n" ++" -y,--y-size=SIZE Make graphic SIZE pixels high\n" ++"\n" ++"Mandatory arguments to long options are also mandatory for any corresponding\n" ++"short options.\n" ++"\n" ++msgstr "" ++"Uso: memusage [OPÇÃO]... PROGRAMA [OPÇÃO-PROGRAMA]...\n" ++"Perfila o uso de memória do PROGRAMA.\n" ++"\n" ++" -n,--progname=NOME Nome do arquivo de programa a perfilar\n" ++" -p,--png=ARQUIVO Gera um gráfico em PNG e o armazena em ARQUIVO\n" ++" -d,--data=ARQUIVO Gera um arquivo de dados binários e o armazena \n" ++" em ARQUIVO\n" ++" -u,--unbuffered Não utiliza buffer na saída\n" ++" -b,--buffer=TAM Coleta TAM registros antes de escrevê-los na saída\n" ++" --no-timer Não coleta informações adicionais do temporizador\n" ++" -m,--mmap Também rastreia mmap & amigos\n" ++"\n" ++" -?,--help Exibe essa ajuda e sai\n" ++" --usage Fornece uma curta mensagem de uso\n" ++" -V,--version Exibe informação da versão e sai\n" ++"\n" ++" As seguintes opções se aplicam apenas ao gerar saída gráfica:\n" ++" -t,--time-based Cria um gráfico linear no tempo\n" ++" -T,--total Também desenha um gráfico do uso total de memória\n" ++" --title=TEXTO Usa TEXTO como título do gráfico\n" ++" -x,--x-size=TAM Faz com que o gráfico tenha TAM pixels de largura\n" ++" -y,--y-size=TAM Faz com que o gráfico tenha TAM pixels de altura\n" ++"\n" ++"Argumentos obrigatórios para opções longas são também obrigatórios para\n" ++"qualquer opção curta correspondente.\n" ++"\n" + +-#: locale/programs/charmap.c:83 +-#, c-format +-msgid "character map file `%s' not found" +-msgstr "arquivo de mapa de caracter `%s' no foi localizado" ++# Usei "Uso:" para caber tudo na mesma linha e para padronizar -- Rafael ++#: malloc/memusage.sh:99 ++msgid "" ++"Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" ++"\t [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" ++"\t [--title=STRING] [--x-size=SIZE] [--y-size=SIZE]\n" ++"\t PROGRAM [PROGRAMOPTION]..." ++msgstr "" ++"Uso: memusage [--data=ARQUIVO] [--progname=NOME] [--png=ARQUIVO] [--unbuffered]\n" ++"\t [--buffer=TAM] [--no-timer] [--time-based] [--total]\n" ++"\t [--title=TEXTO] [--x-size=TAM] [--y-size=TAM]\n" ++"\t PROGRAMA [OPÇÃO-PROGRAMA]..." + +-#: sunrpc/clnt_raw.c:110 +-msgid "clnt_raw.c - Fatal header serialization error." +-msgstr "clnt_raw.c - Erro fatal no cabealho de serializao." ++#: malloc/memusage.sh:191 ++msgid "memusage: option \\`${1##*=}' is ambiguous" ++msgstr "memusage: opção “${1##*=}” é ambígua" + +-#: sunrpc/clnt_tcp.c:125 sunrpc/clnt_tcp.c:133 +-msgid "clnttcp_create: out of memory\n" +-msgstr "clnttcp_create: no h memria suficiente\n" ++#: malloc/memusage.sh:200 ++msgid "memusage: unrecognized option \\`$1'" ++msgstr "memusage: opção não reconhecida “$1”" + +-#: sunrpc/clnt_udp.c:124 sunrpc/clnt_udp.c:134 +-msgid "clntudp_create: out of memory\n" +-msgstr "clntudp_create: no h memria suficiente\n" ++#: malloc/memusage.sh:213 ++msgid "No program name given" ++msgstr "Nenhum nome de programa fornecido" + +-#: sunrpc/clnt_unix.c:123 sunrpc/clnt_unix.c:131 +-msgid "clntunix_create: out of memory\n" +-msgstr "clntunix_reate: no h memria suficiente\n" ++#: malloc/memusagestat.c:56 ++msgid "Name output file" ++msgstr "Nome do arquivo de saída" + +-#: locale/programs/ld-collate.c:1339 +-#, c-format +-msgid "collation element `%.*s' appears more than once: ignore line" +-msgstr "o elemento de comparao `%.*s' aparece mais que uma vez: ignorar linha" ++#: malloc/memusagestat.c:57 ++msgid "STRING" ++msgstr "TEXTO" + +-#: locale/programs/ld-collate.c:1357 +-#, c-format +-msgid "collation symbol `%.*s' appears more than once: ignore line" +-msgstr "o smbolo de comparao `%.*s' aparece mais que uma vez: ignorar linha" ++#: malloc/memusagestat.c:57 ++msgid "Title string used in output graphic" ++msgstr "Texto do título usado no gráfico de saída" + +-#: locale/programs/locfile.c:652 +-#, c-format +-msgid "collation symbol expected after `%s'" +-msgstr "smbolo de comparao esperado aps `%s'" ++#: malloc/memusagestat.c:58 ++msgid "Generate output linear to time (default is linear to number of function calls)" ++msgstr "Gera uma saída linear no tempo (padrão é linear ao número de chamadas de função)" + +-#: inet/rcmd.c:136 +-#, c-format +-msgid "connect to address %s: " +-msgstr "connectar-se ao endereo %s: " ++#: malloc/memusagestat.c:62 ++msgid "Also draw graph for total memory consumption" ++msgstr "Também desenha um gráfico de consumo total de memória" + +-#: sunrpc/rpc_scan.c:115 +-msgid "constant or identifier expected" +-msgstr "identificador ou constante esperado" ++#: malloc/memusagestat.c:63 ++msgid "VALUE" ++msgstr "VALOR" + +-#: iconv/iconv_prog.c:144 +-#, c-format +-msgid "conversion from `%s' to `%s' not supported" +-msgstr "converso de `%s' para `%s' no suportada" ++#: malloc/memusagestat.c:64 ++msgid "Make output graphic VALUE pixels wide" ++msgstr "Fazer um gráfico de saída com VALOR pixels de largura" + +-#: iconv/iconv_prog.c:326 +-msgid "conversion stopped due to problem in writing the output" +-msgstr "a converso parou devido a problemas de escrita na sada" ++#: malloc/memusagestat.c:65 ++msgid "Make output graphic VALUE pixels high" ++msgstr "Fazer um gráfico de saída com VALOR pixels de altura" + +-#: sunrpc/svc_simple.c:83 +-msgid "couldn't create an rpc server\n" +-msgstr "no foi possvel criar um servidor rpc\n" ++#: malloc/memusagestat.c:70 ++msgid "Generate graphic from memory profiling data" ++msgstr "Gera um gráfico a partir dos dados de perfilamento de memória" + +-#: sunrpc/svc_simple.c:91 +-#, c-format +-msgid "couldn't register prog %d vers %d\n" +-msgstr "no foi possvel registrar prog %d vers %d\n" ++#: malloc/memusagestat.c:73 ++msgid "DATAFILE [OUTFILE]" ++msgstr "ARQUIVO-DADOS [ARQUIVO-SAÍDA]" + +-#: nss/getent.c:49 +-msgid "database [key ...]" +-msgstr "base de dados [chave ...]" ++#: misc/error.c:192 ++msgid "Unknown system error" ++msgstr "Erro desconhecido de sistema" ++ ++#: nis/nis_callback.c:188 ++msgid "unable to free arguments" ++msgstr "não foi possível liberar argumentos" ++ ++#: nis/nis_error.h:1 nis/ypclnt.c:824 nis/ypclnt.c:913 posix/regcomp.c:137 ++#: sysdeps/gnu/errlist.c:21 ++msgid "Success" ++msgstr "Sucesso" ++ ++#: nis/nis_error.h:2 ++msgid "Probable success" ++msgstr "Sucesso provável" ++ ++#: nis/nis_error.h:3 ++msgid "Not found" ++msgstr "Não localizado" ++ ++#: nis/nis_error.h:4 ++msgid "Probably not found" ++msgstr "Provavelmente não encontrado" ++ ++#: nis/nis_error.h:5 ++msgid "Cache expired" ++msgstr "Tempo expirado" ++ ++#: nis/nis_error.h:6 ++msgid "NIS+ servers unreachable" ++msgstr "Servidores NIS+ fora do alcance" ++ ++#: nis/nis_error.h:7 ++msgid "Unknown object" ++msgstr "Objeto desconhecido" ++ ++#: nis/nis_error.h:8 ++msgid "Server busy, try again" ++msgstr "Servidor ocupado, tente novamente" ++ ++#: nis/nis_error.h:9 ++msgid "Generic system error" ++msgstr "Erro genérico de sistema" ++ ++#: nis/nis_error.h:10 ++msgid "First/next chain broken" ++msgstr "Primeira/próxima corrente quebrada" ++ ++#. TRANS The file permissions do not allow the attempted operation. ++#: nis/nis_error.h:11 nis/ypclnt.c:869 sysdeps/gnu/errlist.c:158 ++msgid "Permission denied" ++msgstr "Permissão negada" ++ ++#: nis/nis_error.h:12 ++msgid "Not owner" ++msgstr "Dono inválido" ++ ++#: nis/nis_error.h:13 ++msgid "Name not served by this server" ++msgstr "Nome não servido por este servidor" ++ ++#: nis/nis_error.h:14 ++msgid "Server out of memory" ++msgstr "Memória do servidor exaurida" ++ ++#: nis/nis_error.h:15 ++msgid "Object with same name exists" ++msgstr "Um objeto com o mesmo nome existe" ++ ++#: nis/nis_error.h:16 ++msgid "Not master server for this domain" ++msgstr "Não é um servidor mestre para este domínio" ++ ++#: nis/nis_error.h:17 ++msgid "Invalid object for operation" ++msgstr "Objeto inválido para a operação" ++ ++#: nis/nis_error.h:18 ++msgid "Malformed name, or illegal name" ++msgstr "Nome malformado ou nome ilegal" ++ ++#: nis/nis_error.h:19 ++msgid "Unable to create callback" ++msgstr "Impossível criar retorno de chamada" ++ ++#: nis/nis_error.h:20 ++msgid "Results sent to callback proc" ++msgstr "Resultados enviados para o processo de retorno chamada" ++ ++#: nis/nis_error.h:21 ++msgid "Not found, no such name" ++msgstr "Não localizado, nome inexistente" ++ ++#: nis/nis_error.h:22 ++msgid "Name/entry isn't unique" ++msgstr "Nome/entrada não é único" ++ ++#: nis/nis_error.h:23 ++msgid "Modification failed" ++msgstr "Modificação falhou" ++ ++#: nis/nis_error.h:24 ++msgid "Database for table does not exist" ++msgstr "Banco de dados para a tabela não existe" ++ ++#: nis/nis_error.h:25 ++msgid "Entry/table type mismatch" ++msgstr "Tipo de entrada/tabela incompatível" ++ ++#: nis/nis_error.h:26 ++msgid "Link points to illegal name" ++msgstr "Link aponta para um nome ilegal" ++ ++#: nis/nis_error.h:27 ++msgid "Partial success" ++msgstr "Sucesso parcial" ++ ++#: nis/nis_error.h:28 ++msgid "Too many attributes" ++msgstr "Número excessivo de atributos" ++ ++#: nis/nis_error.h:29 ++msgid "Error in RPC subsystem" ++msgstr "Erro no subsistema RPC" ++ ++#: nis/nis_error.h:30 ++msgid "Missing or malformed attribute" ++msgstr "Atributo perdido ou malformado" ++ ++#: nis/nis_error.h:31 ++msgid "Named object is not searchable" ++msgstr "Objeto nomeado não é pesquisável" ++ ++#: nis/nis_error.h:32 ++msgid "Error while talking to callback proc" ++msgstr "Erro durante a chamada a processo de retorno de chamada" ++ ++#: nis/nis_error.h:33 ++msgid "Non NIS+ namespace encountered" ++msgstr "Espaço de nomes não-NIS+ encontrado" ++ ++#: nis/nis_error.h:34 ++msgid "Illegal object type for operation" ++msgstr "Tipo ilegal de objeto para a operação" ++ ++#: nis/nis_error.h:35 ++msgid "Passed object is not the same object on server" ++msgstr "Objeto passado não é o mesmo objeto no servidor" ++ ++#: nis/nis_error.h:36 ++msgid "Modify operation failed" ++msgstr "Operação de modificação falhou" ++ ++#: nis/nis_error.h:37 ++msgid "Query illegal for named table" ++msgstr "Pergunta ilegal para tabela nominada" ++ ++#: nis/nis_error.h:38 ++msgid "Attempt to remove a non-empty table" ++msgstr "Tentativa de remoção de uma tabela não vazia" ++ ++#: nis/nis_error.h:39 ++msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" ++msgstr "Erro acessando arquivo inicial do NIS+. O NIS+ está instalado?" ++ ++#: nis/nis_error.h:40 ++msgid "Full resync required for directory" ++msgstr "Nova sincronização total necessária para o diretório" ++ ++#: nis/nis_error.h:41 ++msgid "NIS+ operation failed" ++msgstr "Operação NIS+ falhou" ++ ++#: nis/nis_error.h:42 ++msgid "NIS+ service is unavailable or not installed" ++msgstr "Serviço NIS+ está indisponível ou não está instalado" ++ ++#: nis/nis_error.h:43 ++msgid "Yes, 42 is the meaning of life" ++msgstr "Sim, 42 é o sentido da vida" ++ ++#: nis/nis_error.h:44 ++msgid "Unable to authenticate NIS+ server" ++msgstr "Não foi possível autenticar servidor NIS+" ++ ++#: nis/nis_error.h:45 ++msgid "Unable to authenticate NIS+ client" ++msgstr "Não foi possível autenticar cliente NIS+" ++ ++#: nis/nis_error.h:46 ++msgid "No file space on server" ++msgstr "Não há espaço disponível no servidor" + +-#: locale/programs/charmap.c:170 ++#: nis/nis_error.h:47 ++msgid "Unable to create process on server" ++msgstr "Não foi possível criar processo no servidor" ++ ++#: nis/nis_error.h:48 ++msgid "Master server busy, full dump rescheduled." ++msgstr "Servidor mestre ocupado, descarregamento completo (dump) remarcado." ++ ++#: nis/nis_local_names.c:122 + #, c-format +-msgid "default character map file `%s' not found" +-msgstr "arquivo default de mapa de caracter `%s' no localizado" ++msgid "LOCAL entry for UID %d in directory %s not unique\n" ++msgstr "Entrada LOCAL para UID %d no diretório %s não é única\n" ++ ++#: nis/nis_print.c:52 ++msgid "UNKNOWN" ++msgstr "DESCONHECIDO" ++ ++#: nis/nis_print.c:110 ++msgid "BOGUS OBJECT\n" ++msgstr "OBJETO FALSO\n" ++ ++#: nis/nis_print.c:113 ++msgid "NO OBJECT\n" ++msgstr "SEM OBJETO\n" ++ ++#: nis/nis_print.c:116 ++msgid "DIRECTORY\n" ++msgstr "DIRETÓRIO\n" ++ ++#: nis/nis_print.c:119 ++msgid "GROUP\n" ++msgstr "GRUPO\n" ++ ++#: nis/nis_print.c:122 ++msgid "TABLE\n" ++msgstr "TABELA\n" ++ ++#: nis/nis_print.c:125 ++msgid "ENTRY\n" ++msgstr "ENTRADA\n" ++ ++#: nis/nis_print.c:128 ++msgid "LINK\n" ++msgstr "LINK\n" ++ ++#: nis/nis_print.c:131 ++msgid "PRIVATE\n" ++msgstr "PRIVADO\n" + +-#: locale/programs/ld-time.c:163 ++#: nis/nis_print.c:134 ++msgid "(Unknown object)\n" ++msgstr "(Objeto desconhecido)\n" ++ ++#: nis/nis_print.c:168 + #, c-format +-msgid "direction flag in string %d in `era' field in category `%s' is not '+' nor '-'" +-msgstr "flag de direo na string %d no campo `era', categoria `%s', no '+'nem '_'" ++msgid "Name : `%s'\n" ++msgstr "Nome : “%s”\n" + +-#: locale/programs/ld-time.c:174 ++#: nis/nis_print.c:169 + #, c-format +-msgid "direction flag in string %d in `era' field in category `%s' is not a single character" +-msgstr "flag de direo na string %d no campo `era', categoria `%s', no um caracter simples" ++msgid "Type : %s\n" ++msgstr "Tipo : %s\n" ++ ++#: nis/nis_print.c:174 ++msgid "Master Server :\n" ++msgstr "Servidor mestre :\n" ++ ++#: nis/nis_print.c:176 ++msgid "Replicate :\n" ++msgstr "Duplicado :\n" + +-#: locale/programs/charset.c:64 locale/programs/charset.c:118 ++#: nis/nis_print.c:177 + #, c-format +-msgid "duplicate character name `%s'" +-msgstr "nome de caracter duplicado `%s'" ++msgid "\tName : %s\n" ++msgstr "\tNome : %s\n" + +-#: locale/programs/ld-collate.c:1150 +-msgid "duplicate collating element definition" +-msgstr "definio de elemento de comparao duplicada" ++#: nis/nis_print.c:178 ++msgid "\tPublic Key : " ++msgstr "\tChave pública : " ++ ++#: nis/nis_print.c:182 ++msgid "None.\n" ++msgstr "nenhum.\n" + +-#: locale/programs/ld-collate.c:1297 ++#: nis/nis_print.c:185 + #, c-format +-msgid "duplicate definition for character `%.*s'" +-msgstr "definio para caracter duplicada `%.*s'" ++msgid "Diffie-Hellmann (%d bits)\n" ++msgstr "Diffie-Hellman (%d bits)\n" + +-#: db2/makedb.c:328 +-msgid "duplicate key" +-msgstr "chave duplicada" ++#: nis/nis_print.c:190 ++#, c-format ++msgid "RSA (%d bits)\n" ++msgstr "RSA (%d bits)\n" + +-#: catgets/gencat.c:388 +-msgid "duplicate set definition" +-msgstr "definio de conjunto duplicada" ++#: nis/nis_print.c:193 ++msgid "Kerberos.\n" ++msgstr "Kerberos.\n" + +-#: timezone/zic.c:978 ++#: nis/nis_print.c:196 + #, c-format +-msgid "duplicate zone name %s (file \"%s\", line %d)" +-msgstr "nome de zona duplicado %s (arquivo \"%s\", linha %d)" ++msgid "Unknown (type = %d, bits = %d)\n" ++msgstr "Desconhecido (tipo = %d, bits = %d)\n" + +-#: catgets/gencat.c:551 +-msgid "duplicated message identifier" +-msgstr "identificador de mensagens duplicado" ++#: nis/nis_print.c:207 ++#, c-format ++msgid "\tUniversal addresses (%u)\n" ++msgstr "\tEndereço universal (%u)\n" + +-#: catgets/gencat.c:524 +-msgid "duplicated message number" +-msgstr "nmero de mensagem duplicado" ++#: nis/nis_print.c:229 ++msgid "Time to live : " ++msgstr "Tempo de vida : " + +-#: sunrpc/rpc_scan.c:382 +-msgid "empty char string" +-msgstr "cadeia de caractere vazia" ++#: nis/nis_print.c:231 ++msgid "Default Access rights :\n" ++msgstr "Direitos de acesso padrão :\n" + +-#: locale/programs/ld-collate.c:1710 +-msgid "empty weight name: line ignored" +-msgstr "nome do peso vazio: linha ignorada" ++#: nis/nis_print.c:240 ++#, c-format ++msgid "\tType : %s\n" ++msgstr "\tTipo : %s\n" + +-#: sunrpc/svc_udp.c:372 +-msgid "enablecache: cache already enabled" +-msgstr "enablecache: cache j ativado" ++#: nis/nis_print.c:241 ++msgid "\tAccess rights: " ++msgstr "\tDireitos acesso: " + +-#: sunrpc/svc_udp.c:378 +-msgid "enablecache: could not allocate cache" +-msgstr "enablecache: no foi possvel alocar cache" ++#: nis/nis_print.c:255 ++msgid "Group Flags :" ++msgstr "Indicadores de grupo :" + +-#: sunrpc/svc_udp.c:386 +-msgid "enablecache: could not allocate cache data" +-msgstr "enablecache: no foi possvel alocar dados do cache" ++#: nis/nis_print.c:258 ++msgid "" ++"\n" ++"Group Members :\n" ++msgstr "" ++"\n" ++"Membros do grupo :\n" + +-#: sunrpc/svc_udp.c:393 +-msgid "enablecache: could not allocate cache fifo" +-msgstr "enablecache: no foi possvel alocar cache fifo" ++#: nis/nis_print.c:270 ++#, c-format ++msgid "Table Type : %s\n" ++msgstr "Tipo de tabela : %s\n" + +-#: iconv/iconv_prog.c:56 +-msgid "encoding for output" +-msgstr "codificao para a sada" ++#: nis/nis_print.c:271 ++#, c-format ++msgid "Number of Columns : %d\n" ++msgstr "Número de colunas : %d\n" + +-#: iconv/iconv_prog.c:55 +-msgid "encoding of original text" +-msgstr "codificao para o texto original" ++#: nis/nis_print.c:272 ++#, c-format ++msgid "Character Separator : %c\n" ++msgstr "Separador de caracteres : %c\n" ++ ++#: nis/nis_print.c:273 ++#, c-format ++msgid "Search Path : %s\n" ++msgstr "Caminho de pesquisa : %s\n" ++ ++#: nis/nis_print.c:274 ++msgid "Columns :\n" ++msgstr "Colunas :\n" ++ ++#: nis/nis_print.c:277 ++#, c-format ++msgid "\t[%d]\tName : %s\n" ++msgstr "\t[%d]\tNome : %s\n" ++ ++#: nis/nis_print.c:279 ++msgid "\t\tAttributes : " ++msgstr "\t\tAtributos : " ++ ++#: nis/nis_print.c:281 ++msgid "\t\tAccess Rights : " ++msgstr "\t\tDireitos de acesso : " ++ ++#: nis/nis_print.c:291 ++msgid "Linked Object Type : " ++msgstr "Tipo de objeto vinculado : " ++ ++#: nis/nis_print.c:293 ++#, c-format ++msgid "Linked to : %s\n" ++msgstr "Vinculado a : %s\n" ++ ++#: nis/nis_print.c:303 ++#, c-format ++msgid "\tEntry data of type %s\n" ++msgstr "\tEntrada de dados de tipo %s\n" ++ ++#: nis/nis_print.c:306 ++#, c-format ++msgid "\t[%u] - [%u bytes] " ++msgstr "\t[%u] – [%u bytes] " ++ ++#: nis/nis_print.c:309 ++msgid "Encrypted data\n" ++msgstr "Dados criptografados\n" ++ ++#: nis/nis_print.c:311 ++msgid "Binary data\n" ++msgstr "Dados binários\n" ++ ++#: nis/nis_print.c:327 ++#, c-format ++msgid "Object Name : %s\n" ++msgstr "Nome do objeto : %s\n" ++ ++#: nis/nis_print.c:328 ++#, c-format ++msgid "Directory : %s\n" ++msgstr "Diretório : %s\n" ++ ++#: nis/nis_print.c:329 ++#, c-format ++msgid "Owner : %s\n" ++msgstr "Dono : %s\n" ++ ++#: nis/nis_print.c:330 ++#, c-format ++msgid "Group : %s\n" ++msgstr "Grupo : %s\n" ++ ++#: nis/nis_print.c:331 ++msgid "Access Rights : " ++msgstr "Direitos de acesso : " ++ ++#: nis/nis_print.c:333 ++#, c-format ++msgid "" ++"\n" ++"Time to Live : " ++msgstr "" ++"\n" ++"Tempo de vida : " ++ ++#: nis/nis_print.c:336 ++#, c-format ++msgid "Creation Time : %s" ++msgstr "Horário de criação : %s" ++ ++#: nis/nis_print.c:338 ++#, c-format ++msgid "Mod. Time : %s" ++msgstr "Horário de mod. : %s" ++ ++#: nis/nis_print.c:339 ++msgid "Object Type : " ++msgstr "Tipo do objeto : " ++ ++#: nis/nis_print.c:359 ++#, c-format ++msgid " Data Length = %u\n" ++msgstr " Tamanho dados = %u\n" ++ ++#: nis/nis_print.c:373 ++#, c-format ++msgid "Status : %s\n" ++msgstr "Posição : %s\n" + +-#: locale/programs/ld-collate.c:1429 +-msgid "end point of ellipsis range is bigger then start" +-msgstr "o ponto final da rea da elipse maior que o incio " ++#: nis/nis_print.c:374 ++#, c-format ++msgid "Number of objects : %u\n" ++msgstr "Número de objetos : %u\n" ++ ++#: nis/nis_print.c:378 ++#, c-format ++msgid "Object #%d:\n" ++msgstr "Objeto #%d:\n" ++ ++#: nis/nis_print_group_entry.c:117 ++#, c-format ++msgid "Group entry for \"%s.%s\" group:\n" ++msgstr "Entrada para o grupo “%s.%s”:\n" ++ ++#: nis/nis_print_group_entry.c:125 ++msgid " Explicit members:\n" ++msgstr " Membros explícitos:\n" ++ ++#: nis/nis_print_group_entry.c:130 ++msgid " No explicit members\n" ++msgstr " Nenhum membro explícito\n" ++ ++#: nis/nis_print_group_entry.c:133 ++msgid " Implicit members:\n" ++msgstr " Membros implícitos:\n" ++ ++#: nis/nis_print_group_entry.c:138 ++msgid " No implicit members\n" ++msgstr " Nenhum membro implícito\n" ++ ++#: nis/nis_print_group_entry.c:141 ++msgid " Recursive members:\n" ++msgstr " Membros recursivos:\n" ++ ++#: nis/nis_print_group_entry.c:146 ++msgid " No recursive members\n" ++msgstr " Nenhuma membros recursivo\n" ++ ++#: nis/nis_print_group_entry.c:149 ++msgid " Explicit nonmembers:\n" ++msgstr " Não-membros explícitos:\n" ++ ++#: nis/nis_print_group_entry.c:154 ++msgid " No explicit nonmembers\n" ++msgstr " Nenhum não-membro explícito\n" ++ ++#: nis/nis_print_group_entry.c:157 ++msgid " Implicit nonmembers:\n" ++msgstr " Não-membros implícitos:\n" ++ ++#: nis/nis_print_group_entry.c:162 ++msgid " No implicit nonmembers\n" ++msgstr " Nenhum não-membro implícito\n" ++ ++#: nis/nis_print_group_entry.c:165 ++msgid " Recursive nonmembers:\n" ++msgstr " Não-membros recursivos:\n" ++ ++#: nis/nis_print_group_entry.c:170 ++msgid " No recursive nonmembers\n" ++msgstr " Nenhum não-membro recursivo\n" ++ ++#: nis/nss_nisplus/nisplus-publickey.c:100 ++#: nis/nss_nisplus/nisplus-publickey.c:182 ++#, c-format ++msgid "DES entry for netname %s not unique\n" ++msgstr "Entrada DES para nome de rede (netname) %s não é única\n" ++ ++#: nis/nss_nisplus/nisplus-publickey.c:219 ++#, c-format ++msgid "netname2user: missing group id list in `%s'" ++msgstr "netname2user: faltando lista de id do grupo em “%s”" ++ ++#: nis/nss_nisplus/nisplus-publickey.c:301 ++#: nis/nss_nisplus/nisplus-publickey.c:307 ++#: nis/nss_nisplus/nisplus-publickey.c:372 ++#: nis/nss_nisplus/nisplus-publickey.c:381 ++#, c-format ++msgid "netname2user: (nis+ lookup): %s\n" ++msgstr "netname2user: (nis+ lookup): %s\n" ++ ++#: nis/nss_nisplus/nisplus-publickey.c:320 ++#, c-format ++msgid "netname2user: DES entry for %s in directory %s not unique" ++msgstr "netname2user: entrada DES para %s no diretório %s não é única" ++ ++#: nis/nss_nisplus/nisplus-publickey.c:338 ++#, c-format ++msgid "netname2user: principal name `%s' too long" ++msgstr "netname2user: nome princpal “%s” longo demais" ++ ++#: nis/nss_nisplus/nisplus-publickey.c:394 ++#, c-format ++msgid "netname2user: LOCAL entry for %s in directory %s not unique" ++msgstr "netname2user: entrada LOCAL para %s no diretório %s não é única" ++ ++#: nis/nss_nisplus/nisplus-publickey.c:401 ++msgid "netname2user: should not have uid 0" ++msgstr "netname2user: não deve possuir uid 0" ++ ++#: nis/ypclnt.c:827 ++msgid "Request arguments bad" ++msgstr "Argumentos de requisição inválidos" ++ ++#: nis/ypclnt.c:830 ++msgid "RPC failure on NIS operation" ++msgstr "Falha RPC na operação NIS" ++ ++#: nis/ypclnt.c:833 ++msgid "Can't bind to server which serves this domain" ++msgstr "Não é possível vincular ao servidor que serve este domínio" ++ ++#: nis/ypclnt.c:836 ++msgid "No such map in server's domain" ++msgstr "Mapa inexistente no domínio do servidor" ++ ++#: nis/ypclnt.c:839 ++msgid "No such key in map" ++msgstr "Chave inexistente no mapa" ++ ++#: nis/ypclnt.c:842 ++msgid "Internal NIS error" ++msgstr "Erro NIS interno" ++ ++#: nis/ypclnt.c:845 ++msgid "Local resource allocation failure" ++msgstr "Falha na alocação de recurso local" ++ ++#: nis/ypclnt.c:848 ++msgid "No more records in map database" ++msgstr "Não há mais registros no banco de dados de mapas" ++ ++#: nis/ypclnt.c:851 ++msgid "Can't communicate with portmapper" ++msgstr "Não foi possível comunicar com o portmapper" ++ ++#: nis/ypclnt.c:854 ++msgid "Can't communicate with ypbind" ++msgstr "Não foi possível comunicar com o ypbind" ++ ++#: nis/ypclnt.c:857 ++msgid "Can't communicate with ypserv" ++msgstr "Não foi possível comunicar com o ypserv" ++ ++#: nis/ypclnt.c:860 ++msgid "Local domain name not set" ++msgstr "Nome de domínio local não definido" ++ ++#: nis/ypclnt.c:863 ++msgid "NIS map database is bad" ++msgstr "Banco de dados de mapas NIS é inválido" ++ ++#: nis/ypclnt.c:866 ++msgid "NIS client/server version mismatch - can't supply service" ++msgstr "Versões cliente/servidor NIS não conferem – não foi possível oferecer serviço" ++ ++#: nis/ypclnt.c:872 ++msgid "Database is busy" ++msgstr "Banco de dados está ocupado" ++ ++#: nis/ypclnt.c:875 ++msgid "Unknown NIS error code" ++msgstr "Código de erro NIS desconhecido" ++ ++#: nis/ypclnt.c:916 ++msgid "Internal ypbind error" ++msgstr "Erro interno de ypbind" ++ ++#: nis/ypclnt.c:919 ++msgid "Domain not bound" ++msgstr "Domínio não vinculado" ++ ++#: nis/ypclnt.c:922 ++msgid "System resource allocation failure" ++msgstr "Falha de alocação de recursos do sistema" ++ ++#: nis/ypclnt.c:925 ++msgid "Unknown ypbind error" ++msgstr "Erro desconhecido de ypbind" ++ ++#: nis/ypclnt.c:966 ++msgid "yp_update: cannot convert host to netname\n" ++msgstr "yp_update: não foi possível converter host para netname\n" ++ ++#: nis/ypclnt.c:984 ++msgid "yp_update: cannot get server address\n" ++msgstr "yp_update: não foi possível obter o endereço do servidor\n" ++ ++#: nscd/aicache.c:85 nscd/hstcache.c:485 ++#, c-format ++msgid "Haven't found \"%s\" in hosts cache!" ++msgstr "Não foi encontrado “%s” no cache de máquinas!" ++ ++#: nscd/aicache.c:87 nscd/hstcache.c:487 ++#, c-format ++msgid "Reloading \"%s\" in hosts cache!" ++msgstr "Recarregando “%s” no cache de máquinas!" ++ ++#: nscd/cache.c:151 ++#, c-format ++msgid "add new entry \"%s\" of type %s for %s to cache%s" ++msgstr "adicionar nova entrada “%s” do tipo %s para %s ao cache%s" ++ ++#: nscd/cache.c:153 ++msgid " (first)" ++msgstr " (primeira)" ++ ++#: nscd/cache.c:288 ++#, c-format ++msgid "checking for monitored file `%s': %s" ++msgstr "verificando pelo arquivo monitorado “%s”: %s" ++ ++#: nscd/cache.c:298 ++#, c-format ++msgid "monitored file `%s` changed (mtime)" ++msgstr "arquivo monitorado “%s” foi modificado (mtime)" ++ ++#: nscd/cache.c:341 ++#, c-format ++msgid "pruning %s cache; time %ld" ++msgstr "removendo cache %s; tempo %ld" ++ ++#: nscd/cache.c:370 ++#, c-format ++msgid "considering %s entry \"%s\", timeout %" ++msgstr "considerando entrada %s “%s”, tempo limite %" ++ ++#: nscd/connections.c:537 ++#, c-format ++msgid "invalid persistent database file \"%s\": %s" ++msgstr "arquivo inválido de banco de dados persistente “%s”: %s" ++ ++#: nscd/connections.c:545 ++msgid "uninitialized header" ++msgstr "cabeçalho não inicializado" ++ ++#: nscd/connections.c:550 ++msgid "header size does not match" ++msgstr "tamanho do cabeçalho não confere" ++ ++#: nscd/connections.c:560 ++msgid "file size does not match" ++msgstr "tamanho de arquivo não confere" ++ ++#: nscd/connections.c:577 ++msgid "verification failed" ++msgstr "verificação falhou" ++ ++#: nscd/connections.c:591 ++#, c-format ++msgid "suggested size of table for database %s larger than the persistent database's table" ++msgstr "tamanho sugerido de tabela para banco de dados %s maior que a tabela do banco de dados persistente" ++ ++#: nscd/connections.c:602 nscd/connections.c:686 ++#, c-format ++msgid "cannot create read-only descriptor for \"%s\"; no mmap" ++msgstr "não foi possível criar descritor somente leitura para “%s”; nenhum mmap" ++ ++#: nscd/connections.c:618 ++#, c-format ++msgid "cannot access '%s'" ++msgstr "não foi possível acessar “%s”" ++ ++#: nscd/connections.c:666 ++#, c-format ++msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" ++msgstr "banco de dados para %s corrompido ou usado simultaneamente; remova %s manualmente, se necessário, e reinicie" ++ ++#: nscd/connections.c:672 ++#, c-format ++msgid "cannot create %s; no persistent database used" ++msgstr "não foi possível criar %s; nenhum banco de dados persistente usado" ++ ++#: nscd/connections.c:675 ++#, c-format ++msgid "cannot create %s; no sharing possible" ++msgstr "não foi possível criar %s; nenhum compartilhamento possível" ++ ++#: nscd/connections.c:746 ++#, c-format ++msgid "cannot write to database file %s: %s" ++msgstr "não foi possível escrever para o arquivo de banco de dados %s: %s" ++ ++#: nscd/connections.c:802 ++#, c-format ++msgid "cannot open socket: %s" ++msgstr "não é possível abrir soquete: “%s”" ++ ++#: nscd/connections.c:821 ++#, c-format ++msgid "cannot enable socket to accept connections: %s" ++msgstr "impossível habilitar soquete para aceitar conexões: %s" ++ ++#: nscd/connections.c:878 ++#, c-format ++msgid "disabled inotify-based monitoring for file `%s': %s" ++msgstr "desabilitado monitoramento baseado em inotify para o arquivo “%s”: %s" ++ ++#: nscd/connections.c:882 ++#, c-format ++msgid "monitoring file `%s` (%d)" ++msgstr "monitorando o arquivo “%s” (%d)" ++ ++#: nscd/connections.c:895 ++#, c-format ++msgid "disabled inotify-based monitoring for directory `%s': %s" ++msgstr "desabilitado monitoramento baseado em inotify para o diretório “%s”: %s" ++ ++#: nscd/connections.c:899 ++#, c-format ++msgid "monitoring directory `%s` (%d)" ++msgstr "monitorando o diretório “%s” (%d)" ++ ++#: nscd/connections.c:927 ++#, c-format ++msgid "monitoring file %s for database %s" ++msgstr "monitorando o arquivo %s para o banco de dados %s" ++ ++#: nscd/connections.c:937 ++#, c-format ++msgid "stat failed for file `%s'; will try again later: %s" ++msgstr "obtenção de estado falhou para o arquivo “%s”; nova tentativa posteriormente: %s" ++ ++#: nscd/connections.c:1056 ++#, c-format ++msgid "provide access to FD %d, for %s" ++msgstr "fornece acesso ao descritor de arquivo %d, para %s" ++ ++#: nscd/connections.c:1068 ++#, c-format ++msgid "cannot handle old request version %d; current version is %d" ++msgstr "impossível lidar com requisições de versões antigas %d; a versão atual é %d" ++ ++#: nscd/connections.c:1091 ++#, c-format ++msgid "request from %ld not handled due to missing permission" ++msgstr "requisição de %ld não manipulada em razão de falta de permissão" ++ ++#: nscd/connections.c:1096 ++#, c-format ++msgid "request from '%s' [%ld] not handled due to missing permission" ++msgstr "requisição de “%s” [%ld] não manipulada em razão de falta de permissão" ++ ++#: nscd/connections.c:1101 ++msgid "request not handled due to missing permission" ++msgstr "requisição não manipulada em razão de falta de permissão" ++ ++#: nscd/connections.c:1139 nscd/connections.c:1192 ++#, c-format ++msgid "cannot write result: %s" ++msgstr "não é possível escrever resultado: %s" ++ ++#: nscd/connections.c:1283 ++#, c-format ++msgid "error getting caller's id: %s" ++msgstr "erro ao obter o id do chamador: %s" ++ ++#: nscd/connections.c:1343 ++#, c-format ++msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" ++msgstr "não foi possível abrir /proc/self/cmdline: %s; desabilitando modo paranoia" ++ ++#: nscd/connections.c:1357 ++#, c-format ++msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" ++msgstr "não foi possível ler /proc/self/cmdline: %s; desabilitando modo paranoia" ++ ++#: nscd/connections.c:1397 ++#, c-format ++msgid "cannot change to old UID: %s; disabling paranoia mode" ++msgstr "não foi possível alterar para UID antigo: %s; desabilitando modo paranoia" ++ ++#: nscd/connections.c:1407 ++#, c-format ++msgid "cannot change to old GID: %s; disabling paranoia mode" ++msgstr "não foi possível alterar para GID antigo: %s; desabilitando modo paranoia" ++ ++#: nscd/connections.c:1420 ++#, c-format ++msgid "cannot change to old working directory: %s; disabling paranoia mode" ++msgstr "não foi possível mudar para diretório de trabalho anterior: %s; desabilitando modo paranoia" ++ ++#: nscd/connections.c:1466 ++#, c-format ++msgid "re-exec failed: %s; disabling paranoia mode" ++msgstr "reexecução falhou: %s; desabilitando modo paranoia" ++ ++#: nscd/connections.c:1475 ++#, c-format ++msgid "cannot change current working directory to \"/\": %s" ++msgstr "não foi possível mudar o diretório de trabalho atual para “/”: %s" ++ ++#: nscd/connections.c:1658 ++#, c-format ++msgid "short read while reading request: %s" ++msgstr "leitura insuficiente durante a leitura da requisição: %s" ++ ++#: nscd/connections.c:1691 ++#, c-format ++msgid "key length in request too long: %d" ++msgstr "tamanho da chave na requisição é grande demais: %d" ++ ++#: nscd/connections.c:1704 ++#, c-format ++msgid "short read while reading request key: %s" ++msgstr "leitura insuficiente durante a leitura da chave de requisição: %s" ++ ++#: nscd/connections.c:1714 ++#, c-format ++msgid "handle_request: request received (Version = %d) from PID %ld" ++msgstr "handle_request: requisição recebida (Versão = %d) do PID %ld" ++ ++#: nscd/connections.c:1719 ++#, c-format ++msgid "handle_request: request received (Version = %d)" ++msgstr "handle_request: requisição recebida (Versão = %d)" ++ ++#: nscd/connections.c:1859 ++#, c-format ++msgid "ignored inotify event for `%s` (file exists)" ++msgstr "evento inotify ignorado para “%s” (arquivo existe)" ++ ++#: nscd/connections.c:1864 ++#, c-format ++msgid "monitored file `%s` was %s, removing watch" ++msgstr "arquivo monitorado “%s” era %s, removendo inspeção" ++ ++#: nscd/connections.c:1872 nscd/connections.c:1914 ++#, c-format ++msgid "failed to remove file watch `%s`: %s" ++msgstr "falha ao remover inspeção do arquivo “%s”: %s" ++ ++#: nscd/connections.c:1887 ++#, c-format ++msgid "monitored file `%s` was written to" ++msgstr "arquivo monitorado “%s” foi escrito para" ++ ++#: nscd/connections.c:1911 ++#, c-format ++msgid "monitored parent directory `%s` was %s, removing watch on `%s`" ++msgstr "diretório pai monitorado “%s” foi %s, removendo inspeção em “%s”" ++ ++#: nscd/connections.c:1937 ++#, c-format ++msgid "monitored file `%s` was %s, adding watch" ++msgstr "arquivo monitorado “%s” foi %s, adicionando inspeção" ++ ++#: nscd/connections.c:1949 ++#, c-format ++msgid "failed to add file watch `%s`: %s" ++msgstr "falha ao adicionar inspeção do arquivo “%s”: %s" ++ ++#: nscd/connections.c:2127 nscd/connections.c:2292 ++#, c-format ++msgid "disabled inotify-based monitoring after read error %d" ++msgstr "desabilitado monitoramento baseado em inotify após erro de leitura %d" ++ ++#: nscd/connections.c:2407 ++msgid "could not initialize conditional variable" ++msgstr "não foi possível inicializar variável condicional" ++ ++#: nscd/connections.c:2415 ++msgid "could not start clean-up thread; terminating" ++msgstr "não foi possível iniciar fluxo de limpeza; terminando" ++ ++#: nscd/connections.c:2429 ++msgid "could not start any worker thread; terminating" ++msgstr "não foi possível iniciar qualquer fluxo de trabalho; terminando" ++ ++#: nscd/connections.c:2484 nscd/connections.c:2486 nscd/connections.c:2502 ++#: nscd/connections.c:2512 nscd/connections.c:2530 nscd/connections.c:2541 ++#: nscd/connections.c:2551 ++#, c-format ++msgid "Failed to run nscd as user '%s'" ++msgstr "Falha ao executar nscd como usuário “%s”" ++ ++#: nscd/connections.c:2504 ++msgid "initial getgrouplist failed" ++msgstr "getgrouplist inicial falhou" ++ ++#: nscd/connections.c:2513 ++msgid "getgrouplist failed" ++msgstr "getgrouplist falhou" ++ ++#: nscd/connections.c:2531 ++msgid "setgroups failed" ++msgstr "setgroups falhou" ++ ++#: nscd/grpcache.c:416 nscd/hstcache.c:432 nscd/initgrcache.c:416 ++#: nscd/pwdcache.c:394 nscd/servicescache.c:338 ++#, c-format ++msgid "short write in %s: %s" ++msgstr "escrita insuficiente em %s: %s" ++ ++#: nscd/grpcache.c:461 nscd/initgrcache.c:84 ++#, c-format ++msgid "Haven't found \"%s\" in group cache!" ++msgstr "Não foi encontrado “%s” no cache de grupo!" ++ ++#: nscd/grpcache.c:463 nscd/initgrcache.c:86 ++#, c-format ++msgid "Reloading \"%s\" in group cache!" ++msgstr "Recarregando “%s” no cache de grupo!" ++ ++#: nscd/grpcache.c:542 ++#, c-format ++msgid "Invalid numeric gid \"%s\"!" ++msgstr "GID numérico inválido “%s”!" ++ ++#: nscd/mem.c:425 ++#, c-format ++msgid "freed %zu bytes in %s cache" ++msgstr "liberados %zu bytes no cache de %s" ++ ++#: nscd/mem.c:568 ++#, c-format ++msgid "no more memory for database '%s'" ++msgstr "não há mais memória para o banco de dados “%s”" ++ ++#: nscd/netgroupcache.c:121 ++#, c-format ++msgid "Haven't found \"%s\" in netgroup cache!" ++msgstr "Não foi encontrado “%s” no cache de netgroup!" ++ ++#: nscd/netgroupcache.c:123 ++#, c-format ++msgid "Reloading \"%s\" in netgroup cache!" ++msgstr "Recarregando “%s” no cache de netgroup!" ++ ++#: nscd/netgroupcache.c:495 ++#, c-format ++msgid "Haven't found \"%s (%s,%s,%s)\" in netgroup cache!" ++msgstr "Não foi encontrado “%s (%s,%s,%s)” no cache de netgroup!" ++ ++#: nscd/netgroupcache.c:498 ++#, c-format ++msgid "Reloading \"%s (%s,%s,%s)\" in netgroup cache!" ++msgstr "Recarregando “%s (%s,%s,%s)” no cache de netgroup!" ++ ++#: nscd/nscd.c:106 ++msgid "Read configuration data from NAME" ++msgstr "Lê configuração de dados de NOME" ++ ++#: nscd/nscd.c:108 ++msgid "Do not fork and display messages on the current tty" ++msgstr "Não bifurca (fork) e mostre mensagens na tty corrente" ++ ++#: nscd/nscd.c:110 ++msgid "Do not fork, but otherwise behave like a daemon" ++msgstr "Não bifurca (fork), mas, em vez disso, se comporta como um serviço (daemon)" ++ ++#: nscd/nscd.c:111 ++msgid "NUMBER" ++msgstr "NÚMERO" ++ ++# Espaço inical adicionado para corrigir alinhamento; veja 'nscd --help' -- Rafael ++#: nscd/nscd.c:111 ++msgid "Start NUMBER threads" ++msgstr " Inicia NÚMERO threads" ++ ++#: nscd/nscd.c:112 ++msgid "Shut the server down" ++msgstr "Encerra o servidor" ++ ++#: nscd/nscd.c:113 ++msgid "Print current configuration statistics" ++msgstr "Reúne e imprime as estatísticas de configuração" ++ ++#: nscd/nscd.c:114 ++msgid "TABLE" ++msgstr "TABELA" ++ ++#: nscd/nscd.c:115 ++msgid "Invalidate the specified cache" ++msgstr "Invalida o cache especificado" ++ ++#: nscd/nscd.c:116 ++msgid "TABLE,yes" ++msgstr "TABELA,sim" ++ ++#: nscd/nscd.c:117 ++msgid "Use separate cache for each user" ++msgstr "Usa um cache separado para cada usuário" ++ ++#: nscd/nscd.c:122 ++msgid "Name Service Cache Daemon." ++msgstr "Daemon de cache de serviço de nomes." ++ ++#: nscd/nscd.c:155 nss/getent.c:947 nss/makedb.c:206 ++#, c-format ++msgid "wrong number of arguments" ++msgstr "número incorreto de argumentos" ++ ++#: nscd/nscd.c:165 ++#, c-format ++msgid "failure while reading configuration file; this is fatal" ++msgstr "falha ao ler arquivo de configuração; isto é fatal" ++ ++#: nscd/nscd.c:174 ++#, c-format ++msgid "already running" ++msgstr "já está em execução" ++ ++#: nscd/nscd.c:194 ++#, c-format ++msgid "cannot create a pipe to talk to the child" ++msgstr "não foi possível criar um pipe para falar com o processo filho" ++ ++#: nscd/nscd.c:198 ++#, c-format ++msgid "cannot fork" ++msgstr "não foi possível bifurcar (fork)" ++ ++#: nscd/nscd.c:268 ++msgid "cannot change current working directory to \"/\"" ++msgstr "não foi possível mudar o diretório de trabalho atual para “/”" ++ ++#: nscd/nscd.c:276 ++msgid "Could not create log file" ++msgstr "Não foi possível criar o arquivo de log" ++ ++#: nscd/nscd.c:355 nscd/nscd_stat.c:209 ++#, c-format ++msgid "write incomplete" ++msgstr "escrita incompleta" ++ ++#: nscd/nscd.c:366 ++#, c-format ++msgid "cannot read invalidate ACK" ++msgstr "não foi possível ler ACK inválida" ++ ++#: nscd/nscd.c:372 ++#, c-format ++msgid "invalidation failed" ++msgstr "invalidação falhou" ++ ++#: nscd/nscd.c:417 nscd/nscd.c:442 nscd/nscd_stat.c:190 ++#, c-format ++msgid "Only root is allowed to use this option!" ++msgstr "Somente o superusuário pode usar esta opção!" ++ ++#: nscd/nscd.c:437 ++#, c-format ++msgid "'%s' is not a known database" ++msgstr "“%s” não é um banco de dados conhecido" ++ ++#: nscd/nscd.c:452 ++#, c-format ++msgid "secure services not implemented anymore" ++msgstr "serviços seguros não mais implementado" ++ ++#: nscd/nscd.c:485 ++#, c-format ++msgid "" ++"Supported tables:\n" ++"%s\n" ++"\n" ++"For bug reporting instructions, please see:\n" ++"%s.\n" ++msgstr "" ++"Há suporte às seguintes tabelas:\n" ++"%s\n" ++"\n" ++"Para instruções sobre como relatar erros, por favor veja:\n" ++"%s.\n" ++ ++#: nscd/nscd.c:635 ++#, c-format ++msgid "'wait' failed\n" ++msgstr "“wait” falhou\n" ++ ++#: nscd/nscd.c:642 ++#, c-format ++msgid "child exited with status %d\n" ++msgstr "processo filho saiu com erro %d\n" ++ ++#: nscd/nscd.c:647 ++#, c-format ++msgid "child terminated by signal %d\n" ++msgstr "processo filho terminado pelo sinal %d\n" ++ ++#: nscd/nscd_conf.c:54 ++#, c-format ++msgid "database %s is not supported" ++msgstr "sem suporte ao banco de dados %s" ++ ++#: nscd/nscd_conf.c:105 ++#, c-format ++msgid "Parse error: %s" ++msgstr "Erro de análise: %s" ++ ++#: nscd/nscd_conf.c:191 ++#, c-format ++msgid "Must specify user name for server-user option" ++msgstr "Deve-se especificar o nome do usuário para a opção “server-user”" ++ ++#: nscd/nscd_conf.c:198 ++#, c-format ++msgid "Must specify user name for stat-user option" ++msgstr "Deve-se especificar o nome do usuário para a opção “stat-user”" ++ ++#: nscd/nscd_conf.c:255 ++#, c-format ++msgid "Must specify value for restart-interval option" ++msgstr "Deve-se especificar valor para a opção “restart-interval”" ++ ++#: nscd/nscd_conf.c:269 ++#, c-format ++msgid "Unknown option: %s %s %s" ++msgstr "Opção desconhecida: %s %s %s" ++ ++#: nscd/nscd_conf.c:282 ++#, c-format ++msgid "cannot get current working directory: %s; disabling paranoia mode" ++msgstr "não foi possível obter o diretório de trabalho: %s; desabilitando modo paranoia" ++ ++#: nscd/nscd_conf.c:302 ++#, c-format ++msgid "maximum file size for %s database too small" ++msgstr "tamanho máximo de arquivo para o banco de dados %s é pequeno demais" ++ ++#: nscd/nscd_stat.c:159 ++#, c-format ++msgid "cannot write statistics: %s" ++msgstr "não foi possível escrever estatísticas: %s" ++ ++#: nscd/nscd_stat.c:174 ++msgid "yes" ++msgstr "sim" ++ ++#: nscd/nscd_stat.c:175 ++msgid "no" ++msgstr "não" ++ ++#: nscd/nscd_stat.c:186 ++#, c-format ++msgid "Only root or %s is allowed to use this option!" ++msgstr "Somente o superusuário ou %s pode usar esta opção!" ++ ++#: nscd/nscd_stat.c:197 ++#, c-format ++msgid "nscd not running!\n" ++msgstr "nscd não está em execução!\n" ++ ++#: nscd/nscd_stat.c:221 ++#, c-format ++msgid "cannot read statistics data" ++msgstr "não foi possível ler dados de estatística" ++ ++#: nscd/nscd_stat.c:224 ++#, c-format ++msgid "" ++"nscd configuration:\n" ++"\n" ++"%15d server debug level\n" ++msgstr "" ++"configuração do nscd:\n" ++"\n" ++"%15d nível de depuração do servidor\n" ++ ++#: nscd/nscd_stat.c:248 ++#, c-format ++msgid "%3ud %2uh %2um %2lus server runtime\n" ++msgstr "%3ud %2uh %2um %2lus tempo de execução do servidor\n" ++ ++#: nscd/nscd_stat.c:251 ++#, c-format ++msgid " %2uh %2um %2lus server runtime\n" ++msgstr " %2uh %2um %2lus tempo de execução do servidor\n" ++ ++#: nscd/nscd_stat.c:253 ++#, c-format ++msgid " %2um %2lus server runtime\n" ++msgstr " %2um %2lus tempo de execução do servidor\n" ++ ++#: nscd/nscd_stat.c:255 ++#, c-format ++msgid " %2lus server runtime\n" ++msgstr " %2lus tempo de execução do servidor\n" ++ ++#: nscd/nscd_stat.c:257 ++#, c-format ++msgid "" ++"%15d current number of threads\n" ++"%15d maximum number of threads\n" ++"%15lu number of times clients had to wait\n" ++"%15s paranoia mode enabled\n" ++"%15lu restart internal\n" ++"%15u reload count\n" ++msgstr "" ++"%15d número atual de threads\n" ++"%15d número máximo de threads\n" ++"%15lu número de tempos de espera de clientes\n" ++"%15s modo paranoia habilitado\n" ++"%15lu reinicialização interna\n" ++"%15u recarregamento de contagem\n" ++ ++#: nscd/nscd_stat.c:292 ++#, c-format ++msgid "" ++"\n" ++"%s cache:\n" ++"\n" ++"%15s cache is enabled\n" ++"%15s cache is persistent\n" ++"%15s cache is shared\n" ++"%15zu suggested size\n" ++"%15zu total data pool size\n" ++"%15zu used data pool size\n" ++"%15lu seconds time to live for positive entries\n" ++"%15lu seconds time to live for negative entries\n" ++"%15 cache hits on positive entries\n" ++"%15 cache hits on negative entries\n" ++"%15 cache misses on positive entries\n" ++"%15 cache misses on negative entries\n" ++"%15lu%% cache hit rate\n" ++"%15zu current number of cached values\n" ++"%15zu maximum number of cached values\n" ++"%15zu maximum chain length searched\n" ++"%15 number of delays on rdlock\n" ++"%15 number of delays on wrlock\n" ++"%15 memory allocations failed\n" ++"%15s check /etc/%s for changes\n" ++msgstr "" ++"\n" ++"cache %s:\n" ++"\n" ++"%15s cache está habilitado\n" ++"%15s cache é persistente\n" ++"%15s cache está compartilhado\n" ++"%15zu tamanho sugerido\n" ++"%15zu tamanho total de pool de dados\n" ++"%15zu tamanho usado de pool de dados\n" ++"%15lu segundos de vida para entradas positivas\n" ++"%15lu segundos de vida para entradas negativas\n" ++"%15 acertos do cache para entradas positivas\n" ++"%15 acertos do cache para entradas negativas\n" ++"%15 erros do cache para entradas positivas\n" ++"%15 erros do cache para entradas negativas\n" ++"%15lu%% taxa de acertos do cache\n" ++"%15zu número atual de valores em cache\n" ++"%15zu número máximo de valores em cache\n" ++"%15zu tamanho máximo de correntes pesquisadas\n" ++"%15 número de atraso no rdlock\n" ++"%15 número de atraso no wrlock\n" ++"%15 alocações de memória falharam\n" ++"%15s verifica /etc/%s por alterações\n" ++ ++#: nscd/pwdcache.c:439 ++#, c-format ++msgid "Haven't found \"%s\" in password cache!" ++msgstr "Não foi encontrado “%s” no cache de senhas!" ++ ++#: nscd/pwdcache.c:441 ++#, c-format ++msgid "Reloading \"%s\" in password cache!" ++msgstr "Recarregando “%s” no cache de senhas!" ++ ++#: nscd/pwdcache.c:522 ++#, c-format ++msgid "Invalid numeric uid \"%s\"!" ++msgstr "UID numérico inválido “%s”!" ++ ++#: nscd/selinux.c:154 ++#, c-format ++msgid "Failed opening connection to the audit subsystem: %m" ++msgstr "Falha ao abrir conexão com o subsistema de auditoria: %m" ++ ++#: nscd/selinux.c:175 ++msgid "Failed to set keep-capabilities" ++msgstr "Falha ao definir capacidades a serem mantidas" ++ ++#: nscd/selinux.c:176 nscd/selinux.c:239 ++msgid "prctl(KEEPCAPS) failed" ++msgstr "prctl(KEEPCAPS) falhou" ++ ++#: nscd/selinux.c:190 ++msgid "Failed to initialize drop of capabilities" ++msgstr "Falha ao inicializar descarte de capacidades" ++ ++#: nscd/selinux.c:191 ++msgid "cap_init failed" ++msgstr "cap_init falhou" ++ ++#: nscd/selinux.c:212 nscd/selinux.c:229 ++msgid "Failed to drop capabilities" ++msgstr "Falha ao descartar capacidades" ++ ++#: nscd/selinux.c:213 nscd/selinux.c:230 ++msgid "cap_set_proc failed" ++msgstr "cap_set_proc falhou" ++ ++#: nscd/selinux.c:238 ++msgid "Failed to unset keep-capabilities" ++msgstr "Falha ao remover definição de capacidades a serem mantidas" ++ ++#: nscd/selinux.c:254 ++msgid "Failed to determine if kernel supports SELinux" ++msgstr "Falha ao determinar se o kernel oferece suporte a SELinux" ++ ++#: nscd/selinux.c:269 ++msgid "Failed to start AVC thread" ++msgstr "Falha ao iniciar fluxo de AVC" ++ ++#: nscd/selinux.c:291 ++msgid "Failed to create AVC lock" ++msgstr "Falha ao criar trava de AVC" ++ ++#: nscd/selinux.c:331 ++msgid "Failed to start AVC" ++msgstr "Falha ao iniciar AVC" ++ ++#: nscd/selinux.c:333 ++msgid "Access Vector Cache (AVC) started" ++msgstr "Cache do Vetor de Acesso (AVC) iniciado" ++ ++#: nscd/selinux.c:368 ++msgid "Error querying policy for undefined object classes or permissions." ++msgstr "Erro ao consultar política por classes de objetos indefinidos ou permissões." ++ ++#: nscd/selinux.c:375 ++msgid "Error getting security class for nscd." ++msgstr "Erro ao obter classe de segurança para nscd." ++ ++#: nscd/selinux.c:380 ++#, c-format ++msgid "Error translating permission name \"%s\" to access vector bit." ++msgstr "Erro ao traduzir nome de permissão “%s” para bit do vetor de acesso." ++ ++#: nscd/selinux.c:390 ++msgid "Error getting context of socket peer" ++msgstr "Erro ao obter contexto do soquete da outra ponta" ++ ++#: nscd/selinux.c:395 ++msgid "Error getting context of nscd" ++msgstr "Erro ao obter um contexto do nscd" ++ ++#: nscd/selinux.c:401 ++msgid "Error getting sid from context" ++msgstr "Erro ao obter sid do contexto" ++ ++#: nscd/selinux.c:439 ++#, c-format ++msgid "" ++"\n" ++"SELinux AVC Statistics:\n" ++"\n" ++"%15u entry lookups\n" ++"%15u entry hits\n" ++"%15u entry misses\n" ++"%15u entry discards\n" ++"%15u CAV lookups\n" ++"%15u CAV hits\n" ++"%15u CAV probes\n" ++"%15u CAV misses\n" ++msgstr "" ++"\n" ++"Estatísticas do AVC do SELinux:\n" ++"\n" ++"%15u consultas a registros\n" ++"%15u acerto a registros\n" ++"%15u erros a registros\n" ++"%15u descarte de registros\n" ++"%15u consultas a CAV\n" ++"%15u acertos a CAV\n" ++"%15u investigações de CAV\n" ++"%15u erros de CAV\n" ++ ++#: nscd/servicescache.c:387 ++#, c-format ++msgid "Haven't found \"%s\" in services cache!" ++msgstr "Não foi encontrado “%s” no cache de serviços!" ++ ++#: nscd/servicescache.c:389 ++#, c-format ++msgid "Reloading \"%s\" in services cache!" ++msgstr "Recarregando “%s” no cache de serviços!" ++ ++#: nss/getent.c:53 ++msgid "database [key ...]" ++msgstr "base_de_dados [chave ...]" ++ ++#: nss/getent.c:58 ++msgid "CONFIG" ++msgstr "CONFIG" ++ ++#: nss/getent.c:58 ++msgid "Service configuration to be used" ++msgstr "Serviço de configuração a ser usado" ++ ++#: nss/getent.c:59 ++msgid "disable IDN encoding" ++msgstr "desabilita codificação de IDN" ++ ++#: nss/getent.c:64 ++msgid "Get entries from administrative database." ++msgstr "Obtém registros de banco de dados administrativo." ++ ++#: nss/getent.c:148 nss/getent.c:441 nss/getent.c:486 ++#, c-format ++msgid "Enumeration not supported on %s\n" ++msgstr "Sem suporte a enumeração no %s\n" ++ ++#: nss/getent.c:861 ++#, c-format ++msgid "Unknown database name" ++msgstr "Nome de banco de dados desconhecido" ++ ++#: nss/getent.c:891 ++msgid "Supported databases:\n" ++msgstr "Há suporte aos seguintes bancos de dados:\n" ++ ++#: nss/getent.c:957 ++#, c-format ++msgid "Unknown database: %s\n" ++msgstr "Base de dados desconhecida: %s\n" ++ ++#: nss/makedb.c:119 ++msgid "Convert key to lower case" ++msgstr "Converte chave para letras minúsculas" ++ ++#: nss/makedb.c:122 ++msgid "Do not print messages while building database" ++msgstr "Não mostra mensagens enquanto constrói base de dados" ++ ++#: nss/makedb.c:124 ++msgid "Print content of database file, one entry a line" ++msgstr "Mostra o conteúdo da base de dados do arquivo, um entrada por linha" ++ ++#: nss/makedb.c:125 ++msgid "CHAR" ++msgstr "CARACT" ++ ++#: nss/makedb.c:126 ++msgid "Generated line not part of iteration" ++msgstr "Linha gerada não é parte da iteração" ++ ++#: nss/makedb.c:131 ++msgid "Create simple database from textual input." ++msgstr "Cria um banco de dados simples de uma entrada textual." ++ ++#: nss/makedb.c:134 ++msgid "" ++"INPUT-FILE OUTPUT-FILE\n" ++"-o OUTPUT-FILE INPUT-FILE\n" ++"-u INPUT-FILE" ++msgstr "" ++"ARQUIVO-ENTRADA ARQUIVO-SAÍDA\n" ++"-o ARQUIVO-SAÍDA ARQUIVO-ENTRADA\n" ++"-u ARQUIVO-ENTRADA" ++ ++#: nss/makedb.c:227 ++#, c-format ++msgid "cannot open database file `%s'" ++msgstr "não foi possível abrir o arquivo de banco de dados “%s”" ++ ++#: nss/makedb.c:272 ++#, c-format ++msgid "no entries to be processed" ++msgstr "nenhum registro a ser processado" ++ ++#: nss/makedb.c:282 ++#, c-format ++msgid "cannot create temporary file name" ++msgstr "não foi possível criar um nome de arquivo temporário" ++ ++#: nss/makedb.c:288 ++#, c-format ++msgid "cannot create temporary file" ++msgstr "não foi possível criar um arquivo temporário" ++ ++#: nss/makedb.c:304 ++#, c-format ++msgid "cannot stat newly created file" ++msgstr "não foi possível obter estado do arquivo recém-criado" ++ ++#: nss/makedb.c:315 ++#, c-format ++msgid "cannot rename temporary file" ++msgstr "não foi possível renomear o arquivo temporário" ++ ++#: nss/makedb.c:527 nss/makedb.c:550 ++#, c-format ++msgid "cannot create search tree" ++msgstr "não foi possível criar árvore de pesquisa" ++ ++#: nss/makedb.c:556 ++msgid "duplicate key" ++msgstr "chave duplicada" ++ ++#: nss/makedb.c:568 ++#, c-format ++msgid "problems while reading `%s'" ++msgstr "problemas durante a leitura de “%s”" ++ ++#: nss/makedb.c:795 ++#, c-format ++msgid "failed to write new database file" ++msgstr "falha ao escrever novo arquivo de banco de dados" ++ ++#: nss/makedb.c:808 ++#, c-format ++msgid "cannot stat database file" ++msgstr "não foi possível obter estado do arquivo de banco de dados" ++ ++#: nss/makedb.c:813 ++#, c-format ++msgid "cannot map database file" ++msgstr "não foi possível mapear o arquivo de banco de dados" ++ ++#: nss/makedb.c:816 ++#, c-format ++msgid "file not a database file" ++msgstr "o arquivo não é um arquivo de banco de dados" ++ ++#: nss/makedb.c:867 ++#, c-format ++msgid "cannot set file creation context for `%s'" ++msgstr "não foi possível definir contexto de criação de arquivo para “%s”" ++ ++#: posix/getconf.c:417 ++#, c-format ++msgid "Usage: %s [-v specification] variable_name [pathname]\n" ++msgstr "Uso: %s [-v especificação] nome_da_variável [caminho]\n" ++ ++#: posix/getconf.c:420 ++#, c-format ++msgid " %s -a [pathname]\n" ++msgstr " %s -a [caminho]\n" ++ ++#: posix/getconf.c:496 ++#, c-format ++msgid "" ++"Usage: getconf [-v SPEC] VAR\n" ++" or: getconf [-v SPEC] PATH_VAR PATH\n" ++"\n" ++"Get the configuration value for variable VAR, or for variable PATH_VAR\n" ++"for path PATH. If SPEC is given, give values for compilation\n" ++"environment SPEC.\n" ++"\n" ++msgstr "" ++"Uso: getconf [-v ESPEC] VAR\n" ++" ou: getconf [-v ESPEC] VAR_CAMINHO CAMINHO\n" ++"\n" ++"Obtém o valor de configuração da variável VAR ou para variável VAR_CAMINHO\n" ++"para caminho CAMINHO. Se ESPEC for dado, atribuir valores para ambiente de\n" ++"compilação ESPEC.\n" ++"\n" ++ ++#: posix/getconf.c:572 ++#, c-format ++msgid "unknown specification \"%s\"" ++msgstr "especificação desconhecida “%s”" ++ ++#: posix/getconf.c:624 ++#, c-format ++msgid "Couldn't execute %s" ++msgstr "Não foi possível executar %s" ++ ++#: posix/getconf.c:669 posix/getconf.c:685 ++msgid "undefined" ++msgstr "indefinido" ++ ++#: posix/getconf.c:707 ++#, c-format ++msgid "Unrecognized variable `%s'" ++msgstr "Variável não reconhecida “%s”" ++ ++#: posix/getopt.c:277 ++#, c-format ++msgid "%s: option '%s%s' is ambiguous\n" ++msgstr "%s: a opção “%s%s” é ambígua\n" ++ ++#: posix/getopt.c:283 ++#, c-format ++msgid "%s: option '%s%s' is ambiguous; possibilities:" ++msgstr "%s: a opção “%s%s” é ambígua; possibilidades:" ++ ++#: posix/getopt.c:318 ++#, c-format ++msgid "%s: unrecognized option '%s%s'\n" ++msgstr "%s: opção não reconhecida “%s%s”\n" ++ ++#: posix/getopt.c:344 ++#, c-format ++msgid "%s: option '%s%s' doesn't allow an argument\n" ++msgstr "%s: a opção “%s%s” não permite um argumento\n" ++ ++#: posix/getopt.c:359 ++#, c-format ++msgid "%s: option '%s%s' requires an argument\n" ++msgstr "%s: a opção “%s%s” requer um argumento\n" ++ ++#: posix/getopt.c:620 ++#, c-format ++msgid "%s: invalid option -- '%c'\n" ++msgstr "%s: opção inválida -- “%c”\n" ++ ++#: posix/getopt.c:635 posix/getopt.c:681 ++#, c-format ++msgid "%s: option requires an argument -- '%c'\n" ++msgstr "%s: a opção requer um argumento -- “%c”\n" ++ ++#: posix/regcomp.c:140 ++msgid "No match" ++msgstr "Não confere" ++ ++#: posix/regcomp.c:143 ++msgid "Invalid regular expression" ++msgstr "Expressão regular inválida" ++ ++#: posix/regcomp.c:146 ++msgid "Invalid collation character" ++msgstr "Caractere de comparação inválido" ++ ++#: posix/regcomp.c:149 ++msgid "Invalid character class name" ++msgstr "Nome de classe de caractere inválido" ++ ++#: posix/regcomp.c:152 ++msgid "Trailing backslash" ++msgstr "Barra invertida final" ++ ++#: posix/regcomp.c:155 ++msgid "Invalid back reference" ++msgstr "Referência anterior inválida" ++ ++#: posix/regcomp.c:158 ++msgid "Unmatched [ or [^" ++msgstr "[ ou [^ descasados" ++ ++#: posix/regcomp.c:161 ++msgid "Unmatched ( or \\(" ++msgstr "( ou \\( descasados" ++ ++#: posix/regcomp.c:164 ++msgid "Unmatched \\{" ++msgstr "\\{ descasado" ++ ++#: posix/regcomp.c:167 ++msgid "Invalid content of \\{\\}" ++msgstr "Conteúdo inválido de \\{\\}" ++ ++#: posix/regcomp.c:170 ++msgid "Invalid range end" ++msgstr "Intervalo final inválida" ++ ++#: posix/regcomp.c:173 ++msgid "Memory exhausted" ++msgstr "Memória esgotada" ++ ++#: posix/regcomp.c:176 ++msgid "Invalid preceding regular expression" ++msgstr "Expressão regular precedente inválida" ++ ++#: posix/regcomp.c:179 ++msgid "Premature end of regular expression" ++msgstr "Fim prematuro da expressão regular" ++ ++#: posix/regcomp.c:182 ++msgid "Regular expression too big" ++msgstr "Expressão regular muito longa" ++ ++#: posix/regcomp.c:185 ++msgid "Unmatched ) or \\)" ++msgstr ") ou \\) descasados" ++ ++#: posix/regcomp.c:675 ++msgid "No previous regular expression" ++msgstr "Não há expressão regular anterior" ++ ++#: posix/wordexp.c:1803 ++msgid "parameter null or not set" ++msgstr "parâmetro nulo ou não definido" ++ ++#: resolv/herror.c:63 ++msgid "Resolver Error 0 (no error)" ++msgstr "Erro de resolvedor 0 (não há erro)" ++ ++#: resolv/herror.c:64 ++msgid "Unknown host" ++msgstr "Host desconhecido" ++ ++#: resolv/herror.c:65 ++msgid "Host name lookup failure" ++msgstr "Falha na procura do nome de host" ++ ++#: resolv/herror.c:66 ++msgid "Unknown server error" ++msgstr "Erro desconhecido de servidor" ++ ++#: resolv/herror.c:67 ++msgid "No address associated with name" ++msgstr "Não há endereço associado com o nome" ++ ++#: resolv/herror.c:102 ++msgid "Resolver internal error" ++msgstr "Erro interno do resolvedor" ++ ++#: resolv/herror.c:105 ++msgid "Unknown resolver error" ++msgstr "Erro desconhecido do resolvedor" ++ ++#: resolv/res_hconf.c:118 ++#, c-format ++msgid "%s: line %d: cannot specify more than %d trim domains" ++msgstr "%s: linha %d: não é possível especificar mais de %d domínios" ++ ++#: resolv/res_hconf.c:139 ++#, c-format ++msgid "%s: line %d: list delimiter not followed by domain" ++msgstr "%s: linha %d: delimitador de lista não seguido pelo domínio" ++ ++#: resolv/res_hconf.c:176 ++#, c-format ++msgid "%s: line %d: expected `on' or `off', found `%s'\n" ++msgstr "%s: linha %d: esperava “on” ou “off”, encontrou “%s”\n" ++ ++#: resolv/res_hconf.c:219 ++#, c-format ++msgid "%s: line %d: bad command `%s'\n" ++msgstr "%s: linha %d: comando inválido “%s”\n" ++ ++#: resolv/res_hconf.c:252 ++#, c-format ++msgid "%s: line %d: ignoring trailing garbage `%s'\n" ++msgstr "%s: linha %d: ignorando lixo ao final “%s”\n" ++ ++#: stdio-common/psiginfo-data.h:2 ++msgid "Illegal opcode" ++msgstr "Código de operação ilegal" ++ ++#: stdio-common/psiginfo-data.h:3 ++msgid "Illegal operand" ++msgstr "Operando ilegal" ++ ++#: stdio-common/psiginfo-data.h:4 ++msgid "Illegal addressing mode" ++msgstr "Modo de endereçamento ilegal" ++ ++#: stdio-common/psiginfo-data.h:5 ++msgid "Illegal trap" ++msgstr "Armadilha ilegal" ++ ++#: stdio-common/psiginfo-data.h:6 ++msgid "Privileged opcode" ++msgstr "Código de operação privilegiado" ++ ++#: stdio-common/psiginfo-data.h:7 ++msgid "Privileged register" ++msgstr "Registrador privilegiado" ++ ++#: stdio-common/psiginfo-data.h:8 ++msgid "Coprocessor error" ++msgstr "Erro do coprocessador" ++ ++#: stdio-common/psiginfo-data.h:9 ++msgid "Internal stack error" ++msgstr "Erro interno da pilha" ++ ++#: stdio-common/psiginfo-data.h:12 ++msgid "Integer divide by zero" ++msgstr "Divisão de inteiro por zero" ++ ++#: stdio-common/psiginfo-data.h:13 ++msgid "Integer overflow" ++msgstr "Estouro de valor inteiro" ++ ++#: stdio-common/psiginfo-data.h:14 ++msgid "Floating-point divide by zero" ++msgstr "Divisão de ponto flutuante por zero" ++ ++#: stdio-common/psiginfo-data.h:15 ++msgid "Floating-point overflow" ++msgstr "Estouro de ponto flutuante" ++ ++#: stdio-common/psiginfo-data.h:16 ++msgid "Floating-point underflow" ++msgstr "Estouro negativo de ponto flutuante" ++ ++#: stdio-common/psiginfo-data.h:17 ++msgid "Floating-poing inexact result" ++msgstr "Resultado inexato de ponto flutuante" ++ ++#: stdio-common/psiginfo-data.h:18 ++msgid "Invalid floating-point operation" ++msgstr "Operação inválida de ponto flutuante" ++ ++#: stdio-common/psiginfo-data.h:19 ++msgid "Subscript out of range" ++msgstr "Subscrito fora da faixa" ++ ++#: stdio-common/psiginfo-data.h:22 ++msgid "Address not mapped to object" ++msgstr "Endereço não mapeado ao objeto" ++ ++#: stdio-common/psiginfo-data.h:23 ++msgid "Invalid permissions for mapped object" ++msgstr "Permissões inválidas para objeto mapeado" ++ ++#: stdio-common/psiginfo-data.h:26 ++msgid "Invalid address alignment" ++msgstr "Alinhamento inválido de endereço" ++ ++#: stdio-common/psiginfo-data.h:27 ++msgid "Nonexisting physical address" ++msgstr "Endereço físico inexistente" ++ ++#: stdio-common/psiginfo-data.h:28 ++msgid "Object-specific hardware error" ++msgstr "Erro de hardware específico do objeto" ++ ++#: stdio-common/psiginfo-data.h:31 ++msgid "Process breakpoint" ++msgstr "Ponto de interrupção de processo" ++ ++#: stdio-common/psiginfo-data.h:32 ++msgid "Process trace trap" ++msgstr "Interrupção de rastreamento de processo" ++ ++#: stdio-common/psiginfo-data.h:35 ++msgid "Child has exited" ++msgstr "Processo filho saiu" ++ ++#: stdio-common/psiginfo-data.h:36 ++msgid "Child has terminated abnormally and did not create a core file" ++msgstr "Processo filho foi terminado anormalmente e não criou um arquivo de núcleo" ++ ++#: stdio-common/psiginfo-data.h:37 ++msgid "Child has terminated abnormally and created a core file" ++msgstr "Processo filho foi terminado anormalmente e criou um arquivo de núcleo" ++ ++#: stdio-common/psiginfo-data.h:38 ++msgid "Traced child has trapped" ++msgstr "Processo filho rastreado atingiu uma armadilha" ++ ++#: stdio-common/psiginfo-data.h:39 ++msgid "Child has stopped" ++msgstr "Processo filho parou" ++ ++#: stdio-common/psiginfo-data.h:40 ++msgid "Stopped child has continued" ++msgstr "Processo filho parado continuou" ++ ++#: stdio-common/psiginfo-data.h:43 ++msgid "Data input available" ++msgstr "Entrada de dados disponível" ++ ++#: stdio-common/psiginfo-data.h:44 ++msgid "Output buffers available" ++msgstr "Buffers de saída disponíveis" ++ ++#: stdio-common/psiginfo-data.h:45 ++msgid "Input message available" ++msgstr "Mensagem de entrada disponível" ++ ++#: stdio-common/psiginfo-data.h:46 timezone/zdump.c:381 timezone/zic.c:520 ++msgid "I/O error" ++msgstr "Erro de E/S" ++ ++#: stdio-common/psiginfo-data.h:47 ++msgid "High priority input available" ++msgstr "Entrada de prioridade muito alta disponível" ++ ++#: stdio-common/psiginfo-data.h:48 ++msgid "Device disconnected" ++msgstr "Dispositivo desconectado" ++ ++#: stdio-common/psiginfo.c:140 ++msgid "Signal sent by kill()" ++msgstr "Sinal enviado por kill()" ++ ++#: stdio-common/psiginfo.c:143 ++msgid "Signal sent by sigqueue()" ++msgstr "Sinal enviado por sigqueue()" ++ ++#: stdio-common/psiginfo.c:146 ++msgid "Signal generated by the expiration of a timer" ++msgstr "Sinal gerado pela expiração de um temporizador" ++ ++#: stdio-common/psiginfo.c:149 ++msgid "Signal generated by the completion of an asynchronous I/O request" ++msgstr "Sinal gerado pelo completamento de uma requisição assíncrona de E/S" ++ ++#: stdio-common/psiginfo.c:153 ++msgid "Signal generated by the arrival of a message on an empty message queue" ++msgstr "Sinal gerado pela chegada de uma mensagem em uma pilhe de mensagens vazia" ++ ++#: stdio-common/psiginfo.c:158 ++msgid "Signal sent by tkill()" ++msgstr "Sinal enviado por tkill()" ++ ++#: stdio-common/psiginfo.c:163 ++msgid "Signal generated by the completion of an asynchronous name lookup request" ++msgstr "Sinal gerada pelo completamento de uma requisição assíncrona de procura de nome" ++ ++#: stdio-common/psiginfo.c:169 ++msgid "Signal generated by the completion of an I/O request" ++msgstr "Sinal gerado pelo completamento de uma requisição de E/S" ++ ++#: stdio-common/psiginfo.c:175 ++msgid "Signal sent by the kernel" ++msgstr "Sinal enviado pelo kernel" ++ ++#: stdio-common/psiginfo.c:199 ++#, c-format ++msgid "Unknown signal %d\n" ++msgstr "Sinal desconhecido %d\n" ++ ++#: stdio-common/psignal.c:43 ++#, c-format ++msgid "%s%sUnknown signal %d\n" ++msgstr "%s%sSinal desconhecido %d\n" ++ ++#: stdio-common/psignal.c:44 ++msgid "Unknown signal" ++msgstr "Sinal desconhecido" ++ ++#: string/_strerror.c:45 sysdeps/mach/_strerror.c:86 ++msgid "Unknown error " ++msgstr "Erro desconhecido " ++ ++#: string/strerror.c:41 ++msgid "Unknown error" ++msgstr "Erro desconhecido" ++ ++#: string/strsignal.c:60 ++#, c-format ++msgid "Real-time signal %d" ++msgstr "Sinal de tempo-real %d" ++ ++#: string/strsignal.c:64 ++#, c-format ++msgid "Unknown signal %d" ++msgstr "Sinal desconhecido %d" ++ ++#: sunrpc/auth_unix.c:112 sunrpc/clnt_tcp.c:124 sunrpc/clnt_udp.c:139 ++#: sunrpc/clnt_unix.c:125 sunrpc/svc_tcp.c:189 sunrpc/svc_tcp.c:233 ++#: sunrpc/svc_udp.c:161 sunrpc/svc_unix.c:189 sunrpc/svc_unix.c:229 ++#: sunrpc/xdr.c:628 sunrpc/xdr.c:788 sunrpc/xdr_array.c:102 ++#: sunrpc/xdr_rec.c:153 sunrpc/xdr_ref.c:79 ++msgid "out of memory\n" ++msgstr "memória insuficiente\n" ++ ++#: sunrpc/auth_unix.c:349 ++msgid "auth_unix.c: Fatal marshalling problem" ++msgstr "auth_unix.c: Problema fatal de marshalling" ++ ++#: sunrpc/clnt_perr.c:96 sunrpc/clnt_perr.c:112 ++#, c-format ++msgid "%s: %s; low version = %lu, high version = %lu" ++msgstr "%s: %s; versão baixa = %lu, versão alta = %lu" ++ ++#: sunrpc/clnt_perr.c:103 ++#, c-format ++msgid "%s: %s; why = %s\n" ++msgstr "%s: %s; por que = %s\n" ++ ++#: sunrpc/clnt_perr.c:105 ++#, c-format ++msgid "%s: %s; why = (unknown authentication error - %d)\n" ++msgstr "%s: %s; por que = (erro desconhecido de autenticação – %d)\n" ++ ++#: sunrpc/clnt_perr.c:154 ++msgid "RPC: Success" ++msgstr "RPC: Sucesso" ++ ++#: sunrpc/clnt_perr.c:157 ++msgid "RPC: Can't encode arguments" ++msgstr "RPC: não foi possível codificar argumentos" ++ ++#: sunrpc/clnt_perr.c:161 ++msgid "RPC: Can't decode result" ++msgstr "RPC: não foi possível decodificar resultado" ++ ++#: sunrpc/clnt_perr.c:165 ++msgid "RPC: Unable to send" ++msgstr "RPC: não foi possível enviar" ++ ++#: sunrpc/clnt_perr.c:169 ++msgid "RPC: Unable to receive" ++msgstr "RPC: não foi possível receber" ++ ++#: sunrpc/clnt_perr.c:173 ++msgid "RPC: Timed out" ++msgstr "RPC: Tempo esgotado" ++ ++#: sunrpc/clnt_perr.c:177 ++msgid "RPC: Incompatible versions of RPC" ++msgstr "RPC: Versões incompatíveis de RPC" ++ ++#: sunrpc/clnt_perr.c:181 ++msgid "RPC: Authentication error" ++msgstr "RPC: Erro de autenticação" ++ ++#: sunrpc/clnt_perr.c:185 ++msgid "RPC: Program unavailable" ++msgstr "RPC: Programa indisponível" ++ ++#: sunrpc/clnt_perr.c:189 ++msgid "RPC: Program/version mismatch" ++msgstr "RPC: Programa/versão incompatíveis" ++ ++#: sunrpc/clnt_perr.c:193 ++msgid "RPC: Procedure unavailable" ++msgstr "RPC: Procedimento indisponível" ++ ++#: sunrpc/clnt_perr.c:197 ++msgid "RPC: Server can't decode arguments" ++msgstr "RPC: O servidor não pode decodificar os argumentos" ++ ++#: sunrpc/clnt_perr.c:201 ++msgid "RPC: Remote system error" ++msgstr "RPC: Erro remoto de sistema" ++ ++#: sunrpc/clnt_perr.c:205 ++msgid "RPC: Unknown host" ++msgstr "RPC: Host desconhecido" ++ ++#: sunrpc/clnt_perr.c:209 ++msgid "RPC: Unknown protocol" ++msgstr "RPC: Protocolo desconhecido" ++ ++#: sunrpc/clnt_perr.c:213 ++msgid "RPC: Port mapper failure" ++msgstr "RPC: Falha no Port mapper" ++ ++#: sunrpc/clnt_perr.c:217 ++msgid "RPC: Program not registered" ++msgstr "RPC: Programa não registrado" ++ ++#: sunrpc/clnt_perr.c:221 ++msgid "RPC: Failed (unspecified error)" ++msgstr "RPC: Falhou (erro não especificado)" ++ ++#: sunrpc/clnt_perr.c:262 ++msgid "RPC: (unknown error code)" ++msgstr "RPC: (código de erro desconhecido)" ++ ++#: sunrpc/clnt_perr.c:334 ++msgid "Authentication OK" ++msgstr "Autenticação OK" ++ ++#: sunrpc/clnt_perr.c:337 ++msgid "Invalid client credential" ++msgstr "Credencial de cliente inválido" ++ ++#: sunrpc/clnt_perr.c:341 ++msgid "Server rejected credential" ++msgstr "Servidor rejeitou credencial" ++ ++#: sunrpc/clnt_perr.c:345 ++msgid "Invalid client verifier" ++msgstr "Verificador de cliente inválido" ++ ++#: sunrpc/clnt_perr.c:349 ++msgid "Server rejected verifier" ++msgstr "Servidor rejeitou verificador" ++ ++#: sunrpc/clnt_perr.c:353 ++msgid "Client credential too weak" ++msgstr "Credencial do cliente muito fraca" ++ ++#: sunrpc/clnt_perr.c:357 ++msgid "Invalid server verifier" ++msgstr "Verificador de servidor inválido" ++ ++#: sunrpc/clnt_perr.c:361 ++msgid "Failed (unspecified error)" ++msgstr "Falha (erro não especificado)" ++ ++#: sunrpc/clnt_raw.c:116 ++msgid "clnt_raw.c: fatal header serialization error" ++msgstr "clnt_raw.c: erro fatal no cabeçalho de serialização" ++ ++#: sunrpc/pm_getmaps.c:78 ++msgid "pmap_getmaps.c: rpc problem" ++msgstr "pmap_getmaps.c: problema de rpc" ++ ++#: sunrpc/pmap_clnt.c:128 ++msgid "Cannot register service" ++msgstr "Não foi possível registrar serviço" ++ ++#: sunrpc/pmap_rmt.c:244 ++msgid "Cannot create socket for broadcast rpc" ++msgstr "Não foi possível criar socket para rpc de broadcast" ++ ++#: sunrpc/pmap_rmt.c:251 ++msgid "Cannot set socket option SO_BROADCAST" ++msgstr "Não foi possível usar opção do socket SO_BROADCAST" ++ ++#: sunrpc/pmap_rmt.c:303 ++msgid "Cannot send broadcast packet" ++msgstr "Não foi possível enviar pacote de broadcast" ++ ++#: sunrpc/pmap_rmt.c:328 ++msgid "Broadcast poll problem" ++msgstr "Problema na pesquisa de broadcast" ++ ++#: sunrpc/pmap_rmt.c:341 ++msgid "Cannot receive reply to broadcast" ++msgstr "Não foi possível receber resposta para broadcast" ++ ++#: sunrpc/rpc_main.c:281 ++#, c-format ++msgid "%s: output would overwrite %s\n" ++msgstr "%s: saída poderá sobrescrever %s\n" ++ ++#: sunrpc/rpc_main.c:288 ++#, c-format ++msgid "%s: unable to open %s: %m\n" ++msgstr "%s: não foi possível abrir %s: %m\n" ++ ++#: sunrpc/rpc_main.c:300 ++#, c-format ++msgid "%s: while writing output %s: %m" ++msgstr "%s: ao escrever saída %s: %m" ++ ++#: sunrpc/rpc_main.c:336 sunrpc/rpc_main.c:375 ++#, c-format ++msgid "cannot find C preprocessor: %s\n" ++msgstr "não foi possível localizar pré-processador C: %s\n" ++ ++#: sunrpc/rpc_main.c:411 ++#, c-format ++msgid "%s: C preprocessor failed with signal %d\n" ++msgstr "%s: pré-processador C falhou com sinal %d\n" ++ ++#: sunrpc/rpc_main.c:414 ++#, c-format ++msgid "%s: C preprocessor failed with exit code %d\n" ++msgstr "%s: pré-processador C falhou com código de saída %d\n" ++ ++#: sunrpc/rpc_main.c:454 ++#, c-format ++msgid "illegal nettype: `%s'\n" ++msgstr "nettype ilegal: “%s”\n" ++ ++#: sunrpc/rpc_main.c:1089 ++#, c-format ++msgid "rpcgen: too many defines\n" ++msgstr "rpcgen: número excessivo de definições\n" ++ ++#: sunrpc/rpc_main.c:1101 ++#, c-format ++msgid "rpcgen: arglist coding error\n" ++msgstr "rpcgen: erro na codificação de parâmetros\n" ++ ++#. TRANS: the file will not be removed; this is an ++#. TRANS: informative message. ++#: sunrpc/rpc_main.c:1134 ++#, c-format ++msgid "file `%s' already exists and may be overwritten\n" ++msgstr "o arquivo “%s” já existe e pode ser sobrescrito\n" ++ ++#: sunrpc/rpc_main.c:1179 ++#, c-format ++msgid "Cannot specify more than one input file!\n" ++msgstr "Não é possível especificar mais de um arquivo de entrada!\n" ++ ++#: sunrpc/rpc_main.c:1349 ++#, c-format ++msgid "This implementation doesn't support newstyle or MT-safe code!\n" ++msgstr "Essa implementação não oferece suporte a código newstyle ou MT-safe!\n" ++ ++#: sunrpc/rpc_main.c:1358 ++#, c-format ++msgid "Cannot use netid flag with inetd flag!\n" ++msgstr "Não é possível usar tabela de indicadores com novo estilo!\n" ++ ++#: sunrpc/rpc_main.c:1367 ++#, c-format ++msgid "Cannot use netid flag without TIRPC!\n" ++msgstr "Não é possível usar indicador netid sem TIRPC!\n" ++ ++#: sunrpc/rpc_main.c:1374 ++#, c-format ++msgid "Cannot use table flags with newstyle!\n" ++msgstr "Não é possível usar indicadores de tabelas com novo estilo!\n" ++ ++#: sunrpc/rpc_main.c:1393 ++#, c-format ++msgid "\"infile\" is required for template generation flags.\n" ++msgstr "“arq-entrada” é necessário para geração de indicadores do modelo.\n" ++ ++#: sunrpc/rpc_main.c:1398 ++#, c-format ++msgid "Cannot have more than one file generation flag!\n" ++msgstr "Não é possível ter mais de um indicador de geração de arquivo!\n" ++ ++#: sunrpc/rpc_main.c:1407 ++#, c-format ++msgid "usage: %s infile\n" ++msgstr "uso: %s arq-entrada\n" ++ ++#: sunrpc/rpc_main.c:1408 ++#, c-format ++msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" ++msgstr "\t%s [-abkCLNTM][-Dnome[=valor]] [-i tam] [-I [-K segs]] [-Y rota] arq-entrada\n" ++ ++#: sunrpc/rpc_main.c:1410 ++#, c-format ++msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" ++msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o arq-saída] [arq-entrada]\n" ++ ++#: sunrpc/rpc_main.c:1412 ++#, c-format ++msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" ++msgstr "\t%s [-s tipo-rede]* [-o arq-saída] [arq-entrada]\n" ++ ++#: sunrpc/rpc_main.c:1413 ++#, c-format ++msgid "\t%s [-n netid]* [-o outfile] [infile]\n" ++msgstr "\t%s [-n id-rede]* [-o arq-saída] [arq-entrada]\n" ++ ++#: sunrpc/rpc_main.c:1421 ++#, c-format ++msgid "options:\n" ++msgstr "opções:\n" ++ ++#: sunrpc/rpc_main.c:1422 ++#, c-format ++msgid "-a\t\tgenerate all files, including samples\n" ++msgstr "-a\t\tgera todos arquivos, incluindo amostras\n" ++ ++#: sunrpc/rpc_main.c:1423 ++#, c-format ++msgid "-b\t\tbackward compatibility mode (generates code for SunOS 4.1)\n" ++msgstr "-b\t\tmodo de compatibilidade reversa (gera código para SunOS 4.1)\n" ++ ++#: sunrpc/rpc_main.c:1424 ++#, c-format ++msgid "-c\t\tgenerate XDR routines\n" ++msgstr "-c\t\tgera rotinas XDR\n" ++ ++#: sunrpc/rpc_main.c:1425 ++#, c-format ++msgid "-C\t\tANSI C mode\n" ++msgstr "-C\t\tmodo ANSI C\n" ++ ++#: sunrpc/rpc_main.c:1426 ++#, c-format ++msgid "-Dname[=value]\tdefine a symbol (same as #define)\n" ++msgstr "-Dnome[=valor]\tdefine um símbolo (mesmos que #define)\n" ++ ++#: sunrpc/rpc_main.c:1427 ++#, c-format ++msgid "-h\t\tgenerate header file\n" ++msgstr "-h\t\tgera arquivo de cabeçalho\n" ++ ++#: sunrpc/rpc_main.c:1428 ++#, c-format ++msgid "-i size\t\tsize at which to start generating inline code\n" ++msgstr "-i tamanho\ttamanho no qual se inicia geração de código em linha\n" ++ ++#: sunrpc/rpc_main.c:1429 ++#, c-format ++msgid "-I\t\tgenerate code for inetd support in server (for SunOS 4.1)\n" ++msgstr "-I\t\tgera código para suporte inetd em servidor (para SunOS 4.1)\n" ++ ++#: sunrpc/rpc_main.c:1430 ++#, c-format ++msgid "-K seconds\tserver exits after K seconds of inactivity\n" ++msgstr "-K segundos\tservidor sai após K segundos de inatividade\n" ++ ++#: sunrpc/rpc_main.c:1431 ++#, c-format ++msgid "-l\t\tgenerate client side stubs\n" ++msgstr "-l\t\tgera stubs do lado do cliente\n" ++ ++#: sunrpc/rpc_main.c:1432 ++#, c-format ++msgid "-L\t\tserver errors will be printed to syslog\n" ++msgstr "-L\t\terros de servidor serão imprimidos ao syslog\n" ++ ++#: sunrpc/rpc_main.c:1433 ++#, c-format ++msgid "-m\t\tgenerate server side stubs\n" ++msgstr "-l\t\tgera stubs do lado do servidor\n" ++ ++#: sunrpc/rpc_main.c:1434 ++#, c-format ++msgid "-M\t\tgenerate MT-safe code\n" ++msgstr "-M\t\tgera código MT-safe\n" ++ ++#: sunrpc/rpc_main.c:1435 ++#, c-format ++msgid "-n netid\tgenerate server code that supports named netid\n" ++msgstr "-n id-rede\tgera código de servidor que aceita o id-rede nomeado\n" ++ ++#: sunrpc/rpc_main.c:1436 ++#, c-format ++msgid "-N\t\tsupports multiple arguments and call-by-value\n" ++msgstr "-N\t\taceita múltiplos argumentos de chamadas por valor\n" ++ ++#: sunrpc/rpc_main.c:1437 ++#, c-format ++msgid "-o outfile\tname of the output file\n" ++msgstr "-o arq-saída\tnome do arquivo de saída\n" ++ ++#: sunrpc/rpc_main.c:1438 ++#, c-format ++msgid "-s nettype\tgenerate server code that supports named nettype\n" ++msgstr "-s tipo-rede\tgera código de servidor que aceita o tipo-rede nomeado\n" ++ ++#: sunrpc/rpc_main.c:1439 ++#, c-format ++msgid "-Sc\t\tgenerate sample client code that uses remote procedures\n" ++msgstr "-Sc\t\tgera amostra de código cliente que usa procedimentos remotos\n" ++ ++#: sunrpc/rpc_main.c:1440 ++#, c-format ++msgid "-Ss\t\tgenerate sample server code that defines remote procedures\n" ++msgstr "-Ss\t\tgera amostra de código servidor que define procedimentos remotos\n" ++ ++#: sunrpc/rpc_main.c:1441 ++#, c-format ++msgid "-Sm \t\tgenerate makefile template \n" ++msgstr "-Sm \t\tgera modelo de makefile \n" ++ ++#: sunrpc/rpc_main.c:1442 ++#, c-format ++msgid "-t\t\tgenerate RPC dispatch table\n" ++msgstr "-t\t\tgera tabela de expedição RPC\n" ++ ++#: sunrpc/rpc_main.c:1443 ++#, c-format ++msgid "-T\t\tgenerate code to support RPC dispatch tables\n" ++msgstr "-T\t\tgera código para lidar com tabelas de expedição RPC\n" ++ ++#: sunrpc/rpc_main.c:1444 ++#, c-format ++msgid "-Y path\t\tdirectory name to find C preprocessor (cpp)\n" ++msgstr "-Y rota\t\tnome do diretório para localizar pré-processador C (cpp)\n" ++ ++#: sunrpc/rpc_main.c:1445 ++#, c-format ++msgid "-5\t\tSysVr4 compatibility mode\n" ++msgstr "-5\t\tmodo de compatibilidade com SysVr4\n" ++ ++#: sunrpc/rpc_main.c:1446 ++#, c-format ++msgid "--help\t\tgive this help list\n" ++msgstr "--help\t\tfornece essa lista de ajuda\n" ++ ++#: sunrpc/rpc_main.c:1447 ++#, c-format ++msgid "--version\tprint program version\n" ++msgstr "--version\temite a versão do programa\n" ++ ++#: sunrpc/rpc_main.c:1449 ++#, c-format ++msgid "" ++"\n" ++"For bug reporting instructions, please see:\n" ++"%s.\n" ++msgstr "" ++"\n" ++"Para instruções sobre relatório de erro, veja:\n" ++"%s.\n" ++ ++#: sunrpc/rpc_scan.c:112 ++msgid "constant or identifier expected" ++msgstr "identificador ou constante esperado" ++ ++#: sunrpc/rpc_scan.c:308 ++msgid "illegal character in file: " ++msgstr "caracteres ilegais no arquivo: " ++ ++#: sunrpc/rpc_scan.c:347 sunrpc/rpc_scan.c:373 ++msgid "unterminated string constant" ++msgstr "constante string não terminada" ++ ++#: sunrpc/rpc_scan.c:379 ++msgid "empty char string" ++msgstr "cadeia de caractere vazia" ++ ++#: sunrpc/rpc_scan.c:521 sunrpc/rpc_scan.c:531 ++msgid "preprocessor error" ++msgstr "Erro de pré-processador" ++ ++#: sunrpc/svc_run.c:72 ++msgid "svc_run: - out of memory" ++msgstr "svc_run: – memória insuficiente" ++ ++#: sunrpc/svc_run.c:92 ++msgid "svc_run: - poll failed" ++msgstr "svc_run: – poll falhou" ++ ++#: sunrpc/svc_simple.c:80 ++#, c-format ++msgid "can't reassign procedure number %ld\n" ++msgstr "não é possível reatribuir número de procedimento %ld\n" ++ ++#: sunrpc/svc_simple.c:90 ++msgid "couldn't create an rpc server\n" ++msgstr "não foi possível criar um servidor rpc\n" ++ ++#: sunrpc/svc_simple.c:98 ++#, c-format ++msgid "couldn't register prog %ld vers %ld\n" ++msgstr "não foi possível registrar prog %ld vers %ld\n" ++ ++#: sunrpc/svc_simple.c:106 ++msgid "registerrpc: out of memory\n" ++msgstr "registerrpc: memória insuficiente\n" ++ ++#: sunrpc/svc_simple.c:169 ++#, c-format ++msgid "trouble replying to prog %d\n" ++msgstr "problemas ao responder ao prog %d\n" ++ ++#: sunrpc/svc_simple.c:178 ++#, c-format ++msgid "never registered prog %d\n" ++msgstr "prog %d nunca registrado\n" ++ ++#: sunrpc/svc_tcp.c:165 ++msgid "svc_tcp.c - tcp socket creation problem" ++msgstr "svc_tcp_.c – problema na criação do soquete AF_UNIX" ++ ++#: sunrpc/svc_tcp.c:180 ++msgid "svc_tcp.c - cannot getsockname or listen" ++msgstr "svc_tcp_.c – não foi possível receber getsocknome ou listen" ++ ++#: sunrpc/svc_udp.c:136 ++msgid "svcudp_create: socket creation problem" ++msgstr "svcudp_create: problema na criação socket" ++ ++#: sunrpc/svc_udp.c:150 ++msgid "svcudp_create - cannot getsockname" ++msgstr "svcudp_create – não foi possível getsockname" ++ ++#: sunrpc/svc_udp.c:182 ++msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n" ++msgstr "svcudp_create: xp_pad é pequeno demais para IP_PKTINFO\n" ++ ++#: sunrpc/svc_udp.c:481 ++msgid "enablecache: cache already enabled" ++msgstr "enablecache: cache já ativado" ++ ++#: sunrpc/svc_udp.c:487 ++msgid "enablecache: could not allocate cache" ++msgstr "enablecache: não foi possível alocar cache" ++ ++#: sunrpc/svc_udp.c:496 ++msgid "enablecache: could not allocate cache data" ++msgstr "enablecache: não foi possível alocar dados do cache" ++ ++#: sunrpc/svc_udp.c:504 ++msgid "enablecache: could not allocate cache fifo" ++msgstr "enablecache: não foi possível alocar fifo de cache" ++ ++#: sunrpc/svc_udp.c:540 ++msgid "cache_set: victim not found" ++msgstr "cache_set: vítima não localizada" ++ ++#: sunrpc/svc_udp.c:551 ++msgid "cache_set: victim alloc failed" ++msgstr "cache_set: alocação de vítima falhou" ++ ++#: sunrpc/svc_udp.c:558 ++msgid "cache_set: could not allocate new rpc_buffer" ++msgstr "cache_set: não foi possível alocar novo rpc_buffer" ++ ++#: sunrpc/svc_unix.c:163 ++msgid "svc_unix.c - AF_UNIX socket creation problem" ++msgstr "svc_tcp_.c – problema na criação do soquete AF_UNIX" ++ ++#: sunrpc/svc_unix.c:179 ++msgid "svc_unix.c - cannot getsockname or listen" ++msgstr "svc_tcp_.c – não foi possível receber getsocknome ou listen" ++ ++#: sysdeps/generic/siglist.h:29 ++msgid "Hangup" ++msgstr "Desconexão" ++ ++#: sysdeps/generic/siglist.h:30 ++msgid "Interrupt" ++msgstr "Interrupção" ++ ++#: sysdeps/generic/siglist.h:31 ++msgid "Quit" ++msgstr "Sair" ++ ++#: sysdeps/generic/siglist.h:32 ++msgid "Illegal instruction" ++msgstr "Instrução ilegal" ++ ++#: sysdeps/generic/siglist.h:33 ++msgid "Trace/breakpoint trap" ++msgstr "Trace/breakpoint trap" ++ ++#: sysdeps/generic/siglist.h:34 ++msgid "Aborted" ++msgstr "Abortado" ++ ++#: sysdeps/generic/siglist.h:35 ++msgid "Floating point exception" ++msgstr "Exceção de ponto flutuante" ++ ++#: sysdeps/generic/siglist.h:36 ++msgid "Killed" ++msgstr "Morto" ++ ++#: sysdeps/generic/siglist.h:37 ++msgid "Bus error" ++msgstr "Erro no barramento" ++ ++#: sysdeps/generic/siglist.h:38 ++msgid "Bad system call" ++msgstr "Chamada de sistema inválida" ++ ++#: sysdeps/generic/siglist.h:39 ++msgid "Segmentation fault" ++msgstr "Falha de segmentação" ++ ++#. TRANS There is no process reading from the other end of a pipe. ++#. TRANS Every library function that returns this error code also generates a ++#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled ++#. TRANS or blocked. Thus, your program will never actually see @code{EPIPE} ++#. TRANS unless it has handled or blocked @code{SIGPIPE}. ++#: sysdeps/generic/siglist.h:40 sysdeps/gnu/errlist.c:360 ++msgid "Broken pipe" ++msgstr "Pipe quebrado" ++ ++#: sysdeps/generic/siglist.h:41 ++msgid "Alarm clock" ++msgstr "Alarme de tempo" ++ ++#: sysdeps/generic/siglist.h:42 ++msgid "Terminated" ++msgstr "Terminado" ++ ++#: sysdeps/generic/siglist.h:43 ++msgid "Urgent I/O condition" ++msgstr "Condição urgente de E/S" ++ ++#: sysdeps/generic/siglist.h:44 ++msgid "Stopped (signal)" ++msgstr "Parado (sinal)" ++ ++#: sysdeps/generic/siglist.h:45 ++msgid "Stopped" ++msgstr "Parado" ++ ++#: sysdeps/generic/siglist.h:46 ++msgid "Continued" ++msgstr "Continua" ++ ++#: sysdeps/generic/siglist.h:47 ++msgid "Child exited" ++msgstr "Filho finalizado" ++ ++#: sysdeps/generic/siglist.h:48 ++msgid "Stopped (tty input)" ++msgstr "Parado (entrada tty)" ++ ++#: sysdeps/generic/siglist.h:49 ++msgid "Stopped (tty output)" ++msgstr "Parado (saída tty)" ++ ++#: sysdeps/generic/siglist.h:50 ++msgid "I/O possible" ++msgstr "Possível E/S" ++ ++#: sysdeps/generic/siglist.h:51 ++msgid "CPU time limit exceeded" ++msgstr "Tempo de CPU excedido" ++ ++#: sysdeps/generic/siglist.h:52 ++msgid "File size limit exceeded" ++msgstr "Excedido tamanho limite de arquivo" ++ ++#: sysdeps/generic/siglist.h:53 ++msgid "Virtual timer expired" ++msgstr "Temporizador virtual expirado" ++ ++#: sysdeps/generic/siglist.h:54 ++msgid "Profiling timer expired" ++msgstr "Tempo expirado para perfilamento" ++ ++#: sysdeps/generic/siglist.h:55 ++msgid "User defined signal 1" ++msgstr "Sinal 1 definido pelo usuário" ++ ++#: sysdeps/generic/siglist.h:56 ++msgid "User defined signal 2" ++msgstr "Sinal 2 definido pelo usuário" ++ ++#: sysdeps/generic/siglist.h:57 ++msgid "Window changed" ++msgstr "Janela alterada" ++ ++#: sysdeps/generic/siglist.h:61 ++msgid "EMT trap" ++msgstr "Trap EMT" ++ ++#: sysdeps/generic/siglist.h:64 ++msgid "Stack fault" ++msgstr "Falha de pilha" ++ ++#: sysdeps/generic/siglist.h:67 ++msgid "Power failure" ++msgstr "Falha de energia" ++ ++#: sysdeps/generic/siglist.h:70 ++msgid "Information request" ++msgstr "Requisição de informação" ++ ++#: sysdeps/generic/siglist.h:73 ++msgid "Resource lost" ++msgstr "Recurso perdido" ++ ++#. TRANS Only the owner of the file (or other resource) ++#. TRANS or processes with special privileges can perform the operation. ++#: sysdeps/gnu/errlist.c:26 ++msgid "Operation not permitted" ++msgstr "Operação não permitida" ++ ++#. TRANS No process matches the specified process ID. ++#: sysdeps/gnu/errlist.c:46 ++msgid "No such process" ++msgstr "Processo inexistente" ++ ++#. TRANS An asynchronous signal occurred and prevented ++#. TRANS completion of the call. When this happens, you should try the call ++#. TRANS again. ++#. TRANS ++#. TRANS You can choose to have functions resume after a signal that is handled, ++#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted ++#. TRANS Primitives}. ++#: sysdeps/gnu/errlist.c:61 ++msgid "Interrupted system call" ++msgstr "Chamada de sistema interrompida" ++ ++#. TRANS Usually used for physical read or write errors. ++#: sysdeps/gnu/errlist.c:70 ++msgid "Input/output error" ++msgstr "Erro de entrada/saída" ++ ++#. TRANS The system tried to use the device ++#. TRANS represented by a file you specified, and it couldn't find the device. ++#. TRANS This can mean that the device file was installed incorrectly, or that ++#. TRANS the physical device is missing or not correctly attached to the ++#. TRANS computer. ++#: sysdeps/gnu/errlist.c:83 ++msgid "No such device or address" ++msgstr "Endereço ou dispositivo inexistente" ++ ++#. TRANS Used when the arguments passed to a new program ++#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a ++#. TRANS File}) occupy too much memory space. This condition never arises on ++#. TRANS @gnuhurdsystems{}. ++#: sysdeps/gnu/errlist.c:95 ++msgid "Argument list too long" ++msgstr "Lista de argumentos muito longa" ++ ++#. TRANS Invalid executable file format. This condition is detected by the ++#. TRANS @code{exec} functions; see @ref{Executing a File}. ++#: sysdeps/gnu/errlist.c:105 ++msgid "Exec format error" ++msgstr "Erro no formato exec" ++ ++#. TRANS For example, I/O on a descriptor that has been ++#. TRANS closed or reading from a descriptor open only for writing (or vice ++#. TRANS versa). ++#: sysdeps/gnu/errlist.c:116 ++msgid "Bad file descriptor" ++msgstr "Descritor de arquivo inválido" ++ ++#. TRANS This error happens on operations that are ++#. TRANS supposed to manipulate child processes, when there aren't any processes ++#. TRANS to manipulate. ++#: sysdeps/gnu/errlist.c:127 ++msgid "No child processes" ++msgstr "Não há processos filhos" ++ ++#. TRANS Allocating a system resource would have resulted in a ++#. TRANS deadlock situation. The system does not guarantee that it will notice ++#. TRANS all such situations. This error means you got lucky and the system ++#. TRANS noticed; it might just hang. @xref{File Locks}, for an example. ++#: sysdeps/gnu/errlist.c:139 ++msgid "Resource deadlock avoided" ++msgstr "Evitado deadlock de recurso" ++ ++#. TRANS The system cannot allocate more virtual memory ++#. TRANS because its capacity is full. ++#: sysdeps/gnu/errlist.c:149 ++msgid "Cannot allocate memory" ++msgstr "Não foi possível alocar memória" ++ ++#. TRANS An invalid pointer was detected. ++#. TRANS On @gnuhurdsystems{}, this error never happens; you get a signal instead. ++#: sysdeps/gnu/errlist.c:168 ++msgid "Bad address" ++msgstr "Endereço inválido" ++ ++#. TRANS A file that isn't a block special file was given in a situation that ++#. TRANS requires one. For example, trying to mount an ordinary file as a file ++#. TRANS system in Unix gives this error. ++#: sysdeps/gnu/errlist.c:179 ++msgid "Block device required" ++msgstr "Dispositivo de bloco requerido" ++ ++#. TRANS A system resource that can't be shared is already in use. ++#. TRANS For example, if you try to delete a file that is the root of a currently ++#. TRANS mounted filesystem, you get this error. ++#: sysdeps/gnu/errlist.c:190 ++msgid "Device or resource busy" ++msgstr "Dispositivo ou recurso está ocupado" ++ ++#. TRANS An existing file was specified in a context where it only ++#. TRANS makes sense to specify a new file. ++#: sysdeps/gnu/errlist.c:200 ++msgid "File exists" ++msgstr "Arquivo existe" ++ ++#. TRANS An attempt to make an improper link across file systems was detected. ++#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but ++#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). ++#: sysdeps/gnu/errlist.c:211 ++msgid "Invalid cross-device link" ++msgstr "Link entre dispositivos inválido" ++ ++#. TRANS The wrong type of device was given to a function that expects a ++#. TRANS particular sort of device. ++#: sysdeps/gnu/errlist.c:221 ++msgid "No such device" ++msgstr "Dispositivo inexistente" ++ ++#. TRANS A file that isn't a directory was specified when a directory is required. ++#: sysdeps/gnu/errlist.c:230 ++msgid "Not a directory" ++msgstr "Não é um diretório" ++ ++#. TRANS You cannot open a directory for writing, ++#. TRANS or create or remove hard links to it. ++#: sysdeps/gnu/errlist.c:240 ++msgid "Is a directory" ++msgstr "É um diretório" ++ ++#. TRANS This is used to indicate various kinds of problems ++#. TRANS with passing the wrong argument to a library function. ++#: sysdeps/gnu/errlist.c:250 ++msgid "Invalid argument" ++msgstr "Argumento inválido" ++ ++#. TRANS The current process has too many files open and can't open any more. ++#. TRANS Duplicate descriptors do count toward this limit. ++#. TRANS ++#. TRANS In BSD and GNU, the number of open files is controlled by a resource ++#. TRANS limit that can usually be increased. If you get this error, you might ++#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; ++#. TRANS @pxref{Limits on Resources}. ++#: sysdeps/gnu/errlist.c:265 ++msgid "Too many open files" ++msgstr "Muitos arquivos abertos" ++ ++#. TRANS There are too many distinct file openings in the entire system. Note ++#. TRANS that any number of linked channels count as just one file opening; see ++#. TRANS @ref{Linked Channels}. This error never occurs on @gnuhurdsystems{}. ++#: sysdeps/gnu/errlist.c:276 ++msgid "Too many open files in system" ++msgstr "Muitos arquivos abertos no sistema" ++ ++#. TRANS Inappropriate I/O control operation, such as trying to set terminal ++#. TRANS modes on an ordinary file. ++#: sysdeps/gnu/errlist.c:286 ++msgid "Inappropriate ioctl for device" ++msgstr "ioctl inapropriado para dispositivo" ++ ++#. TRANS An attempt to execute a file that is currently open for writing, or ++#. TRANS write to a file that is currently being executed. Often using a ++#. TRANS debugger to run a program is considered having it open for writing and ++#. TRANS will cause this error. (The name stands for ``text file busy''.) This ++#. TRANS is not an error on @gnuhurdsystems{}; the text is copied as necessary. ++#: sysdeps/gnu/errlist.c:299 ++msgid "Text file busy" ++msgstr "Área de texto ocupada" ++ ++#. TRANS The size of a file would be larger than allowed by the system. ++#: sysdeps/gnu/errlist.c:308 ++msgid "File too large" ++msgstr "Arquivo muito grande" ++ ++#. TRANS Write operation on a file failed because the ++#. TRANS disk is full. ++#: sysdeps/gnu/errlist.c:318 ++msgid "No space left on device" ++msgstr "Não há espaço disponível no dispositivo" ++ ++#. TRANS Invalid seek operation (such as on a pipe). ++#: sysdeps/gnu/errlist.c:327 ++msgid "Illegal seek" ++msgstr "Procura ilegal" ++ ++#. TRANS An attempt was made to modify something on a read-only file system. ++#: sysdeps/gnu/errlist.c:336 ++msgid "Read-only file system" ++msgstr "Sistema de arquivos somente para leitura" ++ ++#. TRANS The link count of a single file would become too large. ++#. TRANS @code{rename} can cause this error if the file being renamed already has ++#. TRANS as many links as it can take (@pxref{Renaming Files}). ++#: sysdeps/gnu/errlist.c:347 ++msgid "Too many links" ++msgstr "Muitos links" ++ ++#. TRANS Used by mathematical functions when an argument value does ++#. TRANS not fall into the domain over which the function is defined. ++#: sysdeps/gnu/errlist.c:370 ++msgid "Numerical argument out of domain" ++msgstr "Argumento numérico fora de domínio" ++ ++#. TRANS Used by mathematical functions when the result value is ++#. TRANS not representable because of overflow or underflow. ++#: sysdeps/gnu/errlist.c:380 ++msgid "Numerical result out of range" ++msgstr "Resultado numérico fora de alcance" ++ ++#. TRANS The call might work if you try again ++#. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; ++#. TRANS they are always the same in @theglibc{}. ++#. TRANS ++#. TRANS This error can happen in a few different situations: ++#. TRANS ++#. TRANS @itemize @bullet ++#. TRANS @item ++#. TRANS An operation that would block was attempted on an object that has ++#. TRANS non-blocking mode selected. Trying the same operation again will block ++#. TRANS until some external condition makes it possible to read, write, or ++#. TRANS connect (whatever the operation). You can use @code{select} to find out ++#. TRANS when the operation will be possible; @pxref{Waiting for I/O}. ++#. TRANS ++#. TRANS @strong{Portability Note:} In many older Unix systems, this condition ++#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code ++#. TRANS different from @code{EAGAIN}. To make your program portable, you should ++#. TRANS check for both codes and treat them the same. ++#. TRANS ++#. TRANS @item ++#. TRANS A temporary resource shortage made an operation impossible. @code{fork} ++#. TRANS can return this error. It indicates that the shortage is expected to ++#. TRANS pass, so your program can try the call again later and it may succeed. ++#. TRANS It is probably a good idea to delay for a few seconds before trying it ++#. TRANS again, to allow time for other processes to release scarce resources. ++#. TRANS Such shortages are usually fairly serious and affect the whole system, ++#. TRANS so usually an interactive program should report the error to the user ++#. TRANS and return to its command loop. ++#. TRANS @end itemize ++#: sysdeps/gnu/errlist.c:417 ++msgid "Resource temporarily unavailable" ++msgstr "Recurso temporariamente indisponível" ++ ++#. TRANS In @theglibc{}, this is another name for @code{EAGAIN} (above). ++#. TRANS The values are always the same, on every operating system. ++#. TRANS ++#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a ++#. TRANS separate error code. ++#: sysdeps/gnu/errlist.c:430 ++msgid "Operation would block" ++msgstr "Operation causaria bloqueio" ++ ++#. TRANS An operation that cannot complete immediately was initiated on an object ++#. TRANS that has non-blocking mode selected. Some functions that must always ++#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return ++#. TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that ++#. TRANS the operation has begun and will take some time. Attempts to manipulate ++#. TRANS the object before the call completes return @code{EALREADY}. You can ++#. TRANS use the @code{select} function to find out when the pending operation ++#. TRANS has completed; @pxref{Waiting for I/O}. ++#: sysdeps/gnu/errlist.c:446 ++msgid "Operation now in progress" ++msgstr "Operação agora em progresso" ++ ++#. TRANS An operation is already in progress on an object that has non-blocking ++#. TRANS mode selected. ++#: sysdeps/gnu/errlist.c:456 ++msgid "Operation already in progress" ++msgstr "Operação já em progresso" ++ ++#. TRANS A file that isn't a socket was specified when a socket is required. ++#: sysdeps/gnu/errlist.c:465 ++msgid "Socket operation on non-socket" ++msgstr "Operação socket em um arquivo não-socket" ++ ++#. TRANS The size of a message sent on a socket was larger than the supported ++#. TRANS maximum size. ++#: sysdeps/gnu/errlist.c:475 ++msgid "Message too long" ++msgstr "Mensagem muito longa" ++ ++#. TRANS The socket type does not support the requested communications protocol. ++#: sysdeps/gnu/errlist.c:484 ++msgid "Protocol wrong type for socket" ++msgstr "Tipo errado de protocolo para socket" ++ ++#. TRANS You specified a socket option that doesn't make sense for the ++#. TRANS particular protocol being used by the socket. @xref{Socket Options}. ++#: sysdeps/gnu/errlist.c:494 ++msgid "Protocol not available" ++msgstr "Protocolo não disponível" ++ ++#. TRANS The socket domain does not support the requested communications protocol ++#. TRANS (perhaps because the requested protocol is completely invalid). ++#. TRANS @xref{Creating a Socket}. ++#: sysdeps/gnu/errlist.c:505 ++msgid "Protocol not supported" ++msgstr "Protocolo sem suporte" ++ ++#. TRANS The socket type is not supported. ++#: sysdeps/gnu/errlist.c:514 ++msgid "Socket type not supported" ++msgstr "Tipo socket sem suporte" ++ ++#. TRANS The operation you requested is not supported. Some socket functions ++#. TRANS don't make sense for all types of sockets, and others may not be ++#. TRANS implemented for all communications protocols. On @gnuhurdsystems{}, this ++#. TRANS error can happen for many calls when the object does not support the ++#. TRANS particular operation; it is a generic indication that the server knows ++#. TRANS nothing to do for that call. ++#: sysdeps/gnu/errlist.c:528 ++msgid "Operation not supported" ++msgstr "Operação sem suporte" ++ ++#. TRANS The socket communications protocol family you requested is not supported. ++#: sysdeps/gnu/errlist.c:537 ++msgid "Protocol family not supported" ++msgstr "Família de protocolo sem suporte" ++ ++#. TRANS The address family specified for a socket is not supported; it is ++#. TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. ++#: sysdeps/gnu/errlist.c:547 ++msgid "Address family not supported by protocol" ++msgstr "Família de endereços sem suporte pelo protocolo" ++ ++#. TRANS The requested socket address is already in use. @xref{Socket Addresses}. ++#: sysdeps/gnu/errlist.c:556 ++msgid "Address already in use" ++msgstr "Endereço já em uso" ++ ++#. TRANS The requested socket address is not available; for example, you tried ++#. TRANS to give a socket a name that doesn't match the local host name. ++#. TRANS @xref{Socket Addresses}. ++#: sysdeps/gnu/errlist.c:567 ++msgid "Cannot assign requested address" ++msgstr "Não foi possível acessar o endereço requisitado" + +-#: iconv/iconv_prog.c:193 +-#, c-format +-msgid "error while closing input `%s'" +-msgstr "erro fechando entrada `%s'" ++#. TRANS A socket operation failed because the network was down. ++#: sysdeps/gnu/errlist.c:576 ++msgid "Network is down" ++msgstr "A rede não responde" + +-#: iconv/iconv_prog.c:239 +-msgid "error while closing output file" +-msgstr "erro fechando arquivo de sada" ++#. TRANS A socket operation failed because the subnet containing the remote host ++#. TRANS was unreachable. ++#: sysdeps/gnu/errlist.c:586 ++msgid "Network is unreachable" ++msgstr "A rede está fora de alcance" + +-#: elf/sprof.c:710 +-msgid "error while closing the profiling data file" +-msgstr "erro fechando arquivo de dados de perfil" ++#. TRANS A network connection was reset because the remote host crashed. ++#: sysdeps/gnu/errlist.c:595 ++msgid "Network dropped connection on reset" ++msgstr "A rede desconectou-se ao reiniciar" + +-#: locale/programs/ld-collate.c:1158 +-msgid "error while inserting collation element into hash table" +-msgstr "erro enquanto inserindo elemento de comparao na tabela hash" ++#. TRANS A network connection was aborted locally. ++#: sysdeps/gnu/errlist.c:604 ++msgid "Software caused connection abort" ++msgstr "Término de conexão causada por software" + +-#: locale/programs/ld-collate.c:1170 +-msgid "error while inserting to hash table" +-msgstr "erro ao inserir na tabela hash" ++#. TRANS A network connection was closed for reasons outside the control of the ++#. TRANS local host, such as by the remote machine rebooting or an unrecoverable ++#. TRANS protocol violation. ++#: sysdeps/gnu/errlist.c:615 ++msgid "Connection reset by peer" ++msgstr "Conexão fechada pela outra ponta" + +-#: iconv/iconv_prog.c:389 iconv/iconv_prog.c:420 +-msgid "error while reading the input" +-msgstr "enquanto lendo entrada" ++#. TRANS The kernel's buffers for I/O operations are all in use. In GNU, this ++#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the ++#. TRANS other from network operations. ++#: sysdeps/gnu/errlist.c:626 ++msgid "No buffer space available" ++msgstr "Não há espaço de buffer disponível" + +-#: locale/programs/locfile.c:595 +-msgid "expect string argument for `copy'" +-msgstr "esperado argumento tipo string para `copy'" ++#. TRANS You tried to connect a socket that is already connected. ++#. TRANS @xref{Connecting}. ++#: sysdeps/gnu/errlist.c:636 ++msgid "Transport endpoint is already connected" ++msgstr "Ponto final de transporte já está conectado" + +-#: timezone/zic.c:868 +-msgid "expected continuation line not found" +-msgstr "linha de continuao no foi localizada" ++#. TRANS The socket is not connected to anything. You get this error when you ++#. TRANS try to transmit data over a socket, without first specifying a ++#. TRANS destination for the data. For a connectionless socket (for datagram ++#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. ++#: sysdeps/gnu/errlist.c:648 ++msgid "Transport endpoint is not connected" ++msgstr "Ponto final de transporte não está conectado" + +-#: elf/sprof.c:408 +-#, c-format +-msgid "failed to load shared object `%s'" +-msgstr "falha no carregamento do objeto compartilhado `%s'" ++#. TRANS No default destination address was set for the socket. You get this ++#. TRANS error when you try to transmit data over a connectionless socket, ++#. TRANS without first specifying a destination for the data with @code{connect}. ++#: sysdeps/gnu/errlist.c:659 ++msgid "Destination address required" ++msgstr "Endereço de destino requerido" + +-#: elf/sprof.c:604 +-msgid "failed to load symbol data" +-msgstr "falha para carregar dados de smbolos" ++#. TRANS The socket has already been shut down. ++#: sysdeps/gnu/errlist.c:668 ++msgid "Cannot send after transport endpoint shutdown" ++msgstr "Não é possível enviar após desligamento do ponto final de transporte" + +-#: elf/sprof.c:702 +-msgid "failed to mmap the profiling data file" +-msgstr "falha para mapear (mmap) o arquivo de dados do perfil" ++#: sysdeps/gnu/errlist.c:676 ++msgid "Too many references: cannot splice" ++msgstr "Muitas referências: não é possível unir" + +-#: iconv/iconv_prog.c:147 +-msgid "failed to start conversion processing" +-msgstr "falha para iniciar o processo de converso" ++#. TRANS A socket operation with a specified timeout received no response during ++#. TRANS the timeout period. ++#: sysdeps/gnu/errlist.c:686 ++msgid "Connection timed out" ++msgstr "Tempo esgotado para conexão" + +-#: locale/programs/locfile.c:1154 +-#, c-format +-msgid "failure while writing data for category `%s'" +-msgstr "falha ao escrever dados para categoria `%s'" ++#. TRANS A remote host refused to allow the network connection (typically because ++#. TRANS it is not running the requested service). ++#: sysdeps/gnu/errlist.c:696 ++msgid "Connection refused" ++msgstr "Conexão recusada" + +-#: nis/nis_call.c:155 +-msgid "fcntl: F_SETFD" +-msgstr "fcntl: F_SETFD" ++#. TRANS Too many levels of symbolic links were encountered in looking up a file name. ++#. TRANS This often indicates a cycle of symbolic links. ++#: sysdeps/gnu/errlist.c:706 ++msgid "Too many levels of symbolic links" ++msgstr "Muitos níveis de links simbólicos" + +-#: locale/programs/ld-monetary.c:163 locale/programs/ld-numeric.c:98 +-#, c-format +-msgid "field `%s' in category `%s' not defined" +-msgstr "campo `%s' na categoria `%s' no definido" ++#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for ++#. TRANS Files}) or host name too long (in @code{gethostname} or ++#. TRANS @code{sethostname}; @pxref{Host Identification}). ++#: sysdeps/gnu/errlist.c:717 ++msgid "File name too long" ++msgstr "Nome de arquivo muito longo" + +-#: locale/programs/ld-messages.c:86 locale/programs/ld-messages.c:110 +-#, c-format +-msgid "field `%s' in category `%s' undefined" +-msgstr "campo `%s' na categoria `%s' no definido" ++#. TRANS The remote host for a requested network connection is down. ++#: sysdeps/gnu/errlist.c:726 ++msgid "Host is down" ++msgstr "Host está desligado" + +-#: sunrpc/rpc_main.c:1148 +-#, c-format +-msgid "file '%s' already exists and may be overwritten\n" +-msgstr "arquivo `%s' j existe e pode ser sobrescrito\n" ++#. TRANS The remote host for a requested network connection is not reachable. ++#: sysdeps/gnu/errlist.c:735 ++msgid "No route to host" ++msgstr "Não há rota para o host" + +-#: locale/programs/locfile.c:677 +-msgid "from-value of `collating-element' must be a string" +-msgstr "valor `from' do elemento de comparao deve ser uma string" ++#. TRANS Directory not empty, where an empty directory was expected. Typically, ++#. TRANS this error occurs when you are trying to delete a directory. ++#: sysdeps/gnu/errlist.c:745 ++msgid "Directory not empty" ++msgstr "Diretório não vazio" + +-#: inet/rcmd.c:316 +-msgid "fstat failed" +-msgstr "falha em fstat" ++#. TRANS This means that the per-user limit on new process would be exceeded by ++#. TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on ++#. TRANS the @code{RLIMIT_NPROC} limit. ++#: sysdeps/gnu/errlist.c:756 ++msgid "Too many processes" ++msgstr "Muitos processos" + +-#: locale/programs/linereader.c:333 +-msgid "garbage at end of character code specification" +-msgstr "lixo no final da especificao do cdigo de caracter" ++#. TRANS The file quota system is confused because there are too many users. ++#. TRANS @c This can probably happen in a GNU system when using NFS. ++#: sysdeps/gnu/errlist.c:766 ++msgid "Too many users" ++msgstr "Muitos usuários" + +-#: locale/programs/linereader.c:219 +-msgid "garbage at end of number" +-msgstr "lixo no final do nmero" ++#. TRANS The user's disk quota was exceeded. ++#: sysdeps/gnu/errlist.c:775 ++msgid "Disk quota exceeded" ++msgstr "Cota da disco excedida" ++ ++#. TRANS This indicates an internal confusion in the ++#. TRANS file system which is due to file system rearrangements on the server host ++#. TRANS for NFS file systems or corruption in other file systems. ++#. TRANS Repairing this condition usually requires unmounting, possibly repairing ++#. TRANS and remounting the file system. ++#: sysdeps/gnu/errlist.c:788 ++msgid "Stale file handle" ++msgstr "Manipulador de arquivo corrompido" + +-#: locale/programs/ld-time.c:195 +-#, c-format +-msgid "garbage at end of offset value in string %d in `era' field in category `%s'" +-msgstr "lixo no final do valor do deslocamento na string %d no campo `era', categoria `%s'" ++#. TRANS An attempt was made to NFS-mount a remote file system with a file name that ++#. TRANS already specifies an NFS-mounted file. ++#. TRANS (This is an error on some operating systems, but we expect it to work ++#. TRANS properly on @gnuhurdsystems{}, making this error code impossible.) ++#: sysdeps/gnu/errlist.c:800 ++msgid "Object is remote" ++msgstr "Objeto é remoto" + +-#: locale/programs/ld-time.c:252 +-#, c-format +-msgid "garbage at end of starting date in string %d in `era' field in category `%s'" +-msgstr "lixo no final da data de incio na string %d no campo `era', categoria `%s'" ++#: sysdeps/gnu/errlist.c:808 ++msgid "RPC struct is bad" ++msgstr "Estrutura RPC inválida" + +-#: locale/programs/ld-time.c:328 +-#, c-format +-msgid "garbage at end of stopping date in string %d in `era' field in category `%s'" +-msgstr "lixo no final da data de parada na string %d no campo `era', categoria `%s'" ++#: sysdeps/gnu/errlist.c:816 ++msgid "RPC version wrong" ++msgstr "Versão RPC incorreta" + +-#: elf/sprof.c:81 +-msgid "generate call graph" +-msgstr "gera grfico de chamadas" ++#: sysdeps/gnu/errlist.c:824 ++msgid "RPC program not available" ++msgstr "Programa RPC não disponível" + +-#: elf/sprof.c:80 +-msgid "generate flat profile with counts and ticks" +-msgstr "gera perfil com contadores e `ticks'" ++#: sysdeps/gnu/errlist.c:832 ++msgid "RPC program version wrong" ++msgstr "Versão incorreta de programa RPC" + +-#: sunrpc/get_myaddr.c:77 +-msgid "get_myaddress: ioctl (get interface configuration)" +-msgstr "get_myaddress: ioctl (obtm configurao de interface)" ++#: sysdeps/gnu/errlist.c:840 ++msgid "RPC bad procedure for program" ++msgstr "Procedimento RPC ruim para programa" + +-#: nss/getent.c:53 +-msgid "getent - get entries from administrative database." +-msgstr "getent - pega entrada da base de dados administrativa." ++#. TRANS This is used by the file locking facilities; see ++#. TRANS @ref{File Locks}. This error is never generated by @gnuhurdsystems{}, but ++#. TRANS it can result from an operation to an NFS server running another ++#. TRANS operating system. ++#: sysdeps/gnu/errlist.c:852 ++msgid "No locks available" ++msgstr "Não há travas disponíveis" + +-#: nscd/connections.c:200 +-#, c-format +-msgid "handle_request: request received (Version = %d)" +-msgstr "handle_request: requisio recebida (Verso = %d)" ++#. TRANS The file was the wrong type for the ++#. TRANS operation, or a data file had the wrong format. ++#. TRANS ++#. TRANS On some systems @code{chmod} returns this error if you try to set the ++#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. ++#: sysdeps/gnu/errlist.c:865 ++msgid "Inappropriate file type or format" ++msgstr "Tipo ou formato de arquivo inapropriado" + +-#: timezone/zic.c:613 +-msgid "hard link failed, symbolic link used" +-msgstr "vnculo (link( falhou, vnculo simblico usado" ++#: sysdeps/gnu/errlist.c:873 ++msgid "Authentication error" ++msgstr "Erro de autenticação" + +-#: inet/rcmd.c:322 +-msgid "hard linked somewhere" +-msgstr "vinculo (hard linked) em algm lugar" ++#: sysdeps/gnu/errlist.c:881 ++msgid "Need authenticator" ++msgstr "É necessário um autenticador" ++ ++#. TRANS This indicates that the function called is ++#. TRANS not implemented at all, either in the C library itself or in the ++#. TRANS operating system. When you get this error, you can be sure that this ++#. TRANS particular function will always fail with @code{ENOSYS} unless you ++#. TRANS install a new version of the C library or the operating system. ++#: sysdeps/gnu/errlist.c:894 ++msgid "Function not implemented" ++msgstr "Função não implementada" ++ ++#. TRANS A function returns this error when certain parameter ++#. TRANS values are valid, but the functionality they request is not available. ++#. TRANS This can mean that the function does not implement a particular command ++#. TRANS or option value or flag bit at all. For functions that operate on some ++#. TRANS object given in a parameter, such as a file descriptor or a port, it ++#. TRANS might instead mean that only @emph{that specific object} (file ++#. TRANS descriptor, port, etc.) is unable to support the other parameters given; ++#. TRANS different file descriptors might support different ranges of parameter ++#. TRANS values. ++#. TRANS ++#. TRANS If the entire function is not available at all in the implementation, ++#. TRANS it returns @code{ENOSYS} instead. ++#: sysdeps/gnu/errlist.c:914 ++msgid "Not supported" ++msgstr "Não há suporte" + +-#: timezone/zic.c:1162 +-msgid "illegal CORRECTION field on Leap line" +-msgstr "Campo CORRECTION ilegal em linha Leap (ajuste)" ++#. TRANS While decoding a multibyte character the function came along an invalid ++#. TRANS or an incomplete sequence of bytes or the given wide character is invalid. ++#: sysdeps/gnu/errlist.c:924 ++msgid "Invalid or incomplete multibyte or wide character" ++msgstr "Multibyte ou caractere largo inválido" + +-#: timezone/zic.c:1166 +-msgid "illegal Rolling/Stationary field on Leap line" +-msgstr "campo Rolling/Stationary ilegal em linha Leap (ajuste)" ++#. TRANS On @gnuhurdsystems{}, servers supporting the @code{term} protocol return ++#. TRANS this error for certain operations when the caller is not in the ++#. TRANS foreground process group of the terminal. Users do not usually see this ++#. TRANS error because functions such as @code{read} and @code{write} translate ++#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control}, ++#. TRANS for information on process groups and these signals. ++#: sysdeps/gnu/errlist.c:938 ++msgid "Inappropriate operation for background process" ++msgstr "Operação inapropriada para processo em background" + +-#: locale/programs/ld-collate.c:1782 +-msgid "illegal character constant in string" +-msgstr "constante de caracteres ilegal na string" ++#. TRANS On @gnuhurdsystems{}, opening a file returns this error when the file is ++#. TRANS translated by a program and the translator program dies while starting ++#. TRANS up, before it has connected to the file. ++#: sysdeps/gnu/errlist.c:949 ++msgid "Translator died" ++msgstr "Tradutor morto" + +-#: sunrpc/rpc_scan.c:311 +-msgid "illegal character in file: " +-msgstr "caracteres ilegais no arquivo: " ++#. TRANS The experienced user will know what is wrong. ++#. TRANS @c This error code is a joke. Its perror text is part of the joke. ++#. TRANS @c Don't change it. ++#: sysdeps/gnu/errlist.c:960 ++msgid "?" ++msgstr "?" + +-#: locale/programs/ld-collate.c:1125 +-msgid "illegal collation element" +-msgstr "elemento de comparao ilegal" ++#. TRANS You did @strong{what}? ++#: sysdeps/gnu/errlist.c:969 ++msgid "You really blew it this time" ++msgstr "Você realmente estragou desta vez" + +-#: locale/programs/charmap.c:281 +-msgid "illegal definition" +-msgstr "definio ilegal" ++#. TRANS Go home and have a glass of warm, dairy-fresh milk. ++#: sysdeps/gnu/errlist.c:978 ++msgid "Computer bought the farm" ++msgstr "O computador comprou a fazenda" + +-#: locale/programs/charmap.c:434 +-msgid "illegal encoding given" +-msgstr "dada codificao ilegal" ++#. TRANS This error code has no purpose. ++#: sysdeps/gnu/errlist.c:987 ++msgid "Gratuitous error" ++msgstr "Erro gratuito" + +-#: locale/programs/linereader.c:551 +-msgid "illegal escape sequence at end of string" +-msgstr "sequncia de escape ilegal no final da string" ++#: sysdeps/gnu/errlist.c:995 ++msgid "Bad message" ++msgstr "Mensagem inválida" + +-#: iconv/iconv_prog.c:342 +-#, c-format +-msgid "illegal input sequence at position %ld" +-msgstr "sequncia de entrada ilegal na posio %ld" ++#: sysdeps/gnu/errlist.c:1003 ++msgid "Identifier removed" ++msgstr "Identificador removido" + +-#: locale/programs/charset.c:78 +-msgid "illegal names for character range" +-msgstr "nomes ilegais para faixa de caracteres" ++#: sysdeps/gnu/errlist.c:1011 ++msgid "Multihop attempted" ++msgstr "Tentativa de Multihop" + +-#: sunrpc/rpc_main.c:462 +-#, c-format +-msgid "illegal nettype :'%s'\n" +-msgstr "nettype ilegal: `%s'\n" ++#: sysdeps/gnu/errlist.c:1019 ++msgid "No data available" ++msgstr "Não há dados disponíveis" + +-#: locale/programs/ld-time.c:187 +-#, c-format +-msgid "illegal number for offset in string %d in `era' field in category `%s'" +-msgstr "nmero ilegal para offset na string %d no campo `era', categoria `%s'" ++#: sysdeps/gnu/errlist.c:1027 ++msgid "Link has been severed" ++msgstr "Link foi cortado" + +-#: catgets/gencat.c:361 catgets/gencat.c:438 +-msgid "illegal set number" +-msgstr "nmero de conjunto ilegal" ++#: sysdeps/gnu/errlist.c:1035 ++msgid "No message of desired type" ++msgstr "Não há mensagens do tipo desejado" + +-#: locale/programs/ld-time.c:243 +-#, c-format +-msgid "illegal starting date in string %d in `era' field in category `%s'" +-msgstr "data de incio ilegal na string %d no campo `era', categoria `%s'" ++#: sysdeps/gnu/errlist.c:1043 ++msgid "Out of streams resources" ++msgstr "Sem recursos de streams" + +-#: locale/programs/ld-time.c:319 +-#, c-format +-msgid "illegal stopping date in string %d in `era' field in category `%s'" +-msgstr "data de parada ilegal na string %d no campo `era', categoria `%s'" ++#: sysdeps/gnu/errlist.c:1051 ++msgid "Device not a stream" ++msgstr "Dispositivo não é um stream" + +-#: locale/programs/ld-ctype.c:831 +-#, c-format +-msgid "implementation limit: no more than %d character classes allowed" +-msgstr "limite de implementaco: no so permitidas mais que %d classes de caracter" ++#: sysdeps/gnu/errlist.c:1059 ++msgid "Value too large for defined data type" ++msgstr "Valor muito grande para o tipo de dados definido" + +-#: locale/programs/ld-ctype.c:863 +-#, c-format +-msgid "implementation limit: no more than %d character maps allowed" +-msgstr "limite de implementaco: no so permitidos mais que %d mapas de caracter" ++#: sysdeps/gnu/errlist.c:1067 ++msgid "Protocol error" ++msgstr "Erro de protocolo" + +-#: iconv/iconv_prog.c:346 +-msgid "incomplete character or shift sequence at end of buffer" +-msgstr "caractere incompleto ou mudana de seqencia no final do buffer" ++#: sysdeps/gnu/errlist.c:1075 ++msgid "Timer expired" ++msgstr "Tempo expirado" + +-#: db2/makedb.c:148 +-msgid "incorrectly formatted file" +-msgstr "arquivo formatado incorretamente" ++#. TRANS An asynchronous operation was canceled before it ++#. TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel}, ++#. TRANS the normal result is for the operations affected to complete with this ++#. TRANS error; @pxref{Cancel AIO Operations}. ++#: sysdeps/gnu/errlist.c:1087 ++msgid "Operation canceled" ++msgstr "Operação cancelada" + +-#: timezone/zic.c:825 +-msgid "input line of unknown type" +-msgstr "linha de entrada de tipo desconhecido" ++#: sysdeps/gnu/errlist.c:1095 ++msgid "Interrupted system call should be restarted" ++msgstr "Chamada de sistema interrompida deve ser reiniciada" + +-#: iconv/iconv_prog.c:350 +-msgid "internal error (illegal descriptor)" +-msgstr "erro interno (descritor ilegal)" ++#: sysdeps/gnu/errlist.c:1103 ++msgid "Channel number out of range" ++msgstr "Número do canal fora do intervalo" + +-#: timezone/zic.c:1788 +-msgid "internal error - addtype called with bad isdst" +-msgstr "erro interno - addtype chamado com isdst incorreto" ++#: sysdeps/gnu/errlist.c:1111 ++msgid "Level 2 not synchronized" ++msgstr "Nível 2 não sincronizado" + +-#: timezone/zic.c:1796 +-msgid "internal error - addtype called with bad ttisgmt" +-msgstr "erro interno - addtype chamado com ttisgmt incorreto" ++#: sysdeps/gnu/errlist.c:1119 ++msgid "Level 3 halted" ++msgstr "Nível 3 parado" + +-#: timezone/zic.c:1792 +-msgid "internal error - addtype called with bad ttisstd" +-msgstr "erro interno - addtype chamado com ttisstd incorreto" ++#: sysdeps/gnu/errlist.c:1127 ++msgid "Level 3 reset" ++msgstr "Nível 3 reiniciado" + +-#: locale/programs/ld-ctype.c:307 +-#, c-format +-msgid "internal error in %s, line %u" +-msgstr "erro interno em %s, linha %u" ++#: sysdeps/gnu/errlist.c:1135 ++msgid "Link number out of range" ++msgstr "Número de link fora da faixa" + +-#: timezone/zic.c:1034 +-msgid "invalid UTC offset" +-msgstr "deslocamento UTC invlido" ++#: sysdeps/gnu/errlist.c:1143 ++msgid "Protocol driver not attached" ++msgstr "Driver de protocolo não anexado" + +-#: timezone/zic.c:1037 +-msgid "invalid abbreviation format" +-msgstr "formato de abreviao invlido" ++#: sysdeps/gnu/errlist.c:1151 ++msgid "No CSI structure available" ++msgstr "Não há estrutura CSI disponível" + +-#: timezone/zic.c:1127 timezone/zic.c:1339 timezone/zic.c:1353 +-msgid "invalid day of month" +-msgstr "dia do ms invlido" ++#: sysdeps/gnu/errlist.c:1159 ++msgid "Level 2 halted" ++msgstr "Parada de sistema nível 2" + +-#: timezone/zic.c:1291 +-msgid "invalid ending year" +-msgstr "ano final invlido" ++#: sysdeps/gnu/errlist.c:1167 ++msgid "Invalid exchange" ++msgstr "Troca inválida" + +-#: timezone/zic.c:1099 +-msgid "invalid leaping year" +-msgstr "ano bissexto invlido" ++#: sysdeps/gnu/errlist.c:1175 ++msgid "Invalid request descriptor" ++msgstr "Descritor de requisição inválido" + +-#: elf/dl-open.c:159 +-msgid "invalid mode for dlopen()" +-msgstr "modo invlido para dlopen()" ++#: sysdeps/gnu/errlist.c:1183 ++msgid "Exchange full" ++msgstr "Troca completa" + +-#: timezone/zic.c:1114 timezone/zic.c:1217 +-msgid "invalid month name" +-msgstr "nome do ms invlido" ++#: sysdeps/gnu/errlist.c:1191 ++msgid "No anode" ++msgstr "Sem anode" + +-#: timezone/zic.c:933 +-msgid "invalid saved time" +-msgstr "tempo gravado invlido" ++#: sysdeps/gnu/errlist.c:1199 ++msgid "Invalid request code" ++msgstr "Código de requisição inválido" + +-#: timezone/zic.c:1266 +-msgid "invalid starting year" +-msgstr "ano inicial invlido" ++#: sysdeps/gnu/errlist.c:1207 ++msgid "Invalid slot" ++msgstr "Slot inválido" + +-#: timezone/zic.c:1143 timezone/zic.c:1246 +-msgid "invalid time of day" +-msgstr "hora do dia invlida" ++#: sysdeps/gnu/errlist.c:1215 ++msgid "File locking deadlock error" ++msgstr "Erro de bloqueio em arquivo (deadlock)" + +-#: timezone/zic.c:1344 +-msgid "invalid weekday name" +-msgstr "nome de dia de semana invlido" ++#: sysdeps/gnu/errlist.c:1223 ++msgid "Bad font file format" ++msgstr "Formato do arquivo fonte inválido" + +-#: nscd/connections.c:375 +-#, c-format +-msgid "key length in request too long: %Zd" +-msgstr "tamanho de chave na requisio muito longa: %Zd" ++#: sysdeps/gnu/errlist.c:1231 ++msgid "Machine is not on the network" ++msgstr "A maquina não está na rede" + +-#: locale/programs/ld-collate.c:1422 +-msgid "line after ellipsis must contain character definition" +-msgstr "linha aps elipse deve conter definio de caracter" ++#: sysdeps/gnu/errlist.c:1239 ++msgid "Package not installed" ++msgstr "Pacote não instalado" + +-#: locale/programs/ld-collate.c:1401 +-msgid "line before ellipsis does not contain definition for character constant" +-msgstr "linha antes da elipse no contm definio para constante de caracter" ++#: sysdeps/gnu/errlist.c:1247 ++msgid "Advertise error" ++msgstr "Erro de aviso" + +-#: timezone/zic.c:805 +-msgid "line too long" +-msgstr "linha muito longa" ++#: sysdeps/gnu/errlist.c:1255 ++msgid "Srmount error" ++msgstr "Erro de srmount" + +-#: iconv/iconv_prog.c:58 +-msgid "list all known coded character sets" +-msgstr "lista todas as colees de caracteres codificados" ++#: sysdeps/gnu/errlist.c:1263 ++msgid "Communication error on send" ++msgstr "Erro de comunicação ao enviar" + +-#: locale/programs/localedef.c:273 +-#, c-format +-msgid "locale file `%s', used in `copy' statement, not found" +-msgstr "arquivo locale `%s', usado na declarao `copy' , no encontrado" ++#: sysdeps/gnu/errlist.c:1271 ++msgid "RFS specific error" ++msgstr "Erro específico de RFS" + +-#: inet/rcmd.c:307 +-msgid "lstat failed" +-msgstr "falha em lstat" ++#: sysdeps/gnu/errlist.c:1279 ++msgid "Name not unique on network" ++msgstr "O nome não é único na rede" + +-#: catgets/gencat.c:619 +-msgid "malformed line ignored" +-msgstr "linha invlida ignorada" ++#: sysdeps/gnu/errlist.c:1287 ++msgid "File descriptor in bad state" ++msgstr "Descritor de arquivo em mal estado" + +-#: elf/sprof.c:554 +-msgid "mapping of section header string table failed" +-msgstr "mapeamento da tabela de cadeias do cabealho da seo falhou" ++#: sysdeps/gnu/errlist.c:1295 ++msgid "Remote address changed" ++msgstr "Endereço remoto alterado" + +-#: elf/sprof.c:544 +-msgid "mapping of section headers failed" +-msgstr "mapeamento dos cabealhos da seo falhou" ++#: sysdeps/gnu/errlist.c:1303 ++msgid "Can not access a needed shared library" ++msgstr "Não foi possível acessar uma biblioteca compartilhada" + +-#: malloc/mcheck.c:202 +-msgid "memory clobbered before allocated block\n" +-msgstr "memria sobrescrita antes do bloco alocado\n" ++#: sysdeps/gnu/errlist.c:1311 ++msgid "Accessing a corrupted shared library" ++msgstr "Acessando uma biblioteca compartilhado corrompida" + +-#: malloc/mcheck.c:205 +-msgid "memory clobbered past end of allocated block\n" +-msgstr "memria sobrescrita aps o fim do bloco allocado\n" +- +-#: locale/programs/ld-collate.c:170 locale/programs/ld-collate.c:176 +-#: locale/programs/ld-collate.c:180 locale/programs/ld-collate.c:1449 +-#: locale/programs/ld-collate.c:1478 locale/programs/locfile.c:1082 +-#: locale/programs/xmalloc.c:70 login/programs/database.c:62 +-#: login/programs/database.c:79 login/programs/database.c:95 +-#: posix/getconf.c:682 +-msgid "memory exhausted" +-msgstr "memria esgotada" ++#: sysdeps/gnu/errlist.c:1319 ++msgid ".lib section in a.out corrupted" ++msgstr "Seção .lib corrompida em a.out" + +-#: malloc/obstack.c:471 +-msgid "memory exhausted\n" +-msgstr "memria esgotada\n" ++#: sysdeps/gnu/errlist.c:1327 ++msgid "Attempting to link in too many shared libraries" ++msgstr "Tentando vincular em muitas bibliotecas compartilhadas" + +-#: malloc/mcheck.c:199 +-msgid "memory is consistent, library is buggy\n" +-msgstr "a memria est consistente, problemas na biblioteca\n" ++#: sysdeps/gnu/errlist.c:1335 ++msgid "Cannot exec a shared library directly" ++msgstr "Não foi possível executar uma biblioteca compartilhado diretamente" + +-#: locale/programs/ld-time.c:370 +-#, c-format +-msgid "missing era format in string %d in `era' field in category `%s'" +-msgstr "formato era ausente na string %d no campo `era', categoria`%s'" ++#: sysdeps/gnu/errlist.c:1343 ++msgid "Streams pipe error" ++msgstr "Erro de fluxos de pipe" + +-#: locale/programs/ld-time.c:358 +-#, c-format +-msgid "missing era name in string %d in `era' field in category `%s'" +-msgstr "nome era ausente na string %d no campo `era', categoria `%s'" ++#: sysdeps/gnu/errlist.c:1351 ++msgid "Structure needs cleaning" ++msgstr "A estrutura necessita de limpeza" + +-#: timezone/zic.c:928 +-msgid "nameless rule" +-msgstr "regra sem nome" ++#: sysdeps/gnu/errlist.c:1359 ++msgid "Not a XENIX named type file" ++msgstr "Não é um arquivo nomeável XENIX" + +-#: iconv/iconv_prog.c:133 +-msgid "neither original nor target encoding specified" +-msgstr "codificao original nem destino especificada" ++#: sysdeps/gnu/errlist.c:1367 ++msgid "No XENIX semaphores available" ++msgstr "Não há semáforos XENIX disponíveis" + +-#: nis/nss_nisplus/nisplus-publickey.c:262 +-#: nis/nss_nisplus/nisplus-publickey.c:268 +-#: nis/nss_nisplus/nisplus-publickey.c:327 +-#: nis/nss_nisplus/nisplus-publickey.c:336 +-#, c-format +-msgid "netname2user: (nis+ lookup): %s\n" +-msgstr "netname2user: (nis+ lookup): %s\n" ++#: sysdeps/gnu/errlist.c:1375 ++msgid "Is a named type file" ++msgstr "É um arquivo tipo nomeável" + +-#: nis/nss_nisplus/nisplus-publickey.c:281 +-#, c-format +-msgid "netname2user: DES entry for %s in directory %s not unique" +-msgstr "netname2user: entrada DES para %s no diretrio %s no nica" ++#: sysdeps/gnu/errlist.c:1383 ++msgid "Remote I/O error" ++msgstr "Erro de E/S remota" + +-#: nis/nss_nisplus/nisplus-publickey.c:349 +-#, c-format +-msgid "netname2user: LOCAL entry for %s in directory %s not unique" +-msgstr "netname2user: entrada LOCAL para %s no diretrio %s no nica" ++#: sysdeps/gnu/errlist.c:1391 ++msgid "No medium found" ++msgstr "Mídia não encontrada" + +-#: nis/nss_nisplus/nisplus-publickey.c:194 +-#, c-format +-msgid "netname2user: missing group id list in '%s'." +-msgstr "netname2user: lista de id do grupo perdida em `%s'." ++#: sysdeps/gnu/errlist.c:1399 ++msgid "Wrong medium type" ++msgstr "Tipo de mídia incorreta" + +-#: nis/nss_nisplus/nisplus-publickey.c:299 +-#, c-format +-msgid "netname2user: principal name '%s' too long" +-msgstr "netname2user: nome principal `%s' muito longo" ++#: sysdeps/gnu/errlist.c:1407 ++msgid "Required key not available" ++msgstr "Chave necessária não disponível" + +-#: nis/nss_nisplus/nisplus-publickey.c:356 +-msgid "netname2user: should not have uid 0" +-msgstr "netname2user: no deve possuir uid 0" ++#: sysdeps/gnu/errlist.c:1415 ++msgid "Key has expired" ++msgstr "A chave expirou" + +-#: sunrpc/svc_simple.c:158 +-#, c-format +-msgid "never registered prog %d\n" +-msgstr "nunca registrado prog %d\n" ++#: sysdeps/gnu/errlist.c:1423 ++msgid "Key has been revoked" ++msgstr "A chave foi revogada" + +-#: locale/programs/repertoire.c:238 +-msgid "no or value given" +-msgstr "Valores ou no entrados" ++#: sysdeps/gnu/errlist.c:1431 ++msgid "Key was rejected by service" ++msgstr "A chave foi rejeitada pelo serviço" + +-#: locale/programs/ld-messages.c:101 locale/programs/ld-messages.c:125 +-#, c-format +-msgid "no correct regular expression for field `%s' in category `%s': %s" +-msgstr "no h expresso regular correta para campo `%s', categoria `%s': %s" ++#: sysdeps/gnu/errlist.c:1439 ++msgid "Owner died" ++msgstr "Dono morto" + +-#: timezone/zic.c:2115 +-msgid "no day in month matches rule" +-msgstr "nehum dia do ms satisfaz a norma" ++#: sysdeps/gnu/errlist.c:1447 ++msgid "State not recoverable" ++msgstr "Estado não recuperável" + +-#: locale/programs/ld-collate.c:267 +-msgid "no definition of `UNDEFINED'" +-msgstr "no h definio de `UNDEFINED'" ++#: sysdeps/gnu/errlist.c:1455 ++msgid "Operation not possible due to RF-kill" ++msgstr "Operação não permitida em razão de RF-kill" + +-#: elf/sprof.c:276 +-#, c-format +-msgid "no filename for profiling data given and shared object `%s' has no soname" +-msgstr "nome de arquivo para perfil de dados no informado e objetos compartilhados `%s' no tem `soname'" ++#: sysdeps/gnu/errlist.c:1463 ++msgid "Memory page has hardware error" ++msgstr "Página de memória possui um erro de hardware" + +-#: locale/programs/locfile.c:609 +-msgid "no other keyword shall be specified when `copy' is used" +-msgstr "nehuma outra palavra-chave deve ser especificada quando `copy' usado" ++#: sysdeps/mach/_strerror.c:56 ++msgid "Error in unknown error system: " ++msgstr "Falha no erro desconhecido do sistema: " + +-#: locale/programs/localedef.c:334 +-msgid "no output file produced because warning were issued" +-msgstr "nenhum arquivo de sada foi produzido porque avisos foram emitidos" ++#: sysdeps/posix/gai_strerror-strs.h:1 ++msgid "Address family for hostname not supported" ++msgstr "Família de endereços não suportada para nome de máquina" + +-#: locale/programs/locfile.c:283 locale/programs/locfile.c:301 +-#: locale/programs/locfile.c:319 locale/programs/locfile.c:337 +-#: locale/programs/locfile.c:355 locale/programs/locfile.c:373 +-msgid "no repertoire map specified: cannot proceed" +-msgstr "mapa de repertrio no especificado: no posso prosseguir" ++#: sysdeps/posix/gai_strerror-strs.h:2 ++msgid "Temporary failure in name resolution" ++msgstr "Falha temporário na resolução de nome" + +-#: locale/programs/charmap.c:400 locale/programs/charmap.c:550 +-#: locale/programs/charmap.c:629 locale/programs/repertoire.c:199 +-msgid "no symbolic name given" +-msgstr "nenhum nome simblico dado" ++#: sysdeps/posix/gai_strerror-strs.h:3 ++msgid "Bad value for ai_flags" ++msgstr "Valor inválido para ai_flags" + +-#: locale/programs/charmap.c:465 locale/programs/charmap.c:596 +-#: locale/programs/charmap.c:662 locale/programs/repertoire.c:261 +-msgid "no symbolic name given for end of range" +-msgstr "nenhum nome simblico dado para fim do intervalo" ++#: sysdeps/posix/gai_strerror-strs.h:4 ++msgid "Non-recoverable failure in name resolution" ++msgstr "Falha irrecuperável na resolução de nome" + +-#: locale/programs/ld-collate.c:249 +-#, c-format +-msgid "no weight defined for symbol `%s'" +-msgstr "no foi definido peso para o smbolo `%s'" ++#: sysdeps/posix/gai_strerror-strs.h:5 ++msgid "ai_family not supported" ++msgstr "Família de protocolo (ai_family) sem suporte" + +-#: inet/rcmd.c:309 +-msgid "not regular file" +-msgstr "no arquivo normal" ++#: sysdeps/posix/gai_strerror-strs.h:6 ++msgid "Memory allocation failure" ++msgstr "Falha de alocação de memória" + +-#: nscd/nscd_stat.c:130 +-#, c-format +-msgid "" +-"nscd configuration:\n" +-"\n" +-"%15d server debug level\n" +-msgstr "" +-"configurao nscd:\n" +-"\n" +-"%15d nvel de debug do servidor\n" ++#: sysdeps/posix/gai_strerror-strs.h:7 ++msgid "No address associated with hostname" ++msgstr "Não há endereço associado com o nome" + +-#: nscd/nscd_stat.c:104 +-msgid "nscd not running!\n" +-msgstr "nscd no est rodando!\n" ++#: sysdeps/posix/gai_strerror-strs.h:8 ++msgid "Name or service not known" ++msgstr "Nome ou serviço desconhecido" + +-#: locale/programs/charmap.c:514 +-msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" +-msgstr "apenas definies de WIDTH so permitidas em seguida definio de CHARMAP" ++#: sysdeps/posix/gai_strerror-strs.h:9 ++msgid "Servname not supported for ai_socktype" ++msgstr "Servname sem suporte para “ai_socktype”" + +-#: iconv/iconv_prog.c:135 +-msgid "original encoding not specified using `-f'" +-msgstr "codificao original no especificada usando `-f'" ++#: sysdeps/posix/gai_strerror-strs.h:10 ++msgid "ai_socktype not supported" ++msgstr "ai_socktype sem suporte" + +-#: iconv/iconv_prog.c:60 +-msgid "output file" +-msgstr "arquivo de sada" ++#: sysdeps/posix/gai_strerror-strs.h:11 ++msgid "System error" ++msgstr "Erro de sistema" + +-#: sunrpc/pm_getmaps.c:73 +-msgid "pmap_getmaps rpc problem" +-msgstr "problemas de pmap_getmaps rpc" ++#: sysdeps/posix/gai_strerror-strs.h:12 ++msgid "Processing request in progress" ++msgstr "Processamento da requisição em progresso" + +-#: inet/rcmd.c:179 +-msgid "poll: protocol failure in circuit setup\n" +-msgstr "poll: falha de protocolo na configurao do circuito\n" ++#: sysdeps/posix/gai_strerror-strs.h:13 ++msgid "Request canceled" ++msgstr "Requisição cancelada" + +-#: sunrpc/rpc_scan.c:523 sunrpc/rpc_scan.c:533 +-msgid "preprocessor error" +-msgstr "Erro de pr-processador" ++#: sysdeps/posix/gai_strerror-strs.h:14 ++msgid "Request not canceled" ++msgstr "Requisição não cancelada" + +-#: elf/sprof.c:78 +-msgid "print list of count paths and their number of use" +-msgstr "mostra lista de nmero de rotas e seu nmero de uso" ++#: sysdeps/posix/gai_strerror-strs.h:15 ++msgid "All requests done" ++msgstr "Todas as requisições feitas" + +-#: iconv/iconv_prog.c:61 +-msgid "print progress information" +-msgstr "mostra informaes de progresso" ++#: sysdeps/posix/gai_strerror-strs.h:16 ++msgid "Interrupted by a signal" ++msgstr "Interrompido por um sinal" + +-#: db2/makedb.c:345 +-#, c-format +-msgid "problems while reading `%s'" +-msgstr "problems lendo `%s'" ++#: sysdeps/posix/gai_strerror-strs.h:17 ++msgid "Parameter string not correctly encoded" ++msgstr "String de parâmetro não codificado corretamente" + +-#: elf/sprof.c:691 ++#: sysdeps/unix/sysv/linux/i386/readelflib.c:65 + #, c-format +-msgid "profiling data file `%s' does not match shared object `%s'" +-msgstr "arquivo de dados de perfil `%s' no coincide com objetos compartilhados `%s'" ++msgid "%s is for unknown machine %d.\n" ++msgstr "%s é para máquina desconhecida %d.\n" + +-#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383 ++#: sysdeps/unix/sysv/linux/ia64/makecontext.c:58 + #, c-format +-msgid "program %lu is not available\n" +-msgstr "programa %lu no est disponvel\n" ++msgid "makecontext: does not know how to handle more than 8 arguments\n" ++msgstr "makecontext: não sabe como lidar com mais de 8 argumentos\n" + +-#: sunrpc/rpcinfo.c:264 sunrpc/rpcinfo.c:310 sunrpc/rpcinfo.c:333 +-#: sunrpc/rpcinfo.c:407 sunrpc/rpcinfo.c:453 sunrpc/rpcinfo.c:476 +-#: sunrpc/rpcinfo.c:510 ++#: sysdeps/unix/sysv/linux/lddlibc4.c:60 + #, c-format +-msgid "program %lu version %lu is not available\n" +-msgstr "programa %lu verso %lu no est disponvel\n" ++msgid "" ++"Usage: lddlibc4 FILE\n" ++"\n" ++msgstr "" ++"Uso: lddlibc4 ARQUIVO\n" ++"\n" + +-#: sunrpc/rpcinfo.c:515 ++#: sysdeps/unix/sysv/linux/lddlibc4.c:81 + #, c-format +-msgid "program %lu version %lu ready and waiting\n" +-msgstr "programa %lu verso %lu pronto e aguardando\n" ++msgid "cannot open `%s'" ++msgstr "não foi possível abrir “%s”" + +-#: inet/rcmd.c:176 ++#: sysdeps/unix/sysv/linux/lddlibc4.c:85 + #, c-format +-msgid "rcmd: poll (setting up stderr): %m\n" +-msgstr "rcmd: poll (configurando stderr): %m\n" +- +-#: inet/rcmd.c:110 +-msgid "rcmd: socket: All ports in use\n" +-msgstr "rcmd: socket: Todas as portas em uso\n" ++msgid "cannot read header from `%s'" ++msgstr "não foi possível ler cabeçalho de “%s”" + +-#: inet/rcmd.c:166 +-#, c-format +-msgid "rcmd: write (setting up stderr): %m\n" +-msgstr "rcmd: write (configurando stderr): %m\n" ++#: timezone/zdump.c:338 ++msgid "has fewer than 3 characters" ++msgstr "possui menos de 3 caracteres" + +-#: sunrpc/svc_simple.c:98 +-msgid "registerrpc: out of memory\n" +-msgstr "registerrpc: no h memria suficiente\n" ++#: timezone/zdump.c:340 ++msgid "has more than 6 characters" ++msgstr "possui mais de 6 caracteres" + +-#: timezone/zic.c:1849 +-msgid "repeated leap second moment" +-msgstr "ajuste repetido em segundo momento" ++#: timezone/zdump.c:342 ++msgid "has characters other than ASCII alphanumerics, '-' or '+'" ++msgstr "possui caracteres além de “-”, “+” ou alfanuméricos ASCII" + +-#: locale/programs/repertoire.c:95 ++#: timezone/zdump.c:347 + #, c-format +-msgid "repertoire map file `%s' not found" +-msgstr "arquivo de mapas `%s' no foi localizado" +- +-#: sunrpc/rpc_main.c:1117 +-msgid "rpcgen: arglist coding error\n" +-msgstr "rpcgen: erro na codificao de parmetros\n" +- +-#: sunrpc/rpc_main.c:1105 +-msgid "rpcgen: too many defines\n" +-msgstr "rpcgen: muitas definies\n" ++msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" ++msgstr "%s: aviso: fuso “%s” abreviação “%s” %s\n" + +-#: sunrpc/rpcinfo.c:732 ++#: timezone/zdump.c:393 + #, c-format +-msgid "rpcinfo: %s is unknown host\n" +-msgstr "rpcinfo: %s um host desconhecido\n" ++msgid "" ++"%s: usage: %s OPTIONS ZONENAME ...\n" ++"Options include:\n" ++" -c [L,]U Start at year L (default -500), end before year U (default 2500)\n" ++" -t [L,]U Start at time L, end before time U (in seconds since 1970)\n" ++" -i List transitions briefly (format is experimental)\n" ++" -v List transitions verbosely\n" ++" -V List transitions a bit less verbosely\n" ++" --help Output this help\n" ++" --version Output version info\n" ++"\n" ++"Report bugs to %s.\n" ++msgstr "" ++"%s: uso: %s OPÇÕES NOMEFUSO ...\n" ++"Opções incluem:\n" ++" -c [L,]U Inicia no ano L (padrão -500), termina até o ano U (padrão 2500)\n" ++" -t [L,]U Inicia no tempo L, termina até o tempo U (em segundos desde 1970)\n" ++" -i Lista transições brevemente (formato é experimental)\n" ++" -v Lista transições verbosamente\n" ++" -V Lista transições um pouco menos verbosamente\n" ++" --help Emite essa ajuda\n" ++" --version Emite informação da versão\n" ++"\n" ++"Relate erros para %s.\n" + +-#: sunrpc/rpcinfo.c:695 ++#: timezone/zdump.c:479 + #, c-format +-msgid "rpcinfo: %s is unknown service\n" +-msgstr "rpcinfo: %s um servio desconhecido\n" ++msgid "%s: wild -c argument %s\n" ++msgstr "%s: argumento -c insensato %s\n" + +-#: sunrpc/rpcinfo.c:665 ++#: timezone/zdump.c:512 + #, c-format +-msgid "rpcinfo: Could not delete registration for prog %s version %s\n" +-msgstr "rpcinfo: No foi possvel apagar registro para prog %s verso %s\n" ++msgid "%s: wild -t argument %s\n" ++msgstr "%s: argumento -t insensato %s\n" + +-#: sunrpc/rpcinfo.c:637 ++#: timezone/zic.c:398 + #, c-format +-msgid "rpcinfo: broadcast failed: %s\n" +-msgstr "rpcinfo: broadcast falhou: %s\n" ++msgid "%s: Memory exhausted: %s\n" ++msgstr "%s: Memória esgotada: %s\n" + +-#: sunrpc/rpcinfo.c:556 sunrpc/rpcinfo.c:563 +-msgid "rpcinfo: can't contact portmapper" +-msgstr "rpcinfo: impossvel contactar portmapper" ++#: timezone/zic.c:406 ++msgid "size overflow" ++msgstr "estouro de tamanho" + +-#: timezone/zic.c:718 timezone/zic.c:720 +-msgid "same rule name in multiple files" +-msgstr "mesmo nome de regra em mltiplos arquivos" ++#: timezone/zic.c:454 ++msgid "integer overflow" ++msgstr "estouro de valor inteiro" + +-#: nscd/connections.c:387 ++#: timezone/zic.c:488 + #, c-format +-msgid "short read while reading request key: %s" +-msgstr "falha na leitura lendo chave de requisio: %s" ++msgid "\"%s\", line %: " ++msgstr "“%s”, linha %: " + +-#: nscd/connections.c:364 ++#: timezone/zic.c:491 + #, c-format +-msgid "short read while reading request: %s" +-msgstr "problems lendo `%s'" ++msgid " (rule from \"%s\", line %)" ++msgstr " (regra de “%s”, linha %)" + +-#: nscd/grpcache.c:191 nscd/hstcache.c:278 nscd/pwdcache.c:188 ++#: timezone/zic.c:510 + #, c-format +-msgid "short write in %s: %s" +-msgstr "Erro escrevendo em %s: %s" +- +-#: inet/rcmd.c:197 +-msgid "socket: protocol failure in circuit setup\n" +-msgstr "socket: falha de protocolo na configurao do circuito\n" +- +-#: locale/programs/locfile.c:730 +-msgid "sorting order `forward' and `backward' are mutually exclusive" +-msgstr "as ordens de classificao `forward' e `backward' so mutuamente exclusivas" +- +-#: locale/programs/ld-collate.c:1582 locale/programs/ld-collate.c:1628 +-msgid "specification of sorting weight for collation symbol does not make sense" +-msgstr "especificao de peso para smbolo de comparao no faz sentido" +- +-#: timezone/zic.c:789 +-msgid "standard input" +-msgstr "entrada padro" +- +-#: timezone/zdump.c:268 +-msgid "standard output" +-msgstr "sada padro" ++msgid "warning: " ++msgstr "aviso: " + +-#: locale/programs/ld-time.c:272 ++#: timezone/zic.c:535 + #, c-format +-msgid "starting date is illegal in string %d in `era' field in category `%s'" +-msgstr "data inicial ilegal na string %d no campo `era', categoria `%s'" +- +-#: timezone/zic.c:1300 +-msgid "starting year greater than ending year" +-msgstr "ano inicial maior que ano final" +- +-#: timezone/zic.c:1272 timezone/zic.c:1297 +-msgid "starting year too high to be represented" +-msgstr "ano inicial muito alto para ser representado" +- +-#: timezone/zic.c:1270 timezone/zic.c:1295 +-msgid "starting year too low to be represented" +-msgstr "ano inicial muito baixo para ser representado" ++msgid "" ++"%s: usage is %s [ --version ] [ --help ] [ -v ] \\\n" ++"\t[ -l localtime ] [ -p posixrules ] [ -d directory ] \\\n" ++"\t[ -L leapseconds ] [ filename ... ]\n" ++"\n" ++"Report bugs to %s.\n" ++msgstr "" ++"%s: uso é %s [ --version ] [ --help ] [ -h ] \\\n" ++"\t[ -l tempolocal ] [ -p regrasposix ] [ -d diretório ] \\\n" ++"\t[ -L segundos bissextos ] [ nome do arquivo ... ]\n" ++"\n" ++"Relate erros para %s.\n" + +-#: locale/programs/ld-time.c:348 ++#: timezone/zic.c:558 + #, c-format +-msgid "stopping date is illegal in string %d in `era' field in category `%s'" +-msgstr "data de trmino ilegal na string %d no campo `era', categoria `%s'" ++msgid "%s: Can't chdir to %s: %s\n" ++msgstr "%s: Não foi fazer chdir criar %s: %s\n" + +-#: sunrpc/svc_run.c:81 +-msgid "svc_run: - select failed" +-msgstr "svc_run: - select falhou" ++#: timezone/zic.c:590 ++msgid "wild compilation-time specification of zic_t" ++msgstr "especificação insensata de tempo de compilação de zic_t" + +-#: sunrpc/svc_tcp.c:160 +-msgid "svc_tcp.c - cannot getsockname or listen" +-msgstr "svc_tcp_.c - no possvel receber `getsocknome' ou `listen'" ++#: timezone/zic.c:610 ++#, c-format ++msgid "%s: More than one -d option specified\n" ++msgstr "%s: Mais de uma opção -d foi especificada\n" + +-#: sunrpc/svc_tcp.c:145 +-msgid "svc_tcp.c - tcp socket creation problem" +-msgstr "svc_tcp_.c - problema na criao do soquete AF_UNIX" ++#: timezone/zic.c:620 ++#, c-format ++msgid "%s: More than one -l option specified\n" ++msgstr "%s: Mais de uma opção -l especificada\n" + +-#: sunrpc/svc_tcp.c:209 sunrpc/svc_tcp.c:215 +-msgid "svc_tcp: makefd_xprt: out of memory\n" +-msgstr "svc_tcp: makefd_xprt: no h memria suficiente\n" ++#: timezone/zic.c:630 ++#, c-format ++msgid "%s: More than one -p option specified\n" ++msgstr "%s: Mais de uma opção -p especificada\n" + +-#: sunrpc/svc_unix.c:135 +-msgid "svc_unix.c - AF_UNIX socket creation problem" +-msgstr "svc_tcp_.c - problema na criao do soquete AF_UNIX" ++#: timezone/zic.c:640 ++#, c-format ++msgid "%s: More than one -y option specified\n" ++msgstr "%s: Mais de uma opção -y especificada\n" + +-#: sunrpc/svc_unix.c:151 +-msgid "svc_unix.c - cannot getsockname or listen" +-msgstr "svc_tcp_.c - memria exaurida" ++#: timezone/zic.c:650 ++#, c-format ++msgid "%s: More than one -L option specified\n" ++msgstr "%s: Mais de uma opção -L foi especificada\n" + +-#: sunrpc/svc_unix.c:201 sunrpc/svc_unix.c:207 +-msgid "svc_unix: makefd_xprt: out of memory\n" +-msgstr "svc_unix: makefd_xprt: no h memria suficiente\n" ++#: timezone/zic.c:659 ++msgid "-s ignored" ++msgstr "-s ignorada" + +-#: sunrpc/svc_tcp.c:168 sunrpc/svc_tcp.c:176 +-msgid "svctcp_create: out of memory\n" +-msgstr "svctcp_create: no h memria suficiente\n" ++#: timezone/zic.c:698 ++msgid "link to link" ++msgstr "link para o link" + +-#: sunrpc/svc_udp.c:135 +-msgid "svcudp_create - cannot getsockname" +-msgstr "svcudp_create - no possvel getsockname" ++#: timezone/zic.c:701 timezone/zic.c:705 ++msgid "command line" ++msgstr "linha de comando" + +-#: sunrpc/svc_udp.c:143 sunrpc/svc_udp.c:149 sunrpc/svc_udp.c:155 +-msgid "svcudp_create: out of memory\n" +-msgstr "svcucp_create: no h memria suficiente\n" ++#: timezone/zic.c:721 ++msgid "empty file name" ++msgstr "arquivo com nome vazio" + +-#: sunrpc/svc_udp.c:121 +-msgid "svcudp_create: socket creation problem" +-msgstr "svcudp_create: problema na criao socket" ++#: timezone/zic.c:724 ++#, c-format ++msgid "file name '%s' begins with '/'" ++msgstr "nome de arquivo “%s” começa com “/”" + +-#: sunrpc/svc_unix.c:160 sunrpc/svc_unix.c:168 +-msgid "svcunix_create: out of memory\n" +-msgstr "svcunix_create: no h memria suficiente\n" ++#: timezone/zic.c:734 ++#, c-format ++msgid "file name '%s' contains '%.*s' component" ++msgstr "nome de arquivo “%s” contém componente “%.*s”" + +-#: locale/programs/ld-collate.c:1201 ++#: timezone/zic.c:740 + #, c-format +-msgid "symbol for multicharacter collating element `%.*s' duplicates element definition" +-msgstr "smbolo para elemento de comparao multicaracter `%.*s' duplica a definio do elemento" ++msgid "file name '%s' component contains leading '-'" ++msgstr "um componente do nome de arquivo “%s” inicia com “-”" + +-#: locale/programs/ld-collate.c:1073 ++#: timezone/zic.c:743 + #, c-format +-msgid "symbol for multicharacter collating element `%.*s' duplicates other element definition" +-msgstr "smbolo para elemento de comparao multicaracter `%.*s' duplica a definio do elemento" ++msgid "file name '%s' contains overlength component '%.*s...'" ++msgstr "nome de arquivo “%s” contém componente “%.*s...” comprido demais" + +-#: locale/programs/ld-collate.c:1210 ++#: timezone/zic.c:771 + #, c-format +-msgid "symbol for multicharacter collating element `%.*s' duplicates other symbol definition" +-msgstr "smbolo para elemento de comparao multicaracter `%.*s' duplica outra definio de smbolo" ++msgid "file name '%s' contains byte '%c'" ++msgstr "nome de arquivo “%s” contém byte “%c”" + +-#: locale/programs/ld-collate.c:1082 ++#: timezone/zic.c:772 + #, c-format +-msgid "symbol for multicharacter collating element `%.*s' duplicates symbol definition" +-msgstr "smbolo para elemento de comparao multicaracter `%.*s' duplica a definio do smbolo" ++msgid "file name '%s' contains byte '\\%o'" ++msgstr "nome de arquivo “%s” contém byte “\\%o”" + +-#: locale/programs/ld-collate.c:1064 locale/programs/ld-collate.c:1192 ++#: timezone/zic.c:842 + #, c-format +-msgid "symbol for multicharacter collating element `%.*s' duplicates symbolic name in charset" +-msgstr "smbolo para elemento de comparao multicaracter `%.*s duplicado" ++msgid "%s: link from %s/%s failed: %s\n" ++msgstr "%s: link de %s/%s falhou: %s\n" + +-#: locale/programs/charmap.c:399 locale/programs/charmap.c:433 +-#: locale/programs/charmap.c:463 locale/programs/charmap.c:549 +-#: locale/programs/charmap.c:595 locale/programs/charmap.c:628 +-#: locale/programs/charmap.c:660 ++#: timezone/zic.c:852 timezone/zic.c:1815 + #, c-format +-msgid "syntax error in %s definition: %s" +-msgstr "erro de sintaxe na definio %s: %s" ++msgid "%s: Can't remove %s/%s: %s\n" ++msgstr "%s: Não é possível remover %s/%s: %s\n" + +-#: locale/programs/locfile.c:750 +-msgid "syntax error in `order_start' directive" +-msgstr "erro de sintaxe na diretiva `order_start'" ++#: timezone/zic.c:874 ++#, c-format ++msgid "symbolic link used because hard link failed: %s" ++msgstr "link simbólico usado porque link absoluto falhou: %s" + +-#: locale/programs/locfile.c:492 +-msgid "syntax error in character class definition" +-msgstr "erro de sintaxe na definio de classe de caracteres" ++#: timezone/zic.c:882 ++#, c-format ++msgid "%s: Can't read %s/%s: %s\n" ++msgstr "%s: Não foi possível ler %s/%s: %s\n" + +-#: locale/programs/locfile.c:550 +-msgid "syntax error in character conversion definition" +-msgstr "erro de sintaxe na definio de converso de caracteres" ++#: timezone/zic.c:889 timezone/zic.c:1828 ++#, c-format ++msgid "%s: Can't create %s/%s: %s\n" ++msgstr "%s: Não é possível criar %s/%s (%s)\n" + +-#: locale/programs/locfile.c:792 +-msgid "syntax error in collating order definition" +-msgstr "erro de sintaxe na definio de ordem de comparao" ++#: timezone/zic.c:898 ++#, c-format ++msgid "copy used because hard link failed: %s" ++msgstr "cópia usada porque link absoluto falhou: %s" + +-#: locale/programs/locfile.c:642 +-msgid "syntax error in collation definition" +-msgstr "erro de sintaxe na definio de comparao" ++#: timezone/zic.c:901 ++#, c-format ++msgid "copy used because symbolic link failed: %s" ++msgstr "cópia usada porque link simbólico falhou: %s" + +-#: locale/programs/locfile.c:465 +-msgid "syntax error in definition of LC_CTYPE category" +-msgstr "erro de sintaxe na definio da categoria LC_CTYPE" ++#: timezone/zic.c:1013 timezone/zic.c:1015 ++msgid "same rule name in multiple files" ++msgstr "mesmo nome de regra em múltiplos arquivos" + +-#: locale/programs/locfile.c:408 +-msgid "syntax error in definition of new character class" +-msgstr "erro de sintaxe na definio de uma nova classe de caracteres" ++#: timezone/zic.c:1056 ++msgid "unruly zone" ++msgstr "fuso horário sem regras" + +-#: locale/programs/locfile.c:418 +-msgid "syntax error in definition of new character map" +-msgstr "erro de sintaxe na definio de um novo mapa de caracteres" ++#: timezone/zic.c:1063 ++#, c-format ++msgid "%s in ruleless zone" ++msgstr "%s em uma fuso horário sem regras" + +-#: locale/programs/locfile.c:1003 +-msgid "syntax error in message locale definition" +-msgstr "erro de sintaxe na definio da mensagem locale" ++#: timezone/zic.c:1083 ++msgid "standard input" ++msgstr "entrada padrão" + +-#: locale/programs/locfile.c:914 +-msgid "syntax error in monetary locale definition" +-msgstr "erro de sintaxe na definio monetria locale" ++#: timezone/zic.c:1088 ++#, c-format ++msgid "%s: Can't open %s: %s\n" ++msgstr "%s: Não é possível abrir %s: %s\n" + +-#: locale/programs/locfile.c:941 +-msgid "syntax error in numeric locale definition" +-msgstr "erro de sintaxe na definio numrica locale" ++#: timezone/zic.c:1099 ++msgid "line too long" ++msgstr "linha muito longa" + +-#: locale/programs/locfile.c:852 +-msgid "syntax error in order specification" +-msgstr "erro de sintaxe na especificao de ordem" ++#: timezone/zic.c:1119 ++msgid "input line of unknown type" ++msgstr "linha de entrada de tipo desconhecido" + +-#: locale/programs/charmap.c:280 locale/programs/charmap.c:296 +-#: locale/programs/repertoire.c:143 ++#: timezone/zic.c:1134 + #, c-format +-msgid "syntax error in prolog: %s" +-msgstr "erro de sintaxe em prolog: %s" ++msgid "%s: Leap line in non leap seconds file %s" ++msgstr "%s: linha Leap em arquivo de segundos não bissextos %s" + +-#: locale/programs/repertoire.c:198 locale/programs/repertoire.c:237 +-#: locale/programs/repertoire.c:260 ++#: timezone/zic.c:1142 timezone/zic.c:1547 timezone/zic.c:1569 + #, c-format +-msgid "syntax error in repertoire map definition: %s" +-msgstr "erro de sintaxe no mapa de repertrio: %s" +- +-#: locale/programs/locfile.c:979 +-msgid "syntax error in time locale definition" +-msgstr "erro de sintaxe na definio de tempo locale" +- +-#: locale/programs/locfile.c:385 +-msgid "syntax error: not inside a locale definition section" +-msgstr "erro de sintaxe: no est dentro de uma definio de seo locale" +- +-#: iconv/iconv_prog.c:137 +-msgid "target encoding not specified using `-t'" +-msgstr "codificao destino no especificada usando `-t'" +- +-#: catgets/gencat.c:390 catgets/gencat.c:526 catgets/gencat.c:553 +-msgid "this is the first definition" +-msgstr "esta a primeira definio" ++msgid "%s: panic: Invalid l_value %d\n" ++msgstr "%s: pânico: l_value inválido %d\n" + +-#: timezone/zic.c:1132 +-msgid "time before zero" +-msgstr "tempo menor que zero" ++#: timezone/zic.c:1151 ++msgid "expected continuation line not found" ++msgstr "linha de continuação não foi localizada" + +-#: timezone/zic.c:1140 timezone/zic.c:2015 timezone/zic.c:2034 ++#: timezone/zic.c:1193 timezone/zic.c:2976 + msgid "time overflow" + msgstr "estouro de tempo" + +-#: locale/programs/charmap.c:443 +-msgid "too few bytes in character encoding" +-msgstr "poucos bytes na codificao do caracter" +- +-#: locale/programs/charmap.c:445 +-msgid "too many bytes in character encoding" +-msgstr "muitos bytes na codificao do caracter" +- +-#: locale/programs/locales.h:92 +-msgid "too many character classes defined" +-msgstr "muitas classes de caracteres definidas" ++#: timezone/zic.c:1198 ++msgid "values over 24 hours not handled by pre-2007 versions of zic" ++msgstr "valor sobre 24 horas não tratado por versões anteriores a 2007 do zic" + +-#: timezone/zic.c:1843 +-msgid "too many leap seconds" +-msgstr "excessivos ajustes em segundos" ++#: timezone/zic.c:1209 ++msgid "wrong number of fields on Rule line" ++msgstr "número incorreto de campos na linha Rule" + +-#: timezone/zic.c:1815 +-msgid "too many local time types" +-msgstr "muitos tipos de tempo local" ++#: timezone/zic.c:1213 ++msgid "nameless rule" ++msgstr "regra sem nome" + +-#: timezone/zic.c:1769 +-msgid "too many transitions?!" +-msgstr "muitas transies?!" ++#: timezone/zic.c:1218 ++msgid "invalid saved time" ++msgstr "tempo gravado inválido" + +-#: locale/programs/ld-collate.c:1637 +-msgid "too many weights" +-msgstr "muitos pesos" ++#: timezone/zic.c:1235 ++msgid "wrong number of fields on Zone line" ++msgstr "número incorreto de campos na linha Zone" + +-#: timezone/zic.c:2138 +-msgid "too many, or too long, time zone abbreviations" +-msgstr "abreviaes de zona de tempo excessivas ou muito extensas" ++#: timezone/zic.c:1240 ++#, c-format ++msgid "\"Zone %s\" line and -l option are mutually exclusive" ++msgstr "A linha “Zone %s” e a opção -l são mutuamente exclusivas" + +-#: locale/programs/linereader.h:146 +-msgid "trailing garbage at end of line" +-msgstr "lixo no final da linha" ++#: timezone/zic.c:1246 ++#, c-format ++msgid "\"Zone %s\" line and -p option are mutually exclusive" ++msgstr "A linha “Zone %s” e a opção -p são mutuamente exclusivas" + +-#: sunrpc/svc_simple.c:150 ++#: timezone/zic.c:1253 + #, c-format +-msgid "trouble replying to prog %d\n" +-msgstr "problemas respondendo ao prog %d\n" ++msgid "duplicate zone name %s (file \"%s\", line %)" ++msgstr "nome de fuso horário duplicado %s (arquivo “%s”, linha %)" + +-#: locale/programs/ld-collate.c:1393 +-msgid "two lines in a row containing `...' are not allowed" +-msgstr "duas linhas em uma lista contendo `...' no so permitidas" ++#: timezone/zic.c:1267 ++msgid "wrong number of fields on Zone continuation line" ++msgstr "número incorreto de campos na linha de continuação de Zone" + + #: timezone/zic.c:1307 +-msgid "typed single year" +-msgstr "digitado ano simples" ++msgid "invalid UT offset" ++msgstr "deslocamento de UT inválido" + +-#: iconv/iconv_prog.c:406 +-msgid "unable to allocate buffer for input" +-msgstr "incapaz de alocar espao para entrada" +- +-#: nis/nis_callback.c:187 +-msgid "unable to free arguments" +-msgstr "no consegui liberar parmetros" +- +-#: posix/getconf.c:654 posix/getconf.c:670 +-msgid "undefined" +-msgstr "indefinido" +- +-#: locale/programs/charmap.c:701 locale/programs/charmap.c:712 +-#, c-format +-msgid "unknown character `%s'" +-msgstr "caracter desconhecido `%s'" +- +-#: locale/programs/ld-messages.c:202 locale/programs/ld-messages.c:213 +-#: locale/programs/ld-messages.c:224 locale/programs/ld-messages.c:235 +-#: locale/programs/ld-time.c:718 +-#, c-format +-msgid "unknown character in field `%s' of category `%s'" +-msgstr "caracter desconhecido no campo `%s', categoria `%s'" +- +-#: locale/programs/locfile.c:715 +-msgid "unknown collation directive" +-msgstr "diretiva de comparao desconhecida" ++#: timezone/zic.c:1311 ++msgid "invalid abbreviation format" ++msgstr "formato de abreviação inválido" + +-#: catgets/gencat.c:487 ++#: timezone/zic.c:1320 + #, c-format +-msgid "unknown directive `%s': line ignored" +-msgstr "diretiva desconhecida `%s': linha ignorada" ++msgid "format '%s' not handled by pre-2015 versions of zic" ++msgstr "formato “%s” não tratado por versões pré-2015 do zic" + +-#: iconv/iconv_prog.c:353 +-#, c-format +-msgid "unknown iconv() error %d" +-msgstr "erro iconv() desconhecido: %d" ++#: timezone/zic.c:1347 ++msgid "Zone continuation line end time is not after end time of previous line" ++msgstr "Hora final da linha de fuso horário não está após o tempo final da linha anterior" + +-#: catgets/gencat.c:466 +-#, c-format +-msgid "unknown set `%s'" +-msgstr "conjunto desconhecido `%s'" ++#: timezone/zic.c:1374 ++msgid "wrong number of fields on Leap line" ++msgstr "número incorreto de campos na linha Leap" + +-#: locale/programs/ld-collate.c:1377 locale/programs/ld-collate.c:1572 +-#: locale/programs/ld-collate.c:1747 +-#, c-format +-msgid "unknown symbol `%.*s': line ignored" +-msgstr "smbolo desconhecido `%.*s': linha ignorada" ++#: timezone/zic.c:1383 ++msgid "invalid leaping year" ++msgstr "ano bissexto inválido" + +-#: timezone/zic.c:761 +-msgid "unruly zone" +-msgstr "zona sem regras" ++#: timezone/zic.c:1403 timezone/zic.c:1501 ++msgid "invalid month name" ++msgstr "nome do mês inválido" + +-#: catgets/gencat.c:971 +-msgid "unterminated message" +-msgstr "mensagem no terminada" ++#: timezone/zic.c:1416 timezone/zic.c:1614 timezone/zic.c:1628 ++msgid "invalid day of month" ++msgstr "dia do mês inválido" + +-#: locale/programs/linereader.c:520 locale/programs/linereader.c:555 +-msgid "unterminated string" +-msgstr "string no terminada" ++#: timezone/zic.c:1421 ++msgid "time too small" ++msgstr "hora pequena demais" + +-#: sunrpc/rpc_scan.c:350 sunrpc/rpc_scan.c:376 +-msgid "unterminated string constant" +-msgstr "string no terminada" ++#: timezone/zic.c:1425 ++msgid "time too large" ++msgstr "hora grande demais" + +-#: locale/programs/linereader.c:390 +-msgid "unterminated symbolic name" +-msgstr "nome simblico no terminado" ++#: timezone/zic.c:1429 timezone/zic.c:1530 ++msgid "invalid time of day" ++msgstr "hora do dia inválida" + +-#: locale/programs/ld-collate.c:1699 +-msgid "unterminated weight name" +-msgstr "nome do peso no terminado" ++#: timezone/zic.c:1448 ++msgid "illegal CORRECTION field on Leap line" ++msgstr "Campo CORRECTION ilegal em linha Leap (ajuste)" + +-#: locale/programs/charset.c:104 +-msgid "upper limit in range is not smaller then lower limit" +-msgstr "o limite inferior do intervalo maior que o limite superior" ++#: timezone/zic.c:1453 ++msgid "illegal Rolling/Stationary field on Leap line" ++msgstr "campo Rolling/Stationary ilegal em linha Leap (ajuste)" + +-#: sunrpc/rpc_main.c:1415 +-#, c-format +-msgid "usage: %s infile\n" +-msgstr "uso: %s arquivo_entrada\n" ++#: timezone/zic.c:1459 ++msgid "leap second precedes Big Bang" ++msgstr "segundo bissexto precede Big Bang" + +-#: timezone/zic.c:2081 +-msgid "use of 2/29 in non leap-year" +-msgstr "use 2/29 em ano no bissexto" ++#: timezone/zic.c:1472 ++msgid "wrong number of fields on Link line" ++msgstr "número incorreto de campos na linha Link" + +-#: locale/programs/charmap.c:522 locale/programs/charmap.c:576 +-#, c-format +-msgid "value for %s must be an integer" +-msgstr "valor para %s deve ser um inteiro" ++#: timezone/zic.c:1476 ++msgid "blank FROM field on Link line" ++msgstr "campo FROM em branco na linha Link" + +-#: locale/programs/charmap.c:318 +-#, c-format +-msgid "value for <%s> must lie between 1 and 4" +-msgstr "valor para <%s> deve estar entre 1 e 4" ++#: timezone/zic.c:1551 ++msgid "invalid starting year" ++msgstr "ano inicial inválido" + +-#: locale/programs/ld-monetary.c:157 locale/programs/ld-numeric.c:92 +-#, c-format +-msgid "value for field `%s' in category `%s' must not be the empty string" +-msgstr "valor para campo `%s', categoria `%s', no deve ser uma string vazia" ++#: timezone/zic.c:1573 ++msgid "invalid ending year" ++msgstr "ano final inválido" + +-#: locale/programs/charmap.c:330 +-msgid "value of must be greater than the value of " +-msgstr "o valor de deve ser maior que o valor de " ++#: timezone/zic.c:1577 ++msgid "starting year greater than ending year" ++msgstr "ano inicial maior que ano final" + +-#: locale/programs/ld-monetary.c:147 +-msgid "value of field `int_curr_symbol' in category `LC_MONETARY' does not correspond to a valid name in ISO 4217" +-msgstr "o valor do campo `int_curr_symbol' na categoria `LC_MONETARY' no corresponde a um nome vlido na ISO 4217" ++#: timezone/zic.c:1584 ++msgid "typed single year" ++msgstr "digitado ano simples" + +-#: locale/programs/ld-monetary.c:139 +-msgid "value of field `int_curr_symbol' in category `LC_MONETARY' has wrong length" +-msgstr "o valor do campo `int_curr_symbol' na categoria `LC_MONETARY' possui tamanho errado" ++#: timezone/zic.c:1619 ++msgid "invalid weekday name" ++msgstr "nome de dia de semana inválido" + +-#: locale/programs/ld-monetary.c:383 locale/programs/ld-numeric.c:207 ++#: timezone/zic.c:1743 + #, c-format +-msgid "values for field `%s' in category `%s' must be smaller than 127" +-msgstr "os valores para o campo `%s' na categoria `%s' devem ser menores que 127" ++msgid "reference clients mishandle more than %d transition times" ++msgstr "clientes de referência lidam incorretamente com mais %d tempos de transição" + +-#: nscd/connections.c:355 +-#, c-format +-msgid "while accepting connection: %s" +-msgstr "enquanto aceitando coneco: %s" ++#: timezone/zic.c:1747 ++msgid "pre-2014 clients may mishandle more than 1200 transition times" ++msgstr "clientes pré-2014 podem não lidar corretamente comais de 1200 tempos de transições" + +-#: nscd/grpcache.c:149 nscd/hstcache.c:168 nscd/pwdcache.c:142 +-msgid "while allocating cache entry" +-msgstr "enquanto alocando entrada de cache" ++#: timezone/zic.c:1858 ++msgid "too many transition times" ++msgstr "tempos de transição em excesso" + +-#: nscd/cache.c:85 +-msgid "while allocating hash table entry" +-msgstr "enquanto alocando entrada na tabela hash" ++#: timezone/zic.c:2047 ++#, c-format ++msgid "%%z UTC offset magnitude exceeds 99:59:59" ++msgstr "a magnitude do deslocamento de %%z UTC excede 99:59:59" + +-#: nscd/grpcache.c:99 nscd/hstcache.c:109 nscd/pwdcache.c:105 +-msgid "while allocating key copy" +-msgstr "enquanto alocando chave cpia" ++#: timezone/zic.c:2424 ++msgid "no POSIX environment variable for zone" ++msgstr "nenhuma variável de ambiente POSIX para o fuso horário" + +-#: catgets/gencat.c:1001 +-msgid "while opening old catalog file" +-msgstr "enquanto abrindo antigo arquivo de catlogo" ++#: timezone/zic.c:2430 ++#, c-format ++msgid "%s: pre-%d clients may mishandle distant timestamps" ++msgstr "%s: clientes pré-%d podem não lidar corretamente com marcas de tempo distantes" + +-#: locale/programs/locale.c:346 +-msgid "while preparing output" +-msgstr "enquanto preparando sada" ++#: timezone/zic.c:2566 ++msgid "two rules for same instant" ++msgstr "duas regras para o mesmo instante" + +-#: db2/makedb.c:365 db2/makedb.c:382 +-msgid "while reading database" +-msgstr "enquanto lendo database" ++#: timezone/zic.c:2627 ++msgid "can't determine time zone abbreviation to use just after until time" ++msgstr "não é possível determinar abreviação de fuso horário para usar apenas após um tempo" + +-#: elf/sprof.c:683 +-msgid "while stat'ing profiling data file" +-msgstr "enquanto escrevendo arquivo data de dados de perfil" ++#: timezone/zic.c:2725 ++msgid "too many local time types" ++msgstr "tipos de tempo local em excesso" + +-#: db2/makedb.c:334 +-msgid "while writing database file" +-msgstr "enquanto escrevendo arquivo data base" ++#: timezone/zic.c:2729 ++msgid "UT offset out of range" ++msgstr "deslocamento de UT fora da faixa" + +-#: nscd/nscd_stat.c:115 +-msgid "write incomplete" +-msgstr "escrita incompleta" ++#: timezone/zic.c:2753 ++msgid "too many leap seconds" ++msgstr "número excessivo de segundos bissextos" + +-#: inet/rcmd.c:320 +-msgid "writeable by other than owner" +-msgstr "permisso de escrita para outros" ++#: timezone/zic.c:2759 ++msgid "repeated leap second moment" ++msgstr "momento de segundo bissexto repetido" + +-#: db2/makedb.c:124 nscd/nscd.c:114 nss/getent.c:392 +-msgid "wrong number of arguments" +-msgstr "nmero incorreto de argumentos" ++#: timezone/zic.c:2830 ++msgid "Wild result from command execution" ++msgstr "Resultado insensato da execução do comando" + +-#: timezone/zic.c:1090 +-msgid "wrong number of fields on Leap line" +-msgstr "nmero incorreto de campos na linha Leap" ++#: timezone/zic.c:2831 ++#, c-format ++msgid "%s: command was '%s', result was %d\n" ++msgstr "%s: comando era “%s”, resultado era %d\n" + +-#: timezone/zic.c:1181 +-msgid "wrong number of fields on Link line" +-msgstr "nmero incorreto de campos na linha Link" ++#: timezone/zic.c:2961 ++msgid "Odd number of quotation marks" ++msgstr "Número ímpar de aspas" + +-#: timezone/zic.c:924 +-msgid "wrong number of fields on Rule line" +-msgstr "nmero incorreto de campos na linha Rule" ++#: timezone/zic.c:3046 ++msgid "use of 2/29 in non leap-year" ++msgstr "uso de 2/29 em ano não bissexto" + +-#: timezone/zic.c:994 +-msgid "wrong number of fields on Zone continuation line" +-msgstr "nmero incorreto de campos na linha de continuao de Zone" ++#: timezone/zic.c:3081 ++msgid "rule goes past start/end of month; will not work with pre-2004 versions of zic" ++msgstr "regra vai de início/fim do mês; não vai funcionar em versões pré-2004 do zic" + +-#: timezone/zic.c:952 +-msgid "wrong number of fields on Zone line" +-msgstr "nmero incorreto de campos na linha Zone" ++#: timezone/zic.c:3108 ++msgid "time zone abbreviation has fewer than 3 characters" ++msgstr "abreviação de fuso horário possui menos de 3 caracteres" + +-#: sunrpc/xdr_ref.c:84 +-msgid "xdr_reference: out of memory\n" +-msgstr "xdr_reference: no h memria suficiente\n" ++#: timezone/zic.c:3110 ++msgid "time zone abbreviation has too many characters" ++msgstr "abreviação de fuso horário possui um número excessivo de caracteres" + +-#: sunrpc/xdr_rec.c:151 sunrpc/xdr_rec.c:166 +-msgid "xdrrec_create: out of memory\n" +-msgstr "xdrrec_create: no h memria suficiente\n" ++#: timezone/zic.c:3112 ++msgid "time zone abbreviation differs from POSIX standard" ++msgstr "abreviação de fuso horário difere do padrão POSIX" + +-#: nis/ypclnt.c:884 +-msgid "yp_update: cannot convert host to netname\n" +-msgstr "yp_update: no possvel converter host para netname\n" ++#: timezone/zic.c:3118 ++msgid "too many, or too long, time zone abbreviations" ++msgstr "abreviações de fuso horário em excesso ou muito extensas" + +-#: nis/ypclnt.c:896 +-msgid "yp_update: cannot get server address\n" +-msgstr "yp_update: no possvel obter o endereo do servidor\n" ++#: timezone/zic.c:3161 ++#, c-format ++msgid "%s: Can't create directory %s: %s" ++msgstr "%s: Não foi possível criar o diretório %s: %s" diff --git a/posix/tst-glob_lstat_compat.c b/posix/tst-glob_lstat_compat.c index c46bc9e578..22cd1f02f9 100644 --- a/posix/tst-glob_lstat_compat.c @@ -129,6 +11152,360 @@ /* Compat glob should not call gl_lstat since for some old binaries it might be unitialized (for instance GNUmake). Check if it is indeed +diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c +index f509534ca9..8c64ac59ff 100644 +--- a/posix/tst-rfc3484-2.c ++++ b/posix/tst-rfc3484-2.c +@@ -58,6 +58,7 @@ _res_hconf_init (void) + #undef USE_NSCD + #include "../sysdeps/posix/getaddrinfo.c" + ++service_user *__nss_hosts_database attribute_hidden; + + /* This is the beginning of the real test code. The above defines + (among other things) the function rfc3484_sort. */ +diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c +index ae44087a10..1c61aaf844 100644 +--- a/posix/tst-rfc3484-3.c ++++ b/posix/tst-rfc3484-3.c +@@ -58,6 +58,7 @@ _res_hconf_init (void) + #undef USE_NSCD + #include "../sysdeps/posix/getaddrinfo.c" + ++service_user *__nss_hosts_database attribute_hidden; + + /* This is the beginning of the real test code. The above defines + (among other things) the function rfc3484_sort. */ +diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c +index 7f191abbbc..8f45848e44 100644 +--- a/posix/tst-rfc3484.c ++++ b/posix/tst-rfc3484.c +@@ -58,6 +58,7 @@ _res_hconf_init (void) + #undef USE_NSCD + #include "../sysdeps/posix/getaddrinfo.c" + ++service_user *__nss_hosts_database attribute_hidden; + + /* This is the beginning of the real test code. The above defines + (among other things) the function rfc3484_sort. */ +diff --git a/string/test-memmove.c b/string/test-memmove.c +index edc7a4c3bf..64e3651ba4 100644 +--- a/string/test-memmove.c ++++ b/string/test-memmove.c +@@ -24,6 +24,7 @@ + # define TEST_NAME "memmove" + #endif + #include "test-string.h" ++#include + + char *simple_memmove (char *, const char *, size_t); + +@@ -245,6 +246,60 @@ do_random_tests (void) + } + } + ++static void ++do_test2 (void) ++{ ++ size_t size = 0x20000000; ++ uint32_t * large_buf; ++ ++ large_buf = mmap ((void*) 0x70000000, size, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANON, -1, 0); ++ ++ if (large_buf == MAP_FAILED) ++ error (EXIT_UNSUPPORTED, errno, "Large mmap failed"); ++ ++ if ((uintptr_t) large_buf > 0x80000000 - 128 ++ || 0x80000000 - (uintptr_t) large_buf > 0x20000000) ++ { ++ error (0, 0, "Large mmap allocated improperly"); ++ ret = EXIT_UNSUPPORTED; ++ munmap ((void *) large_buf, size); ++ return; ++ } ++ ++ size_t bytes_move = 0x80000000 - (uintptr_t) large_buf; ++ size_t arr_size = bytes_move / sizeof (uint32_t); ++ size_t i; ++ ++ FOR_EACH_IMPL (impl, 0) ++ { ++ for (i = 0; i < arr_size; i++) ++ large_buf[i] = (uint32_t) i; ++ ++ uint32_t * dst = &large_buf[33]; ++ ++#ifdef TEST_BCOPY ++ CALL (impl, (char *) large_buf, (char *) dst, bytes_move); ++#else ++ CALL (impl, (char *) dst, (char *) large_buf, bytes_move); ++#endif ++ ++ for (i = 0; i < arr_size; i++) ++ { ++ if (dst[i] != (uint32_t) i) ++ { ++ error (0, 0, ++ "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"", ++ impl->name, dst, large_buf, i); ++ ret = 1; ++ break; ++ } ++ } ++ } ++ ++ munmap ((void *) large_buf, size); ++} ++ + int + test_main (void) + { +@@ -284,6 +339,9 @@ test_main (void) + } + + do_random_tests (); ++ ++ do_test2 (); ++ + return ret; + } + +diff --git a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S +index 9c3bbe7e17..9aa17de99c 100644 +--- a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S ++++ b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S +@@ -72,7 +72,7 @@ ENTRY (MEMCPY) + cmp %edx, %eax + + # ifdef USE_AS_MEMMOVE +- jg L(check_forward) ++ ja L(check_forward) + + L(mm_len_0_or_more_backward): + /* Now do checks for lengths. We do [0..16], [16..32], [32..64], [64..128] +@@ -81,7 +81,7 @@ L(mm_len_0_or_more_backward): + jbe L(mm_len_0_16_bytes_backward) + + cmpl $32, %ecx +- jg L(mm_len_32_or_more_backward) ++ ja L(mm_len_32_or_more_backward) + + /* Copy [0..32] and return. */ + movdqu (%eax), %xmm0 +@@ -92,7 +92,7 @@ L(mm_len_0_or_more_backward): + + L(mm_len_32_or_more_backward): + cmpl $64, %ecx +- jg L(mm_len_64_or_more_backward) ++ ja L(mm_len_64_or_more_backward) + + /* Copy [0..64] and return. */ + movdqu (%eax), %xmm0 +@@ -107,7 +107,7 @@ L(mm_len_32_or_more_backward): + + L(mm_len_64_or_more_backward): + cmpl $128, %ecx +- jg L(mm_len_128_or_more_backward) ++ ja L(mm_len_128_or_more_backward) + + /* Copy [0..128] and return. */ + movdqu (%eax), %xmm0 +@@ -132,7 +132,7 @@ L(mm_len_128_or_more_backward): + add %ecx, %eax + cmp %edx, %eax + movl SRC(%esp), %eax +- jle L(forward) ++ jbe L(forward) + PUSH (%esi) + PUSH (%edi) + PUSH (%ebx) +@@ -269,7 +269,7 @@ L(check_forward): + add %edx, %ecx + cmp %eax, %ecx + movl LEN(%esp), %ecx +- jle L(forward) ++ jbe L(forward) + + /* Now do checks for lengths. We do [0..16], [0..32], [0..64], [0..128] + separately. */ +diff --git a/sysdeps/powerpc/powerpc32/sysdep.h b/sysdeps/powerpc/powerpc32/sysdep.h +index 8e32a2a131..5f1294ead3 100644 +--- a/sysdeps/powerpc/powerpc32/sysdep.h ++++ b/sysdeps/powerpc/powerpc32/sysdep.h +@@ -90,7 +90,7 @@ GOT_LABEL: ; \ + cfi_endproc; \ + ASM_SIZE_DIRECTIVE(name) + +-#if ! IS_IN(rtld) ++#if !IS_IN(rtld) && !defined(__SPE__) + # define ABORT_TRANSACTION_IMPL \ + cmpwi 2,0; \ + beq 1f; \ +diff --git a/sysdeps/powerpc/sysdep.h b/sysdeps/powerpc/sysdep.h +index 03db75fcb7..8a6d236caa 100644 +--- a/sysdeps/powerpc/sysdep.h ++++ b/sysdeps/powerpc/sysdep.h +@@ -174,7 +174,7 @@ + we abort transaction just before syscalls. + + [1] Documentation/powerpc/transactional_memory.txt [Syscalls] */ +-#if !IS_IN(rtld) ++#if !IS_IN(rtld) && !defined(__SPE__) + # define ABORT_TRANSACTION \ + ({ \ + if (THREAD_GET_TM_CAPABLE ()) \ +diff --git a/sysdeps/riscv/rvd/s_fmax.c b/sysdeps/riscv/rvd/s_fmax.c +index ef8f1344ce..22e91bfc4b 100644 +--- a/sysdeps/riscv/rvd/s_fmax.c ++++ b/sysdeps/riscv/rvd/s_fmax.c +@@ -17,12 +17,19 @@ + . */ + + #include ++#include + #include + + double + __fmax (double x, double y) + { +- asm ("fmax.d %0, %1, %2" : "=f" (x) : "f" (x), "f" (y)); +- return x; ++ double res; ++ ++ if (__glibc_unlikely ((_FCLASS (x) | _FCLASS (y)) & _FCLASS_SNAN)) ++ return x + y; ++ else ++ asm ("fmax.d %0, %1, %2" : "=f" (res) : "f" (x), "f" (y)); ++ ++ return res; + } + libm_alias_double (__fmax, fmax) +diff --git a/sysdeps/riscv/rvd/s_fmin.c b/sysdeps/riscv/rvd/s_fmin.c +index c6ff24cefb..7b35230cac 100644 +--- a/sysdeps/riscv/rvd/s_fmin.c ++++ b/sysdeps/riscv/rvd/s_fmin.c +@@ -17,12 +17,19 @@ + . */ + + #include ++#include + #include + + double + __fmin (double x, double y) + { +- asm ("fmin.d %0, %1, %2" : "=f" (x) : "f" (x), "f" (y)); +- return x; ++ double res; ++ ++ if (__glibc_unlikely ((_FCLASS (x) | _FCLASS (y)) & _FCLASS_SNAN)) ++ return x + y; ++ else ++ asm ("fmin.d %0, %1, %2" : "=f" (res) : "f" (x), "f" (y)); ++ ++ return res; + } + libm_alias_double (__fmin, fmin) +diff --git a/sysdeps/riscv/rvf/s_fmaxf.c b/sysdeps/riscv/rvf/s_fmaxf.c +index 3293f2f41c..63f7e3d664 100644 +--- a/sysdeps/riscv/rvf/s_fmaxf.c ++++ b/sysdeps/riscv/rvf/s_fmaxf.c +@@ -17,12 +17,19 @@ + . */ + + #include ++#include + #include + + float + __fmaxf (float x, float y) + { +- asm ("fmax.s %0, %1, %2" : "=f" (x) : "f" (x), "f" (y)); +- return x; ++ float res; ++ ++ if (__glibc_unlikely ((_FCLASS (x) | _FCLASS (y)) & _FCLASS_SNAN)) ++ return x + y; ++ else ++ asm ("fmax.s %0, %1, %2" : "=f" (res) : "f" (x), "f" (y)); ++ ++ return res; + } + libm_alias_float (__fmax, fmax) +diff --git a/sysdeps/riscv/rvf/s_fminf.c b/sysdeps/riscv/rvf/s_fminf.c +index e4411f04b2..82cca4e37d 100644 +--- a/sysdeps/riscv/rvf/s_fminf.c ++++ b/sysdeps/riscv/rvf/s_fminf.c +@@ -17,12 +17,19 @@ + . */ + + #include ++#include + #include + + float + __fminf (float x, float y) + { +- asm ("fmin.s %0, %1, %2" : "=f" (x) : "f" (x), "f" (y)); +- return x; ++ float res; ++ ++ if (__glibc_unlikely ((_FCLASS (x) | _FCLASS (y)) & _FCLASS_SNAN)) ++ return x + y; ++ else ++ asm ("fmin.s %0, %1, %2" : "=f" (res) : "f" (x), "f" (y)); ++ ++ return res; + } + libm_alias_float (__fmin, fmin) +diff --git a/sysdeps/riscv/tls-macros.h b/sysdeps/riscv/tls-macros.h +index 5433ed9d16..7f0dd926d0 100644 +--- a/sysdeps/riscv/tls-macros.h ++++ b/sysdeps/riscv/tls-macros.h +@@ -23,19 +23,9 @@ + #include + #include "dl-tls.h" + +-#define LOAD_GP \ +- ".option push\n\t" \ +- ".option norelax\n\t" \ +- "la gp, __global_pointer$\n\t" \ +- ".option pop\n\t" +- +-#define UNLOAD_GP +- + #define TLS_GD(x) \ + ({ void *__result; \ +- asm (LOAD_GP \ +- "la.tls.gd %0, " #x "\n\t" \ +- UNLOAD_GP \ ++ asm ("la.tls.gd %0, " #x "\n\t" \ + : "=r" (__result)); \ + __tls_get_addr (__result); }) + +@@ -43,19 +33,15 @@ + + #define TLS_IE(x) \ + ({ void *__result; \ +- asm (LOAD_GP \ +- "la.tls.ie %0, " #x "\n\t" \ ++ asm ("la.tls.ie %0, " #x "\n\t" \ + "add %0, %0, tp\n\t" \ +- UNLOAD_GP \ + : "=r" (__result)); \ + __result; }) + + #define TLS_LE(x) \ + ({ void *__result; \ +- asm (LOAD_GP \ +- "lui %0, %%tprel_hi(" #x ")\n\t" \ ++ asm ("lui %0, %%tprel_hi(" #x ")\n\t" \ + "add %0, %0, tp, %%tprel_add(" #x ")\n\t" \ + "addi %0, %0, %%tprel_lo(" #x ")\n\t" \ +- UNLOAD_GP \ + : "=r" (__result)); \ + __result; }) diff --git a/sysdeps/sh/libm-test-ulps b/sysdeps/sh/libm-test-ulps index da4224c2d6..11c5f3216d 100644 --- a/sysdeps/sh/libm-test-ulps @@ -981,6 +12358,475 @@ /* Free an allocated protection key, which must have been allocated using pkey_alloc. */ +diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile +index 4080b8c966..da716e2c1b 100644 +--- a/sysdeps/unix/sysv/linux/i386/Makefile ++++ b/sysdeps/unix/sysv/linux/i386/Makefile +@@ -3,6 +3,9 @@ default-abi := 32 + + ifeq ($(subdir),misc) + sysdep_routines += ioperm iopl vm86 ++ ++tests += tst-bz21269 ++$(objpfx)tst-bz21269: $(shared-thread-library) + endif + + ifeq ($(subdir),elf) +diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c +index a5eb9e0d3e..177ff60ee6 100644 +--- a/sysdeps/unix/sysv/linux/i386/sigaction.c ++++ b/sysdeps/unix/sysv/linux/i386/sigaction.c +@@ -42,7 +42,6 @@ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; + #endif + extern void restore (void) asm ("__restore") attribute_hidden; + +- + /* If ACT is not NULL, change the action for SIG to *ACT. + If OACT is not NULL, put the old action for SIG in *OACT. */ + int +@@ -65,6 +64,8 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) + kact.sa_restorer = ((act->sa_flags & SA_SIGINFO) + ? &restore_rt : &restore); + } ++ else ++ kact.sa_restorer = NULL; + } + + /* XXX The size argument hopefully will have to be changed to the +diff --git a/sysdeps/unix/sysv/linux/i386/tst-bz21269.c b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c +new file mode 100644 +index 0000000000..6ee3fc62be +--- /dev/null ++++ b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c +@@ -0,0 +1,235 @@ ++/* Test for i386 sigaction sa_restorer handling (BZ#21269) ++ Copyright (C) 2017 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* This is based on Linux test tools/testing/selftests/x86/ldt_gdt.c, ++ more specifically in do_multicpu_tests function. The main changes ++ are: ++ ++ - C11 atomics instead of plain access. ++ - Remove x86_64 support which simplifies the syscall handling ++ and fallbacks. ++ - Replicate only the test required to trigger the issue for the ++ BZ#21269. */ ++ ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++static int ++xset_thread_area (struct user_desc *u_info) ++{ ++ long ret = syscall (SYS_set_thread_area, u_info); ++ TEST_VERIFY_EXIT (ret == 0); ++ return ret; ++} ++ ++static void ++xmodify_ldt (int func, const void *ptr, unsigned long bytecount) ++{ ++ TEST_VERIFY_EXIT (syscall (SYS_modify_ldt, 1, ptr, bytecount) == 0); ++} ++ ++static int ++futex (int *uaddr, int futex_op, int val, void *timeout, int *uaddr2, ++ int val3) ++{ ++ return syscall (SYS_futex, uaddr, futex_op, val, timeout, uaddr2, val3); ++} ++ ++static void ++xsethandler (int sig, void (*handler)(int, siginfo_t *, void *), int flags) ++{ ++ struct sigaction sa = { 0 }; ++ sa.sa_sigaction = handler; ++ sa.sa_flags = SA_SIGINFO | flags; ++ TEST_VERIFY_EXIT (sigemptyset (&sa.sa_mask) == 0); ++ TEST_VERIFY_EXIT (sigaction (sig, &sa, 0) == 0); ++} ++ ++static jmp_buf jmpbuf; ++ ++static void ++sigsegv_handler (int sig, siginfo_t *info, void *ctx_void) ++{ ++ siglongjmp (jmpbuf, 1); ++} ++ ++/* Points to an array of 1024 ints, each holding its own index. */ ++static const unsigned int *counter_page; ++static struct user_desc *low_user_desc; ++static struct user_desc *low_user_desc_clear; /* Used to delete GDT entry. */ ++static int gdt_entry_num; ++ ++static void ++setup_counter_page (void) ++{ ++ long page_size = sysconf (_SC_PAGE_SIZE); ++ TEST_VERIFY_EXIT (page_size > 0); ++ unsigned int *page = xmmap (NULL, page_size, PROT_READ | PROT_WRITE, ++ MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1); ++ for (int i = 0; i < (page_size / sizeof (unsigned int)); i++) ++ page[i] = i; ++ counter_page = page; ++} ++ ++static void ++setup_low_user_desc (void) ++{ ++ low_user_desc = xmmap (NULL, 2 * sizeof (struct user_desc), ++ PROT_READ | PROT_WRITE, ++ MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1); ++ ++ low_user_desc->entry_number = -1; ++ low_user_desc->base_addr = (unsigned long) &counter_page[1]; ++ low_user_desc->limit = 0xffff; ++ low_user_desc->seg_32bit = 1; ++ low_user_desc->contents = 0; ++ low_user_desc->read_exec_only = 0; ++ low_user_desc->limit_in_pages = 1; ++ low_user_desc->seg_not_present = 0; ++ low_user_desc->useable = 0; ++ ++ xset_thread_area (low_user_desc); ++ ++ low_user_desc_clear = low_user_desc + 1; ++ low_user_desc_clear->entry_number = gdt_entry_num; ++ low_user_desc_clear->read_exec_only = 1; ++ low_user_desc_clear->seg_not_present = 1; ++} ++ ++/* Possible values of futex: ++ 0: thread is idle. ++ 1: thread armed. ++ 2: thread should clear LDT entry 0. ++ 3: thread should exit. */ ++static atomic_uint ftx; ++ ++static void * ++threadproc (void *ctx) ++{ ++ while (1) ++ { ++ futex ((int *) &ftx, FUTEX_WAIT, 1, NULL, NULL, 0); ++ while (atomic_load (&ftx) != 2) ++ { ++ if (atomic_load (&ftx) >= 3) ++ return NULL; ++ } ++ ++ /* clear LDT entry 0. */ ++ const struct user_desc desc = { 0 }; ++ xmodify_ldt (1, &desc, sizeof (desc)); ++ ++ /* If ftx == 2, set it to zero, If ftx == 100, quit. */ ++ if (atomic_fetch_add (&ftx, -2) != 2) ++ return NULL; ++ } ++} ++ ++ ++/* As described in testcase, for historical reasons x86_32 Linux (and compat ++ on x86_64) interprets SA_RESTORER clear with nonzero sa_restorer as a ++ request for stack switching if the SS segment is 'funny' (this is default ++ scenario for vDSO system). This means that anything that tries to mix ++ signal handling with segmentation should explicit clear the sa_restorer. ++ ++ This testcase check if sigaction in fact does it by changing the local ++ descriptor table (LDT) through the modify_ldt syscall and triggering ++ a synchronous segfault on iret fault by trying to install an invalid ++ segment. With a correct zeroed sa_restorer it should not trigger an ++ 'real' SEGSEGV and allows the siglongjmp in signal handler. */ ++ ++static int ++do_test (void) ++{ ++ setup_counter_page (); ++ setup_low_user_desc (); ++ ++ pthread_t thread; ++ unsigned short orig_ss; ++ ++ xsethandler (SIGSEGV, sigsegv_handler, 0); ++ /* 32-bit kernels send SIGILL instead of SIGSEGV on IRET faults. */ ++ xsethandler (SIGILL, sigsegv_handler, 0); ++ /* Some kernels send SIGBUS instead. */ ++ xsethandler (SIGBUS, sigsegv_handler, 0); ++ ++ thread = xpthread_create (0, threadproc, 0); ++ ++ asm volatile ("mov %%ss, %0" : "=rm" (orig_ss)); ++ ++ for (int i = 0; i < 5; i++) ++ { ++ if (sigsetjmp (jmpbuf, 1) != 0) ++ continue; ++ ++ /* Make sure the thread is ready after the last test. */ ++ while (atomic_load (&ftx) != 0) ++ ; ++ ++ struct user_desc desc = { ++ .entry_number = 0, ++ .base_addr = 0, ++ .limit = 0xffff, ++ .seg_32bit = 1, ++ .contents = 0, ++ .read_exec_only = 0, ++ .limit_in_pages = 1, ++ .seg_not_present = 0, ++ .useable = 0 ++ }; ++ ++ xmodify_ldt (0x11, &desc, sizeof (desc)); ++ ++ /* Arm the thread. */ ++ ftx = 1; ++ futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0); ++ ++ asm volatile ("mov %0, %%ss" : : "r" (0x7)); ++ ++ /* Fire up thread modify_ldt call. */ ++ atomic_store (&ftx, 2); ++ ++ while (atomic_load (&ftx) != 0) ++ ; ++ ++ /* On success, modify_ldt will segfault us synchronously and we will ++ escape via siglongjmp. */ ++ support_record_failure (); ++ } ++ ++ atomic_store (&ftx, 100); ++ futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0); ++ ++ xpthread_join (thread); ++ ++ return 0; ++} ++ ++#include +diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-lock.c b/sysdeps/unix/sysv/linux/powerpc/elision-lock.c +index b7093feab9..98a23f0dd2 100644 +--- a/sysdeps/unix/sysv/linux/powerpc/elision-lock.c ++++ b/sysdeps/unix/sysv/linux/powerpc/elision-lock.c +@@ -45,6 +45,7 @@ + int + __lll_lock_elision (int *lock, short *adapt_count, EXTRAARG int pshared) + { ++#ifndef __SPE__ + /* adapt_count is accessed concurrently but is just a hint. Thus, + use atomic accesses but relaxed MO is sufficient. */ + if (atomic_load_relaxed (adapt_count) > 0) +@@ -82,5 +83,6 @@ __lll_lock_elision (int *lock, short *adapt_count, EXTRAARG int pshared) + aconf.skip_lock_out_of_tbegin_retries); + + use_lock: ++#endif + return LLL_LOCK ((*lock), pshared); + } +diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c +index b74a810648..fabb03b2c4 100644 +--- a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c ++++ b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c +@@ -30,6 +30,7 @@ + int + __lll_trylock_elision (int *futex, short *adapt_count) + { ++#ifndef __SPE__ + /* Implement POSIX semantics by forbiding nesting elided trylocks. */ + __libc_tabort (_ABORT_NESTED_TRYLOCK); + +@@ -65,5 +66,6 @@ __lll_trylock_elision (int *futex, short *adapt_count) + } + + use_lock: ++#endif + return lll_trylock (*futex); + } +diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c b/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c +index dcfab199d7..14e0680ee9 100644 +--- a/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c ++++ b/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c +@@ -23,6 +23,7 @@ + int + __lll_unlock_elision (int *lock, short *adapt_count, int pshared) + { ++#ifndef __SPE__ + /* When the lock was free we're in a transaction. */ + if (*lock == 0) + __libc_tend (0); +@@ -39,5 +40,8 @@ __lll_unlock_elision (int *lock, short *adapt_count, int pshared) + + lll_unlock ((*lock), pshared); + } ++#else ++ lll_unlock ((*lock), pshared); ++#endif + return 0; + } +diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h b/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h +index 75567b2bad..8317821ab5 100644 +--- a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h ++++ b/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h +@@ -24,6 +24,49 @@ + + __BEGIN_DECLS + ++#if defined _LINUX_PTRACE_H || defined _ASM_POWERPC_PTRACE_H ++/* Do not let Linux headers macros interfere with enum __ptrace_request. */ ++# undef PTRACE_ATTACH ++# undef PTRACE_CONT ++# undef PTRACE_DETACH ++# undef PTRACE_GET_DEBUGREG ++# undef PTRACE_GETEVENTMSG ++# undef PTRACE_GETEVRREGS ++# undef PTRACE_GETFPREGS ++# undef PTRACE_GETREGS ++# undef PTRACE_GETREGS64 ++# undef PTRACE_GETREGSET ++# undef PTRACE_GETSIGINFO ++# undef PTRACE_GETSIGMASK ++# undef PTRACE_GETVRREGS ++# undef PTRACE_GETVSRREGS ++# undef PTRACE_INTERRUPT ++# undef PTRACE_KILL ++# undef PTRACE_LISTEN ++# undef PTRACE_PEEKDATA ++# undef PTRACE_PEEKSIGINFO ++# undef PTRACE_PEEKTEXT ++# undef PTRACE_POKEDATA ++# undef PTRACE_POKETEXT ++# undef PTRACE_SECCOMP_GET_FILTER ++# undef PTRACE_SEIZE ++# undef PTRACE_SET_DEBUGREG ++# undef PTRACE_SETEVRREGS ++# undef PTRACE_SETFPREGS ++# undef PTRACE_SETOPTIONS ++# undef PTRACE_SETREGS ++# undef PTRACE_SETREGS64 ++# undef PTRACE_SETREGSET ++# undef PTRACE_SETSIGINFO ++# undef PTRACE_SETSIGMASK ++# undef PTRACE_SETVRREGS ++# undef PTRACE_SETVSRREGS ++# undef PTRACE_SINGLEBLOCK ++# undef PTRACE_SINGLESTEP ++# undef PTRACE_SYSCALL ++# undef PTRACE_TRACEME ++#endif ++ + /* Type of the REQUEST argument to `ptrace.' */ + enum __ptrace_request + { +@@ -69,6 +112,22 @@ enum __ptrace_request + PTRACE_SINGLESTEP = 9, + #define PT_STEP PTRACE_SINGLESTEP + ++ /* Get all general purpose registers used by a process. */ ++ PTRACE_GETREGS = 12, ++#define PT_GETREGS PTRACE_GETREGS ++ ++ /* Set all general purpose registers used by a process. */ ++ PTRACE_SETREGS = 13, ++#define PT_SETREGS PTRACE_SETREGS ++ ++ /* Get all floating point registers used by a process. */ ++ PTRACE_GETFPREGS = 14, ++#define PT_GETFPREGS PTRACE_GETFPREGS ++ ++ /* Set all floating point registers used by a process. */ ++ PTRACE_SETFPREGS = 15, ++#define PT_SETFPREGS PTRACE_SETFPREGS ++ + /* Attach to a process that is already running. */ + PTRACE_ATTACH = 16, + #define PT_ATTACH PTRACE_ATTACH +@@ -77,10 +136,56 @@ enum __ptrace_request + PTRACE_DETACH = 17, + #define PT_DETACH PTRACE_DETACH + ++ /* Get all altivec registers used by a process. */ ++ PTRACE_GETVRREGS = 18, ++#define PT_GETVRREGS PTRACE_GETVRREGS ++ ++ /* Set all altivec registers used by a process. */ ++ PTRACE_SETVRREGS = 19, ++#define PT_SETVRREGS PTRACE_SETVRREGS ++ ++ /* Get all SPE registers used by a process. */ ++ PTRACE_GETEVRREGS = 20, ++#define PT_GETEVRREGS PTRACE_GETEVRREGS ++ ++ /* Set all SPE registers used by a process. */ ++ PTRACE_SETEVRREGS = 21, ++#define PT_SETEVRREGS PTRACE_SETEVRREGS ++ ++ /* Same as PTRACE_GETREGS except a 32-bit process will obtain ++ the full 64-bit registers. Implemented by 64-bit kernels only. */ ++ PTRACE_GETREGS64 = 22, ++#define PT_GETREGS64 PTRACE_GETREGS64 ++ ++ /* Same as PTRACE_SETREGS except a 32-bit process will set ++ the full 64-bit registers. Implemented by 64-bit kernels only. */ ++ PTRACE_SETREGS64 = 23, ++#define PT_SETREGS64 PTRACE_SETREGS64 ++ + /* Continue and stop at the next entry to or return from syscall. */ + PTRACE_SYSCALL = 24, + #define PT_SYSCALL PTRACE_SYSCALL + ++ /* Get a debug register of a process. */ ++ PTRACE_GET_DEBUGREG = 25, ++#define PT_GET_DEBUGREG PTRACE_GET_DEBUGREG ++ ++ /* Set a debug register of a process. */ ++ PTRACE_SET_DEBUGREG = 26, ++#define PT_SET_DEBUGREG PTRACE_SET_DEBUGREG ++ ++ /* Get the first 32 VSX registers of a process. */ ++ PTRACE_GETVSRREGS = 27, ++#define PT_GETVSRREGS PTRACE_GETVSRREGS ++ ++ /* Set the first 32 VSX registers of a process. */ ++ PTRACE_SETVSRREGS = 28, ++#define PT_SETVSRREGS PTRACE_SETVSRREGS ++ ++ /* Execute process until next taken branch. */ ++ PTRACE_SINGLEBLOCK = 256, ++#define PT_STEPBLOCK PTRACE_SINGLEBLOCK ++ + /* Set ptrace filter options. */ + PTRACE_SETOPTIONS = 0x4200, + #define PT_SETOPTIONS PTRACE_SETOPTIONS diff --git a/sysdeps/unix/sysv/linux/riscv/readelflib.c b/sysdeps/unix/sysv/linux/riscv/readelflib.c index 6e249ff82f..7e27e0c1d6 100644 --- a/sysdeps/unix/sysv/linux/riscv/readelflib.c @@ -1002,6 +12848,30 @@ } /* RISC-V linkers encode the floating point ABI as part of the ELF headers. */ +diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S +index 695f172c63..283aef1b30 100644 +--- a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S ++++ b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S +@@ -95,6 +95,19 @@ END(__setcontext) + + weak_alias (__setcontext, setcontext) + ++/* We add an NOP here to separate between __setcontext/__startcontext. The ++ wanted behavior that happens is: when unwinding from a function called ++ inside a makecontext() context, FDE lookup will use '&__startcontext - 1', ++ then returns NULL for no FDE found, and immediately ends the unwind, in ++ a normal fashion. ++ ++ If this NOP word does not exist, FDE lookup just repeatedly finds ++ __setcontext's FDE in an infinite loop, due to the convention of using ++ 'address - 1' for FDE lookup. Modifiying/deleting the below ++ __startcontext's FDE has no help on this. */ ++ ++ nop ++ + /* This is the helper code which gets called if a function which is + registered with 'makecontext' returns. In this case we have to + install the context listed in the uc_link element of the context diff --git a/time/time.h b/time/time.h index 49d30438f3..4b55e34402 100644 --- a/time/time.h diff -Nru glibc-2.27/debian/patches/hurd-i386/git2.25-tls.diff glibc-2.27/debian/patches/hurd-i386/git2.25-tls.diff --- glibc-2.27/debian/patches/hurd-i386/git2.25-tls.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git2.25-tls.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,43 @@ +From: Samuel Thibault +Subject: [PATCH] Fix tls support for glibc 2.25 + +* csu/libc-start.c (LIBC_START_MAIN) [__GNU__]: Do not call +__libc_setup_tls. +* sysdeps/mach/hurd/i386/init-first.c (init): Call __libc_setup_tls. + +Signed-off-by: Samuel Thibault + +--- + csu/libc-start.c | 2 ++ + sysdeps/mach/hurd/i386/init-first.c | 3 ++- + 2 files changed, 4 insertions(+), 1 deletion(-) + +Index: glibc-2.26/csu/libc-start.c +=================================================================== +--- glibc-2.26.orig/csu/libc-start.c ++++ glibc-2.26/csu/libc-start.c +@@ -193,8 +193,10 @@ LIBC_START_MAIN (int (*main) (int, char + /* Perform IREL{,A} relocations. */ + ARCH_SETUP_IREL (); + ++#ifndef __GNU__ + /* The stack guard goes into the TCB, so initialize it early. */ + __libc_setup_tls (); ++#endif + + /* In some architectures, IREL{,A} relocations happen after TLS setup in + order to let IFUNC resolvers benefit from TCB information, e.g. powerpc's +Index: glibc-2.26/sysdeps/mach/hurd/i386/init-first.c +=================================================================== +--- glibc-2.26.orig/sysdeps/mach/hurd/i386/init-first.c ++++ glibc-2.26/sysdeps/mach/hurd/i386/init-first.c +@@ -189,7 +189,8 @@ init (int *data) + assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0); + } + +- /* We need to setup TLS before starting the signal thread. */ ++ /* We need to setup TLS before starting the signal thread and set stack guard. */ ++ __libc_setup_tls (); + extern void __pthread_initialize_minimal (void); + if (__pthread_initialize_minimal != NULL) + __pthread_initialize_minimal (); diff -Nru glibc-2.27/debian/patches/hurd-i386/git-_dl_random.diff glibc-2.27/debian/patches/hurd-i386/git-_dl_random.diff --- glibc-2.27/debian/patches/hurd-i386/git-_dl_random.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-_dl_random.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,28 @@ +From: Thomas Schwinge +Subject: [PATCH] _dl_random + +_dl_random + +--- + + /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `security_init': + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/rtld.c:844: undefined reference to `_dl_random' + /media/data/home/thomas/tmp/gnu-2/bin/../lib/gcc/i586-pc-gnu/4.3.3/../../../../i586-pc-gnu/bin/ld: /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: relocation R_386_GOTOFF against undefined hidden symbol `_dl_random' can not be used when making a shared object + /media/data/home/thomas/tmp/gnu-2/bin/../lib/gcc/i586-pc-gnu/4.3.3/../../../../i586-pc-gnu/bin/ld: final link failed: Bad value + collect2: ld returned 1 exit status + make[2]: *** [/media/Stalin/tmp/glibc.hurd.gnu-2/elf/ld.so] Error 1 + + sysdeps/mach/hurd/dl-sysdep.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/sysdeps/mach/hurd/dl-sysdep.c ++++ b/sysdeps/mach/hurd/dl-sysdep.c +@@ -61,6 +61,8 @@ + hp_timing_t _dl_cpuclock_offset; + #endif + ++/* TODO: this is never properly initialized in here. */ ++void *_dl_random attribute_relro = NULL; + + struct hurd_startup_data *_dl_hurd_data; + diff -Nru glibc-2.27/debian/patches/hurd-i386/git-exec-static.diff glibc-2.27/debian/patches/hurd-i386/git-exec-static.diff --- glibc-2.27/debian/patches/hurd-i386/git-exec-static.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-exec-static.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,23 @@ +From: Samuel Thibault +Subject: [PATCH] Fix boot with statically-linked exec server. + +* sysdeps/mach/hurd/i386/init-first.c (init): Also find ELF headers by oneself +when the pointer given in D is nul (as set by ext2fs). + +Signed-off-by: Samuel Thibault + +--- + sysdeps/mach/hurd/i386/init-first.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sysdeps/mach/hurd/i386/init-first.c ++++ b/sysdeps/mach/hurd/i386/init-first.c +@@ -168,7 +168,7 @@ init (int *data) + /* If we are the bootstrap task started by the kernel, + then after the environment pointers there is no Hurd + data block; the argument strings start there. */ +- if ((void *) d == argv[0]) ++ if ((void *) d == argv[0] || !d->phdr) + { + /* With a new enough linker (binutils-2.23 or better), + the magic __ehdr_start symbol will be available and diff -Nru glibc-2.27/debian/patches/hurd-i386/git-futimens.diff glibc-2.27/debian/patches/hurd-i386/git-futimens.diff --- glibc-2.27/debian/patches/hurd-i386/git-futimens.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-futimens.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,69 @@ +From: Samuel Thibault +Subject: [PATCH] Add futimens support + +* sysdeps/mach/hurd/futimens.c: New file. + +Signed-off-by: Samuel Thibault + +--- + sysdeps/mach/hurd/futimens.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/sysdeps/mach/hurd/futimens.c b/sysdeps/mach/hurd/futimens.c +new file mode 100644 +index 0000000..218779d +--- /dev/null ++++ b/sysdeps/mach/hurd/futimens.c +@@ -0,0 +1,50 @@ ++/* futimes -- change access and modification times of open file. Hurd version. ++ Copyright (C) 2002-2014 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++/* Change the access time of FD to TSP[0] and ++ the modification time of FD to TSP[1]. */ ++int ++__futimens (int fd, const struct timespec tsp[2]) ++{ ++ time_value_t atime, mtime; ++ error_t err; ++ ++ if (tsp == NULL) ++ { ++ /* Setting the number of microseconds to `-1' tells the ++ underlying filesystems to use the current time. */ ++ atime.microseconds = mtime.microseconds = -1; ++ } ++ else ++ { ++ atime.seconds = tsp[0].tv_sec; ++ atime.microseconds = tsp[0].tv_nsec / 1000; ++ mtime.seconds = tsp[1].tv_sec; ++ mtime.microseconds = tsp[1].tv_nsec / 1000; ++ } ++ ++ err = HURD_DPORT_USE (fd, __file_utimes (port, atime, mtime)); ++ return err ? __hurd_dfail (fd, err) : 0; ++} ++weak_alias (__futimens, futimens) +-- +tg: (9a079e2..) futimens (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-gai_misc.diff glibc-2.27/debian/patches/hurd-i386/git-gai_misc.diff --- glibc-2.27/debian/patches/hurd-i386/git-gai_misc.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-gai_misc.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,63 @@ +From: Samuel Thibault +Subject: [PATCH] t/gai_misc + +Add a hurd version of threaded gai_misc.h + +Signed-off-by: Samuel Thibault + +--- + sysdeps/mach/hurd/gai_misc.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 44 insertions(+) + +diff --git a/sysdeps/mach/hurd/gai_misc.h b/sysdeps/mach/hurd/gai_misc.h +new file mode 100644 +index 0000000..ee8117f +--- /dev/null ++++ b/sysdeps/mach/hurd/gai_misc.h +@@ -0,0 +1,44 @@ ++#include ++#include ++ ++#define gai_start_notify_thread __gai_start_notify_thread ++#define gai_create_helper_thread __gai_create_helper_thread ++ ++extern inline void ++__gai_start_notify_thread (void) ++{ ++ sigset_t ss; ++ sigemptyset (&ss); ++ sigprocmask(SIG_SETMASK, &ss, NULL); ++} ++ ++extern inline int ++__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), ++ void *arg) ++{ ++ pthread_attr_t attr; ++ ++ /* Make sure the thread is created detached. */ ++ pthread_attr_init (&attr); ++ pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); ++ ++ /* The helper thread needs only very little resources. */ ++ (void) pthread_attr_setstacksize (&attr, 0x10000); ++ ++ /* Block all signals in the helper thread. To do this thoroughly we ++ temporarily have to block all signals here. */ ++ sigset_t ss; ++ sigset_t oss; ++ sigfillset (&ss); ++ sigprocmask(SIG_SETMASK, &ss, &oss); ++ ++ int ret = pthread_create (threadp, &attr, tf, arg); ++ ++ /* Restore the signal mask. */ ++ sigprocmask(SIG_SETMASK, &oss, NULL); ++ ++ (void) pthread_attr_destroy (&attr); ++ return ret; ++} ++ ++#include_next +-- +tg: (9a079e2..) t/gai_misc (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-grantpt.diff glibc-2.27/debian/patches/hurd-i386/git-grantpt.diff --- glibc-2.27/debian/patches/hurd-i386/git-grantpt.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-grantpt.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,70 @@ +From: Thomas Schwinge +Subject: [PATCH] t/grantpt + + /media/Stalin/tmp/glibc.hurd.gnu-2/libc_pic.os: In function `pts_name': + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/login/../sysdeps/unix/grantpt.c:52: undefined reference to `__ptsname_internal' + collect2: ld returned 1 exit status + make[1]: *** [/media/Stalin/tmp/glibc.hurd.gnu-2/libc.so] Error 1 + +Cf. aa9890239a2aef81e64f3f22a31c7e01b6501f69 + +Need any of the checks (stat, etc.) that Linux' __ptsname_internal does? + +Implement close_all_fds as in 139ee080b6b428240bf49f3e6361f3ac729f891a? + +--- + sysdeps/mach/hurd/ptsname.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +diff --git a/sysdeps/mach/hurd/ptsname.c b/sysdeps/mach/hurd/ptsname.c +index 2978394eb5..73ec57dd70 100644 +--- a/sysdeps/mach/hurd/ptsname.c ++++ b/sysdeps/mach/hurd/ptsname.c +@@ -18,6 +18,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -38,11 +39,9 @@ ptsname (int fd) + } + + +-/* Store at most BUFLEN characters of the pathname of the slave pseudo +- terminal associated with the master FD is open on in BUF. +- Return 0 on success, otherwise an error number. */ ++/* We don't need STP, but fill it for conformity with the Linux version... */ + int +-__ptsname_r (int fd, char *buf, size_t buflen) ++__ptsname_internal (int fd, char *buf, size_t buflen, struct stat64 *stp) + { + string_t peername; + size_t len; +@@ -58,7 +57,23 @@ __ptsname_r (int fd, char *buf, size_t buflen) + return ERANGE; + } + ++ if (stp) ++ { ++ if (__xstat64 (_STAT_VER, peername, stp) < 0) ++ return errno; ++ } ++ + memcpy (buf, peername, len); + return 0; + } ++ ++ ++/* Store at most BUFLEN characters of the pathname of the slave pseudo ++ terminal associated with the master FD is open on in BUF. ++ Return 0 on success, otherwise an error number. */ ++int ++__ptsname_r (int fd, char *buf, size_t buflen) ++{ ++ return __ptsname_internal (fd, buf, buflen, NULL); ++} + weak_alias (__ptsname_r, ptsname_r) +-- +tg: (7bb5f8a836..) t/grantpt (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-gscope.diff glibc-2.27/debian/patches/hurd-i386/git-gscope.diff --- glibc-2.27/debian/patches/hurd-i386/git-gscope.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-gscope.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,88 @@ +From: Thomas Schwinge +Subject: [PATCH] gscope + +Minimal gscope stuff. + +glibc-2.8/debian/patches/hurd-i386/local-gscope.diff 3085 + +Written by Samuel Thibault. + +--- + +I think that's the corresponding error message: + + /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `add_dependency': + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:106: undefined reference to `atomic_forced_read' + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:109: undefined reference to `atomic_read_barrier' + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:113: undefined reference to `atomic_forced_read' + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:141: undefined reference to `THREAD_GSCOPE_RESET_FLAG' + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:147: undefined reference to `atomic_forced_read' + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:284: undefined reference to `THREAD_GSCOPE_SET_FLAG' + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:261: undefined reference to `atomic_write_barrier' + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:250: undefined reference to `atomic_write_barrier' + /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `add_to_global': + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-open.c:162: undefined reference to `atomic_write_barrier' + /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `dl_open_worker': + /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-open.c:478: undefined reference to `atomic_write_barrier' + collect2: ld returned 1 exit status + make[2]: *** [/media/Stalin/tmp/glibc.hurd.gnu-2/elf/ld.so] Error 1 + + elf/dl-support.c | 1 + + sysdeps/generic/ldsodefs.h | 1 + + sysdeps/mach/hurd/sysdep-cancel.h | 9 +++++++++ + sysdeps/mach/hurd/tls.h | 13 +++++++++++++ + 4 files changed, 24 insertions(+) + +--- a/elf/dl-support.c ++++ b/elf/dl-support.c +@@ -196,6 +196,7 @@ int (*_dl_make_stack_executable_hook) (v + /* Function in libpthread to wait for termination of lookups. */ + void (*_dl_wait_lookup_done) (void); + ++int volatile _dl_thread_gscope_count; + struct dl_scope_free_list *_dl_scope_free_list; + + #ifdef NEED_DL_SYSINFO +--- a/sysdeps/generic/ldsodefs.h ++++ b/sysdeps/generic/ldsodefs.h +@@ -409,6 +409,7 @@ struct rtld_global + size_t count; + void *list[50]; + } *_dl_scope_free_list; ++ EXTERN volatile int _dl_thread_gscope_count; + #ifdef SHARED + }; + # define __rtld_global_attribute__ +--- /dev/null ++++ b/sysdeps/mach/hurd/sysdep-cancel.h +@@ -0,0 +1,9 @@ ++#include ++ ++/* Always multi-thread (since there's at least the sig handler), but no ++ handling enabled. */ ++#define SINGLE_THREAD_P (0) ++#define RTLD_SINGLE_THREAD_P (0) ++#define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */ ++#define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */ ++#define LIBC_CANCEL_HANDLED() /* Nothing. */ +--- a/sysdeps/mach/hurd/tls.h ++++ b/sysdeps/mach/hurd/tls.h +@@ -75,5 +75,18 @@ typedef struct + + #endif /* !ASSEMBLER */ + ++#ifndef __ASSEMBLER__ ++#include ++#include ++/* Temporary poor-man's global scope switch support: just busy-waits */ ++#define THREAD_GSCOPE_SET_FLAG() \ ++ asm volatile ("lock incl %0":"=m"(GL(dl_thread_gscope_count))) ++#define THREAD_GSCOPE_RESET_FLAG() \ ++ asm volatile ("lock decl %0":"=m"(GL(dl_thread_gscope_count))) ++#define THREAD_GSCOPE_WAIT() \ ++ while (GL(dl_thread_gscope_count)) { \ ++ __swtch_pri (0); \ ++ } ++#endif + + #endif /* tls.h */ diff -Nru glibc-2.27/debian/patches/hurd-i386/git-hurd-abilist.diff glibc-2.27/debian/patches/hurd-i386/git-hurd-abilist.diff --- glibc-2.27/debian/patches/hurd-i386/git-hurd-abilist.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-hurd-abilist.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,23 @@ +2016-02-29 Aurelien Jarno + + * sysdeps/generic/libnsl.abilist: New file. + * sysdeps/generic/libutil.abilist: New file. + * sysdeps/mach/hurd/libhurduser.abilist: New file. + * sysdeps/mach/libmachuser.abilist: New file. + +--- /dev/null ++++ b/sysdeps/generic/libnsl.abilist +@@ -0,0 +1 @@ ++ +--- /dev/null ++++ b/sysdeps/generic/libutil.abilist +@@ -0,0 +1 @@ ++ +--- /dev/null ++++ b/sysdeps/mach/hurd/libhurduser.abilist +@@ -0,0 +1 @@ ++ +--- /dev/null ++++ b/sysdeps/mach/libmachuser.abilist +@@ -0,0 +1 @@ ++ diff -Nru glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-mutex.diff glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-mutex.diff --- glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-mutex.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-mutex.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,1378 @@ +commit f6839074d25aba7e93b8672a9ed9893c0baa5e3d +Author: Agustina Arzille +Date: Mon Oct 17 00:56:58 2016 +0200 + + Make pthread_mutex use gsync + +diff --git a/libpthread/include/pthread/pthread.h b/libpthread/include/pthread/pthread.h +index 350a673..ad34e5d 100644 +--- a/libpthread/include/pthread/pthread.h ++++ b/libpthread/include/pthread/pthread.h +@@ -271,6 +271,11 @@ extern pthread_t pthread_self (void) __THROW; + #define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_TIMED_NP + #endif + ++#ifdef __USE_XOPEN2K ++#define PTHREAD_MUTEX_STALLED __PTHREAD_MUTEX_STALLED ++#define PTHREAD_MUTEX_ROBUST __PTHREAD_MUTEX_ROBUST ++#endif ++ + #include + + /* Initialize the mutex attribute object in *ATTR to the default +@@ -399,6 +404,18 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, + __THROW __nonnull ((1, 3)); + #endif + ++#ifdef __USE_XOPEN2K8 ++ ++/* Declare the state protected by robust mutex MTXP as consistent. */ ++extern int pthread_mutex_consistent (pthread_mutex_t *__mtxp) ++ __THROW __nonnull ((1)); ++ ++# ifdef __USE_GNU ++extern int pthread_mutex_consistent_np (pthread_mutex_t *__mtxp) ++ __THROW __nonnull ((1)); ++# endif ++#endif ++ + + + /* Condition attributes. */ +diff --git a/libpthread/include/pthread/pthreadtypes.h b/libpthread/include/pthread/pthreadtypes.h +index 33bd009..d8aed4d 100644 +--- a/libpthread/include/pthread/pthreadtypes.h ++++ b/libpthread/include/pthread/pthreadtypes.h +@@ -77,6 +77,12 @@ enum __pthread_mutex_type + __PTHREAD_MUTEX_RECURSIVE + }; + ++enum __pthread_mutex_robustness ++ { ++ __PTHREAD_MUTEX_STALLED, ++ __PTHREAD_MUTEX_ROBUST = 0x100 ++ }; ++ + #include + typedef struct __pthread_mutexattr pthread_mutexattr_t; + +diff --git a/libpthread/sysdeps/mach/hurd/bits/mutex.h b/libpthread/sysdeps/mach/hurd/bits/mutex.h +new file mode 100644 +index 0000000..a52a2ad +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/bits/mutex.h +@@ -0,0 +1,64 @@ ++/* Mutex type. Generic version. ++ ++ Copyright (C) 2000-2016 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _BITS_MUTEX_H ++ ++#ifndef __need_pthread_mutex ++# define _BITS_MUTEX_H 1 ++#endif ++ ++#ifndef __pthread_mutex_defined ++# if defined __need_pthread_mutex || defined _BITS_MUTEX_H ++# undef __need_pthread_mutex ++# define __pthread_mutex_defined ++ ++# include ++ ++/* User visible part of a mutex. */ ++struct __pthread_mutex ++{ ++ unsigned int __lock; ++ unsigned int __owner_id; ++ unsigned int __cnt; ++ int __shpid; ++ int __type; ++ int __flags; ++ unsigned int __reserved1; ++ unsigned int __reserved2; ++}; ++ ++/* Static mutex initializers. */ ++#define __PTHREAD_MUTEX_INITIALIZER \ ++ { 0, 0, 0, 0, __PTHREAD_MUTEX_TIMED, 0, 0, 0 } ++ ++/* The +1 is to mantain binary compatibility with the old ++ * libpthread implementation. */ ++#define __PTHREAD_ERRORCHECK_MUTEX_INITIALIZER \ ++ { 0, 0, 0, 0, __PTHREAD_MUTEX_ERRORCHECK + 1, 0, 0, 0 } ++ ++#define __PTHREAD_RECURSIVE_MUTEX_INITIALIZER \ ++ { 0, 0, 0, 0, __PTHREAD_MUTEX_RECURSIVE + 1, 0, 0, 0 } ++ ++# endif ++#endif /* Not __pthread_mutex_defined. */ ++ ++#endif /* bits/mutex.h */ +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-destroy.c b/libpthread/sysdeps/mach/hurd/pt-mutex-destroy.c +new file mode 100644 +index 0000000..2c6acd1 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-destroy.c +@@ -0,0 +1,36 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int _pthread_mutex_destroy (pthread_mutex_t *mtxp) ++{ ++ atomic_read_barrier (); ++ if (*(volatile unsigned int *)&mtxp->__lock != 0) ++ return (EBUSY); ++ ++ mtxp->__type = -1; ++ return (0); ++} ++ ++strong_alias (_pthread_mutex_destroy, pthread_mutex_destroy) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-getprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutex-getprioceiling.c +new file mode 100644 +index 0000000..8a8a080 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-getprioceiling.c +@@ -0,0 +1,32 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutex_getprioceiling (const pthread_mutex_t *mtxp, int *clp) ++{ ++ (void)mtxp; (void)clp; ++ return (ENOSYS); ++} ++ ++stub_warning (pthread_mutex_getprioceiling) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-init.c b/libpthread/sysdeps/mach/hurd/pt-mutex-init.c +new file mode 100644 +index 0000000..af9ed7e +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-init.c +@@ -0,0 +1,55 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++static const pthread_mutexattr_t dfl_attr = ++{ ++ .__prioceiling = 0, ++ .__protocol = PTHREAD_PRIO_NONE, ++ .__pshared = PTHREAD_PROCESS_PRIVATE, ++ .__mutex_type = __PTHREAD_MUTEX_TIMED ++}; ++ ++int _pthread_mutex_init (pthread_mutex_t *mtxp, ++ const pthread_mutexattr_t *attrp) ++{ ++ if (attrp == NULL) ++ attrp = &dfl_attr; ++ ++ mtxp->__flags = (attrp->__pshared == PTHREAD_PROCESS_SHARED ? ++ GSYNC_SHARED : 0) | ((attrp->__prioceiling & PTHREAD_MUTEX_ROBUST) ? ++ PTHREAD_MUTEX_ROBUST : 0); ++ ++ mtxp->__type = attrp->__mutex_type + ++ (attrp->__mutex_type != __PTHREAD_MUTEX_TIMED); ++ ++ mtxp->__owner_id = 0; ++ mtxp->__shpid = 0; ++ mtxp->__cnt = 0; ++ mtxp->__lock = 0; ++ ++ return (0); ++} ++ ++strong_alias (_pthread_mutex_init, pthread_mutex_init) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-lock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-lock.c +new file mode 100644 +index 0000000..5d3c958 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-lock.c +@@ -0,0 +1,79 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int __pthread_mutex_lock (pthread_mutex_t *mtxp) ++{ ++ struct __pthread *self; ++ int flags = mtxp->__flags & GSYNC_SHARED; ++ int ret = 0; ++ ++ switch (MTX_TYPE (mtxp)) ++ { ++ case PT_MTX_NORMAL: ++ lll_lock (&mtxp->__lock, flags); ++ break; ++ ++ case PT_MTX_RECURSIVE: ++ self = _pthread_self (); ++ if (mtx_owned_p (mtxp, self, flags)) ++ { ++ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) ++ return (EAGAIN); ++ ++ ++mtxp->__cnt; ++ return (ret); ++ } ++ ++ lll_lock (&mtxp->__lock, flags); ++ mtx_set_owner (mtxp, self, flags); ++ mtxp->__cnt = 1; ++ break; ++ ++ case PT_MTX_ERRORCHECK: ++ self = _pthread_self (); ++ if (mtx_owned_p (mtxp, self, flags)) ++ return (EDEADLK); ++ ++ lll_lock (&mtxp->__lock, flags); ++ mtx_set_owner (mtxp, self, flags); ++ break; ++ ++ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: ++ self = _pthread_self (); ++ ROBUST_LOCK (self, mtxp, __lll_robust_lock, flags); ++ break; ++ ++ default: ++ ret = EINVAL; ++ break; ++ } ++ ++ return (ret); ++} ++ ++strong_alias (__pthread_mutex_lock, _pthread_mutex_lock) ++strong_alias (__pthread_mutex_lock, pthread_mutex_lock) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-setprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutex-setprioceiling.c +new file mode 100644 +index 0000000..b88917d +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-setprioceiling.c +@@ -0,0 +1,32 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutex_setprioceiling (pthread_mutex_t *mtxp, int cl, int *prp) ++{ ++ (void)mtxp; (void)cl; (void)prp; ++ return (ENOSYS); ++} ++ ++stub_warning (pthread_mutex_setprioceiling) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-timedlock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-timedlock.c +new file mode 100644 +index 0000000..3fdd5da +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-timedlock.c +@@ -0,0 +1,80 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutex_timedlock (pthread_mutex_t *mtxp, ++ const struct timespec *tsp) ++{ ++ struct __pthread *self; ++ int ret, flags = mtxp->__flags & GSYNC_SHARED; ++ ++ switch (MTX_TYPE (mtxp)) ++ { ++ case PT_MTX_NORMAL: ++ ret = lll_abstimed_lock (&mtxp->__lock, tsp, flags); ++ break; ++ ++ case PT_MTX_RECURSIVE: ++ self = _pthread_self (); ++ if (mtx_owned_p (mtxp, self, flags)) ++ { ++ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) ++ return (EAGAIN); ++ ++ ++mtxp->__cnt; ++ ret = 0; ++ } ++ else if ((ret = lll_abstimed_lock (&mtxp->__lock, ++ tsp, flags)) == 0) ++ { ++ mtx_set_owner (mtxp, self, flags); ++ mtxp->__cnt = 1; ++ } ++ ++ break; ++ ++ case PT_MTX_ERRORCHECK: ++ self = _pthread_self (); ++ if (mtx_owned_p (mtxp, self, flags)) ++ ret = EDEADLK; ++ else if ((ret = lll_abstimed_lock (&mtxp->__lock, ++ tsp, flags)) == 0) ++ mtx_set_owner (mtxp, self, flags); ++ ++ break; ++ ++ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: ++ self = _pthread_self (); ++ ROBUST_LOCK (self, mtxp, lll_robust_abstimed_lock, tsp, flags); ++ break; ++ ++ default: ++ ret = EINVAL; ++ break; ++ } ++ ++ return (ret); ++} +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-transfer-np.c b/libpthread/sysdeps/mach/hurd/pt-mutex-transfer-np.c +new file mode 100644 +index 0000000..410474f +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-transfer-np.c +@@ -0,0 +1,74 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int __pthread_mutex_transfer_np (pthread_mutex_t *mtxp, pthread_t th) ++{ ++ struct __pthread *self = _pthread_self (); ++ struct __pthread *pt = __pthread_getid (th); ++ ++ if (!pt) ++ return (ESRCH); ++ else if (pt == self) ++ return (0); ++ ++ int ret = 0; ++ int flags = mtxp->__flags & GSYNC_SHARED; ++ ++ switch (MTX_TYPE (mtxp)) ++ { ++ case PT_MTX_NORMAL: ++ break; ++ ++ case PT_MTX_RECURSIVE: ++ case PT_MTX_ERRORCHECK: ++ if (!mtx_owned_p (mtxp, self, flags)) ++ ret = EPERM; ++ else ++ mtx_set_owner (mtxp, pt, flags); ++ ++ break; ++ ++ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: ++ /* Note that this can be used to transfer an inconsistent ++ * mutex as well. The new owner will still have the same ++ * flags as the original. */ ++ if (mtxp->__owner_id != self->thread || ++ (int)(mtxp->__lock & LLL_OWNER_MASK) != __getpid ()) ++ ret = EPERM; ++ else ++ mtxp->__owner_id = pt->thread; ++ ++ break; ++ ++ default: ++ ret = EINVAL; ++ } ++ ++ return (ret); ++} ++ ++weak_alias (__pthread_mutex_transfer_np, pthread_mutex_transfer_np) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c +new file mode 100644 +index 0000000..6680094 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c +@@ -0,0 +1,77 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int __pthread_mutex_trylock (pthread_mutex_t *mtxp) ++{ ++ struct __pthread *self; ++ int ret; ++ ++ switch (MTX_TYPE (mtxp)) ++ { ++ case PT_MTX_NORMAL: ++ ret = lll_trylock (&mtxp->__lock); ++ break; ++ ++ case PT_MTX_RECURSIVE: ++ self = _pthread_self (); ++ if (mtx_owned_p (mtxp, self, mtxp->__flags)) ++ { ++ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) ++ return (EAGAIN); ++ ++ ++mtxp->__cnt; ++ ret = 0; ++ } ++ else if ((ret = lll_trylock (&mtxp->__lock)) == 0) ++ { ++ mtx_set_owner (mtxp, self, mtxp->__flags); ++ mtxp->__cnt = 1; ++ } ++ ++ break; ++ ++ case PT_MTX_ERRORCHECK: ++ self = _pthread_self (); ++ if ((ret = lll_trylock (&mtxp->__lock)) == 0) ++ mtx_set_owner (mtxp, self, mtxp->__flags); ++ break; ++ ++ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: ++ self = _pthread_self (); ++ ROBUST_LOCK (self, mtxp, __lll_robust_trylock); ++ break; ++ ++ default: ++ ret = EINVAL; ++ break; ++ } ++ ++ return (ret); ++} ++ ++strong_alias (__pthread_mutex_trylock, _pthread_mutex_trylock) ++strong_alias (__pthread_mutex_trylock, pthread_mutex_trylock) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-unlock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-unlock.c +new file mode 100644 +index 0000000..071f622 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-unlock.c +@@ -0,0 +1,90 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int __pthread_mutex_unlock (pthread_mutex_t *mtxp) ++{ ++ struct __pthread *self; ++ int ret = 0, flags = mtxp->__flags & GSYNC_SHARED; ++ ++ switch (MTX_TYPE (mtxp)) ++ { ++ case PT_MTX_NORMAL: ++ lll_unlock (&mtxp->__lock, flags); ++ break; ++ ++ case PT_MTX_RECURSIVE: ++ self = _pthread_self (); ++ if (!mtx_owned_p (mtxp, self, flags)) ++ ret = EPERM; ++ else if (--mtxp->__cnt == 0) ++ { ++ mtxp->__owner_id = mtxp->__shpid = 0; ++ lll_unlock (&mtxp->__lock, flags); ++ } ++ ++ break; ++ ++ case PT_MTX_ERRORCHECK: ++ self = _pthread_self (); ++ if (!mtx_owned_p (mtxp, self, flags)) ++ ret = EPERM; ++ else ++ { ++ mtxp->__owner_id = mtxp->__shpid = 0; ++ lll_unlock (&mtxp->__lock, flags); ++ } ++ ++ break; ++ ++ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: ++ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: ++ self = _pthread_self (); ++ if (mtxp->__owner_id == NOTRECOVERABLE_ID) ++ ; /* Nothing to do. */ ++ else if (mtxp->__owner_id != self->thread || ++ (int)(mtxp->__lock & LLL_OWNER_MASK) != __getpid ()) ++ ret = EPERM; ++ else if (--mtxp->__cnt == 0) ++ { ++ /* Release the lock. If it's in an inconsistent ++ * state, mark it as irrecoverable. */ ++ mtxp->__owner_id = (mtxp->__lock & LLL_DEAD_OWNER) ? ++ NOTRECOVERABLE_ID : 0; ++ __lll_robust_unlock (&mtxp->__lock, flags); ++ } ++ ++ break; ++ ++ default: ++ ret = EINVAL; ++ break; ++ } ++ ++ return (ret); ++} ++ ++strong_alias (__pthread_mutex_unlock, _pthread_mutex_unlock) ++strong_alias (__pthread_mutex_unlock, pthread_mutex_unlock) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-destroy.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-destroy.c +new file mode 100644 +index 0000000..ad711ac +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-destroy.c +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int __pthread_mutexattr_destroy (pthread_mutexattr_t *attrp) ++{ ++ (void)attrp; ++ return (0); ++} ++weak_alias (__pthread_mutexattr_destroy, pthread_mutexattr_destroy) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprioceiling.c +new file mode 100644 +index 0000000..bcfc8c8 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprioceiling.c +@@ -0,0 +1,32 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *ap, int *clp) ++{ ++ (void)ap; (void)clp; ++ return (ENOSYS); ++} ++ ++stub_warning (pthread_mutexattr_getprioceiling) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprotocol.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprotocol.c +new file mode 100644 +index 0000000..cb94424 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprotocol.c +@@ -0,0 +1,30 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *attrp, int *ptp) ++{ ++ *ptp = attrp->__protocol; ++ return (0); ++} +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getpshared.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getpshared.c +new file mode 100644 +index 0000000..7639528 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getpshared.c +@@ -0,0 +1,30 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_getpshared (const pthread_mutexattr_t *attrp, int *outp) ++{ ++ *outp = attrp->__pshared; ++ return (0); ++} +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-gettype.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-gettype.c +new file mode 100644 +index 0000000..746f628 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-gettype.c +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_gettype (const pthread_mutexattr_t *attrp, int *outp) ++{ ++ *outp = attrp->__mutex_type; ++ return (0); ++} ++ +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-init.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-init.c +new file mode 100644 +index 0000000..4cac661 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-init.c +@@ -0,0 +1,39 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++static const pthread_mutexattr_t dfl_attr = ++{ ++ .__prioceiling = 0, ++ .__protocol = PTHREAD_PRIO_NONE, ++ .__pshared = PTHREAD_PROCESS_PRIVATE, ++ .__mutex_type = __PTHREAD_MUTEX_TIMED ++}; ++ ++int __pthread_mutexattr_init (pthread_mutexattr_t *attrp) ++{ ++ *attrp = dfl_attr; ++ return (0); ++} ++weak_alias (__pthread_mutexattr_init, pthread_mutexattr_init) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprioceiling.c +new file mode 100644 +index 0000000..d399050 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprioceiling.c +@@ -0,0 +1,32 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *attrp, int cl) ++{ ++ (void)attrp; (void)cl; ++ return (ENOSYS); ++} ++ ++stub_warning (pthread_mutexattr_setprioceiling) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprotocol.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprotocol.c +new file mode 100644 +index 0000000..9f7f152 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprotocol.c +@@ -0,0 +1,32 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_setprotocol (pthread_mutexattr_t *attrp, int proto) ++{ ++ (void)attrp; ++ return (proto == PTHREAD_PRIO_NONE ? 0 : ++ proto != PTHREAD_PRIO_INHERIT && ++ proto != PTHREAD_PRIO_PROTECT ? EINVAL : ENOTSUP); ++} +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setpshared.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setpshared.c +new file mode 100644 +index 0000000..c10dfa0 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setpshared.c +@@ -0,0 +1,34 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_setpshared (pthread_mutexattr_t *attrp, int pshared) ++{ ++ if (pshared != PTHREAD_PROCESS_PRIVATE && ++ pshared != PTHREAD_PROCESS_SHARED) ++ return (EINVAL); ++ ++ attrp->__pshared = pshared; ++ return (0); ++} +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-settype.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-settype.c +new file mode 100644 +index 0000000..67ed4f5 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-settype.c +@@ -0,0 +1,34 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int __pthread_mutexattr_settype (pthread_mutexattr_t *attrp, int type) ++{ ++ if (type < 0 || type > __PTHREAD_MUTEX_RECURSIVE) ++ return (EINVAL); ++ ++ attrp->__mutex_type = type; ++ return (0); ++} ++weak_alias (__pthread_mutexattr_settype, pthread_mutexattr_settype) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr.c +new file mode 100644 +index 0000000..40a8c17 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr.c +@@ -0,0 +1 @@ ++/* empty */ +diff --git a/libpthread/Makefile b/libpthread/Makefile +index 9707f57..776b95d 100644 +--- a/libpthread/Makefile ++++ b/libpthread/Makefile +@@ -87,12 +87,14 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \ + pt-mutexattr-getpshared pt-mutexattr-gettype \ + pt-mutexattr-setprioceiling pt-mutexattr-setprotocol \ + pt-mutexattr-setpshared pt-mutexattr-settype \ ++ pt-mutexattr-getrobust pt-mutexattr-setrobust \ + \ + pt-mutex-init pt-mutex-destroy \ + pt-mutex-lock pt-mutex-trylock pt-mutex-timedlock \ + pt-mutex-unlock \ + pt-mutex-transfer-np \ + pt-mutex-getprioceiling pt-mutex-setprioceiling \ ++ pt-mutex-consistent \ + \ + pt-rwlock-attr \ + pt-rwlockattr-init pt-rwlockattr-destroy \ +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-consistent.c b/libpthread/sysdeps/mach/hurd/pt-mutex-consistent.c +new file mode 100644 +index 0000000..28e9e4a +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-consistent.c +@@ -0,0 +1,45 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutex_consistent (pthread_mutex_t *mtxp) ++{ ++ int ret = EINVAL; ++ unsigned int val = mtxp->__lock; ++ ++ if ((mtxp->__flags & PTHREAD_MUTEX_ROBUST) != 0 && ++ (val & LLL_DEAD_OWNER) != 0 && ++ atomic_compare_and_exchange_bool_acq (&mtxp->__lock, ++ __getpid () | LLL_WAITERS, val) == 0) ++ { ++ /* The mutex is now ours, and it's consistent. */ ++ mtxp->__owner_id = _pthread_self()->thread; ++ mtxp->__cnt = 1; ++ ret = 0; ++ } ++ ++ return (ret); ++} ++ ++weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex.h b/libpthread/sysdeps/mach/hurd/pt-mutex.h +new file mode 100644 +index 0000000..c67453e +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex.h +@@ -0,0 +1,92 @@ ++/* Internal definitions for pthreads library. ++ Copyright (C) 2016 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Agustina Arzille , 2016. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _PT_MUTEX_H ++#define _PT_MUTEX_H 1 ++ ++/* Special ID used to signal an unrecoverable robust mutex. */ ++#define NOTRECOVERABLE_ID (1U << 31) ++ ++/* Common path for robust mutexes. Assumes the variable 'ret' ++ * is bound in the function this is called from. */ ++#define ROBUST_LOCK(self, mtxp, cb, ...) \ ++ if (mtxp->__owner_id == NOTRECOVERABLE_ID) \ ++ return (ENOTRECOVERABLE); \ ++ else if (mtxp->__owner_id == self->thread && \ ++ __getpid () == (int)(mtxp->__lock & LLL_OWNER_MASK)) \ ++ { \ ++ if (mtxp->__type == PT_MTX_RECURSIVE) \ ++ { \ ++ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) \ ++ return (EAGAIN); \ ++ \ ++ ++mtxp->__cnt; \ ++ return (0); \ ++ } \ ++ else if (mtxp->__type == PT_MTX_ERRORCHECK) \ ++ return (EDEADLK); \ ++ } \ ++ \ ++ ret = cb (&mtxp->__lock, ##__VA_ARGS__); \ ++ if (ret == 0 || ret == EOWNERDEAD) \ ++ { \ ++ if (mtxp->__owner_id == ENOTRECOVERABLE) \ ++ ret = ENOTRECOVERABLE; \ ++ else \ ++ { \ ++ mtxp->__owner_id = self->thread; \ ++ mtxp->__cnt = 1; \ ++ if (ret == EOWNERDEAD) \ ++ { \ ++ mtxp->__lock = mtxp->__lock | LLL_DEAD_OWNER; \ ++ atomic_write_barrier (); \ ++ } \ ++ } \ ++ } \ ++ (void)0 ++ ++/* Check that a thread owns the mutex. For non-robust, task-shared ++ * objects, we have to check the thread *and* process-id. */ ++#define mtx_owned_p(mtx, pt, flags) \ ++ ((mtx)->__owner_id == (pt)->thread && \ ++ (((flags) & GSYNC_SHARED) == 0 || \ ++ (mtx)->__shpid == __getpid ())) ++ ++/* Record a thread as the owner of the mutex. */ ++#define mtx_set_owner(mtx, pt, flags) \ ++ (void) \ ++ ({ \ ++ (mtx)->__owner_id = (pt)->thread; \ ++ if ((flags) & GSYNC_SHARED) \ ++ (mtx)->__shpid = __getpid (); \ ++ }) ++ ++/* Redefined mutex types. The +1 is for binary compatibility. */ ++#define PT_MTX_NORMAL __PTHREAD_MUTEX_TIMED ++#define PT_MTX_RECURSIVE (__PTHREAD_MUTEX_RECURSIVE + 1) ++#define PT_MTX_ERRORCHECK (__PTHREAD_MUTEX_ERRORCHECK + 1) ++ ++/* Mutex type, including robustness. */ ++#define MTX_TYPE(mtxp) \ ++ ((mtxp)->__type | ((mtxp)->__flags & PTHREAD_MUTEX_ROBUST)) ++ ++extern int __getpid (void) __attribute__ ((const)); ++ ++#endif /* pt-mutex.h */ +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getrobust.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getrobust.c +new file mode 100644 +index 0000000..86a0909 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getrobust.c +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_getrobust (const pthread_mutexattr_t *attrp, int *outp) ++{ ++ *outp = (attrp->__prioceiling & PTHREAD_MUTEX_ROBUST) ? ++ PTHREAD_MUTEX_ROBUST : PTHREAD_MUTEX_STALLED; ++ return (0); ++} ++ ++weak_alias (pthread_mutexattr_getrobust, pthread_mutexattr_getrobust_np) +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setrobust.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setrobust.c +new file mode 100644 +index 0000000..a90e747 +--- /dev/null ++++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setrobust.c +@@ -0,0 +1,36 @@ ++/* Copyright (C) 2016 Free Software Foundation, Inc. ++ Contributed by Agustina Arzille , 2016. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License ++ as published by the Free Software Foundation; either ++ version 2 of the license, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with this program; if not, see ++ . ++*/ ++ ++#include ++#include ++#include ++#include ++#include "pt-mutex.h" ++#include ++ ++int pthread_mutexattr_setrobust (pthread_mutexattr_t *attrp, int robust) ++{ ++ if (robust != PTHREAD_MUTEX_ROBUST && ++ robust != PTHREAD_MUTEX_STALLED) ++ return (EINVAL); ++ ++ attrp->__prioceiling |= robust; ++ return (0); ++} ++ ++weak_alias (pthread_mutexattr_setrobust, pthread_mutexattr_setrobust_np) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-spin.diff glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-spin.diff --- glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-spin.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-libpthread-gsync-spin.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,278 @@ +commit cd7e69c545200949cfd1b3c595568556ff9a76e3 +Author: Agustina Arzille +Date: Tue Oct 18 00:20:45 2016 +0200 + + Make pthread_spinlock use gsync + +diff --git a/libpthread/pthread/pt-spin-inlines.c b/libpthread/pthread/pt-spin-inlines.c +index cfb21dd..97afb4d 100644 +--- a/libpthread/pthread/pt-spin-inlines.c ++++ b/libpthread/pthread/pt-spin-inlines.c +@@ -25,10 +25,9 @@ + + #include + +-/* Weak aliases for the spin lock functions. Note that +- pthread_spin_lock is left out deliberately. We already provide an +- implementation for it in pt-spin.c. */ ++/* Weak aliases for the spin lock functions. */ + weak_alias (__pthread_spin_destroy, pthread_spin_destroy); + weak_alias (__pthread_spin_init, pthread_spin_init); + weak_alias (__pthread_spin_trylock, pthread_spin_trylock); ++weak_alias (__pthread_spin_lock, pthread_spin_lock); + weak_alias (__pthread_spin_unlock, pthread_spin_unlock); +diff --git a/libpthread/sysdeps/mach/bits/spin-lock-inline.h b/libpthread/sysdeps/mach/bits/spin-lock-inline.h +index f9f7c29..98e4b3b 100644 +--- a/libpthread/sysdeps/mach/bits/spin-lock-inline.h ++++ b/libpthread/sysdeps/mach/bits/spin-lock-inline.h +@@ -22,7 +22,7 @@ + + #include + #include +-#include /* This does all the work. */ ++#include /* This does all the work. */ + + __BEGIN_DECLS + +@@ -60,17 +60,15 @@ __PT_SPIN_INLINE int __pthread_spin_trylock (__pthread_spinlock_t *__lock); + __PT_SPIN_INLINE int + __pthread_spin_trylock (__pthread_spinlock_t *__lock) + { +- return __spin_try_lock (__lock) ? 0 : __EBUSY; ++ return __spin_try_lock ((__spin_lock_t *) __lock) ? 0 : __EBUSY; + } + +-__extern_inline int __pthread_spin_lock (__pthread_spinlock_t *__lock); +-extern int _pthread_spin_lock (__pthread_spinlock_t *__lock); ++__PT_SPIN_INLINE int __pthread_spin_lock (__pthread_spinlock_t *__lock); + +-__extern_inline int ++__PT_SPIN_INLINE int + __pthread_spin_lock (__pthread_spinlock_t *__lock) + { +- if (__pthread_spin_trylock (__lock)) +- return _pthread_spin_lock (__lock); ++ __spin_lock ((__spin_lock_t *) __lock); + return 0; + } + +@@ -79,7 +77,7 @@ __PT_SPIN_INLINE int __pthread_spin_unlock (__pthread_spinlock_t *__lock); + __PT_SPIN_INLINE int + __pthread_spin_unlock (__pthread_spinlock_t *__lock) + { +- __spin_unlock (__lock); ++ __spin_unlock ((__spin_lock_t *) __lock); + return 0; + } + +diff --git a/libpthread/sysdeps/mach/bits/spin-lock.h b/libpthread/sysdeps/mach/bits/spin-lock.h +index 537dac9..7574b37 100644 +--- a/libpthread/sysdeps/mach/bits/spin-lock.h ++++ b/libpthread/sysdeps/mach/bits/spin-lock.h +@@ -21,17 +21,14 @@ + #define _BITS_SPIN_LOCK_H 1 + + #include +-#include /* This does all the work. */ + + __BEGIN_DECLS + + /* The type of a spin lock object. */ +-typedef __spin_lock_t __pthread_spinlock_t; ++typedef volatile int __pthread_spinlock_t; + + /* Initializer for a spin lock object. */ +-#ifndef __PTHREAD_SPIN_LOCK_INITIALIZER +-#error __PTHREAD_SPIN_LOCK_INITIALIZER undefined: should be defined by . +-#endif ++#define __PTHREAD_SPIN_LOCK_INITIALIZER 0 + + __END_DECLS + +diff --git a/libpthread/sysdeps/mach/i386/bits/spin-lock-inline.h b/libpthread/sysdeps/mach/i386/bits/spin-lock-inline.h +deleted file mode 100644 +index e5ed3de..0000000 +--- a/libpthread/sysdeps/mach/i386/bits/spin-lock-inline.h ++++ /dev/null +@@ -1,98 +0,0 @@ +-/* Machine-specific definitions for spin locks. i386 version. +- Copyright (C) 2000, 2005, 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 +- modify it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation; either version 2 of the +- License, or (at your option) any later version. +- +- The GNU C Library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Library General Public License for more details. +- +- You should have received a copy of the GNU Library General Public +- License along with the GNU C Library; see the file COPYING.LIB. If not, +- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +- Boston, MA 02111-1307, USA. */ +- +-/* +- * Never include this file directly; use or instead. +- */ +- +-#ifndef _BITS_SPIN_LOCK_INLINE_H +-#define _BITS_SPIN_LOCK_INLINE_H 1 +- +-#include +-#include +- +-__BEGIN_DECLS +- +-#if defined __USE_EXTERN_INLINES || defined _FORCE_INLINES +- +-# ifndef __EBUSY +-# include +-# define __EBUSY EBUSY +-# endif +- +-# ifndef __PT_SPIN_INLINE +-# define __PT_SPIN_INLINE __extern_inline +-# endif +- +-__PT_SPIN_INLINE int __pthread_spin_destroy (__pthread_spinlock_t *__lock); +- +-__PT_SPIN_INLINE int +-__pthread_spin_destroy (__pthread_spinlock_t *__lock) +-{ +- return 0; +-} +- +-__PT_SPIN_INLINE int __pthread_spin_init (__pthread_spinlock_t *__lock, +- int __pshared); +- +-__PT_SPIN_INLINE int +-__pthread_spin_init (__pthread_spinlock_t *__lock, int __pshared) +-{ +- *__lock = __PTHREAD_SPIN_LOCK_INITIALIZER; +- return 0; +-} +- +-__PT_SPIN_INLINE int __pthread_spin_trylock (__pthread_spinlock_t *__lock); +- +-__PT_SPIN_INLINE int +-__pthread_spin_trylock (__pthread_spinlock_t *__lock) +-{ +- int __locked; +- __asm__ __volatile ("xchgl %0, %1" +- : "=&r" (__locked), "=m" (*__lock) : "0" (1) : "memory"); +- return __locked ? __EBUSY : 0; +-} +- +-__extern_inline int __pthread_spin_lock (__pthread_spinlock_t *__lock); +-extern int _pthread_spin_lock (__pthread_spinlock_t *__lock); +- +-__extern_inline int +-__pthread_spin_lock (__pthread_spinlock_t *__lock) +-{ +- if (__pthread_spin_trylock (__lock)) +- return _pthread_spin_lock (__lock); +- return 0; +-} +- +-__PT_SPIN_INLINE int __pthread_spin_unlock (__pthread_spinlock_t *__lock); +- +-__PT_SPIN_INLINE int +-__pthread_spin_unlock (__pthread_spinlock_t *__lock) +-{ +- int __unlocked; +- __asm__ __volatile ("xchgl %0, %1" +- : "=&r" (__unlocked), "=m" (*__lock) : "0" (0) : "memory"); +- return 0; +-} +- +-#endif /* Use extern inlines or force inlines. */ +- +-__END_DECLS +- +-#endif /* bits/spin-lock.h */ +diff --git a/libpthread/sysdeps/mach/i386/bits/spin-lock.h b/libpthread/sysdeps/mach/i386/bits/spin-lock.h +deleted file mode 100644 +index 5ae81e1..0000000 +--- a/libpthread/sysdeps/mach/i386/bits/spin-lock.h ++++ /dev/null +@@ -1,39 +0,0 @@ +-/* Machine-specific definitions for spin locks. i386 version. +- Copyright (C) 2000, 2005, 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 +- modify it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation; either version 2 of the +- License, or (at your option) any later version. +- +- The GNU C Library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Library General Public License for more details. +- +- You should have received a copy of the GNU Library General Public +- License along with the GNU C Library; see the file COPYING.LIB. If not, +- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +- Boston, MA 02111-1307, USA. */ +- +-/* +- * Never include this file directly; use or instead. +- */ +- +-#ifndef _BITS_SPIN_LOCK_H +-#define _BITS_SPIN_LOCK_H 1 +- +-#include +- +-__BEGIN_DECLS +- +-/* The type of a spin lock object. */ +-typedef __volatile int __pthread_spinlock_t; +- +-/* Initializer for a spin lock object. */ +-# define __PTHREAD_SPIN_LOCK_INITIALIZER ((__pthread_spinlock_t) 0) +- +-__END_DECLS +- +-#endif /* bits/spin-lock.h */ +diff --git a/libpthread/sysdeps/mach/pt-spin.c b/libpthread/sysdeps/mach/pt-spin.c +index d9a2a32..0cf1c49 100644 +--- a/libpthread/sysdeps/mach/pt-spin.c ++++ b/libpthread/sysdeps/mach/pt-spin.c +@@ -17,20 +17,16 @@ + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +-#include + #include + + /* In glibc. */ +-extern void __spin_lock_solid (__pthread_spinlock_t *lock); ++extern void __spin_lock_solid (__spin_lock_t *lock); + + /* Lock the spin lock object LOCK. If the lock is held by another + thread spin until it becomes available. */ + int +-_pthread_spin_lock (__pthread_spinlock_t *lock) ++_pthread_spin_lock (__spin_lock_t *lock) + { + __spin_lock_solid (lock); + return 0; + } +- +-weak_alias (_pthread_spin_lock, pthread_spin_lock); +-weak_alias (_pthread_spin_lock, __pthread_spin_lock); +diff --git a/libpthread/sysdeps/posix/pt-spin.c b/libpthread/sysdeps/posix/pt-spin.c +index cb809c6..07f8936 100644 +--- a/libpthread/sysdeps/posix/pt-spin.c ++++ b/libpthread/sysdeps/posix/pt-spin.c +@@ -49,6 +49,3 @@ _pthread_spin_lock (__pthread_spinlock_t *lock) + __sched_yield (); + } + } +- +-weak_alias (_pthread_spin_lock, pthread_spin_lock); +-weak_alias (_pthread_spin_lock, __pthread_spin_lock); diff -Nru glibc-2.27/debian/patches/hurd-i386/git-libpthread-stacksize.diff glibc-2.27/debian/patches/hurd-i386/git-libpthread-stacksize.diff --- glibc-2.27/debian/patches/hurd-i386/git-libpthread-stacksize.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-libpthread-stacksize.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,19 @@ +Set the default stack size to 8MiB like on Linux, to avoid surprises +with packages which assume the Linuxish default. + +--- + pt-sysdep.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) +Index: glibc-2.19/libpthread/sysdeps/mach/hurd/pt-sysdep.h +=================================================================== +--- glibc-2.19.orig/libpthread/sysdeps/mach/hurd/pt-sysdep.h ++++ glibc-2.19/libpthread/sysdeps/mach/hurd/pt-sysdep.h +@@ -26,7 +26,7 @@ + #define _POSIX_THREAD_THREADS_MAX 64 + + /* The default stack size. */ +-#define PTHREAD_STACK_DEFAULT (2 * 1024 * 1024) ++#define PTHREAD_STACK_DEFAULT (8 * 1024 * 1024) + + #define PTHREAD_SYSDEP_MEMBERS \ + thread_t kernel_thread; \ diff -Nru glibc-2.27/debian/patches/hurd-i386/git-libpthread-trylock.diff glibc-2.27/debian/patches/hurd-i386/git-libpthread-trylock.diff --- glibc-2.27/debian/patches/hurd-i386/git-libpthread-trylock.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-libpthread-trylock.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,40 @@ +commit 55c35d62a3a6ae0d90db40c6e4a2d94d05be71e3 +Author: Samuel Thibault +Date: Sat Feb 24 20:20:33 2018 +0100 + + Fix pthread_mutex_trylock return value + + * sysdeps/mach/hurd/pt-mutex-trylock.c (__pthread_mutex_trylock): Return + EBUSY on failure instead of -1. + +diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c +index 6680094..59244e8 100644 +--- a/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c ++++ b/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c +@@ -32,6 +32,8 @@ int __pthread_mutex_trylock (pthread_mutex_t *mtxp) + { + case PT_MTX_NORMAL: + ret = lll_trylock (&mtxp->__lock); ++ if (ret) ++ ret = EBUSY; + break; + + case PT_MTX_RECURSIVE: +@@ -49,6 +51,8 @@ int __pthread_mutex_trylock (pthread_mutex_t *mtxp) + mtx_set_owner (mtxp, self, mtxp->__flags); + mtxp->__cnt = 1; + } ++ else ++ ret = EBUSY; + + break; + +@@ -56,6 +60,8 @@ int __pthread_mutex_trylock (pthread_mutex_t *mtxp) + self = _pthread_self (); + if ((ret = lll_trylock (&mtxp->__lock)) == 0) + mtx_set_owner (mtxp, self, mtxp->__flags); ++ else ++ ret = EBUSY; + break; + + case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: diff -Nru glibc-2.27/debian/patches/hurd-i386/git-mlockall.diff glibc-2.27/debian/patches/hurd-i386/git-mlockall.diff --- glibc-2.27/debian/patches/hurd-i386/git-mlockall.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-mlockall.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,106 @@ +Subject: [PATCH] Add mlockall support + +* sysdeps/mach/hurd/mlockall.c: New file +* sysdeps/mach/hurd/munlockall.c: New file + +--- + sysdeps/mach/hurd/mlockall.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + sysdeps/mach/hurd/munlockall.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 82 insertions(+) + +diff --git a/sysdeps/mach/hurd/mlockall.c b/sysdeps/mach/hurd/mlockall.c +new file mode 100644 +index 0000000000..11a3deac8a +--- /dev/null ++++ b/sysdeps/mach/hurd/mlockall.c +@@ -0,0 +1,42 @@ ++/* mlockall -- lock in core all the pages in this process. Stub version. ++ Copyright (C) 2001-2016 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++/* Cause all currently mapped pages of the process to be memory resident ++ until unlocked by a call to the `munlockall', until the process exits, ++ or until the process calls `execve'. */ ++ ++int ++mlockall (int flags) ++{ ++ mach_port_t host; ++ error_t err; ++ ++ err = __get_privileged_ports (&host, NULL); ++ if (err) ++ return __hurd_fail (err); ++ ++ err = __vm_wire_all (host, __mach_task_self (), flags); ++ __mach_port_deallocate (__mach_task_self (), host); ++ return err ? __hurd_fail (err) : 0; ++} +diff --git a/sysdeps/mach/hurd/munlockall.c b/sysdeps/mach/hurd/munlockall.c +new file mode 100644 +index 0000000000..6fbb69435d +--- /dev/null ++++ b/sysdeps/mach/hurd/munlockall.c +@@ -0,0 +1,40 @@ ++/* munlockall -- undo the effects of all prior mlock calls. Stub version. ++ Copyright (C) 2001-2016 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++/* Undo the effects of all prior mlock calls in this process. */ ++ ++int ++munlockall (void) ++{ ++ mach_port_t host; ++ error_t err; ++ ++ err = __get_privileged_ports (&host, NULL); ++ if (err) ++ return __hurd_fail (err); ++ ++ err = __vm_wire_all (host, __mach_task_self (), VM_WIRE_NONE); ++ __mach_port_deallocate (__mach_task_self (), host); ++ return err ? __hurd_fail (err) : 0; ++} +-- +tg: (7bb5f8a836..) t/mlockall (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW.diff glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW.diff --- glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,73 @@ +From: Samuel Thibault +Subject: [PATCH] hurd: Fix O_NOFOLLOW + +The error code documented by POSIX for opening a symlink with O_NOFOLLOW +is ELOOP. + +Also, if the translator does not expose symlink as a symlink translator but +as a S_IFLNK file, O_NOFOLLOW needs to return ELOOP too. + +Signed-off-by: Samuel Thibault + +--- + hurd/lookup-retry.c | 36 ++++++++++++++++++++---------------- + 1 file changed, 20 insertions(+), 16 deletions(-) + +diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c +index aee2ba8..b7a6a2b 100644 +--- a/hurd/lookup-retry.c ++++ b/hurd/lookup-retry.c +@@ -127,7 +127,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + { + /* In Linux, O_NOFOLLOW means to reject symlinks. If we + did an O_NOLINK lookup above and io_stat here to check +- for S_IFLNK, a translator like firmlink could easily ++ for S_IFLNK only, a translator like firmlink could easily + spoof this check by not showing S_IFLNK, but in fact + redirecting the lookup to some other name + (i.e. opening the very same holes a symlink would). +@@ -145,23 +145,27 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + one exception to our general translator-based rule. */ + struct stat64 st; + err = __io_stat (*result, &st); +- if (!err +- && (st.st_mode & (S_IPTRANS|S_IATRANS))) ++ if (!err) + { +- if (st.st_uid != 0) +- err = ENOENT; +- else if (st.st_mode & S_IPTRANS) ++ if (S_ISLNK(st.st_mode)) ++ err = ELOOP; ++ else if (st.st_mode & (S_IPTRANS|S_IATRANS)) + { +- char buf[1024]; +- char *trans = buf; +- size_t translen = sizeof buf; +- err = __file_get_translator (*result, +- &trans, &translen); +- if (!err +- && translen > sizeof _HURD_SYMLINK +- && !memcmp (trans, +- _HURD_SYMLINK, sizeof _HURD_SYMLINK)) +- err = ENOENT; ++ if (st.st_uid != 0) ++ err = ELOOP; ++ else if (st.st_mode & S_IPTRANS) ++ { ++ char buf[1024]; ++ char *trans = buf; ++ size_t translen = sizeof buf; ++ err = __file_get_translator (*result, ++ &trans, &translen); ++ if (!err ++ && translen > sizeof _HURD_SYMLINK ++ && !memcmp (trans, ++ _HURD_SYMLINK, sizeof _HURD_SYMLINK)) ++ err = ELOOP; ++ } + } + } + } +-- +tg: (7bb5f8a..) t/NOFOLLOW (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW-DIRECTORY.diff glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW-DIRECTORY.diff --- glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW-DIRECTORY.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-NOFOLLOW-DIRECTORY.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,44 @@ +From: Samuel Thibault +Subject: [PATCH] hurd: Fix O_DIRECTORY | O_NOFOLLOW + +Appending / to the path to be looked up would make us always follow a final +symlink, even with O_NOTRANS (since the final resolution is after the +'/'). In the O_DIRECTORY | O_NOFOLLOW case, we thus have to really open +the node and stat it, which we already do anyway, and check for +directory type. + +Signed-off-by: Samuel Thibault + +--- + hurd/hurdlookup.c | 2 +- + hurd/lookup-retry.c | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/hurd/hurdlookup.c b/hurd/hurdlookup.c +index dbff009..bd720c2 100644 +--- a/hurd/hurdlookup.c ++++ b/hurd/hurdlookup.c +@@ -72,7 +72,7 @@ __hurd_file_name_lookup (error_t (*use_init_port) + if (flags & O_NOFOLLOW) /* See lookup-retry.c about O_NOFOLLOW. */ + flags |= O_NOTRANS; + +- if (flags & O_DIRECTORY) ++ if (flags & O_DIRECTORY && (flags & O_NOFOLLOW) == 0) + { + /* The caller wants to require that the file we look up is a directory. + We can do this without an extra RPC by appending a trailing slash +diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c +index b7a6a2b..d372959 100644 +--- a/hurd/lookup-retry.c ++++ b/hurd/lookup-retry.c +@@ -147,6 +147,8 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + err = __io_stat (*result, &st); + if (!err) + { ++ if (flags & O_DIRECTORY && !S_ISDIR(st.st_mode)) ++ err = ENOTDIR; + if (S_ISLNK(st.st_mode)) + err = ELOOP; + else if (st.st_mode & (S_IPTRANS|S_IATRANS)) +-- +tg: (2bc1a49..) t/NOFOLLOW-DIRECTORY (depends on: t/NOFOLLOW) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-pagesize.diff glibc-2.27/debian/patches/hurd-i386/git-pagesize.diff --- glibc-2.27/debian/patches/hurd-i386/git-pagesize.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-pagesize.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,37 @@ +Subject: [PATCH] t/pagesize + +From: Thomas Schwinge + +Fixed another in glibc 2.28 + +--- + elf/dl-support.c | 2 +- + elf/rtld.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +Index: glibc-2.27/elf/dl-support.c +=================================================================== +--- glibc-2.27.orig/elf/dl-support.c ++++ glibc-2.27/elf/dl-support.c +@@ -136,7 +136,7 @@ hp_timing_t _dl_cpuclock_offset; + + void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls; + +-size_t _dl_pagesize = EXEC_PAGESIZE; ++size_t _dl_pagesize = /* EXEC_PAGESIZE */ 4096; + + int _dl_inhibit_cache; + +Index: glibc-2.27/elf/rtld.c +=================================================================== +--- glibc-2.27.orig/elf/rtld.c ++++ glibc-2.27/elf/rtld.c +@@ -271,7 +271,7 @@ struct rtld_global_ro _rtld_global_ro at + #endif + ._dl_lazy = 1, + ._dl_fpu_control = _FPU_DEFAULT, +- ._dl_pagesize = EXEC_PAGESIZE, ++ ._dl_pagesize = /* EXEC_PAGESIZE */ 4096, + ._dl_inhibit_cache = 0, + + /* Function pointers. */ diff -Nru glibc-2.27/debian/patches/hurd-i386/git-reboot-startup.diff glibc-2.27/debian/patches/hurd-i386/git-reboot-startup.diff --- glibc-2.27/debian/patches/hurd-i386/git-reboot-startup.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-reboot-startup.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,38 @@ +From: David Michael +Subject: [PATCH] Lookup the startup server through /servers/startup + +* sysdeps/mach/hurd/reboot.c: Include +(reboot): Lookup _SERVERS_STARTUP instead of calling proc_getmsgport to get a +port to the startup server. + + + +--- + sysdeps/mach/hurd/reboot.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/sysdeps/mach/hurd/reboot.c b/sysdeps/mach/hurd/reboot.c +index 60d96ea..51c3d73 100644 +--- a/sysdeps/mach/hurd/reboot.c ++++ b/sysdeps/mach/hurd/reboot.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -33,8 +34,8 @@ reboot (int howto) + if (err) + return __hurd_fail (EPERM); + +- err = __USEPORT (PROC, __proc_getmsgport (port, 1, &init)); +- if (!err) ++ init = __file_name_lookup (_SERVERS_STARTUP, 0, 0); ++ if (init != MACH_PORT_NULL) + { + err = __startup_reboot (init, hostpriv, howto); + __mach_port_deallocate (__mach_task_self (), init); +-- +tg: (9a079e2..) t/reboot-startup (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/git-thread-linkspace.diff glibc-2.27/debian/patches/hurd-i386/git-thread-linkspace.diff --- glibc-2.27/debian/patches/hurd-i386/git-thread-linkspace.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-thread-linkspace.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,147 @@ +From: Samuel Thibault +Subject: [PATCH] Fix thread linkspace + +Libc uses some thread functions, but should not expose the corresponding +symbols, so call aliases. + +--- + hurd/Versions | 6 +++--- + hurd/hurdsig.c | 20 ++++++++++---------- + sysdeps/mach/hurd/cthreads.c | 10 +++++----- + sysdeps/mach/libc-lock.h | 4 ++-- + 4 files changed, 20 insertions(+), 20 deletions(-) + +diff --git a/hurd/Versions b/hurd/Versions +index 414231b5b4..e040b49edc 100644 +--- a/hurd/Versions ++++ b/hurd/Versions +@@ -143,14 +143,14 @@ libc { + + HURD_CTHREADS_0.3 { + # weak refs to libthreads functions that libc calls iff libthreads in use +- cthread_fork; cthread_detach; +- pthread_getattr_np; pthread_attr_getstack; ++ __cthread_fork; __cthread_detach; ++ __pthread_getattr_np; __pthread_attr_getstack; + + # variables used for detecting cthreads + _cthread_exit_routine; _cthread_init_routine; + + # cthreads functions with stubs in libc +- cthread_keycreate; cthread_getspecific; cthread_setspecific; ++ __cthread_keycreate; __cthread_getspecific; __cthread_setspecific; + __libc_getspecific; + } + +diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c +index fd787c6c1b..8584d5c631 100644 +--- a/hurd/hurdsig.c ++++ b/hurd/hurdsig.c +@@ -1466,11 +1466,11 @@ _hurdsig_init (const int *intarray, size_t intarraysize) + + /* Start the signal thread listening on the message port. */ + +-#pragma weak cthread_fork +-#pragma weak cthread_detach +-#pragma weak pthread_getattr_np +-#pragma weak pthread_attr_getstack +- if (!cthread_fork) ++#pragma weak __cthread_fork ++#pragma weak __cthread_detach ++#pragma weak __pthread_getattr_np ++#pragma weak __pthread_attr_getstack ++ if (!__cthread_fork) + { + err = __thread_create (__mach_task_self (), &_hurd_msgport_thread); + assert_perror (err); +@@ -1495,7 +1495,7 @@ _hurdsig_init (const int *intarray, size_t intarraysize) + } + else + { +- cthread_t thread; ++ __cthread_t thread; + /* When cthreads is being used, we need to make the signal thread a + proper cthread. Otherwise it cannot use mutex_lock et al, which + will be the cthreads versions. Various of the message port RPC +@@ -1505,17 +1505,17 @@ _hurdsig_init (const int *intarray, size_t intarraysize) + we'll let the signal thread's per-thread variables be found as for + any normal cthread, and just leave the magic __hurd_sigthread_* + values all zero so they'll be ignored. */ +- cthread_detach (thread = cthread_fork ((cthread_fn_t) &_hurd_msgport_receive, 0)); ++ __cthread_detach (thread = __cthread_fork ((__cthread_fn_t) &_hurd_msgport_receive, 0)); + +- if (pthread_getattr_np) ++ if (__pthread_getattr_np) + { + /* Record stack layout for fork() */ + pthread_attr_t attr; + void *addr; + size_t size; + +- pthread_getattr_np ((pthread_t) thread, &attr); +- pthread_attr_getstack (&attr, &addr, &size); ++ __pthread_getattr_np ((pthread_t) thread, &attr); ++ __pthread_attr_getstack (&attr, &addr, &size); + __hurd_sigthread_stack_base = (uintptr_t) addr; + __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + size; + } +diff --git a/sysdeps/mach/hurd/cthreads.c b/sysdeps/mach/hurd/cthreads.c +index f223e00b12..0a3780b273 100644 +--- a/sysdeps/mach/hurd/cthreads.c ++++ b/sysdeps/mach/hurd/cthreads.c +@@ -24,7 +24,7 @@ char __libc_lock_self0[0]; + /* Placeholder for key creation routine from Hurd cthreads library. */ + int + weak_function +-cthread_keycreate (cthread_key_t *key) ++__cthread_keycreate (cthread_key_t *key) + { + __set_errno (ENOSYS); + *key = -1; +@@ -34,7 +34,7 @@ cthread_keycreate (cthread_key_t *key) + /* Placeholder for key retrieval routine from Hurd cthreads library. */ + int + weak_function +-cthread_getspecific (cthread_key_t key, void **pval) ++__cthread_getspecific (cthread_key_t key, void **pval) + { + *pval = NULL; + __set_errno (ENOSYS); +@@ -44,19 +44,19 @@ cthread_getspecific (cthread_key_t key, void **pval) + /* Placeholder for key setting routine from Hurd cthreads library. */ + int + weak_function +-cthread_setspecific (cthread_key_t key, void *val) ++__cthread_setspecific (cthread_key_t key, void *val) + { + __set_errno (ENOSYS); + return -1; + } + +-/* Call cthread_getspecific which gets a pointer to the return value instead ++/* Call __cthread_getspecific which gets a pointer to the return value instead + of just returning it. */ + void * + weak_function + __libc_getspecific (cthread_key_t key) + { + void *val; +- cthread_getspecific (key, &val); ++ __cthread_getspecific (key, &val); + return val; + } +diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h +index f9f57a0a65..35233f797e 100644 +--- a/sysdeps/mach/libc-lock.h ++++ b/sysdeps/mach/libc-lock.h +@@ -223,8 +223,8 @@ struct __libc_once + used as argument to __libc_cleanup_region_start. */ + #define __libc_mutex_unlock __libc_lock_unlock + +-#define __libc_key_create(KEY,DEST) cthread_keycreate (KEY) +-#define __libc_setspecific(KEY,VAL) cthread_setspecific (KEY, VAL) ++#define __libc_key_create(KEY,DEST) __cthread_keycreate (KEY) ++#define __libc_setspecific(KEY,VAL) __cthread_setspecific (KEY, VAL) + void *__libc_getspecific (__libc_key_t key); + + /* Hide the definitions which are only supposed to be used inside libc in diff -Nru glibc-2.27/debian/patches/hurd-i386/git-timer_routines.diff glibc-2.27/debian/patches/hurd-i386/git-timer_routines.diff --- glibc-2.27/debian/patches/hurd-i386/git-timer_routines.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-timer_routines.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,56 @@ +Index: glibc/sysdeps/pthread/timer_routines.c +=================================================================== +--- glibc.orig/sysdeps/pthread/timer_routines.c ++++ glibc/sysdeps/pthread/timer_routines.c +@@ -29,7 +29,7 @@ + #include + + #include "posix-timer.h" +-#include ++//#include + + + /* Number of threads used. */ +@@ -395,6 +395,9 @@ thread_func (void *arg) + { + timespec_add (&timer->expirytime, &timer->expirytime, + &timer->value.it_interval); ++#ifndef DELAYTIMER_MAX ++#define DELAYTIMER_MAX INT_MAX ++#endif + if (timer->overrun_count < DELAYTIMER_MAX) + ++timer->overrun_count; + } +@@ -481,7 +484,7 @@ __timer_thread_wakeup (struct thread_nod + pthread_cond_broadcast (&thread->cond); + } + +- ++#if 0 + /* Compare two pthread_attr_t thread attributes for exact equality. + Returns 1 if they are equal, otherwise zero if they are not equal + or contain illegal values. This version is NPTL-specific for +@@ -506,6 +509,7 @@ thread_attr_compare (const pthread_attr_ + && memcmp (ileft->cpuset, iright->cpuset, + ileft->cpusetsize) == 0))); + } ++#endif + + + /* Search the list of active threads and find one which has matching +@@ -514,6 +518,7 @@ struct thread_node * + __timer_thread_find_matching (const pthread_attr_t *desired_attr, + clockid_t desired_clock_id) + { ++#if 0 + struct list_head *iter = list_first (&thread_active_list); + + while (iter != list_null (&thread_active_list)) +@@ -526,6 +531,7 @@ __timer_thread_find_matching (const pthr + + iter = list_next (iter); + } ++#endif + + return NULL; + } diff -Nru glibc-2.27/debian/patches/hurd-i386/git-tls.diff glibc-2.27/debian/patches/hurd-i386/git-tls.diff --- glibc-2.27/debian/patches/hurd-i386/git-tls.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-tls.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,413 @@ +From: Thomas Schwinge +Subject: [PATCH] tls + +TLS support. + +All by Samuel Thibault. + +glibc-2.8/debian/patches/hurd-i386/local-tls-support.diff 3151 + +2009-07-30 Samuel Thibault + + Align up includes as on Linux, to fix build. + * sysdeps/mach/hurd/tls.h: Include . + +--- + sysdeps/mach/thread_state.h | 3 ++ + csu/libc-start.c | 2 + + include/errno.h | 14 +++++---- + hurd/hurdfault.c | 2 + + hurd/hurdsig.c | 2 + + mach/mach.h | 3 ++ + mach/setup-thread.c | 30 +++++++++++++++++++- + sysdeps/generic/thread_state.h | 1 + sysdeps/mach/hurd/libc-lock.h | 3 ++ + sysdeps/mach/hurd/fork.c | 7 ++++ + sysdeps/mach/hurd/i386/init-first.c | 49 +++++++++++++++++++++------------ + sysdeps/mach/hurd/i386/tls.h | 53 +++++++++++++++++++++++++++++------- + sysdeps/mach/hurd/i386/trampoline.c | 2 - + sysdeps/mach/hurd/profil.c | 2 + + sysdeps/mach/hurd/setitimer.c | 3 +- + sysdeps/mach/hurd/tls.h | 2 + + sysdeps/mach/i386/thread_state.h | 11 ++++++- + 17 files changed, 150 insertions(+), 39 deletions(-) + +--- a/include/errno.h ++++ b/include/errno.h +@@ -21,13 +21,15 @@ extern int rtld_errno attribute_hidden; + + # include + +-# undef errno +-# if IS_IN (libc) +-# define errno __libc_errno +-# else +-# define errno errno /* For #ifndef errno tests. */ +-# endif ++# if !defined(__GNU__) ++# undef errno ++# if IS_IN (libc) ++# define errno __libc_errno ++# else ++# define errno errno /* For #ifndef errno tests. */ ++# endif + extern __thread int errno attribute_tls_model_ie; ++# endif + + # endif /* IS_IN_LIB */ + +--- a/hurd/hurdfault.c ++++ b/hurd/hurdfault.c +@@ -204,6 +204,8 @@ _hurdsig_fault_init (void) + /* This state will be restored when we fault. + It runs the function above. */ + memset (&state, 0, sizeof state); ++ ++ MACHINE_THREAD_STATE_FIX_NEW (&state); + MACHINE_THREAD_STATE_SET_PC (&state, faulted); + MACHINE_THREAD_STATE_SET_SP (&state, faultstack, sizeof faultstack); + +--- a/hurd/hurdsig.c ++++ b/hurd/hurdsig.c +@@ -1266,6 +1266,8 @@ _hurdsig_init (const int *intarray, size + (vm_address_t *) &__hurd_sigthread_stack_base, + &stacksize); + assert_perror (err); ++ err = __mach_setup_tls (_hurd_msgport_thread); ++ assert_perror (err); + + __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + stacksize; + __hurd_sigthread_variables = +--- a/mach/mach.h ++++ b/mach/mach.h +@@ -100,5 +100,8 @@ kern_return_t mach_setup_thread (task_t + vm_address_t *stack_base, + vm_size_t *stack_size); + ++/* Give THREAD a TLS area. */ ++kern_return_t __mach_setup_tls (thread_t thread); ++kern_return_t mach_setup_tls (thread_t thread); + + #endif /* mach.h */ +--- a/mach/setup-thread.c ++++ b/mach/setup-thread.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + #include "sysdep.h" /* Defines stack direction. */ + + #define STACK_SIZE (16 * 1024 * 1024) /* 16MB, arbitrary. */ +@@ -72,8 +73,35 @@ __mach_setup_thread (task_t task, thread + if (error = __vm_protect (task, stack, __vm_page_size, 0, VM_PROT_NONE)) + return error; + +- return __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, ++ return __thread_set_state (thread, MACHINE_NEW_THREAD_STATE_FLAVOR, + (natural_t *) &ts, tssize); + } + + weak_alias (__mach_setup_thread, mach_setup_thread) ++ ++/* Give THREAD a TLS area. */ ++kern_return_t ++__mach_setup_tls (thread_t thread) ++{ ++ kern_return_t error; ++ struct machine_thread_state ts; ++ mach_msg_type_number_t tssize = MACHINE_THREAD_STATE_COUNT; ++ tcbhead_t *tcb; ++ ++ tcb = _dl_allocate_tls(NULL); ++ if (tcb == NULL) ++ return KERN_RESOURCE_SHORTAGE; ++ ++ if (error = __thread_get_state (thread, MACHINE_THREAD_STATE_FLAVOR, ++ (natural_t *) &ts, &tssize)) ++ return error; ++ assert (tssize == MACHINE_THREAD_STATE_COUNT); ++ ++ _hurd_tls_new(thread, &ts, tcb); ++ ++ error = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, ++ (natural_t *) &ts, tssize); ++ return error; ++} ++ ++weak_alias (__mach_setup_tls, mach_setup_tls) +--- a/sysdeps/generic/thread_state.h ++++ b/sysdeps/generic/thread_state.h +@@ -22,6 +22,7 @@ + + /* Replace with "i386" or "mips" or whatever. */ + ++#define MACHINE_NEW_THREAD_STATE_FLAVOR _NEW_THREAD_STATE + #define MACHINE_THREAD_STATE_FLAVOR _THREAD_STATE + #define MACHINE_THREAD_STATE_COUNT _THREAD_STATE_COUNT + +--- a/sysdeps/mach/hurd/libc-lock.h ++++ b/sysdeps/mach/hurd/libc-lock.h +@@ -20,6 +20,9 @@ + #define _LIBC_LOCK_H 1 + + #if (_LIBC - 0) || (_CTHREADS_ - 0) ++#if (_LIBC - 0) ++#include ++#endif + #include + #include + +--- a/sysdeps/mach/hurd/fork.c ++++ b/sysdeps/mach/hurd/fork.c +@@ -528,6 +528,11 @@ __fork (void) + #endif + MACHINE_THREAD_STATE_SET_PC (&state, + (unsigned long int) _hurd_msgport_receive); ++ ++ /* Do special thread setup for TLS if needed. */ ++ if (err = _hurd_tls_fork (sigthread, _hurd_msgport_thread, &state)) ++ LOSE; ++ + if (err = __thread_set_state (sigthread, MACHINE_THREAD_STATE_FLAVOR, + (natural_t *) &state, statecount)) + LOSE; +@@ -538,7 +543,7 @@ __fork (void) + _hurd_longjmp_thread_state (&state, env, 1); + + /* Do special thread setup for TLS if needed. */ +- if (err = _hurd_tls_fork (thread, &state)) ++ if (err = _hurd_tls_fork (thread, ss->thread, &state)) + LOSE; + + if (err = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, +--- a/sysdeps/mach/hurd/i386/init-first.c ++++ b/sysdeps/mach/hurd/i386/init-first.c +@@ -113,31 +113,11 @@ init1 (int argc, char *arg0, ...) + data block; the argument strings start there. */ + if ((void *) d == argv[0]) + { +-#ifndef SHARED +- /* With a new enough linker (binutils-2.23 or better), +- the magic __ehdr_start symbol will be available and +- __libc_start_main will have done this that way already. */ +- if (_dl_phdr == NULL) +- { +- /* We may need to see our own phdrs, e.g. for TLS setup. +- Try the usual kludge to find the headers without help from +- the exec server. */ +- extern const void __executable_start; +- const ElfW(Ehdr) *const ehdr = &__executable_start; +- _dl_phdr = (const void *) ehdr + ehdr->e_phoff; +- _dl_phnum = ehdr->e_phnum; +- assert (ehdr->e_phentsize == sizeof (ElfW(Phdr))); +- } +-#endif + return; + } + + #ifndef SHARED + __libc_enable_secure = d->flags & EXEC_SECURE; +- +- _dl_phdr = (ElfW(Phdr) *) d->phdr; +- _dl_phnum = d->phdrsz / sizeof (ElfW(Phdr)); +- assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0); + #endif + + _hurd_init_dtable = d->dtable; +@@ -193,6 +173,40 @@ init (int *data) + ++envp; + d = (void *) ++envp; + ++#ifndef SHARED ++ /* If we are the bootstrap task started by the kernel, ++ then after the environment pointers there is no Hurd ++ data block; the argument strings start there. */ ++ if ((void *) d == argv[0]) ++ { ++ /* With a new enough linker (binutils-2.23 or better), ++ the magic __ehdr_start symbol will be available and ++ __libc_start_main will have done this that way already. */ ++ if (_dl_phdr == NULL) ++ { ++ /* We may need to see our own phdrs, e.g. for TLS setup. ++ Try the usual kludge to find the headers without help from ++ the exec server. */ ++ extern const void __executable_start; ++ const ElfW(Ehdr) *const ehdr = &__executable_start; ++ _dl_phdr = (const void *) ehdr + ehdr->e_phoff; ++ _dl_phnum = ehdr->e_phnum; ++ assert (ehdr->e_phentsize == sizeof (ElfW(Phdr))); ++ } ++ } ++ else ++ { ++ _dl_phdr = (ElfW(Phdr) *) d->phdr; ++ _dl_phnum = d->phdrsz / sizeof (ElfW(Phdr)); ++ assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0); ++ } ++ ++ /* We need to setup TLS before starting the signal thread. */ ++ extern void __pthread_initialize_minimal (void); ++ if (__pthread_initialize_minimal != NULL) ++ __pthread_initialize_minimal (); ++#endif ++ + /* The user might have defined a value for this, to get more variables. + Otherwise it will be zero on startup. We must make sure it is set + properly before before cthreads initialization, so cthreads can know +--- a/sysdeps/mach/hurd/i386/tls.h ++++ b/sysdeps/mach/hurd/i386/tls.h +@@ -56,6 +56,15 @@ typedef struct + #define TLS_TCB_AT_TP 1 + #define TLS_DTV_AT_TP 0 + ++/* Alignment requirement for TCB. ++ ++ Some processors such as Intel Atom pay a big penalty on every ++ access using a segment override if that segment's base is not ++ aligned to the size of a cache line. (See Intel 64 and IA-32 ++ Architectures Optimization Reference Manual, section 13.3.3.3, ++ "Segment Base".) On such machines, a cache line is 64 bytes. */ ++#define TCB_ALIGNMENT 64 ++ + #ifndef __ASSEMBLER__ + + /* Use i386-specific RPCs to arrange that %gs segment register prefix +@@ -139,9 +139,40 @@ _hurd_tls_init (tcbhead_t *tcb, int seco + + # include + +-/* Set up TLS in the new thread of a fork child, copying from our own. */ +-static inline error_t __attribute__ ((unused)) +-_hurd_tls_fork (thread_t child, struct i386_thread_state *state) ++/* Set up TLS in the new thread of a fork child, copying from the original. */ ++static inline kern_return_t __attribute__ ((unused)) ++_hurd_tls_fork (thread_t child, thread_t orig, struct i386_thread_state *state) ++{ ++ /* Fetch the selector set by _hurd_tls_init. */ ++ int sel; ++ asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0)); ++ if (sel == state->ds) /* _hurd_tls_init was never called. */ ++ return 0; ++ ++ struct descriptor desc, *_desc = &desc; ++ error_t err; ++ unsigned int count = 1; ++ ++ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */ ++ err = __i386_get_ldt (orig, sel, 1, &_desc, &count); ++ else ++ err = __i386_get_gdt (orig, sel, &desc); ++ ++ assert_perror (err); ++ if (err) ++ return err; ++ ++ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */ ++ err = __i386_set_ldt (child, sel, &desc, 1); ++ else ++ err = __i386_set_gdt (child, &sel, desc); ++ ++ state->gs = sel; ++ return err; ++} ++ ++static inline kern_return_t __attribute__ ((unused)) ++_hurd_tls_new (thread_t child, struct i386_thread_state *state, tcbhead_t *tcb) + { + /* Fetch the selector set by _hurd_tls_init. */ + int sel; +@@ -149,11 +180,13 @@ _hurd_tls_fork (thread_t child, struct i + if (sel == state->ds) /* _hurd_tls_init was never called. */ + return 0; + +- tcbhead_t *const tcb = THREAD_SELF; + HURD_TLS_DESC_DECL (desc, tcb); + error_t err; ++ ++ tcb->tcb = tcb; ++ tcb->self = child; + +- if (__builtin_expect (sel, 0x50) & 4) /* LDT selector */ ++ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */ + err = __i386_set_ldt (child, sel, &desc, 1); + else + err = __i386_set_gdt (child, &sel, desc); +--- a/sysdeps/mach/hurd/i386/trampoline.c ++++ b/sysdeps/mach/hurd/i386/trampoline.c +@@ -63,7 +63,7 @@ _hurd_setup_sighandler (struct hurd_sigs + sizeof (state->basic)); + memcpy (&state->fpu, &ss->context->sc_i386_float_state, + sizeof (state->fpu)); +- state->set |= (1 << i386_THREAD_STATE) | (1 << i386_FLOAT_STATE); ++ state->set |= (1 << i386_REGS_SEGS_STATE) | (1 << i386_FLOAT_STATE); + } + } + +--- a/sysdeps/mach/hurd/profil.c ++++ b/sysdeps/mach/hurd/profil.c +@@ -68,6 +68,8 @@ update_waiter (u_short *sample_buffer, s + if (! err) + err = __mach_setup_thread (__mach_task_self (), profile_thread, + &profile_waiter, NULL, NULL); ++ if (! err) ++ err = __mach_setup_tls(profile_thread); + } + else + err = 0; +--- a/sysdeps/mach/hurd/setitimer.c ++++ b/sysdeps/mach/hurd/setitimer.c +@@ -221,11 +221,12 @@ setitimer_locked (const struct itimerval + goto out; + _hurd_itimer_thread_stack_base = 0; /* Anywhere. */ + _hurd_itimer_thread_stack_size = __vm_page_size; /* Small stack. */ +- if (err = __mach_setup_thread (__mach_task_self (), ++ if ((err = __mach_setup_thread (__mach_task_self (), + _hurd_itimer_thread, + &timer_thread, + &_hurd_itimer_thread_stack_base, + &_hurd_itimer_thread_stack_size)) ++ || (err = __mach_setup_tls(_hurd_itimer_thread))) + { + __thread_terminate (_hurd_itimer_thread); + _hurd_itimer_thread = MACH_PORT_NULL; +--- a/sysdeps/mach/i386/thread_state.h ++++ b/sysdeps/mach/i386/thread_state.h +@@ -21,7 +21,8 @@ + + #include + +-#define MACHINE_THREAD_STATE_FLAVOR i386_THREAD_STATE ++#define MACHINE_NEW_THREAD_STATE_FLAVOR i386_THREAD_STATE ++#define MACHINE_THREAD_STATE_FLAVOR i386_REGS_SEGS_STATE + #define MACHINE_THREAD_STATE_COUNT i386_THREAD_STATE_COUNT + + #define machine_thread_state i386_thread_state +@@ -30,6 +31,14 @@ + #define SP uesp + #define SYSRETURN eax + ++#define MACHINE_THREAD_STATE_FIX_NEW(ts) do { \ ++ asm ("mov %%cs, %w0" : "=q" ((ts)->cs)); \ ++ asm ("mov %%ds, %w0" : "=q" ((ts)->ds)); \ ++ asm ("mov %%es, %w0" : "=q" ((ts)->es)); \ ++ asm ("mov %%fs, %w0" : "=q" ((ts)->fs)); \ ++ asm ("mov %%gs, %w0" : "=q" ((ts)->gs)); \ ++} while(0) ++ + struct machine_thread_all_state + { + int set; /* Mask of bits (1 << FLAVOR). */ +--- a/sysdeps/mach/thread_state.h ++++ b/sysdeps/mach/thread_state.h +@@ -37,6 +37,9 @@ + ((ts)->SP = (unsigned long int) (stack) + (size)) + #endif + #endif ++#ifndef MACHINE_THREAD_STATE_FIX_NEW ++# define MACHINE_THREAD_STATE_FIX_NEW(ts) ++#endif + + /* These functions are of use in machine-dependent signal trampoline + implementations. */ diff -Nru glibc-2.27/debian/patches/hurd-i386/git-tls_thread_leak.diff glibc-2.27/debian/patches/hurd-i386/git-tls_thread_leak.diff --- glibc-2.27/debian/patches/hurd-i386/git-tls_thread_leak.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-tls_thread_leak.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,71 @@ +From: Richard Braun +Subject: [PATCH] Hurd: fix port leak in TLS + +Depending on whether the thread is the main thread or not, the threading +library can have trouble determining whether the thread reference in the +TCB is valid. The simple solution is to let the threading library +initialize the TCB, and use a temporary reference when initializing TLS. + +* sysdeps/mach/hurd/i386/tls.h (_hurd_tls_init): Use a temporary thread +reference. + +--- + sysdeps/mach/hurd/i386/tls.h | 35 +++++++++++++++++++++++------------ + 1 file changed, 23 insertions(+), 12 deletions(-) + +--- a/sysdeps/mach/hurd/i386/tls.h ++++ b/sysdeps/mach/hurd/i386/tls.h +@@ -69,6 +69,8 @@ static inline const char * __attribute__ + _hurd_tls_init (tcbhead_t *tcb) + { + HURD_TLS_DESC_DECL (desc, tcb); ++ thread_t self = __mach_thread_self (); ++ const char *msg = NULL; + + /* This field is used by TLS accesses to get our "thread pointer" + from the TLS point of view. */ +@@ -76,25 +78,26 @@ _hurd_tls_init (tcbhead_t *tcb, int seco + from the TLS point of view. */ + tcb->tcb = tcb; + +- /* Cache our thread port. */ +- tcb->self = __mach_thread_self (); +- + /* Get the first available selector. */ + int sel = -1; +- error_t err = __i386_set_gdt (tcb->self, &sel, desc); ++ error_t err = __i386_set_gdt (self, &sel, desc); + if (err == MIG_BAD_ID) + { + /* Old kernel, use a per-thread LDT. */ + sel = 0x27; +- err = __i386_set_ldt (tcb->self, sel, &desc, 1); ++ err = __i386_set_ldt (self, sel, &desc, 1); + assert_perror (err); + if (err) +- return "i386_set_ldt failed"; ++ { ++ msg = "i386_set_ldt failed"; ++ goto out; ++ } + } + else if (err) + { + assert_perror (err); /* Separate from above with different line #. */ +- return "i386_set_gdt failed"; ++ msg = "i386_set_gdt failed"; ++ goto out; + } + + /* Now install the new selector. */ +@@ -107,7 +110,9 @@ _hurd_tls_init (tcbhead_t *tcb, int seco + /* Now install the new selector. */ + asm volatile ("mov %w0, %%gs" :: "q" (sel)); + +- return 0; ++out: ++ __mach_port_deallocate (__mach_task_self (), self); ++ return msg; + } + + /* Code to initially initialize the thread pointer. This might need diff -Nru glibc-2.27/debian/patches/hurd-i386/git-tls-threadvar.diff glibc-2.27/debian/patches/hurd-i386/git-tls-threadvar.diff --- glibc-2.27/debian/patches/hurd-i386/git-tls-threadvar.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-tls-threadvar.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,846 @@ +From: Thomas Schwinge +Subject: [PATCH] tls-threadvar + +replace the custom threadvar mechanism with generic TLS. +That will fix sigaltstack. + +Note: the added reply_port and _hurd_sigstate fields should be kept last. + +--- + hurd/Versions | 6 - + hurd/hurd/signal.h | 23 ++++--- + hurd/hurd/threadvar.h | 85 ++-------------------------- + hurd/hurdsig.c | 51 ++++++++++------ + hurd/hurdstartup.c | 1 + hurd/sigunwind.c | 4 - + include/errno.h | 2 + sysdeps/mach/hurd/Versions | 4 - + sysdeps/mach/hurd/cthreads.c | 2 + sysdeps/mach/hurd/dl-sysdep.c | 19 ------ + sysdeps/mach/hurd/errno-loc.c | 22 ++++--- + sysdeps/mach/hurd/errno.c | 1 + sysdeps/mach/hurd/fork.c | 7 -- + sysdeps/mach/hurd/i386/init-first.c | 36 ----------- + sysdeps/mach/hurd/i386/makecontext-helper.c | 2 + sysdeps/mach/hurd/i386/makecontext.S | 2 + sysdeps/mach/hurd/i386/sigreturn.c | 5 - + sysdeps/mach/hurd/i386/tls.h | 29 +++++++++ + sysdeps/mach/hurd/libc-lock.h | 4 - + sysdeps/mach/hurd/libc-tsd.h | 34 ----------- + sysdeps/mach/hurd/mig-reply.c | 39 +++--------- + sysdeps/mach/hurd/profil.c | 6 - + 22 files changed, 126 insertions(+), 258 deletions(-) + +--- a/hurd/Versions ++++ b/hurd/Versions +@@ -4,14 +4,9 @@ + _end; + + # variables used in macros & inline functions +- __hurd_sigthread_stack_base; __hurd_sigthread_stack_end; +- __hurd_sigthread_variables; + __hurd_threadvar_max; + __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset; + +- # functions used in macros & inline functions +- __hurd_errno_location; +- + # functions used in libmachuser and libhurduser + _S_catch_exception_raise; + _S_catch_exception_raise_state; +@@ -146,6 +141,7 @@ + HURD_CTHREADS_0.3 { + # weak refs to libthreads functions that libc calls iff libthreads in use + cthread_fork; cthread_detach; ++ pthread_getattr_np; pthread_attr_getstack; + + # variables used for detecting cthreads + _cthread_exit_routine; _cthread_init_routine; +--- a/hurd/hurd/signal.h ++++ b/hurd/hurd/signal.h +@@ -40,7 +40,6 @@ + #include /* For `struct mutex'. */ + #include /* For `jmp_buf'. */ + #include +-#include /* We cache sigstate in a threadvar. */ + struct hurd_signal_preemptor; /* */ + #if defined __USE_EXTERN_INLINES && defined _LIBC + # if IS_IN (libc) || IS_IN (libpthread) +@@ -139,11 +138,9 @@ + _HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * + _hurd_self_sigstate (void) + { +- struct hurd_sigstate **location = (struct hurd_sigstate **) +- (void *) __hurd_threadvar_location (_HURD_THREADVAR_SIGSTATE); +- if (*location == NULL) +- *location = _hurd_thread_sigstate (__mach_thread_self ()); +- return *location; ++ if (THREAD_SELF->_hurd_sigstate == NULL) ++ THREAD_SELF->_hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); ++ return THREAD_SELF->_hurd_sigstate; + } + # endif + #endif +@@ -180,16 +177,22 @@ + _HURD_SIGNAL_H_EXTERN_INLINE void * + _hurd_critical_section_lock (void) + { +- struct hurd_sigstate **location = (struct hurd_sigstate **) +- (void *) __hurd_threadvar_location (_HURD_THREADVAR_SIGSTATE); +- struct hurd_sigstate *ss = *location; ++ struct hurd_sigstate *ss; ++ ++#ifdef __LIBC_NO_TLS ++ if (__LIBC_NO_TLS()) ++ /* TLS is currently initializing, no need to enter critical section. */ ++ return NULL; ++#endif ++ ++ ss = THREAD_SELF->_hurd_sigstate; + if (ss == NULL) + { + /* The thread variable is unset; this must be the first time we've + asked for it. In this case, the critical section flag cannot + possible already be set. Look up our sigstate structure the slow + way. */ +- ss = *location = _hurd_thread_sigstate (__mach_thread_self ()); ++ ss = THREAD_SELF->_hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); + } + + if (! __spin_try_lock (&ss->critical_section_lock)) +--- a/hurd/hurd/threadvar.h ++++ b/hurd/hurd/threadvar.h +@@ -20,6 +20,7 @@ + #define _HURD_THREADVAR_H + + #include ++#include + + /* The per-thread variables are found by ANDing this mask + with the value of the stack pointer and then adding this offset. +@@ -30,96 +31,24 @@ + __hurd_threadvar_stack_offset to a small offset that skips the data + cthreads itself maintains at the base of each thread's stack. + +- In the single-threaded case, __hurd_threadvar_stack_mask is zero, so the +- stack pointer is ignored; and __hurd_threadvar_stack_offset gives the +- address of a small allocated region which contains the variables for the +- single thread. */ ++ In the single-threaded or libpthread case, __hurd_threadvar_stack_mask is ++ zero, so the stack pointer is ignored. */ + + extern unsigned long int __hurd_threadvar_stack_mask; + extern unsigned long int __hurd_threadvar_stack_offset; + +-/* A special case must always be made for the signal thread. Even when there +- is only one user thread and an allocated region can be used for the user +- thread's variables, the signal thread needs to have its own location for +- per-thread variables. The variables __hurd_sigthread_stack_base and ++/* The variables __hurd_sigthread_stack_base and + __hurd_sigthread_stack_end define the bounds of the stack used by the + signal thread, so that thread can always be specifically identified. */ + + extern unsigned long int __hurd_sigthread_stack_base; + extern unsigned long int __hurd_sigthread_stack_end; +-extern unsigned long int *__hurd_sigthread_variables; + + +-/* At the location described by the two variables above, +- there are __hurd_threadvar_max `unsigned long int's of per-thread data. */ ++/* We do not use threadvars any more, this is kept as zero for compatibility with cthreads */ + extern unsigned int __hurd_threadvar_max; + +-/* These values are the indices for the standard per-thread variables. */ +-enum __hurd_threadvar_index +- { +- _HURD_THREADVAR_MIG_REPLY, /* Reply port for MiG user stub functions. */ +- _HURD_THREADVAR_ERRNO, /* `errno' value for this thread. */ +- _HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */ +- _HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */ +- _HURD_THREADVAR_MALLOC, /* For use of malloc. */ +- _HURD_THREADVAR_DL_ERROR, /* For use of -ldl and dynamic linker. */ +- _HURD_THREADVAR_RPC_VARS, /* For state of RPC functions. */ +- _HURD_THREADVAR_LOCALE, /* For thread-local locale setting. */ +- _HURD_THREADVAR_CTYPE_B, /* Cache of thread-local locale data. */ +- _HURD_THREADVAR_CTYPE_TOLOWER, /* Cache of thread-local locale data. */ +- _HURD_THREADVAR_CTYPE_TOUPPER, /* Cache of thread-local locale data. */ +- _HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */ +- }; +- +- +-#ifndef _HURD_THREADVAR_H_EXTERN_INLINE +-#define _HURD_THREADVAR_H_EXTERN_INLINE __extern_inline +-#endif +- +-/* Return the location of the value for the per-thread variable with index +- INDEX used by the thread whose stack pointer is SP. */ +- +-extern unsigned long int *__hurd_threadvar_location_from_sp +- (enum __hurd_threadvar_index __index, void *__sp); +- +-#if defined __USE_EXTERN_INLINES && defined _LIBC +-# if IS_IN (libc) +-_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * +-__hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index, +- void *__sp) +-{ +- unsigned long int __stack = (unsigned long int) __sp; +- return &((__stack >= __hurd_sigthread_stack_base && +- __stack < __hurd_sigthread_stack_end) +- ? __hurd_sigthread_variables +- : (unsigned long int *) ((__stack & __hurd_threadvar_stack_mask) + +- __hurd_threadvar_stack_offset))[__index]; +-} +-# endif +-#endif +- +-#include /* Define __thread_stack_pointer. */ +- +-/* Return the location of the current thread's value for the +- per-thread variable with index INDEX. */ +- +-extern unsigned long int * +-__hurd_threadvar_location (enum __hurd_threadvar_index __index) __THROW +- /* This declaration tells the compiler that the value is constant +- given the same argument. We assume this won't be called twice from +- the same stack frame by different threads. */ +- __attribute__ ((__const__)); +- +-#if defined __USE_EXTERN_INLINES && defined _LIBC +-# if IS_IN (libc) +-_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * +-__hurd_threadvar_location (enum __hurd_threadvar_index __index) +-{ +- return __hurd_threadvar_location_from_sp (__index, +- __thread_stack_pointer ()); +-} +-# endif +-#endif +- ++extern mach_port_t __hurd_reply_port0; ++#define __hurd_local_reply_port (*(__LIBC_NO_TLS() ? &__hurd_reply_port0 : &THREAD_SELF->reply_port)) + + #endif /* hurd/threadvar.h */ +--- a/hurd/hurdsig.c ++++ b/hurd/hurdsig.c +@@ -20,6 +20,7 @@ + #include + + #include /* For `struct mutex'. */ ++#include + #include + #include + +@@ -48,7 +49,6 @@ + /* These are set up by _hurdsig_init. */ + unsigned long int __hurd_sigthread_stack_base; + unsigned long int __hurd_sigthread_stack_end; +-unsigned long int *__hurd_sigthread_variables; + + /* Linked-list of per-thread signal state. */ + struct hurd_sigstate *_hurd_sigstates; +@@ -234,14 +234,14 @@ + that this location can be set without faulting, or else return NULL. */ + + static mach_port_t * +-interrupted_reply_port_location (struct machine_thread_all_state *thread_state, ++interrupted_reply_port_location (thread_t thread, ++ struct machine_thread_all_state *thread_state, + int sigthread) + { +- mach_port_t *portloc = (mach_port_t *) __hurd_threadvar_location_from_sp +- (_HURD_THREADVAR_MIG_REPLY, (void *) thread_state->basic.SP); ++ mach_port_t *portloc = &THREAD_TCB(thread, thread_state)->reply_port; + + if (sigthread && _hurdsig_catch_memory_fault (portloc)) +- /* Faulted trying to read the stack. */ ++ /* Faulted trying to read the TCB. */ + return NULL; + + /* Fault now if this pointer is bogus. */ +@@ -323,7 +323,8 @@ + our nonzero return tells the trampoline code to finish the message + receive operation before running the handler. */ + +- mach_port_t *reply = interrupted_reply_port_location (state, ++ mach_port_t *reply = interrupted_reply_port_location (ss->thread, ++ state, + sigthread); + error_t err = __interrupt_operation (intr_port, _hurdsig_interrupt_timeout); + +@@ -835,7 +836,8 @@ + + if (! machine_get_basic_state (ss->thread, &thread_state)) + goto sigbomb; +- loc = interrupted_reply_port_location (&thread_state, 1); ++ loc = interrupted_reply_port_location (ss->thread, ++ &thread_state, 1); + if (loc && *loc != MACH_PORT_NULL) + /* This is the reply port for the context which called + sigreturn. Since we are abandoning that context entirely +@@ -901,7 +903,8 @@ + { + /* Fetch the thread variable for the MiG reply port, + and set it to MACH_PORT_NULL. */ +- mach_port_t *loc = interrupted_reply_port_location (&thread_state, ++ mach_port_t *loc = interrupted_reply_port_location (ss->thread, ++ &thread_state, + 1); + if (loc) + { +@@ -1255,7 +1258,11 @@ + + /* Start the signal thread listening on the message port. */ + +- if (__hurd_threadvar_stack_mask == 0) ++#pragma weak cthread_fork ++#pragma weak cthread_detach ++#pragma weak pthread_getattr_np ++#pragma weak pthread_attr_getstack ++ if (!cthread_fork) + { + err = __thread_create (__mach_task_self (), &_hurd_msgport_thread); + assert_perror (err); +@@ -1270,14 +1277,6 @@ + assert_perror (err); + + __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + stacksize; +- __hurd_sigthread_variables = +- malloc (__hurd_threadvar_max * sizeof (unsigned long int)); +- if (__hurd_sigthread_variables == NULL) +- __libc_fatal ("hurd: Can't allocate threadvars for signal thread\n"); +- memset (__hurd_sigthread_variables, 0, +- __hurd_threadvar_max * sizeof (unsigned long int)); +- __hurd_sigthread_variables[_HURD_THREADVAR_LOCALE] +- = (unsigned long int) &_nl_global_locale; + + /* Reinitialize the MiG support routines so they will use a per-thread + variable for the cached reply port. */ +@@ -1288,6 +1287,7 @@ + } + else + { ++ cthread_t thread; + /* When cthreads is being used, we need to make the signal thread a + proper cthread. Otherwise it cannot use mutex_lock et al, which + will be the cthreads versions. Various of the message port RPC +@@ -1297,9 +1297,20 @@ + we'll let the signal thread's per-thread variables be found as for + any normal cthread, and just leave the magic __hurd_sigthread_* + values all zero so they'll be ignored. */ +-#pragma weak cthread_fork +-#pragma weak cthread_detach +- cthread_detach (cthread_fork ((cthread_fn_t) &_hurd_msgport_receive, 0)); ++ cthread_detach (thread = cthread_fork ((cthread_fn_t) &_hurd_msgport_receive, 0)); ++ ++ if (pthread_getattr_np) ++ { ++ /* Record stack layout for fork() */ ++ pthread_attr_t attr; ++ void *addr; ++ size_t size; ++ ++ pthread_getattr_np ((pthread_t) thread, &attr); ++ pthread_attr_getstack (&attr, &addr, &size); ++ __hurd_sigthread_stack_base = (uintptr_t) addr; ++ __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + size; ++ } + + /* XXX We need the thread port for the signal thread further on + in this thread (see hurdfault.c:_hurdsigfault_init). +--- a/hurd/hurdstartup.c ++++ b/hurd/hurdstartup.c +@@ -23,7 +23,6 @@ + #include + #include + #include +-#include + #include + #include + #include +--- a/hurd/sigunwind.c ++++ b/hurd/sigunwind.c +@@ -18,6 +18,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -38,8 +39,7 @@ + { + /* Destroy the MiG reply port used by the signal handler, and restore + the reply port in use by the thread when interrupted. */ +- mach_port_t *reply_port = +- (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY); ++ mach_port_t *reply_port = &__hurd_local_reply_port; + if (*reply_port) + { + mach_port_t port = *reply_port; +--- a/include/errno.h ++++ b/include/errno.h +@@ -24,7 +24,7 @@ + + # include + +-# if !defined(__GNU__) ++# if !(defined(__GNU__) && IS_IN (rtld)) + # undef errno + # if IS_IN (libc) + # define errno __libc_errno +--- a/sysdeps/mach/hurd/Versions ++++ b/sysdeps/mach/hurd/Versions +@@ -6,6 +6,7 @@ + GLIBC_PRIVATE { + # Functions shared with the dynamic linker + __libc_read; __libc_write; __libc_lseek64; ++ __libc_lock_self0; + + _dl_init_first; + } +@@ -14,8 +15,6 @@ + ld { + GLIBC_2.0 { + # variables that must be shared with libc +- __hurd_sigthread_stack_base; __hurd_sigthread_stack_end; +- __hurd_sigthread_variables; + __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset; + + # functions that must be shared with libc +@@ -33,5 +32,6 @@ + + # functions that must be shared with libc + __libc_read; __libc_write; __libc_lseek64; ++ __libc_lock_self0; + } + } +--- a/sysdeps/mach/hurd/libc-lock.h ++++ b/sysdeps/mach/hurd/libc-lock.h +@@ -24,7 +24,6 @@ + #include + #endif + #include +-#include + + /* The locking here is very inexpensive, even for inlining. */ + #define _IO_lock_inexpensive 1 +@@ -38,7 +37,8 @@ + } __libc_lock_recursive_t; + typedef __libc_lock_recursive_t __rtld_lock_recursive_t; + +-#define __libc_lock_owner_self() ((void *) __hurd_threadvar_location (0)) ++extern char __libc_lock_self0[0]; ++#define __libc_lock_owner_self() (__LIBC_NO_TLS() ? &__libc_lock_self0 : THREAD_SELF) + + #else + typedef struct __libc_lock_opaque__ __libc_lock_t; +--- a/sysdeps/mach/hurd/libc-tsd.h ++++ /dev/null +@@ -1,34 +0,0 @@ +-/* libc-internal interface for thread-specific data. Hurd version. +- Copyright (C) 1998-2018 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- The GNU C Library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, see +- . */ +- +-#ifndef _LIBC_TSD_H +-#define _LIBC_TSD_H 1 +- +-#include +- +-#define __libc_tsd_define(CLASS, TYPE, KEY) /* nothing, always have threadvars */ +- +-#define __libc_tsd_address(TYPE, KEY) \ +- ((TYPE *) __hurd_threadvar_location (_HURD_THREADVAR_##KEY)) +- +-#define __libc_tsd_get(TYPE, KEY) \ +- (*__libc_tsd_address (TYPE, KEY)) +-#define __libc_tsd_set(TYPE, KEY, VALUE) \ +- (*__libc_tsd_address (TYPE, KEY) = (VALUE)) +- +-#endif /* libc-tsd.h */ +--- a/sysdeps/mach/hurd/cthreads.c ++++ b/sysdeps/mach/hurd/cthreads.c +@@ -19,6 +19,8 @@ + #include + #include + ++char __libc_lock_self0[0]; ++ + /* Placeholder for key creation routine from Hurd cthreads library. */ + int + weak_function +--- a/sysdeps/mach/hurd/dl-sysdep.c ++++ b/sysdeps/mach/hurd/dl-sysdep.c +@@ -67,25 +67,6 @@ + + struct hurd_startup_data *_dl_hurd_data; + +-/* This is used only within ld.so, via dl-minimal.c's __errno_location. */ +-#undef errno +-int errno attribute_hidden; +- +-/* Defining these variables here avoids the inclusion of hurdsig.c. */ +-unsigned long int __hurd_sigthread_stack_base; +-unsigned long int __hurd_sigthread_stack_end; +-unsigned long int *__hurd_sigthread_variables; +- +-/* Defining these variables here avoids the inclusion of init-first.c. +- We need to provide temporary storage for the per-thread variables +- of the main user thread here, since it is used for storing the +- `errno' variable. Note that this information is lost once we +- relocate the dynamic linker. */ +-static unsigned long int threadvars[_HURD_THREADVAR_MAX]; +-unsigned long int __hurd_threadvar_stack_offset +- = (unsigned long int) &threadvars; +-unsigned long int __hurd_threadvar_stack_mask; +- + #define FMH defined(__i386__) + #if ! FMH + # define fmh() ((void)0) +--- a/sysdeps/mach/hurd/errno-loc.c ++++ b/sysdeps/mach/hurd/errno-loc.c +@@ -16,13 +16,21 @@ + License along with the GNU C Library; if not, see + . */ + +-#include +-#include +- +-int * ++#if IS_IN (rtld) ++/* ++ * rtld can not access TLS too early, thus rtld_errno. ++ * ++ * Instead of making __open/__close pass errno from TLS to rtld_errno, simply ++ * use a weak __errno_location using rtld_errno, which will be overriden by the ++ * libc definition. ++ */ ++static int rtld_errno; ++int * weak_function + __errno_location (void) + { +- return (int *) __hurd_threadvar_location (_HURD_THREADVAR_ERRNO); ++ return &rtld_errno; + } +-strong_alias (__errno_location, __hurd_errno_location) +-libc_hidden_def (__errno_location) ++libc_hidden_weak (__errno_location) ++#else ++#include <../../../csu/errno-loc.c> ++#endif +--- a/sysdeps/mach/hurd/errno.c ++++ /dev/null +@@ -1 +0,0 @@ +-/* No definition of `errno' variable on the Hurd. */ +--- a/sysdeps/mach/hurd/fork.c ++++ b/sysdeps/mach/hurd/fork.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + #include + #include + #include /* For stack growth direction. */ +@@ -483,19 +484,17 @@ + (natural_t *) &state, &statecount)) + LOSE; + #ifdef STACK_GROWTH_UP +-#define THREADVAR_SPACE (__hurd_threadvar_max \ +- * sizeof *__hurd_sightread_variables) + if (__hurd_sigthread_stack_base == 0) + { + state.SP &= __hurd_threadvar_stack_mask; +- state.SP += __hurd_threadvar_stack_offset + THREADVAR_SPACE; ++ state.SP += __hurd_threadvar_stack_offset; + } + else + state.SP = __hurd_sigthread_stack_base; + #else + if (__hurd_sigthread_stack_end == 0) + { +- /* The signal thread has a normal stack assigned by cthreads. ++ /* The signal thread has a stack assigned by cthreads. + The threadvar_stack variables conveniently tell us how + to get to the highest address in the stack, just below + the per-thread variables. */ +--- a/sysdeps/mach/hurd/i386/init-first.c ++++ b/sysdeps/mach/hurd/i386/init-first.c +@@ -149,15 +149,6 @@ + char **argv = (void *) (data + 1); + char **envp = &argv[argc + 1]; + struct hurd_startup_data *d; +- unsigned long int threadvars[_HURD_THREADVAR_MAX]; +- +- /* Provide temporary storage for thread-specific variables on the +- startup stack so the cthreads initialization code can use them +- for malloc et al, or so we can use malloc below for the real +- threadvars array. */ +- memset (threadvars, 0, sizeof threadvars); +- threadvars[_HURD_THREADVAR_LOCALE] = (unsigned long int) &_nl_global_locale; +- __hurd_threadvar_stack_offset = (unsigned long int) threadvars; + + /* Since the cthreads initialization code uses malloc, and the + malloc initialization code needs to get at the environment, make +@@ -204,13 +195,6 @@ + __pthread_initialize_minimal (); + #endif + +- /* The user might have defined a value for this, to get more variables. +- Otherwise it will be zero on startup. We must make sure it is set +- properly before before cthreads initialization, so cthreads can know +- how much space to leave for thread variables. */ +- if (__hurd_threadvar_max < _HURD_THREADVAR_MAX) +- __hurd_threadvar_max = _HURD_THREADVAR_MAX; +- + + /* After possibly switching stacks, call `init1' (above) with the user + code as the return address, and the argument data immediately above +@@ -226,11 +210,6 @@ + + __libc_stack_end = newsp; + +- /* Copy per-thread variables from that temporary +- area onto the new cthread stack. */ +- memcpy (__hurd_threadvar_location_from_sp (0, newsp), +- threadvars, sizeof threadvars); +- + /* Copy the argdata from the old stack to the new one. */ + newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data, + (char *) d - (char *) data); +@@ -271,25 +250,10 @@ + } + else + { +- /* We are not using cthreads, so we will have just a single allocated +- area for the per-thread variables of the main user thread. */ +- unsigned long int *array; +- unsigned int i; + int usercode; + + void call_init1 (void); + +- array = malloc (__hurd_threadvar_max * sizeof (unsigned long int)); +- if (array == NULL) +- __libc_fatal ("Can't allocate single-threaded thread variables."); +- +- /* Copy per-thread variables from the temporary array into the +- newly malloc'd space. */ +- memcpy (array, threadvars, sizeof threadvars); +- __hurd_threadvar_stack_offset = (unsigned long int) array; +- for (i = _HURD_THREADVAR_MAX; i < __hurd_threadvar_max; ++i) +- array[i] = 0; +- + /* The argument data is just above the stack frame we will unwind by + returning. Mutate our own return address to run the code below. */ + /* The following expression would typically be written as +--- a/sysdeps/mach/hurd/i386/makecontext-helper.c ++++ b/sysdeps/mach/hurd/i386/makecontext-helper.c +@@ -22,6 +22,7 @@ + #include + #include + ++#if 0 + + void + __makecontext_helper (ucontext_t *ucp) +@@ -67,3 +68,4 @@ + ucp->uc_stack.ss_size -= t_size; + } + } ++#endif +--- a/sysdeps/mach/hurd/i386/makecontext.S ++++ b/sysdeps/mach/hurd/i386/makecontext.S +@@ -27,7 +27,7 @@ + subl $4, %esp + cfi_adjust_cfa_offset (4) + movl %eax, (%esp) +- call HIDDEN_JUMPTARGET (__makecontext_helper) ++ /* call HIDDEN_JUMPTARGET (__makecontext_helper) */ + addl $4, %esp + cfi_adjust_cfa_offset (-4) + +--- a/sysdeps/mach/hurd/i386/sigreturn.c ++++ b/sysdeps/mach/hurd/i386/sigreturn.c +@@ -68,7 +68,7 @@ + + if (scp->sc_onstack) + { +- ss->sigaltstack.ss_flags &= ~SS_ONSTACK; /* XXX threadvars */ ++ ss->sigaltstack.ss_flags &= ~SS_ONSTACK; + /* XXX cannot unlock until off sigstack */ + abort (); + } +@@ -77,8 +77,7 @@ + + /* Destroy the MiG reply port used by the signal handler, and restore the + reply port in use by the thread when interrupted. */ +- reply_port = +- (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY); ++ reply_port = &__hurd_local_reply_port; + if (*reply_port) + { + mach_port_t port = *reply_port; +--- a/sysdeps/mach/hurd/i386/tls.h ++++ b/sysdeps/mach/hurd/i386/tls.h +@@ -43,6 +43,10 @@ + void *__private_tm[4]; + /* GCC split stack support. */ + void *__private_ss; ++ ++ /* Keep this field last */ ++ mach_port_t reply_port; /* This thread's reply port. */ ++ struct hurd_sigstate *_hurd_sigstate; + } tcbhead_t; + #endif + +@@ -87,6 +91,17 @@ + | (((unsigned int) (tcb)) & 0xff000000) /* base 24..31 */ \ + } + ++# define HURD_DESC_TLS(desc) \ ++ ({ \ ++ (tcbhead_t *) ( (desc->low_word >> 16) \ ++ | ((desc->high_word & 0xff) << 16) \ ++ | (desc->high_word & 0xff000000) \ ++ );}) ++ ++#define __LIBC_NO_TLS() \ ++ ({ unsigned short ds, gs; \ ++ asm ("movw %%ds,%w0; movw %%gs,%w1" : "=q" (ds), "=q" (gs)); \ ++ ds == gs; }) + + static inline const char * __attribute__ ((unused)) + _hurd_tls_init (tcbhead_t *tcb) +@@ -137,6 +152,20 @@ + : "i" (offsetof (tcbhead_t, tcb))); \ + __tcb;}) + ++/* Return the TCB address of a thread given its state. */ ++# define THREAD_TCB(thread, thread_state) \ ++ ({ int __sel = (thread_state)->basic.gs; \ ++ struct descriptor __desc, *___desc = &__desc; \ ++ unsigned int __count = 1; \ ++ kern_return_t __err; \ ++ if (__builtin_expect (__sel, 0x48) & 4) /* LDT selector */ \ ++ __err = __i386_get_ldt ((thread), __sel, 1, &___desc, &__count); \ ++ else \ ++ __err = __i386_get_gdt ((thread), __sel, &__desc); \ ++ assert_perror (__err); \ ++ assert (__count == 1); \ ++ HURD_DESC_TLS(___desc);}) ++ + /* Install new dtv for current thread. */ + # define INSTALL_NEW_DTV(dtvp) \ + ({ asm volatile ("movl %0,%%gs:%P1" \ +--- a/sysdeps/mach/hurd/mig-reply.c ++++ b/sysdeps/mach/hurd/mig-reply.c +@@ -18,26 +18,20 @@ + #include + #include + +-#define GETPORT \ +- mach_port_t *portloc = \ +- (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY) +-#define reply_port (*(use_threadvar ? portloc : &global_reply_port)) +- +-static int use_threadvar; +-static mach_port_t global_reply_port; +- + /* These functions are called by MiG-generated code. */ + ++mach_port_t __hurd_reply_port0; ++ + /* Called by MiG to get a reply port. */ + mach_port_t + __mig_get_reply_port (void) + { +- GETPORT; +- +- if (reply_port == MACH_PORT_NULL) +- reply_port = __mach_reply_port (); ++ if (__hurd_local_reply_port == MACH_PORT_NULL || ++ (&__hurd_local_reply_port != &__hurd_reply_port0 ++ && __hurd_local_reply_port == __hurd_reply_port0)) ++ __hurd_local_reply_port = __mach_reply_port (); + +- return reply_port; ++ return __hurd_local_reply_port; + } + weak_alias (__mig_get_reply_port, mig_get_reply_port) + +@@ -45,12 +39,8 @@ + void + __mig_dealloc_reply_port (mach_port_t arg) + { +- mach_port_t port; +- +- GETPORT; +- +- port = reply_port; +- reply_port = MACH_PORT_NULL; /* So the mod_refs RPC won't use it. */ ++ mach_port_t port = __hurd_local_reply_port; ++ __hurd_local_reply_port = MACH_PORT_NULL; /* So the mod_refs RPC won't use it. */ + + if (MACH_PORT_VALID (port)) + __mach_port_mod_refs (__mach_task_self (), port, +@@ -73,15 +63,6 @@ + void + __mig_init (void *stack) + { +- use_threadvar = stack != 0; +- +- if (use_threadvar) +- { +- /* Recycle the reply port used before multithreading was enabled. */ +- mach_port_t *portloc = (mach_port_t *) +- __hurd_threadvar_location_from_sp (_HURD_THREADVAR_MIG_REPLY, stack); +- *portloc = global_reply_port; +- global_reply_port = MACH_PORT_NULL; +- } ++ /* Do nothing. */ + } + weak_alias (__mig_init, mig_init) +--- a/sysdeps/mach/hurd/profil.c ++++ b/sysdeps/mach/hurd/profil.c +@@ -143,7 +143,7 @@ + static volatile error_t special_profil_failure; + + /* Fetch PC samples. This function must be very careful not to depend +- on Hurd threadvar variables. We arrange that by using a special ++ on Hurd TLS variables. We arrange that by using a special + stub arranged for at the end of this file. */ + static void + fetch_samples (void) +@@ -178,7 +178,7 @@ + } + + +-/* This function must be very careful not to depend on Hurd threadvar ++/* This function must be very careful not to depend on Hurd TLS + variables. We arrange that by using special stubs arranged for at the + end of this file. */ + static void +@@ -269,7 +269,7 @@ + are fatal in profile_waiter anyhow. */ + #define __mig_put_reply_port(foo) + +-/* Use our static variable instead of the usual threadvar mechanism for ++/* Use our static variable instead of the usual TLS mechanism for + this. */ + #define __mig_get_reply_port() profil_reply_port + diff -Nru glibc-2.27/debian/patches/hurd-i386/git-UTIME.diff glibc-2.27/debian/patches/hurd-i386/git-UTIME.diff --- glibc-2.27/debian/patches/hurd-i386/git-UTIME.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/git-UTIME.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,493 @@ +commit bbe762d1e596d7f5a1cd560a229387cb856916e0 +Author: Flávio Cruz +Date: Mon Mar 5 23:25:00 2018 +0100 + + hurd: Define and pass UTIME_NOW and UTIME_OMIT to new file_utimens RPC + + * sysdeps/mach/hurd/bits/stat.h [__USE_ATFILE] (UTIME_NOW, + UTIME_OMIT): New macros. + * sysdeps/mach/hurd/futimens.c (__futimens): Try to use __file_utimens + before reverting to converting time spec to time value and calling + __file_utimes. + * sysdeps/mach/hurd/utime-helper.c: New file. + * sysdeps/mach/hurd/futimes.c: Include "utime-helper.c". + (__futimes): Try to use utime_ts_from_tval and __file_utimens before + reverting to utime_tvalue_from_tval and __file_utimes. + * sysdeps/mach/hurd/lutimes.c: Include "utime-helper.c". + (__lutimes): Just call hurd_futimens after lookup. + * sysdeps/mach/hurd/utimes.c: Likewise. + +commit ec1300cfc83c716f33ee3231bba0a6e270abfc73 +Author: Samuel Thibault +Date: Tue Mar 6 00:13:54 2018 +0100 + + hurd: Add futimesat and utimensat support + + * sysdeps/mach/hurd/utime-helper.c (hurd_futimens): Rename function to + hurd_futimes. + * sysdeps/mach/hurd/utimes.c (__utimes): Update call accordingly. + * sysdeps/mach/hurd/lutimes.c (__lutimes): Likewise. + * sysdeps/mach/hurd/futimens.c: Include "utime-helper.c". + (__futimens): Move implementation to... + * sysdeps/mach/hurd/utime-helper.c (utime_ts_from_tspec, + utime_tvalue_from_tspec): ... new helper functions. + (hurd_futimens): New function. + * sysdeps/mach/hurd/futimesat.c: New file. + * sysdeps/mach/hurd/utimensat.c: New file. + +Index: glibc-2.27/sysdeps/mach/hurd/bits/stat.h +=================================================================== +--- glibc-2.27.orig/sysdeps/mach/hurd/bits/stat.h ++++ glibc-2.27/sysdeps/mach/hurd/bits/stat.h +@@ -244,6 +244,11 @@ struct stat64 + # define SF_NOUNLINK 0x00100000 /* file may not be removed or renamed */ + # define SF_SNAPSHOT 0x00200000 /* snapshot inode */ + ++#ifdef __USE_ATFILE ++# define UTIME_NOW -1 /* corresponds to the current time */ ++# define UTIME_OMIT -2 /* target time is omitted */ ++#endif ++ + __BEGIN_DECLS + + /* Set file flags for FILE to FLAGS. */ +Index: glibc-2.27/sysdeps/mach/hurd/futimens.c +=================================================================== +--- glibc-2.27.orig/sysdeps/mach/hurd/futimens.c ++++ glibc-2.27/sysdeps/mach/hurd/futimens.c +@@ -22,29 +22,29 @@ + #include + #include + ++#include "utime-helper.c" ++ + /* Change the access time of FD to TSP[0] and + the modification time of FD to TSP[1]. */ + int + __futimens (int fd, const struct timespec tsp[2]) + { +- time_value_t atime, mtime; ++ struct timespec atime, mtime; + error_t err; + +- if (tsp == NULL) +- { +- /* Setting the number of microseconds to `-1' tells the +- underlying filesystems to use the current time. */ +- atime.microseconds = mtime.microseconds = -1; +- } +- else ++ utime_ts_from_tspec (tsp, &atime, &mtime); ++ ++ err = HURD_DPORT_USE (fd, __file_utimens (port, atime, mtime)); ++ ++ if (err == MIG_BAD_ID || err == EOPNOTSUPP) + { +- atime.seconds = tsp[0].tv_sec; +- atime.microseconds = tsp[0].tv_nsec / 1000; +- mtime.seconds = tsp[1].tv_sec; +- mtime.microseconds = tsp[1].tv_nsec / 1000; +- } ++ time_value_t atim, mtim; ++ ++ utime_tvalue_from_tspec (tsp, &atim, &mtim); ++ ++ err = HURD_DPORT_USE (fd, __file_utimes (port, atim, mtim)); ++ } + +- err = HURD_DPORT_USE (fd, __file_utimes (port, atime, mtime)); + return err ? __hurd_dfail (fd, err) : 0; + } + weak_alias (__futimens, futimens) +Index: glibc-2.27/sysdeps/mach/hurd/futimes.c +=================================================================== +--- glibc-2.27.orig/sysdeps/mach/hurd/futimes.c ++++ glibc-2.27/sysdeps/mach/hurd/futimes.c +@@ -22,29 +22,29 @@ + #include + #include + ++#include "utime-helper.c" ++ + /* Change the access time of FD to TVP[0] and + the modification time of FD to TVP[1]. */ + int + __futimes (int fd, const struct timeval tvp[2]) + { +- union tv +- { +- struct timeval tv; +- time_value_t tvt; +- }; +- const union tv *u = (const union tv *) tvp; +- union tv nulltv[2]; ++ struct timespec atime, mtime; + error_t err; + +- if (tvp == NULL) ++ utime_ts_from_tval (tvp, &atime, &mtime); ++ ++ err = HURD_DPORT_USE (fd, __file_utimens (port, atime, mtime)); ++ ++ if (err == EMIG_BAD_ID || err == EOPNOTSUPP) + { +- /* Setting the number of microseconds to `-1' tells the +- underlying filesystems to use the current time. */ +- nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1; +- u = nulltv; ++ time_value_t atim, mtim; ++ ++ utime_tvalue_from_tval (tvp, &atim, &mtim); ++ ++ err = HURD_DPORT_USE (fd, __file_utimes (port, atim, mtim)); + } + +- err = HURD_DPORT_USE (fd, __file_utimes (port, u[0].tvt, u[1].tvt)); + return err ? __hurd_dfail (fd, err) : 0; + } + weak_alias (__futimes, futimes) +Index: glibc-2.27/sysdeps/mach/hurd/lutimes.c +=================================================================== +--- glibc-2.27.orig/sysdeps/mach/hurd/lutimes.c ++++ glibc-2.27/sysdeps/mach/hurd/lutimes.c +@@ -22,33 +22,22 @@ + #include + #include + ++#include "utime-helper.c" ++ + /* Change the access time of FILE to TVP[0] and + the modification time of FILE to TVP[1]. */ + int + __lutimes (const char *file, const struct timeval tvp[2]) + { +- union tv +- { +- struct timeval tv; +- time_value_t tvt; +- }; +- const union tv *u = (const union tv *) tvp; +- union tv nulltv[2]; + error_t err; + file_t port; + +- if (tvp == NULL) +- { +- /* Setting the number of microseconds to `-1' tells the +- underlying filesystems to use the current time. */ +- nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1; +- u = nulltv; +- } +- + port = __file_name_lookup (file, O_NOLINK, 0); + if (port == MACH_PORT_NULL) + return -1; +- err = __file_utimes (port, u[0].tvt, u[1].tvt); ++ ++ err = hurd_futimes (port, tvp); ++ + __mach_port_deallocate (__mach_task_self (), port); + if (err) + return __hurd_fail (err); +Index: glibc-2.27/sysdeps/mach/hurd/utime-helper.c +=================================================================== +--- /dev/null ++++ glibc-2.27/sysdeps/mach/hurd/utime-helper.c +@@ -0,0 +1,154 @@ ++/* Helpers for utimes/utimens conversions. ++ Copyright (C) 2015-2018 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++/* Initializes atime/mtime timespec structures from an array of timeval. */ ++static inline void ++utime_ts_from_tval (const struct timeval tvp[2], ++ struct timespec *atime, struct timespec *mtime) ++{ ++ if (tvp == NULL) ++ { ++ /* Setting the number of nanoseconds to UTIME_NOW tells the ++ underlying filesystems to use the current time. */ ++ atime->tv_sec = 0; ++ atime->tv_nsec = UTIME_NOW; ++ mtime->tv_sec = 0; ++ mtime->tv_nsec = UTIME_NOW; ++ } ++ else ++ { ++ TIMEVAL_TO_TIMESPEC (&tvp[0], atime); ++ TIMEVAL_TO_TIMESPEC (&tvp[1], mtime); ++ } ++} ++ ++/* Initializes atime/mtime time_value_t structures from an array of timeval. */ ++static inline void ++utime_tvalue_from_tval (const struct timeval tvp[2], ++ time_value_t *atime, time_value_t *mtime) ++{ ++ if (tvp == NULL) ++ /* Setting the number of microseconds to `-1' tells the ++ underlying filesystems to use the current time. */ ++ atime->microseconds = mtime->microseconds = -1; ++ else ++ { ++ atime->seconds = tvp[0].tv_sec; ++ atime->microseconds = tvp[0].tv_usec; ++ mtime->seconds = tvp[1].tv_sec; ++ mtime->microseconds = tvp[1].tv_usec; ++ } ++} ++ ++/* Changes the access time of the file behind PORT using a timeval array. */ ++static inline error_t ++hurd_futimes (const file_t port, const struct timeval tvp[2]) ++{ ++ error_t err; ++ struct timespec atime, mtime; ++ ++ utime_ts_from_tval (tvp, &atime, &mtime); ++ ++ err = __file_utimens (port, atime, mtime); ++ ++ if (err == MIG_BAD_ID || err == EOPNOTSUPP) ++ { ++ time_value_t atim, mtim; ++ ++ utime_tvalue_from_tval (tvp, &atim, &mtim); ++ ++ err = __file_utimes (port, atim, mtim); ++ } ++ ++ return err; ++} ++ ++/* Initializes atime/mtime timespec structures from an array of timespec. */ ++static inline void ++utime_ts_from_tspec (const struct timespec tsp[2], ++ struct timespec *atime, struct timespec *mtime) ++{ ++ if (tsp == NULL) ++ { ++ /* Setting the number of nanoseconds to UTIME_NOW tells the ++ underlying filesystems to use the current time. */ ++ atime->tv_sec = 0; ++ atime->tv_nsec = UTIME_NOW; ++ mtime->tv_sec = 0; ++ mtime->tv_nsec = UTIME_NOW; ++ } ++ else ++ { ++ *atime = tsp[0]; ++ *mtime = tsp[1]; ++ } ++} ++ ++/* Initializes atime/mtime time_value_t structures from an array of timespec. */ ++static inline void ++utime_tvalue_from_tspec (const struct timespec tsp[2], ++ time_value_t *atime, time_value_t *mtime) ++{ ++ if (tsp == NULL) ++ /* Setting the number of microseconds to `-1' tells the ++ underlying filesystems to use the current time. */ ++ atime->microseconds = mtime->microseconds = -1; ++ else ++ { ++ if (tsp[0].tv_nsec == UTIME_NOW) ++ atime->microseconds = -1; ++ else if (tsp[0].tv_nsec == UTIME_OMIT) ++ atime->microseconds = -2; ++ else ++ TIMESPEC_TO_TIME_VALUE (atime, &(tsp[0])); ++ if (tsp[1].tv_nsec == UTIME_NOW) ++ mtime->microseconds = -1; ++ else if (tsp[1].tv_nsec == UTIME_OMIT) ++ mtime->microseconds = -2; ++ else ++ TIMESPEC_TO_TIME_VALUE (mtime, &(tsp[1])); ++ } ++} ++ ++/* Changes the access time of the file behind PORT using a timespec array. */ ++static inline error_t ++hurd_futimens (const file_t port, const struct timespec tsp[2]) ++{ ++ error_t err; ++ struct timespec atime, mtime; ++ ++ utime_ts_from_tspec (tsp, &atime, &mtime); ++ ++ err = __file_utimens (port, atime, mtime); ++ ++ if (err == MIG_BAD_ID || err == EOPNOTSUPP) ++ { ++ time_value_t atim, mtim; ++ ++ utime_tvalue_from_tspec (tsp, &atim, &mtim); ++ ++ err = __file_utimes (port, atim, mtim); ++ } ++ ++ return err; ++} +Index: glibc-2.27/sysdeps/mach/hurd/utimes.c +=================================================================== +--- glibc-2.27.orig/sysdeps/mach/hurd/utimes.c ++++ glibc-2.27/sysdeps/mach/hurd/utimes.c +@@ -20,33 +20,22 @@ + #include + #include + ++#include "utime-helper.c" ++ + /* Change the access time of FILE to TVP[0] and + the modification time of FILE to TVP[1]. */ + int + __utimes (const char *file, const struct timeval tvp[2]) + { +- union tv +- { +- struct timeval tv; +- time_value_t tvt; +- }; +- const union tv *u = (const union tv *) tvp; +- union tv nulltv[2]; + error_t err; + file_t port; + +- if (tvp == NULL) +- { +- /* Setting the number of microseconds to `-1' tells the +- underlying filesystems to use the current time. */ +- nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1; +- u = nulltv; +- } +- + port = __file_name_lookup (file, 0, 0); + if (port == MACH_PORT_NULL) + return -1; +- err = __file_utimes (port, u[0].tvt, u[1].tvt); ++ ++ err = hurd_futimes (port, tvp); ++ + __mach_port_deallocate (__mach_task_self (), port); + if (err) + return __hurd_fail (err); +Index: glibc-2.27/sysdeps/mach/hurd/futimesat.c +=================================================================== +--- /dev/null ++++ glibc-2.27/sysdeps/mach/hurd/futimesat.c +@@ -0,0 +1,44 @@ ++/* Copyright (C) 1991-2018 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "utime-helper.c" ++ ++/* Change the access time of FILE relative to FD to TVP[0] and ++ the modification time of FILE to TVP[1]. */ ++int ++futimesat (int fd, const char *file, const struct timeval tvp[2]) ++{ ++ error_t err; ++ file_t port; ++ ++ port = __file_name_lookup_at (fd, 0, file, 0, 0); ++ if (port == MACH_PORT_NULL) ++ return -1; ++ ++ err = hurd_futimes (port, tvp); ++ ++ __mach_port_deallocate (__mach_task_self (), port); ++ if (err) ++ return __hurd_fail (err); ++ return 0; ++} +Index: glibc-2.27/sysdeps/mach/hurd/utimensat.c +=================================================================== +--- /dev/null ++++ glibc-2.27/sysdeps/mach/hurd/utimensat.c +@@ -0,0 +1,46 @@ ++/* Change access and modification times of open file. Hurd version. ++ Copyright (C) 1991-2018 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "utime-helper.c" ++ ++/* Change the access time of FILE to TSP[0] and ++ the modification time of FILE to TSP[1]. */ ++int ++utimensat (int fd, const char *file, const struct timespec tsp[2], ++ int flags) ++{ ++ error_t err; ++ file_t port; ++ ++ port = __file_name_lookup_at (fd, flags, file, 0, 0); ++ if (port == MACH_PORT_NULL) ++ return -1; ++ ++ err = hurd_futimens (port, tsp); ++ ++ __mach_port_deallocate (__mach_task_self (), port); ++ if (err) ++ return __hurd_fail (err); ++ return 0; ++} diff -Nru glibc-2.27/debian/patches/hurd-i386/libpthread_sigs.diff glibc-2.27/debian/patches/hurd-i386/libpthread_sigs.diff --- glibc-2.27/debian/patches/hurd-i386/libpthread_sigs.diff 1970-01-01 00:00:00.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/libpthread_sigs.diff 2018-04-16 20:02:33.000000000 +0000 @@ -0,0 +1,82 @@ +To be activated with glibc 2.28 to re-install thread signal dispatch + +Revert of +commit 5049fabcfad4d5197669e5aa13d4d5f87f39d0bb +Author: Samuel Thibault +Date: Thu Jan 25 01:47:51 2018 +0100 + + Until posix thread signal distribution is commited + +diff --git b/htl/sysdeps/mach/hurd/pt-sigstate-destroy.c a/htl/sysdeps/mach/hurd/pt-sigstate-destroy.c +index fce56c5d0d..d5e28d22d8 100644 +--- b/htl/sysdeps/mach/hurd/pt-sigstate-destroy.c ++++ a/htl/sysdeps/mach/hurd/pt-sigstate-destroy.c +@@ -24,4 +24,5 @@ + void + __pthread_sigstate_destroy (struct __pthread *thread) + { ++ _hurd_sigstate_delete (thread->kernel_thread); + } +diff --git b/htl/sysdeps/mach/hurd/pt-sigstate-init.c a/htl/sysdeps/mach/hurd/pt-sigstate-init.c +index 660d5a02a6..4848f2ea91 100644 +--- b/htl/sysdeps/mach/hurd/pt-sigstate-init.c ++++ a/htl/sysdeps/mach/hurd/pt-sigstate-init.c +@@ -36,7 +36,7 @@ __pthread_sigstate_init (struct __pthread *thread) + if (do_init_global) + { + struct hurd_sigstate *ss = _hurd_thread_sigstate (thread->kernel_thread); +- (void) ss; ++ _hurd_sigstate_set_global_rcv (ss); + } + else if (__pthread_num_threads >= 2) + do_init_global = 1; + + +Revert of +commit 797492f8769ced63b209246858c0550e23009e40 +Author: Samuel Thibault +Date: Thu Jan 25 01:49:49 2018 +0100 + + Revert signal disposition, not in glibc's cvs yet + +diff --git b/htl/sysdeps/mach/hurd/pt-sigstate.c a/htl/sysdeps/mach/hurd/pt-sigstate.c +index bae6ae7c45..74fd72a2c0 100644 +--- b/htl/sysdeps/mach/hurd/pt-sigstate.c ++++ a/htl/sysdeps/mach/hurd/pt-sigstate.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + #include + +@@ -31,11 +32,12 @@ __pthread_sigstate (struct __pthread *thread, int how, + { + error_t err = 0; + struct hurd_sigstate *ss; ++ sigset_t pending; + + ss = _hurd_thread_sigstate (thread->kernel_thread); + assert (ss); + +- __spin_lock (&ss->lock); ++ _hurd_sigstate_lock (ss); + + if (oset) + *oset = ss->blocked; +@@ -66,7 +68,13 @@ __pthread_sigstate (struct __pthread *thread, int how, + if (! err && clear_pending) + __sigemptyset (&ss->pending); + +- __spin_unlock (&ss->lock); ++ pending = _hurd_sigstate_pending (ss) & ~ss->blocked; ++ _hurd_sigstate_unlock (ss); ++ ++ if (! err && pending) ++ /* Send a message to the signal thread so it ++ will wake up and check for pending signals. */ ++ __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); + + return err; + } diff -Nru glibc-2.27/debian/patches/hurd-i386/local-libpthread-stacksize.diff glibc-2.27/debian/patches/hurd-i386/local-libpthread-stacksize.diff --- glibc-2.27/debian/patches/hurd-i386/local-libpthread-stacksize.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/local-libpthread-stacksize.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -Set the default stack size to 8MiB like on Linux, to avoid surprises -with packages which assume the Linuxish default. - ---- - pt-sysdep.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) -Index: glibc-2.19/libpthread/sysdeps/mach/hurd/pt-sysdep.h -=================================================================== ---- glibc-2.19.orig/libpthread/sysdeps/mach/hurd/pt-sysdep.h -+++ glibc-2.19/libpthread/sysdeps/mach/hurd/pt-sysdep.h -@@ -26,7 +26,7 @@ - #define _POSIX_THREAD_THREADS_MAX 64 - - /* The default stack size. */ --#define PTHREAD_STACK_DEFAULT (2 * 1024 * 1024) -+#define PTHREAD_STACK_DEFAULT (8 * 1024 * 1024) - - #define PTHREAD_SYSDEP_MEMBERS \ - thread_t kernel_thread; \ diff -Nru glibc-2.27/debian/patches/hurd-i386/local-nocheck-installed-headers.diff glibc-2.27/debian/patches/hurd-i386/local-nocheck-installed-headers.diff --- glibc-2.27/debian/patches/hurd-i386/local-nocheck-installed-headers.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/local-nocheck-installed-headers.diff 2018-04-16 20:02:33.000000000 +0000 @@ -1,3 +1,5 @@ +TODO: Will be fixed in glibc 2.28 + --- a/scripts/check-installed-headers.sh +++ b/scripts/check-installed-headers.sh @@ -83,6 +83,10 @@ diff -Nru glibc-2.27/debian/patches/hurd-i386/submitted-hurd-abilist.diff glibc-2.27/debian/patches/hurd-i386/submitted-hurd-abilist.diff --- glibc-2.27/debian/patches/hurd-i386/submitted-hurd-abilist.diff 2016-03-10 10:14:20.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/submitted-hurd-abilist.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -2016-02-29 Aurelien Jarno - - * sysdeps/generic/libnsl.abilist: New file. - * sysdeps/generic/libutil.abilist: New file. - * sysdeps/mach/hurd/libhurduser.abilist: New file. - * sysdeps/mach/libmachuser.abilist: New file. - ---- /dev/null -+++ b/sysdeps/generic/libnsl.abilist -@@ -0,0 +1 @@ -+ ---- /dev/null -+++ b/sysdeps/generic/libutil.abilist -@@ -0,0 +1 @@ -+ ---- /dev/null -+++ b/sysdeps/mach/hurd/libhurduser.abilist -@@ -0,0 +1 @@ -+ ---- /dev/null -+++ b/sysdeps/mach/libmachuser.abilist -@@ -0,0 +1 @@ -+ diff -Nru glibc-2.27/debian/patches/hurd-i386/submitted-malloc-setstate.diff glibc-2.27/debian/patches/hurd-i386/submitted-malloc-setstate.diff --- glibc-2.27/debian/patches/hurd-i386/submitted-malloc-setstate.diff 2017-09-03 20:41:15.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/submitted-malloc-setstate.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -https://sourceware.org/ml/libc-alpha/2016-07/msg00175.html - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index 1f5f166..beb97e9 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -2600,13 +2600,12 @@ sysmalloc (INTERNAL_SIZE_T nb, mstate av) - { - /* - Skip over some bytes to arrive at an aligned position. -- We don't need to specially mark these wasted front bytes. -- They will never be accessed anyway because -- prev_inuse of av->top (and any chunk created from its start) -- is always true after initialization. -+ We zero them for malloc_set_state to properly find the -+ first chunk. - */ - - correction = MALLOC_ALIGNMENT - front_misalign; -+ memset (brk, 0, correction); - aligned_brk += correction; - } - -@@ -2661,13 +2660,13 @@ sysmalloc (INTERNAL_SIZE_T nb, mstate av) - { - /* - Skip over some bytes to arrive at an aligned position. -- We don't need to specially mark these wasted front bytes. -- They will never be accessed anyway because -- prev_inuse of av->top (and any chunk created from its start) -- is always true after initialization. -+ We zero them for malloc_set_state to properly find -+ the first chunk. - */ - -- aligned_brk += MALLOC_ALIGNMENT - front_misalign; -+ correction = MALLOC_ALIGNMENT - front_misalign; -+ memset (brk, 0, correction); -+ aligned_brk += correction; - } - } - -@@ -2682,6 +2681,7 @@ sysmalloc (INTERNAL_SIZE_T nb, mstate av) - if (snd_brk != (char *) (MORECORE_FAILURE)) - { - av->top = (mchunkptr) aligned_brk; -+ prev_size(av->top) = 0; - set_head (av->top, (snd_brk - aligned_brk + correction) | PREV_INUSE); - av->system_mem += correction; - diff -Nru glibc-2.27/debian/patches/hurd-i386/tg2.25-tls.diff glibc-2.27/debian/patches/hurd-i386/tg2.25-tls.diff --- glibc-2.27/debian/patches/hurd-i386/tg2.25-tls.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg2.25-tls.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -From: Samuel Thibault -Subject: [PATCH] Fix tls support for glibc 2.25 - -* csu/libc-start.c (LIBC_START_MAIN) [__GNU__]: Do not call -__libc_setup_tls. -* sysdeps/mach/hurd/i386/init-first.c (init): Call __libc_setup_tls. - -Signed-off-by: Samuel Thibault - ---- - csu/libc-start.c | 2 ++ - sysdeps/mach/hurd/i386/init-first.c | 3 ++- - 2 files changed, 4 insertions(+), 1 deletion(-) - -Index: glibc-2.26/csu/libc-start.c -=================================================================== ---- glibc-2.26.orig/csu/libc-start.c -+++ glibc-2.26/csu/libc-start.c -@@ -193,8 +193,10 @@ LIBC_START_MAIN (int (*main) (int, char - /* Perform IREL{,A} relocations. */ - ARCH_SETUP_IREL (); - -+#ifndef __GNU__ - /* The stack guard goes into the TCB, so initialize it early. */ - __libc_setup_tls (); -+#endif - - /* In some architectures, IREL{,A} relocations happen after TLS setup in - order to let IFUNC resolvers benefit from TCB information, e.g. powerpc's -Index: glibc-2.26/sysdeps/mach/hurd/i386/init-first.c -=================================================================== ---- glibc-2.26.orig/sysdeps/mach/hurd/i386/init-first.c -+++ glibc-2.26/sysdeps/mach/hurd/i386/init-first.c -@@ -189,7 +189,8 @@ init (int *data) - assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0); - } - -- /* We need to setup TLS before starting sigthread */ -+ /* We need to setup TLS before starting sigthread and set stack guard. */ -+ __libc_setup_tls (); - extern void __pthread_initialize_minimal(void); - if (__pthread_initialize_minimal != NULL) - __pthread_initialize_minimal(); diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-_dl_random.diff glibc-2.27/debian/patches/hurd-i386/tg-_dl_random.diff --- glibc-2.27/debian/patches/hurd-i386/tg-_dl_random.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-_dl_random.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -From: Thomas Schwinge -Subject: [PATCH] _dl_random - -_dl_random - ---- - - /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `security_init': - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/rtld.c:844: undefined reference to `_dl_random' - /media/data/home/thomas/tmp/gnu-2/bin/../lib/gcc/i586-pc-gnu/4.3.3/../../../../i586-pc-gnu/bin/ld: /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: relocation R_386_GOTOFF against undefined hidden symbol `_dl_random' can not be used when making a shared object - /media/data/home/thomas/tmp/gnu-2/bin/../lib/gcc/i586-pc-gnu/4.3.3/../../../../i586-pc-gnu/bin/ld: final link failed: Bad value - collect2: ld returned 1 exit status - make[2]: *** [/media/Stalin/tmp/glibc.hurd.gnu-2/elf/ld.so] Error 1 - - sysdeps/mach/hurd/dl-sysdep.c | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/sysdeps/mach/hurd/dl-sysdep.c -+++ b/sysdeps/mach/hurd/dl-sysdep.c -@@ -61,6 +61,8 @@ - hp_timing_t _dl_cpuclock_offset; - #endif - -+/* TODO: this is never properly initialized in here. */ -+void *_dl_random attribute_relro = NULL; - - struct hurd_startup_data *_dl_hurd_data; - diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-exec-static.diff glibc-2.27/debian/patches/hurd-i386/tg-exec-static.diff --- glibc-2.27/debian/patches/hurd-i386/tg-exec-static.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-exec-static.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -From: Samuel Thibault -Subject: [PATCH] Fix boot with statically-linked exec server. - -* sysdeps/mach/hurd/i386/init-first.c (init): Also find ELF headers by oneself -when the pointer given in D is nul (as set by ext2fs). - -Signed-off-by: Samuel Thibault - ---- - sysdeps/mach/hurd/i386/init-first.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/sysdeps/mach/hurd/i386/init-first.c -+++ b/sysdeps/mach/hurd/i386/init-first.c -@@ -168,7 +168,7 @@ init (int *data) - /* If we are the bootstrap task started by the kernel, - then after the environment pointers there is no Hurd - data block; the argument strings start there. */ -- if ((void *) d == argv[0]) -+ if ((void *) d == argv[0] || !d->phdr) - { - /* With a new enough linker (binutils-2.23 or better), - the magic __ehdr_start symbol will be available and diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-futimens.diff glibc-2.27/debian/patches/hurd-i386/tg-futimens.diff --- glibc-2.27/debian/patches/hurd-i386/tg-futimens.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-futimens.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -From: Samuel Thibault -Subject: [PATCH] Add futimens support - -* sysdeps/mach/hurd/futimens.c: New file. - -Signed-off-by: Samuel Thibault - ---- - sysdeps/mach/hurd/futimens.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 50 insertions(+) - -diff --git a/sysdeps/mach/hurd/futimens.c b/sysdeps/mach/hurd/futimens.c -new file mode 100644 -index 0000000..218779d ---- /dev/null -+++ b/sysdeps/mach/hurd/futimens.c -@@ -0,0 +1,50 @@ -+/* futimes -- change access and modification times of open file. Hurd version. -+ Copyright (C) 2002-2014 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+/* Change the access time of FD to TSP[0] and -+ the modification time of FD to TSP[1]. */ -+int -+__futimens (int fd, const struct timespec tsp[2]) -+{ -+ time_value_t atime, mtime; -+ error_t err; -+ -+ if (tsp == NULL) -+ { -+ /* Setting the number of microseconds to `-1' tells the -+ underlying filesystems to use the current time. */ -+ atime.microseconds = mtime.microseconds = -1; -+ } -+ else -+ { -+ atime.seconds = tsp[0].tv_sec; -+ atime.microseconds = tsp[0].tv_nsec / 1000; -+ mtime.seconds = tsp[1].tv_sec; -+ mtime.microseconds = tsp[1].tv_nsec / 1000; -+ } -+ -+ err = HURD_DPORT_USE (fd, __file_utimes (port, atime, mtime)); -+ return err ? __hurd_dfail (fd, err) : 0; -+} -+weak_alias (__futimens, futimens) --- -tg: (9a079e2..) futimens (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-gai_misc.diff glibc-2.27/debian/patches/hurd-i386/tg-gai_misc.diff --- glibc-2.27/debian/patches/hurd-i386/tg-gai_misc.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-gai_misc.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -From: Samuel Thibault -Subject: [PATCH] t/gai_misc - -Add a hurd version of threaded gai_misc.h - -Signed-off-by: Samuel Thibault - ---- - sysdeps/mach/hurd/gai_misc.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 44 insertions(+) - -diff --git a/sysdeps/mach/hurd/gai_misc.h b/sysdeps/mach/hurd/gai_misc.h -new file mode 100644 -index 0000000..ee8117f ---- /dev/null -+++ b/sysdeps/mach/hurd/gai_misc.h -@@ -0,0 +1,44 @@ -+#include -+#include -+ -+#define gai_start_notify_thread __gai_start_notify_thread -+#define gai_create_helper_thread __gai_create_helper_thread -+ -+extern inline void -+__gai_start_notify_thread (void) -+{ -+ sigset_t ss; -+ sigemptyset (&ss); -+ sigprocmask(SIG_SETMASK, &ss, NULL); -+} -+ -+extern inline int -+__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), -+ void *arg) -+{ -+ pthread_attr_t attr; -+ -+ /* Make sure the thread is created detached. */ -+ pthread_attr_init (&attr); -+ pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); -+ -+ /* The helper thread needs only very little resources. */ -+ (void) pthread_attr_setstacksize (&attr, 0x10000); -+ -+ /* Block all signals in the helper thread. To do this thoroughly we -+ temporarily have to block all signals here. */ -+ sigset_t ss; -+ sigset_t oss; -+ sigfillset (&ss); -+ sigprocmask(SIG_SETMASK, &ss, &oss); -+ -+ int ret = pthread_create (threadp, &attr, tf, arg); -+ -+ /* Restore the signal mask. */ -+ sigprocmask(SIG_SETMASK, &oss, NULL); -+ -+ (void) pthread_attr_destroy (&attr); -+ return ret; -+} -+ -+#include_next --- -tg: (9a079e2..) t/gai_misc (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-grantpt.diff glibc-2.27/debian/patches/hurd-i386/tg-grantpt.diff --- glibc-2.27/debian/patches/hurd-i386/tg-grantpt.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-grantpt.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -From: Thomas Schwinge -Subject: [PATCH] t/grantpt - - /media/Stalin/tmp/glibc.hurd.gnu-2/libc_pic.os: In function `pts_name': - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/login/../sysdeps/unix/grantpt.c:52: undefined reference to `__ptsname_internal' - collect2: ld returned 1 exit status - make[1]: *** [/media/Stalin/tmp/glibc.hurd.gnu-2/libc.so] Error 1 - -Cf. aa9890239a2aef81e64f3f22a31c7e01b6501f69 - -Need any of the checks (stat, etc.) that Linux' __ptsname_internal does? - -Implement close_all_fds as in 139ee080b6b428240bf49f3e6361f3ac729f891a? - ---- - sysdeps/mach/hurd/ptsname.c | 23 +++++++++++++++++++---- - 1 file changed, 19 insertions(+), 4 deletions(-) - -diff --git a/sysdeps/mach/hurd/ptsname.c b/sysdeps/mach/hurd/ptsname.c -index 2978394eb5..73ec57dd70 100644 ---- a/sysdeps/mach/hurd/ptsname.c -+++ b/sysdeps/mach/hurd/ptsname.c -@@ -18,6 +18,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -38,11 +39,9 @@ ptsname (int fd) - } - - --/* Store at most BUFLEN characters of the pathname of the slave pseudo -- terminal associated with the master FD is open on in BUF. -- Return 0 on success, otherwise an error number. */ -+/* We don't need STP, but fill it for conformity with the Linux version... */ - int --__ptsname_r (int fd, char *buf, size_t buflen) -+__ptsname_internal (int fd, char *buf, size_t buflen, struct stat64 *stp) - { - string_t peername; - size_t len; -@@ -58,7 +57,23 @@ __ptsname_r (int fd, char *buf, size_t buflen) - return ERANGE; - } - -+ if (stp) -+ { -+ if (__xstat64 (_STAT_VER, peername, stp) < 0) -+ return errno; -+ } -+ - memcpy (buf, peername, len); - return 0; - } -+ -+ -+/* Store at most BUFLEN characters of the pathname of the slave pseudo -+ terminal associated with the master FD is open on in BUF. -+ Return 0 on success, otherwise an error number. */ -+int -+__ptsname_r (int fd, char *buf, size_t buflen) -+{ -+ return __ptsname_internal (fd, buf, buflen, NULL); -+} - weak_alias (__ptsname_r, ptsname_r) --- -tg: (7bb5f8a836..) t/grantpt (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-gscope.diff glibc-2.27/debian/patches/hurd-i386/tg-gscope.diff --- glibc-2.27/debian/patches/hurd-i386/tg-gscope.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-gscope.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -From: Thomas Schwinge -Subject: [PATCH] gscope - -Minimal gscope stuff. - -glibc-2.8/debian/patches/hurd-i386/local-gscope.diff 3085 - -Written by Samuel Thibault. - ---- - -I think that's the corresponding error message: - - /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `add_dependency': - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:106: undefined reference to `atomic_forced_read' - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:109: undefined reference to `atomic_read_barrier' - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:113: undefined reference to `atomic_forced_read' - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:141: undefined reference to `THREAD_GSCOPE_RESET_FLAG' - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:147: undefined reference to `atomic_forced_read' - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:284: undefined reference to `THREAD_GSCOPE_SET_FLAG' - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:261: undefined reference to `atomic_write_barrier' - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-lookup.c:250: undefined reference to `atomic_write_barrier' - /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `add_to_global': - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-open.c:162: undefined reference to `atomic_write_barrier' - /media/Stalin/tmp/glibc.hurd.gnu-2/elf/librtld.os: In function `dl_open_worker': - /media/data/home/thomas/tmp/source/glibc/git/glibc.hurd/elf/dl-open.c:478: undefined reference to `atomic_write_barrier' - collect2: ld returned 1 exit status - make[2]: *** [/media/Stalin/tmp/glibc.hurd.gnu-2/elf/ld.so] Error 1 - - elf/dl-support.c | 1 + - sysdeps/generic/ldsodefs.h | 1 + - sysdeps/mach/hurd/sysdep-cancel.h | 9 +++++++++ - sysdeps/mach/hurd/tls.h | 13 +++++++++++++ - 4 files changed, 24 insertions(+) - ---- a/elf/dl-support.c -+++ b/elf/dl-support.c -@@ -196,6 +196,7 @@ int (*_dl_make_stack_executable_hook) (v - /* Function in libpthread to wait for termination of lookups. */ - void (*_dl_wait_lookup_done) (void); - -+int volatile _dl_thread_gscope_count; - struct dl_scope_free_list *_dl_scope_free_list; - - #ifdef NEED_DL_SYSINFO ---- a/sysdeps/generic/ldsodefs.h -+++ b/sysdeps/generic/ldsodefs.h -@@ -409,6 +409,7 @@ struct rtld_global - size_t count; - void *list[50]; - } *_dl_scope_free_list; -+ EXTERN volatile int _dl_thread_gscope_count; - #ifdef SHARED - }; - # define __rtld_global_attribute__ ---- /dev/null -+++ b/sysdeps/mach/hurd/sysdep-cancel.h -@@ -0,0 +1,9 @@ -+#include -+ -+/* Always multi-thread (since there's at least the sig handler), but no -+ handling enabled. */ -+#define SINGLE_THREAD_P (0) -+#define RTLD_SINGLE_THREAD_P (0) -+#define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */ -+#define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */ -+#define LIBC_CANCEL_HANDLED() /* Nothing. */ ---- a/sysdeps/mach/hurd/tls.h -+++ b/sysdeps/mach/hurd/tls.h -@@ -75,5 +75,18 @@ typedef struct - - #endif /* !ASSEMBLER */ - -+#ifndef __ASSEMBLER__ -+#include -+#include -+/* Temporary poor-man's global scope switch support: just busy-waits */ -+#define THREAD_GSCOPE_SET_FLAG() \ -+ asm volatile ("lock incl %0":"=m"(GL(dl_thread_gscope_count))) -+#define THREAD_GSCOPE_RESET_FLAG() \ -+ asm volatile ("lock decl %0":"=m"(GL(dl_thread_gscope_count))) -+#define THREAD_GSCOPE_WAIT() \ -+ while (GL(dl_thread_gscope_count)) { \ -+ __swtch_pri (0); \ -+ } -+#endif - - #endif /* tls.h */ diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-mutex.diff glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-mutex.diff --- glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-mutex.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-mutex.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,1378 +0,0 @@ -commit f6839074d25aba7e93b8672a9ed9893c0baa5e3d -Author: Agustina Arzille -Date: Mon Oct 17 00:56:58 2016 +0200 - - Make pthread_mutex use gsync - -diff --git a/libpthread/include/pthread/pthread.h b/libpthread/include/pthread/pthread.h -index 350a673..ad34e5d 100644 ---- a/libpthread/include/pthread/pthread.h -+++ b/libpthread/include/pthread/pthread.h -@@ -271,6 +271,11 @@ extern pthread_t pthread_self (void) __THROW; - #define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_TIMED_NP - #endif - -+#ifdef __USE_XOPEN2K -+#define PTHREAD_MUTEX_STALLED __PTHREAD_MUTEX_STALLED -+#define PTHREAD_MUTEX_ROBUST __PTHREAD_MUTEX_ROBUST -+#endif -+ - #include - - /* Initialize the mutex attribute object in *ATTR to the default -@@ -399,6 +404,18 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, - __THROW __nonnull ((1, 3)); - #endif - -+#ifdef __USE_XOPEN2K8 -+ -+/* Declare the state protected by robust mutex MTXP as consistent. */ -+extern int pthread_mutex_consistent (pthread_mutex_t *__mtxp) -+ __THROW __nonnull ((1)); -+ -+# ifdef __USE_GNU -+extern int pthread_mutex_consistent_np (pthread_mutex_t *__mtxp) -+ __THROW __nonnull ((1)); -+# endif -+#endif -+ - - - /* Condition attributes. */ -diff --git a/libpthread/include/pthread/pthreadtypes.h b/libpthread/include/pthread/pthreadtypes.h -index 33bd009..d8aed4d 100644 ---- a/libpthread/include/pthread/pthreadtypes.h -+++ b/libpthread/include/pthread/pthreadtypes.h -@@ -77,6 +77,12 @@ enum __pthread_mutex_type - __PTHREAD_MUTEX_RECURSIVE - }; - -+enum __pthread_mutex_robustness -+ { -+ __PTHREAD_MUTEX_STALLED, -+ __PTHREAD_MUTEX_ROBUST = 0x100 -+ }; -+ - #include - typedef struct __pthread_mutexattr pthread_mutexattr_t; - -diff --git a/libpthread/sysdeps/mach/hurd/bits/mutex.h b/libpthread/sysdeps/mach/hurd/bits/mutex.h -new file mode 100644 -index 0000000..a52a2ad ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/bits/mutex.h -@@ -0,0 +1,64 @@ -+/* Mutex type. Generic version. -+ -+ Copyright (C) 2000-2016 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License as -+ published by the Free Software Foundation; either version 2 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with the GNU C Library; see the file COPYING.LIB. If not, -+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#ifndef _BITS_MUTEX_H -+ -+#ifndef __need_pthread_mutex -+# define _BITS_MUTEX_H 1 -+#endif -+ -+#ifndef __pthread_mutex_defined -+# if defined __need_pthread_mutex || defined _BITS_MUTEX_H -+# undef __need_pthread_mutex -+# define __pthread_mutex_defined -+ -+# include -+ -+/* User visible part of a mutex. */ -+struct __pthread_mutex -+{ -+ unsigned int __lock; -+ unsigned int __owner_id; -+ unsigned int __cnt; -+ int __shpid; -+ int __type; -+ int __flags; -+ unsigned int __reserved1; -+ unsigned int __reserved2; -+}; -+ -+/* Static mutex initializers. */ -+#define __PTHREAD_MUTEX_INITIALIZER \ -+ { 0, 0, 0, 0, __PTHREAD_MUTEX_TIMED, 0, 0, 0 } -+ -+/* The +1 is to mantain binary compatibility with the old -+ * libpthread implementation. */ -+#define __PTHREAD_ERRORCHECK_MUTEX_INITIALIZER \ -+ { 0, 0, 0, 0, __PTHREAD_MUTEX_ERRORCHECK + 1, 0, 0, 0 } -+ -+#define __PTHREAD_RECURSIVE_MUTEX_INITIALIZER \ -+ { 0, 0, 0, 0, __PTHREAD_MUTEX_RECURSIVE + 1, 0, 0, 0 } -+ -+# endif -+#endif /* Not __pthread_mutex_defined. */ -+ -+#endif /* bits/mutex.h */ -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-destroy.c b/libpthread/sysdeps/mach/hurd/pt-mutex-destroy.c -new file mode 100644 -index 0000000..2c6acd1 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-destroy.c -@@ -0,0 +1,36 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int _pthread_mutex_destroy (pthread_mutex_t *mtxp) -+{ -+ atomic_read_barrier (); -+ if (*(volatile unsigned int *)&mtxp->__lock != 0) -+ return (EBUSY); -+ -+ mtxp->__type = -1; -+ return (0); -+} -+ -+strong_alias (_pthread_mutex_destroy, pthread_mutex_destroy) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-getprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutex-getprioceiling.c -new file mode 100644 -index 0000000..8a8a080 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-getprioceiling.c -@@ -0,0 +1,32 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutex_getprioceiling (const pthread_mutex_t *mtxp, int *clp) -+{ -+ (void)mtxp; (void)clp; -+ return (ENOSYS); -+} -+ -+stub_warning (pthread_mutex_getprioceiling) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-init.c b/libpthread/sysdeps/mach/hurd/pt-mutex-init.c -new file mode 100644 -index 0000000..af9ed7e ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-init.c -@@ -0,0 +1,55 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+static const pthread_mutexattr_t dfl_attr = -+{ -+ .__prioceiling = 0, -+ .__protocol = PTHREAD_PRIO_NONE, -+ .__pshared = PTHREAD_PROCESS_PRIVATE, -+ .__mutex_type = __PTHREAD_MUTEX_TIMED -+}; -+ -+int _pthread_mutex_init (pthread_mutex_t *mtxp, -+ const pthread_mutexattr_t *attrp) -+{ -+ if (attrp == NULL) -+ attrp = &dfl_attr; -+ -+ mtxp->__flags = (attrp->__pshared == PTHREAD_PROCESS_SHARED ? -+ GSYNC_SHARED : 0) | ((attrp->__prioceiling & PTHREAD_MUTEX_ROBUST) ? -+ PTHREAD_MUTEX_ROBUST : 0); -+ -+ mtxp->__type = attrp->__mutex_type + -+ (attrp->__mutex_type != __PTHREAD_MUTEX_TIMED); -+ -+ mtxp->__owner_id = 0; -+ mtxp->__shpid = 0; -+ mtxp->__cnt = 0; -+ mtxp->__lock = 0; -+ -+ return (0); -+} -+ -+strong_alias (_pthread_mutex_init, pthread_mutex_init) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-lock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-lock.c -new file mode 100644 -index 0000000..5d3c958 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-lock.c -@@ -0,0 +1,79 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int __pthread_mutex_lock (pthread_mutex_t *mtxp) -+{ -+ struct __pthread *self; -+ int flags = mtxp->__flags & GSYNC_SHARED; -+ int ret = 0; -+ -+ switch (MTX_TYPE (mtxp)) -+ { -+ case PT_MTX_NORMAL: -+ lll_lock (&mtxp->__lock, flags); -+ break; -+ -+ case PT_MTX_RECURSIVE: -+ self = _pthread_self (); -+ if (mtx_owned_p (mtxp, self, flags)) -+ { -+ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) -+ return (EAGAIN); -+ -+ ++mtxp->__cnt; -+ return (ret); -+ } -+ -+ lll_lock (&mtxp->__lock, flags); -+ mtx_set_owner (mtxp, self, flags); -+ mtxp->__cnt = 1; -+ break; -+ -+ case PT_MTX_ERRORCHECK: -+ self = _pthread_self (); -+ if (mtx_owned_p (mtxp, self, flags)) -+ return (EDEADLK); -+ -+ lll_lock (&mtxp->__lock, flags); -+ mtx_set_owner (mtxp, self, flags); -+ break; -+ -+ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: -+ self = _pthread_self (); -+ ROBUST_LOCK (self, mtxp, __lll_robust_lock, flags); -+ break; -+ -+ default: -+ ret = EINVAL; -+ break; -+ } -+ -+ return (ret); -+} -+ -+strong_alias (__pthread_mutex_lock, _pthread_mutex_lock) -+strong_alias (__pthread_mutex_lock, pthread_mutex_lock) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-setprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutex-setprioceiling.c -new file mode 100644 -index 0000000..b88917d ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-setprioceiling.c -@@ -0,0 +1,32 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutex_setprioceiling (pthread_mutex_t *mtxp, int cl, int *prp) -+{ -+ (void)mtxp; (void)cl; (void)prp; -+ return (ENOSYS); -+} -+ -+stub_warning (pthread_mutex_setprioceiling) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-timedlock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-timedlock.c -new file mode 100644 -index 0000000..3fdd5da ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-timedlock.c -@@ -0,0 +1,80 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutex_timedlock (pthread_mutex_t *mtxp, -+ const struct timespec *tsp) -+{ -+ struct __pthread *self; -+ int ret, flags = mtxp->__flags & GSYNC_SHARED; -+ -+ switch (MTX_TYPE (mtxp)) -+ { -+ case PT_MTX_NORMAL: -+ ret = lll_abstimed_lock (&mtxp->__lock, tsp, flags); -+ break; -+ -+ case PT_MTX_RECURSIVE: -+ self = _pthread_self (); -+ if (mtx_owned_p (mtxp, self, flags)) -+ { -+ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) -+ return (EAGAIN); -+ -+ ++mtxp->__cnt; -+ ret = 0; -+ } -+ else if ((ret = lll_abstimed_lock (&mtxp->__lock, -+ tsp, flags)) == 0) -+ { -+ mtx_set_owner (mtxp, self, flags); -+ mtxp->__cnt = 1; -+ } -+ -+ break; -+ -+ case PT_MTX_ERRORCHECK: -+ self = _pthread_self (); -+ if (mtx_owned_p (mtxp, self, flags)) -+ ret = EDEADLK; -+ else if ((ret = lll_abstimed_lock (&mtxp->__lock, -+ tsp, flags)) == 0) -+ mtx_set_owner (mtxp, self, flags); -+ -+ break; -+ -+ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: -+ self = _pthread_self (); -+ ROBUST_LOCK (self, mtxp, lll_robust_abstimed_lock, tsp, flags); -+ break; -+ -+ default: -+ ret = EINVAL; -+ break; -+ } -+ -+ return (ret); -+} -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-transfer-np.c b/libpthread/sysdeps/mach/hurd/pt-mutex-transfer-np.c -new file mode 100644 -index 0000000..410474f ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-transfer-np.c -@@ -0,0 +1,74 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int __pthread_mutex_transfer_np (pthread_mutex_t *mtxp, pthread_t th) -+{ -+ struct __pthread *self = _pthread_self (); -+ struct __pthread *pt = __pthread_getid (th); -+ -+ if (!pt) -+ return (ESRCH); -+ else if (pt == self) -+ return (0); -+ -+ int ret = 0; -+ int flags = mtxp->__flags & GSYNC_SHARED; -+ -+ switch (MTX_TYPE (mtxp)) -+ { -+ case PT_MTX_NORMAL: -+ break; -+ -+ case PT_MTX_RECURSIVE: -+ case PT_MTX_ERRORCHECK: -+ if (!mtx_owned_p (mtxp, self, flags)) -+ ret = EPERM; -+ else -+ mtx_set_owner (mtxp, pt, flags); -+ -+ break; -+ -+ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: -+ /* Note that this can be used to transfer an inconsistent -+ * mutex as well. The new owner will still have the same -+ * flags as the original. */ -+ if (mtxp->__owner_id != self->thread || -+ (int)(mtxp->__lock & LLL_OWNER_MASK) != __getpid ()) -+ ret = EPERM; -+ else -+ mtxp->__owner_id = pt->thread; -+ -+ break; -+ -+ default: -+ ret = EINVAL; -+ } -+ -+ return (ret); -+} -+ -+weak_alias (__pthread_mutex_transfer_np, pthread_mutex_transfer_np) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c -new file mode 100644 -index 0000000..6680094 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-trylock.c -@@ -0,0 +1,77 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int __pthread_mutex_trylock (pthread_mutex_t *mtxp) -+{ -+ struct __pthread *self; -+ int ret; -+ -+ switch (MTX_TYPE (mtxp)) -+ { -+ case PT_MTX_NORMAL: -+ ret = lll_trylock (&mtxp->__lock); -+ break; -+ -+ case PT_MTX_RECURSIVE: -+ self = _pthread_self (); -+ if (mtx_owned_p (mtxp, self, mtxp->__flags)) -+ { -+ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) -+ return (EAGAIN); -+ -+ ++mtxp->__cnt; -+ ret = 0; -+ } -+ else if ((ret = lll_trylock (&mtxp->__lock)) == 0) -+ { -+ mtx_set_owner (mtxp, self, mtxp->__flags); -+ mtxp->__cnt = 1; -+ } -+ -+ break; -+ -+ case PT_MTX_ERRORCHECK: -+ self = _pthread_self (); -+ if ((ret = lll_trylock (&mtxp->__lock)) == 0) -+ mtx_set_owner (mtxp, self, mtxp->__flags); -+ break; -+ -+ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: -+ self = _pthread_self (); -+ ROBUST_LOCK (self, mtxp, __lll_robust_trylock); -+ break; -+ -+ default: -+ ret = EINVAL; -+ break; -+ } -+ -+ return (ret); -+} -+ -+strong_alias (__pthread_mutex_trylock, _pthread_mutex_trylock) -+strong_alias (__pthread_mutex_trylock, pthread_mutex_trylock) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-unlock.c b/libpthread/sysdeps/mach/hurd/pt-mutex-unlock.c -new file mode 100644 -index 0000000..071f622 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-unlock.c -@@ -0,0 +1,90 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int __pthread_mutex_unlock (pthread_mutex_t *mtxp) -+{ -+ struct __pthread *self; -+ int ret = 0, flags = mtxp->__flags & GSYNC_SHARED; -+ -+ switch (MTX_TYPE (mtxp)) -+ { -+ case PT_MTX_NORMAL: -+ lll_unlock (&mtxp->__lock, flags); -+ break; -+ -+ case PT_MTX_RECURSIVE: -+ self = _pthread_self (); -+ if (!mtx_owned_p (mtxp, self, flags)) -+ ret = EPERM; -+ else if (--mtxp->__cnt == 0) -+ { -+ mtxp->__owner_id = mtxp->__shpid = 0; -+ lll_unlock (&mtxp->__lock, flags); -+ } -+ -+ break; -+ -+ case PT_MTX_ERRORCHECK: -+ self = _pthread_self (); -+ if (!mtx_owned_p (mtxp, self, flags)) -+ ret = EPERM; -+ else -+ { -+ mtxp->__owner_id = mtxp->__shpid = 0; -+ lll_unlock (&mtxp->__lock, flags); -+ } -+ -+ break; -+ -+ case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: -+ case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: -+ self = _pthread_self (); -+ if (mtxp->__owner_id == NOTRECOVERABLE_ID) -+ ; /* Nothing to do. */ -+ else if (mtxp->__owner_id != self->thread || -+ (int)(mtxp->__lock & LLL_OWNER_MASK) != __getpid ()) -+ ret = EPERM; -+ else if (--mtxp->__cnt == 0) -+ { -+ /* Release the lock. If it's in an inconsistent -+ * state, mark it as irrecoverable. */ -+ mtxp->__owner_id = (mtxp->__lock & LLL_DEAD_OWNER) ? -+ NOTRECOVERABLE_ID : 0; -+ __lll_robust_unlock (&mtxp->__lock, flags); -+ } -+ -+ break; -+ -+ default: -+ ret = EINVAL; -+ break; -+ } -+ -+ return (ret); -+} -+ -+strong_alias (__pthread_mutex_unlock, _pthread_mutex_unlock) -+strong_alias (__pthread_mutex_unlock, pthread_mutex_unlock) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-destroy.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-destroy.c -new file mode 100644 -index 0000000..ad711ac ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-destroy.c -@@ -0,0 +1,31 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int __pthread_mutexattr_destroy (pthread_mutexattr_t *attrp) -+{ -+ (void)attrp; -+ return (0); -+} -+weak_alias (__pthread_mutexattr_destroy, pthread_mutexattr_destroy) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprioceiling.c -new file mode 100644 -index 0000000..bcfc8c8 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprioceiling.c -@@ -0,0 +1,32 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *ap, int *clp) -+{ -+ (void)ap; (void)clp; -+ return (ENOSYS); -+} -+ -+stub_warning (pthread_mutexattr_getprioceiling) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprotocol.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprotocol.c -new file mode 100644 -index 0000000..cb94424 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getprotocol.c -@@ -0,0 +1,30 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *attrp, int *ptp) -+{ -+ *ptp = attrp->__protocol; -+ return (0); -+} -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getpshared.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getpshared.c -new file mode 100644 -index 0000000..7639528 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getpshared.c -@@ -0,0 +1,30 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_getpshared (const pthread_mutexattr_t *attrp, int *outp) -+{ -+ *outp = attrp->__pshared; -+ return (0); -+} -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-gettype.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-gettype.c -new file mode 100644 -index 0000000..746f628 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-gettype.c -@@ -0,0 +1,31 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_gettype (const pthread_mutexattr_t *attrp, int *outp) -+{ -+ *outp = attrp->__mutex_type; -+ return (0); -+} -+ -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-init.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-init.c -new file mode 100644 -index 0000000..4cac661 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-init.c -@@ -0,0 +1,39 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+static const pthread_mutexattr_t dfl_attr = -+{ -+ .__prioceiling = 0, -+ .__protocol = PTHREAD_PRIO_NONE, -+ .__pshared = PTHREAD_PROCESS_PRIVATE, -+ .__mutex_type = __PTHREAD_MUTEX_TIMED -+}; -+ -+int __pthread_mutexattr_init (pthread_mutexattr_t *attrp) -+{ -+ *attrp = dfl_attr; -+ return (0); -+} -+weak_alias (__pthread_mutexattr_init, pthread_mutexattr_init) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprioceiling.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprioceiling.c -new file mode 100644 -index 0000000..d399050 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprioceiling.c -@@ -0,0 +1,32 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *attrp, int cl) -+{ -+ (void)attrp; (void)cl; -+ return (ENOSYS); -+} -+ -+stub_warning (pthread_mutexattr_setprioceiling) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprotocol.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprotocol.c -new file mode 100644 -index 0000000..9f7f152 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setprotocol.c -@@ -0,0 +1,32 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_setprotocol (pthread_mutexattr_t *attrp, int proto) -+{ -+ (void)attrp; -+ return (proto == PTHREAD_PRIO_NONE ? 0 : -+ proto != PTHREAD_PRIO_INHERIT && -+ proto != PTHREAD_PRIO_PROTECT ? EINVAL : ENOTSUP); -+} -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setpshared.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setpshared.c -new file mode 100644 -index 0000000..c10dfa0 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setpshared.c -@@ -0,0 +1,34 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_setpshared (pthread_mutexattr_t *attrp, int pshared) -+{ -+ if (pshared != PTHREAD_PROCESS_PRIVATE && -+ pshared != PTHREAD_PROCESS_SHARED) -+ return (EINVAL); -+ -+ attrp->__pshared = pshared; -+ return (0); -+} -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-settype.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-settype.c -new file mode 100644 -index 0000000..67ed4f5 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-settype.c -@@ -0,0 +1,34 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int __pthread_mutexattr_settype (pthread_mutexattr_t *attrp, int type) -+{ -+ if (type < 0 || type > __PTHREAD_MUTEX_RECURSIVE) -+ return (EINVAL); -+ -+ attrp->__mutex_type = type; -+ return (0); -+} -+weak_alias (__pthread_mutexattr_settype, pthread_mutexattr_settype) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr.c -new file mode 100644 -index 0000000..40a8c17 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr.c -@@ -0,0 +1 @@ -+/* empty */ -diff --git a/libpthread/Makefile b/libpthread/Makefile -index 9707f57..776b95d 100644 ---- a/libpthread/Makefile -+++ b/libpthread/Makefile -@@ -87,12 +87,14 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \ - pt-mutexattr-getpshared pt-mutexattr-gettype \ - pt-mutexattr-setprioceiling pt-mutexattr-setprotocol \ - pt-mutexattr-setpshared pt-mutexattr-settype \ -+ pt-mutexattr-getrobust pt-mutexattr-setrobust \ - \ - pt-mutex-init pt-mutex-destroy \ - pt-mutex-lock pt-mutex-trylock pt-mutex-timedlock \ - pt-mutex-unlock \ - pt-mutex-transfer-np \ - pt-mutex-getprioceiling pt-mutex-setprioceiling \ -+ pt-mutex-consistent \ - \ - pt-rwlock-attr \ - pt-rwlockattr-init pt-rwlockattr-destroy \ -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex-consistent.c b/libpthread/sysdeps/mach/hurd/pt-mutex-consistent.c -new file mode 100644 -index 0000000..28e9e4a ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex-consistent.c -@@ -0,0 +1,45 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutex_consistent (pthread_mutex_t *mtxp) -+{ -+ int ret = EINVAL; -+ unsigned int val = mtxp->__lock; -+ -+ if ((mtxp->__flags & PTHREAD_MUTEX_ROBUST) != 0 && -+ (val & LLL_DEAD_OWNER) != 0 && -+ atomic_compare_and_exchange_bool_acq (&mtxp->__lock, -+ __getpid () | LLL_WAITERS, val) == 0) -+ { -+ /* The mutex is now ours, and it's consistent. */ -+ mtxp->__owner_id = _pthread_self()->thread; -+ mtxp->__cnt = 1; -+ ret = 0; -+ } -+ -+ return (ret); -+} -+ -+weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutex.h b/libpthread/sysdeps/mach/hurd/pt-mutex.h -new file mode 100644 -index 0000000..c67453e ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutex.h -@@ -0,0 +1,92 @@ -+/* Internal definitions for pthreads library. -+ Copyright (C) 2016 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Agustina Arzille , 2016. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License as -+ published by the Free Software Foundation; either version 2 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with the GNU C Library; see the file COPYING.LIB. If not, -+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#ifndef _PT_MUTEX_H -+#define _PT_MUTEX_H 1 -+ -+/* Special ID used to signal an unrecoverable robust mutex. */ -+#define NOTRECOVERABLE_ID (1U << 31) -+ -+/* Common path for robust mutexes. Assumes the variable 'ret' -+ * is bound in the function this is called from. */ -+#define ROBUST_LOCK(self, mtxp, cb, ...) \ -+ if (mtxp->__owner_id == NOTRECOVERABLE_ID) \ -+ return (ENOTRECOVERABLE); \ -+ else if (mtxp->__owner_id == self->thread && \ -+ __getpid () == (int)(mtxp->__lock & LLL_OWNER_MASK)) \ -+ { \ -+ if (mtxp->__type == PT_MTX_RECURSIVE) \ -+ { \ -+ if (__glibc_unlikely (mtxp->__cnt + 1 == 0)) \ -+ return (EAGAIN); \ -+ \ -+ ++mtxp->__cnt; \ -+ return (0); \ -+ } \ -+ else if (mtxp->__type == PT_MTX_ERRORCHECK) \ -+ return (EDEADLK); \ -+ } \ -+ \ -+ ret = cb (&mtxp->__lock, ##__VA_ARGS__); \ -+ if (ret == 0 || ret == EOWNERDEAD) \ -+ { \ -+ if (mtxp->__owner_id == ENOTRECOVERABLE) \ -+ ret = ENOTRECOVERABLE; \ -+ else \ -+ { \ -+ mtxp->__owner_id = self->thread; \ -+ mtxp->__cnt = 1; \ -+ if (ret == EOWNERDEAD) \ -+ { \ -+ mtxp->__lock = mtxp->__lock | LLL_DEAD_OWNER; \ -+ atomic_write_barrier (); \ -+ } \ -+ } \ -+ } \ -+ (void)0 -+ -+/* Check that a thread owns the mutex. For non-robust, task-shared -+ * objects, we have to check the thread *and* process-id. */ -+#define mtx_owned_p(mtx, pt, flags) \ -+ ((mtx)->__owner_id == (pt)->thread && \ -+ (((flags) & GSYNC_SHARED) == 0 || \ -+ (mtx)->__shpid == __getpid ())) -+ -+/* Record a thread as the owner of the mutex. */ -+#define mtx_set_owner(mtx, pt, flags) \ -+ (void) \ -+ ({ \ -+ (mtx)->__owner_id = (pt)->thread; \ -+ if ((flags) & GSYNC_SHARED) \ -+ (mtx)->__shpid = __getpid (); \ -+ }) -+ -+/* Redefined mutex types. The +1 is for binary compatibility. */ -+#define PT_MTX_NORMAL __PTHREAD_MUTEX_TIMED -+#define PT_MTX_RECURSIVE (__PTHREAD_MUTEX_RECURSIVE + 1) -+#define PT_MTX_ERRORCHECK (__PTHREAD_MUTEX_ERRORCHECK + 1) -+ -+/* Mutex type, including robustness. */ -+#define MTX_TYPE(mtxp) \ -+ ((mtxp)->__type | ((mtxp)->__flags & PTHREAD_MUTEX_ROBUST)) -+ -+extern int __getpid (void) __attribute__ ((const)); -+ -+#endif /* pt-mutex.h */ -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-getrobust.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getrobust.c -new file mode 100644 -index 0000000..86a0909 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-getrobust.c -@@ -0,0 +1,33 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_getrobust (const pthread_mutexattr_t *attrp, int *outp) -+{ -+ *outp = (attrp->__prioceiling & PTHREAD_MUTEX_ROBUST) ? -+ PTHREAD_MUTEX_ROBUST : PTHREAD_MUTEX_STALLED; -+ return (0); -+} -+ -+weak_alias (pthread_mutexattr_getrobust, pthread_mutexattr_getrobust_np) -diff --git a/libpthread/sysdeps/mach/hurd/pt-mutexattr-setrobust.c b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setrobust.c -new file mode 100644 -index 0000000..a90e747 ---- /dev/null -+++ b/libpthread/sysdeps/mach/hurd/pt-mutexattr-setrobust.c -@@ -0,0 +1,36 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ Contributed by Agustina Arzille , 2016. -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public License -+ as published by the Free Software Foundation; either -+ version 2 of the license, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public -+ License along with this program; if not, see -+ . -+*/ -+ -+#include -+#include -+#include -+#include -+#include "pt-mutex.h" -+#include -+ -+int pthread_mutexattr_setrobust (pthread_mutexattr_t *attrp, int robust) -+{ -+ if (robust != PTHREAD_MUTEX_ROBUST && -+ robust != PTHREAD_MUTEX_STALLED) -+ return (EINVAL); -+ -+ attrp->__prioceiling |= robust; -+ return (0); -+} -+ -+weak_alias (pthread_mutexattr_setrobust, pthread_mutexattr_setrobust_np) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-spin.diff glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-spin.diff --- glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-spin.diff 2016-11-30 16:53:58.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-libpthread-gsync-spin.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ -commit cd7e69c545200949cfd1b3c595568556ff9a76e3 -Author: Agustina Arzille -Date: Tue Oct 18 00:20:45 2016 +0200 - - Make pthread_spinlock use gsync - -diff --git a/libpthread/pthread/pt-spin-inlines.c b/libpthread/pthread/pt-spin-inlines.c -index cfb21dd..97afb4d 100644 ---- a/libpthread/pthread/pt-spin-inlines.c -+++ b/libpthread/pthread/pt-spin-inlines.c -@@ -25,10 +25,9 @@ - - #include - --/* Weak aliases for the spin lock functions. Note that -- pthread_spin_lock is left out deliberately. We already provide an -- implementation for it in pt-spin.c. */ -+/* Weak aliases for the spin lock functions. */ - weak_alias (__pthread_spin_destroy, pthread_spin_destroy); - weak_alias (__pthread_spin_init, pthread_spin_init); - weak_alias (__pthread_spin_trylock, pthread_spin_trylock); -+weak_alias (__pthread_spin_lock, pthread_spin_lock); - weak_alias (__pthread_spin_unlock, pthread_spin_unlock); -diff --git a/libpthread/sysdeps/mach/bits/spin-lock-inline.h b/libpthread/sysdeps/mach/bits/spin-lock-inline.h -index f9f7c29..98e4b3b 100644 ---- a/libpthread/sysdeps/mach/bits/spin-lock-inline.h -+++ b/libpthread/sysdeps/mach/bits/spin-lock-inline.h -@@ -22,7 +22,7 @@ - - #include - #include --#include /* This does all the work. */ -+#include /* This does all the work. */ - - __BEGIN_DECLS - -@@ -60,17 +60,15 @@ __PT_SPIN_INLINE int __pthread_spin_trylock (__pthread_spinlock_t *__lock); - __PT_SPIN_INLINE int - __pthread_spin_trylock (__pthread_spinlock_t *__lock) - { -- return __spin_try_lock (__lock) ? 0 : __EBUSY; -+ return __spin_try_lock ((__spin_lock_t *) __lock) ? 0 : __EBUSY; - } - --__extern_inline int __pthread_spin_lock (__pthread_spinlock_t *__lock); --extern int _pthread_spin_lock (__pthread_spinlock_t *__lock); -+__PT_SPIN_INLINE int __pthread_spin_lock (__pthread_spinlock_t *__lock); - --__extern_inline int -+__PT_SPIN_INLINE int - __pthread_spin_lock (__pthread_spinlock_t *__lock) - { -- if (__pthread_spin_trylock (__lock)) -- return _pthread_spin_lock (__lock); -+ __spin_lock ((__spin_lock_t *) __lock); - return 0; - } - -@@ -79,7 +77,7 @@ __PT_SPIN_INLINE int __pthread_spin_unlock (__pthread_spinlock_t *__lock); - __PT_SPIN_INLINE int - __pthread_spin_unlock (__pthread_spinlock_t *__lock) - { -- __spin_unlock (__lock); -+ __spin_unlock ((__spin_lock_t *) __lock); - return 0; - } - -diff --git a/libpthread/sysdeps/mach/bits/spin-lock.h b/libpthread/sysdeps/mach/bits/spin-lock.h -index 537dac9..7574b37 100644 ---- a/libpthread/sysdeps/mach/bits/spin-lock.h -+++ b/libpthread/sysdeps/mach/bits/spin-lock.h -@@ -21,17 +21,14 @@ - #define _BITS_SPIN_LOCK_H 1 - - #include --#include /* This does all the work. */ - - __BEGIN_DECLS - - /* The type of a spin lock object. */ --typedef __spin_lock_t __pthread_spinlock_t; -+typedef volatile int __pthread_spinlock_t; - - /* Initializer for a spin lock object. */ --#ifndef __PTHREAD_SPIN_LOCK_INITIALIZER --#error __PTHREAD_SPIN_LOCK_INITIALIZER undefined: should be defined by . --#endif -+#define __PTHREAD_SPIN_LOCK_INITIALIZER 0 - - __END_DECLS - -diff --git a/libpthread/sysdeps/mach/i386/bits/spin-lock-inline.h b/libpthread/sysdeps/mach/i386/bits/spin-lock-inline.h -deleted file mode 100644 -index e5ed3de..0000000 ---- a/libpthread/sysdeps/mach/i386/bits/spin-lock-inline.h -+++ /dev/null -@@ -1,98 +0,0 @@ --/* Machine-specific definitions for spin locks. i386 version. -- Copyright (C) 2000, 2005, 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 -- modify it under the terms of the GNU Library General Public License as -- published by the Free Software Foundation; either version 2 of the -- License, or (at your option) any later version. -- -- The GNU C Library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Library General Public License for more details. -- -- You should have received a copy of the GNU Library General Public -- License along with the GNU C Library; see the file COPYING.LIB. If not, -- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- Boston, MA 02111-1307, USA. */ -- --/* -- * Never include this file directly; use or instead. -- */ -- --#ifndef _BITS_SPIN_LOCK_INLINE_H --#define _BITS_SPIN_LOCK_INLINE_H 1 -- --#include --#include -- --__BEGIN_DECLS -- --#if defined __USE_EXTERN_INLINES || defined _FORCE_INLINES -- --# ifndef __EBUSY --# include --# define __EBUSY EBUSY --# endif -- --# ifndef __PT_SPIN_INLINE --# define __PT_SPIN_INLINE __extern_inline --# endif -- --__PT_SPIN_INLINE int __pthread_spin_destroy (__pthread_spinlock_t *__lock); -- --__PT_SPIN_INLINE int --__pthread_spin_destroy (__pthread_spinlock_t *__lock) --{ -- return 0; --} -- --__PT_SPIN_INLINE int __pthread_spin_init (__pthread_spinlock_t *__lock, -- int __pshared); -- --__PT_SPIN_INLINE int --__pthread_spin_init (__pthread_spinlock_t *__lock, int __pshared) --{ -- *__lock = __PTHREAD_SPIN_LOCK_INITIALIZER; -- return 0; --} -- --__PT_SPIN_INLINE int __pthread_spin_trylock (__pthread_spinlock_t *__lock); -- --__PT_SPIN_INLINE int --__pthread_spin_trylock (__pthread_spinlock_t *__lock) --{ -- int __locked; -- __asm__ __volatile ("xchgl %0, %1" -- : "=&r" (__locked), "=m" (*__lock) : "0" (1) : "memory"); -- return __locked ? __EBUSY : 0; --} -- --__extern_inline int __pthread_spin_lock (__pthread_spinlock_t *__lock); --extern int _pthread_spin_lock (__pthread_spinlock_t *__lock); -- --__extern_inline int --__pthread_spin_lock (__pthread_spinlock_t *__lock) --{ -- if (__pthread_spin_trylock (__lock)) -- return _pthread_spin_lock (__lock); -- return 0; --} -- --__PT_SPIN_INLINE int __pthread_spin_unlock (__pthread_spinlock_t *__lock); -- --__PT_SPIN_INLINE int --__pthread_spin_unlock (__pthread_spinlock_t *__lock) --{ -- int __unlocked; -- __asm__ __volatile ("xchgl %0, %1" -- : "=&r" (__unlocked), "=m" (*__lock) : "0" (0) : "memory"); -- return 0; --} -- --#endif /* Use extern inlines or force inlines. */ -- --__END_DECLS -- --#endif /* bits/spin-lock.h */ -diff --git a/libpthread/sysdeps/mach/i386/bits/spin-lock.h b/libpthread/sysdeps/mach/i386/bits/spin-lock.h -deleted file mode 100644 -index 5ae81e1..0000000 ---- a/libpthread/sysdeps/mach/i386/bits/spin-lock.h -+++ /dev/null -@@ -1,39 +0,0 @@ --/* Machine-specific definitions for spin locks. i386 version. -- Copyright (C) 2000, 2005, 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 -- modify it under the terms of the GNU Library General Public License as -- published by the Free Software Foundation; either version 2 of the -- License, or (at your option) any later version. -- -- The GNU C Library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Library General Public License for more details. -- -- You should have received a copy of the GNU Library General Public -- License along with the GNU C Library; see the file COPYING.LIB. If not, -- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- Boston, MA 02111-1307, USA. */ -- --/* -- * Never include this file directly; use or instead. -- */ -- --#ifndef _BITS_SPIN_LOCK_H --#define _BITS_SPIN_LOCK_H 1 -- --#include -- --__BEGIN_DECLS -- --/* The type of a spin lock object. */ --typedef __volatile int __pthread_spinlock_t; -- --/* Initializer for a spin lock object. */ --# define __PTHREAD_SPIN_LOCK_INITIALIZER ((__pthread_spinlock_t) 0) -- --__END_DECLS -- --#endif /* bits/spin-lock.h */ -diff --git a/libpthread/sysdeps/mach/pt-spin.c b/libpthread/sysdeps/mach/pt-spin.c -index d9a2a32..0cf1c49 100644 ---- a/libpthread/sysdeps/mach/pt-spin.c -+++ b/libpthread/sysdeps/mach/pt-spin.c -@@ -17,20 +17,16 @@ - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - --#include - #include - - /* In glibc. */ --extern void __spin_lock_solid (__pthread_spinlock_t *lock); -+extern void __spin_lock_solid (__spin_lock_t *lock); - - /* Lock the spin lock object LOCK. If the lock is held by another - thread spin until it becomes available. */ - int --_pthread_spin_lock (__pthread_spinlock_t *lock) -+_pthread_spin_lock (__spin_lock_t *lock) - { - __spin_lock_solid (lock); - return 0; - } -- --weak_alias (_pthread_spin_lock, pthread_spin_lock); --weak_alias (_pthread_spin_lock, __pthread_spin_lock); -diff --git a/libpthread/sysdeps/posix/pt-spin.c b/libpthread/sysdeps/posix/pt-spin.c -index cb809c6..07f8936 100644 ---- a/libpthread/sysdeps/posix/pt-spin.c -+++ b/libpthread/sysdeps/posix/pt-spin.c -@@ -49,6 +49,3 @@ _pthread_spin_lock (__pthread_spinlock_t *lock) - __sched_yield (); - } - } -- --weak_alias (_pthread_spin_lock, pthread_spin_lock); --weak_alias (_pthread_spin_lock, __pthread_spin_lock); diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-mlockall.diff glibc-2.27/debian/patches/hurd-i386/tg-mlockall.diff --- glibc-2.27/debian/patches/hurd-i386/tg-mlockall.diff 2017-03-20 17:03:33.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-mlockall.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -Subject: [PATCH] Add mlockall support - -* sysdeps/mach/hurd/mlockall.c: New file -* sysdeps/mach/hurd/munlockall.c: New file - ---- - sysdeps/mach/hurd/mlockall.c | 42 ++++++++++++++++++++++++++++++++++++++++++ - sysdeps/mach/hurd/munlockall.c | 40 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 82 insertions(+) - -diff --git a/sysdeps/mach/hurd/mlockall.c b/sysdeps/mach/hurd/mlockall.c -new file mode 100644 -index 0000000000..11a3deac8a ---- /dev/null -+++ b/sysdeps/mach/hurd/mlockall.c -@@ -0,0 +1,42 @@ -+/* mlockall -- lock in core all the pages in this process. Stub version. -+ Copyright (C) 2001-2016 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+/* Cause all currently mapped pages of the process to be memory resident -+ until unlocked by a call to the `munlockall', until the process exits, -+ or until the process calls `execve'. */ -+ -+int -+mlockall (int flags) -+{ -+ mach_port_t host; -+ error_t err; -+ -+ err = __get_privileged_ports (&host, NULL); -+ if (err) -+ return __hurd_fail (err); -+ -+ err = __vm_wire_all (host, __mach_task_self (), flags); -+ __mach_port_deallocate (__mach_task_self (), host); -+ return err ? __hurd_fail (err) : 0; -+} -diff --git a/sysdeps/mach/hurd/munlockall.c b/sysdeps/mach/hurd/munlockall.c -new file mode 100644 -index 0000000000..6fbb69435d ---- /dev/null -+++ b/sysdeps/mach/hurd/munlockall.c -@@ -0,0 +1,40 @@ -+/* munlockall -- undo the effects of all prior mlock calls. Stub version. -+ Copyright (C) 2001-2016 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+/* Undo the effects of all prior mlock calls in this process. */ -+ -+int -+munlockall (void) -+{ -+ mach_port_t host; -+ error_t err; -+ -+ err = __get_privileged_ports (&host, NULL); -+ if (err) -+ return __hurd_fail (err); -+ -+ err = __vm_wire_all (host, __mach_task_self (), VM_WIRE_NONE); -+ __mach_port_deallocate (__mach_task_self (), host); -+ return err ? __hurd_fail (err) : 0; -+} --- -tg: (7bb5f8a836..) t/mlockall (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW.diff glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW.diff --- glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW.diff 2016-11-30 16:53:58.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -From: Samuel Thibault -Subject: [PATCH] hurd: Fix O_NOFOLLOW - -The error code documented by POSIX for opening a symlink with O_NOFOLLOW -is ELOOP. - -Also, if the translator does not expose symlink as a symlink translator but -as a S_IFLNK file, O_NOFOLLOW needs to return ELOOP too. - -Signed-off-by: Samuel Thibault - ---- - hurd/lookup-retry.c | 36 ++++++++++++++++++++---------------- - 1 file changed, 20 insertions(+), 16 deletions(-) - -diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c -index aee2ba8..b7a6a2b 100644 ---- a/hurd/lookup-retry.c -+++ b/hurd/lookup-retry.c -@@ -127,7 +127,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) - { - /* In Linux, O_NOFOLLOW means to reject symlinks. If we - did an O_NOLINK lookup above and io_stat here to check -- for S_IFLNK, a translator like firmlink could easily -+ for S_IFLNK only, a translator like firmlink could easily - spoof this check by not showing S_IFLNK, but in fact - redirecting the lookup to some other name - (i.e. opening the very same holes a symlink would). -@@ -145,23 +145,27 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) - one exception to our general translator-based rule. */ - struct stat64 st; - err = __io_stat (*result, &st); -- if (!err -- && (st.st_mode & (S_IPTRANS|S_IATRANS))) -+ if (!err) - { -- if (st.st_uid != 0) -- err = ENOENT; -- else if (st.st_mode & S_IPTRANS) -+ if (S_ISLNK(st.st_mode)) -+ err = ELOOP; -+ else if (st.st_mode & (S_IPTRANS|S_IATRANS)) - { -- char buf[1024]; -- char *trans = buf; -- size_t translen = sizeof buf; -- err = __file_get_translator (*result, -- &trans, &translen); -- if (!err -- && translen > sizeof _HURD_SYMLINK -- && !memcmp (trans, -- _HURD_SYMLINK, sizeof _HURD_SYMLINK)) -- err = ENOENT; -+ if (st.st_uid != 0) -+ err = ELOOP; -+ else if (st.st_mode & S_IPTRANS) -+ { -+ char buf[1024]; -+ char *trans = buf; -+ size_t translen = sizeof buf; -+ err = __file_get_translator (*result, -+ &trans, &translen); -+ if (!err -+ && translen > sizeof _HURD_SYMLINK -+ && !memcmp (trans, -+ _HURD_SYMLINK, sizeof _HURD_SYMLINK)) -+ err = ELOOP; -+ } - } - } - } --- -tg: (7bb5f8a..) t/NOFOLLOW (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW-DIRECTORY.diff glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW-DIRECTORY.diff --- glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW-DIRECTORY.diff 2016-11-30 16:53:58.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-NOFOLLOW-DIRECTORY.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -From: Samuel Thibault -Subject: [PATCH] hurd: Fix O_DIRECTORY | O_NOFOLLOW - -Appending / to the path to be looked up makes us always follow a final -symlink, even with O_NOTRANS (since the final resolution is after the -'/'). In the O_DIRECTORY | O_NOFOLLOW case, we thus have to really open -the node and stat it, which we already do anyway, and check for -directory type. - -Signed-off-by: Samuel Thibault - ---- - hurd/hurdlookup.c | 2 +- - hurd/lookup-retry.c | 2 ++ - 2 files changed, 3 insertions(+), 1 deletion(-) - -diff --git a/hurd/hurdlookup.c b/hurd/hurdlookup.c -index dbff009..bd720c2 100644 ---- a/hurd/hurdlookup.c -+++ b/hurd/hurdlookup.c -@@ -72,7 +72,7 @@ __hurd_file_name_lookup (error_t (*use_init_port) - if (flags & O_NOFOLLOW) /* See lookup-retry.c about O_NOFOLLOW. */ - flags |= O_NOTRANS; - -- if (flags & O_DIRECTORY) -+ if (flags & O_DIRECTORY && !(flags & O_NOFOLLOW)) - { - /* The caller wants to require that the file we look up is a directory. - We can do this without an extra RPC by appending a trailing slash -diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c -index b7a6a2b..d372959 100644 ---- a/hurd/lookup-retry.c -+++ b/hurd/lookup-retry.c -@@ -147,6 +147,8 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) - err = __io_stat (*result, &st); - if (!err) - { -+ if (flags & O_DIRECTORY && !S_ISDIR(st.st_mode)) -+ err = ENOTDIR; - if (S_ISLNK(st.st_mode)) - err = ELOOP; - else if (st.st_mode & (S_IPTRANS|S_IATRANS)) --- -tg: (2bc1a49..) t/NOFOLLOW-DIRECTORY (depends on: t/NOFOLLOW) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-pagesize.diff glibc-2.27/debian/patches/hurd-i386/tg-pagesize.diff --- glibc-2.27/debian/patches/hurd-i386/tg-pagesize.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-pagesize.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -Subject: [PATCH] t/pagesize - -From: Thomas Schwinge - -WIP. id:"87mxd9hl2n.fsf@kepler.schwinge.homeip.net" - ---- - elf/dl-support.c | 2 +- - elf/rtld.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -Index: glibc-2.27/elf/dl-support.c -=================================================================== ---- glibc-2.27.orig/elf/dl-support.c -+++ glibc-2.27/elf/dl-support.c -@@ -136,7 +136,7 @@ hp_timing_t _dl_cpuclock_offset; - - void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls; - --size_t _dl_pagesize = EXEC_PAGESIZE; -+size_t _dl_pagesize = /* EXEC_PAGESIZE */ 4096; - - int _dl_inhibit_cache; - -Index: glibc-2.27/elf/rtld.c -=================================================================== ---- glibc-2.27.orig/elf/rtld.c -+++ glibc-2.27/elf/rtld.c -@@ -271,7 +271,7 @@ struct rtld_global_ro _rtld_global_ro at - #endif - ._dl_lazy = 1, - ._dl_fpu_control = _FPU_DEFAULT, -- ._dl_pagesize = EXEC_PAGESIZE, -+ ._dl_pagesize = /* EXEC_PAGESIZE */ 4096, - ._dl_inhibit_cache = 0, - - /* Function pointers. */ diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-reboot-startup.diff glibc-2.27/debian/patches/hurd-i386/tg-reboot-startup.diff --- glibc-2.27/debian/patches/hurd-i386/tg-reboot-startup.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-reboot-startup.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -From: David Michael -Subject: [PATCH] Lookup the startup server through /servers/startup - -* sysdeps/mach/hurd/reboot.c: Include -(reboot): Lookup _SERVERS_STARTUP instead of calling proc_getmsgport to get a -port to the startup server. - - - ---- - sysdeps/mach/hurd/reboot.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/sysdeps/mach/hurd/reboot.c b/sysdeps/mach/hurd/reboot.c -index 60d96ea..51c3d73 100644 ---- a/sysdeps/mach/hurd/reboot.c -+++ b/sysdeps/mach/hurd/reboot.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -33,8 +34,8 @@ reboot (int howto) - if (err) - return __hurd_fail (EPERM); - -- err = __USEPORT (PROC, __proc_getmsgport (port, 1, &init)); -- if (!err) -+ init = __file_name_lookup (_SERVERS_STARTUP, 0, 0); -+ if (init != MACH_PORT_NULL) - { - err = __startup_reboot (init, hostpriv, howto); - __mach_port_deallocate (__mach_task_self (), init); --- -tg: (9a079e2..) t/reboot-startup (depends on: baseline) diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-thread-linkspace.diff glibc-2.27/debian/patches/hurd-i386/tg-thread-linkspace.diff --- glibc-2.27/debian/patches/hurd-i386/tg-thread-linkspace.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-thread-linkspace.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -From: Samuel Thibault -Subject: [PATCH] Fix thread linkspace - -Libc uses some thread functions, but should not expose the corresponding -symbols, so call aliases. - ---- - hurd/Versions | 6 +++--- - hurd/hurdsig.c | 20 ++++++++++---------- - sysdeps/mach/hurd/cthreads.c | 10 +++++----- - sysdeps/mach/libc-lock.h | 4 ++-- - 4 files changed, 20 insertions(+), 20 deletions(-) - -diff --git a/hurd/Versions b/hurd/Versions -index 414231b5b4..e040b49edc 100644 ---- a/hurd/Versions -+++ b/hurd/Versions -@@ -143,14 +143,14 @@ libc { - - HURD_CTHREADS_0.3 { - # weak refs to libthreads functions that libc calls iff libthreads in use -- cthread_fork; cthread_detach; -- pthread_getattr_np; pthread_attr_getstack; -+ __cthread_fork; __cthread_detach; -+ __pthread_getattr_np; __pthread_attr_getstack; - - # variables used for detecting cthreads - _cthread_exit_routine; _cthread_init_routine; - - # cthreads functions with stubs in libc -- cthread_keycreate; cthread_getspecific; cthread_setspecific; -+ __cthread_keycreate; __cthread_getspecific; __cthread_setspecific; - __libc_getspecific; - } - -diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c -index fd787c6c1b..8584d5c631 100644 ---- a/hurd/hurdsig.c -+++ b/hurd/hurdsig.c -@@ -1466,11 +1466,11 @@ _hurdsig_init (const int *intarray, size_t intarraysize) - - /* Start the signal thread listening on the message port. */ - --#pragma weak cthread_fork --#pragma weak cthread_detach --#pragma weak pthread_getattr_np --#pragma weak pthread_attr_getstack -- if (!cthread_fork) -+#pragma weak __cthread_fork -+#pragma weak __cthread_detach -+#pragma weak __pthread_getattr_np -+#pragma weak __pthread_attr_getstack -+ if (!__cthread_fork) - { - err = __thread_create (__mach_task_self (), &_hurd_msgport_thread); - assert_perror (err); -@@ -1495,7 +1495,7 @@ _hurdsig_init (const int *intarray, size_t intarraysize) - } - else - { -- cthread_t thread; -+ __cthread_t thread; - /* When cthreads is being used, we need to make the signal thread a - proper cthread. Otherwise it cannot use mutex_lock et al, which - will be the cthreads versions. Various of the message port RPC -@@ -1505,17 +1505,17 @@ _hurdsig_init (const int *intarray, size_t intarraysize) - we'll let the signal thread's per-thread variables be found as for - any normal cthread, and just leave the magic __hurd_sigthread_* - values all zero so they'll be ignored. */ -- cthread_detach (thread = cthread_fork ((cthread_fn_t) &_hurd_msgport_receive, 0)); -+ __cthread_detach (thread = __cthread_fork ((__cthread_fn_t) &_hurd_msgport_receive, 0)); - -- if (pthread_getattr_np) -+ if (__pthread_getattr_np) - { - /* Record stack layout for fork() */ - pthread_attr_t attr; - void *addr; - size_t size; - -- pthread_getattr_np ((pthread_t) thread, &attr); -- pthread_attr_getstack (&attr, &addr, &size); -+ __pthread_getattr_np ((pthread_t) thread, &attr); -+ __pthread_attr_getstack (&attr, &addr, &size); - __hurd_sigthread_stack_base = (uintptr_t) addr; - __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + size; - } -diff --git a/sysdeps/mach/hurd/cthreads.c b/sysdeps/mach/hurd/cthreads.c -index f223e00b12..0a3780b273 100644 ---- a/sysdeps/mach/hurd/cthreads.c -+++ b/sysdeps/mach/hurd/cthreads.c -@@ -24,7 +24,7 @@ char __libc_lock_self0[0]; - /* Placeholder for key creation routine from Hurd cthreads library. */ - int - weak_function --cthread_keycreate (cthread_key_t *key) -+__cthread_keycreate (cthread_key_t *key) - { - __set_errno (ENOSYS); - *key = -1; -@@ -34,7 +34,7 @@ cthread_keycreate (cthread_key_t *key) - /* Placeholder for key retrieval routine from Hurd cthreads library. */ - int - weak_function --cthread_getspecific (cthread_key_t key, void **pval) -+__cthread_getspecific (cthread_key_t key, void **pval) - { - *pval = NULL; - __set_errno (ENOSYS); -@@ -44,19 +44,19 @@ cthread_getspecific (cthread_key_t key, void **pval) - /* Placeholder for key setting routine from Hurd cthreads library. */ - int - weak_function --cthread_setspecific (cthread_key_t key, void *val) -+__cthread_setspecific (cthread_key_t key, void *val) - { - __set_errno (ENOSYS); - return -1; - } - --/* Call cthread_getspecific which gets a pointer to the return value instead -+/* Call __cthread_getspecific which gets a pointer to the return value instead - of just returning it. */ - void * - weak_function - __libc_getspecific (cthread_key_t key) - { - void *val; -- cthread_getspecific (key, &val); -+ __cthread_getspecific (key, &val); - return val; - } -diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h -index f9f57a0a65..35233f797e 100644 ---- a/sysdeps/mach/libc-lock.h -+++ b/sysdeps/mach/libc-lock.h -@@ -223,8 +223,8 @@ struct __libc_once - used as argument to __libc_cleanup_region_start. */ - #define __libc_mutex_unlock __libc_lock_unlock - --#define __libc_key_create(KEY,DEST) cthread_keycreate (KEY) --#define __libc_setspecific(KEY,VAL) cthread_setspecific (KEY, VAL) -+#define __libc_key_create(KEY,DEST) __cthread_keycreate (KEY) -+#define __libc_setspecific(KEY,VAL) __cthread_setspecific (KEY, VAL) - void *__libc_getspecific (__libc_key_t key); - - /* Hide the definitions which are only supposed to be used inside libc in diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-timer_routines.diff glibc-2.27/debian/patches/hurd-i386/tg-timer_routines.diff --- glibc-2.27/debian/patches/hurd-i386/tg-timer_routines.diff 2016-11-30 16:53:58.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-timer_routines.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -Index: glibc/sysdeps/pthread/timer_routines.c -=================================================================== ---- glibc.orig/sysdeps/pthread/timer_routines.c -+++ glibc/sysdeps/pthread/timer_routines.c -@@ -29,7 +29,7 @@ - #include - - #include "posix-timer.h" --#include -+//#include - - - /* Number of threads used. */ -@@ -395,6 +395,9 @@ thread_func (void *arg) - { - timespec_add (&timer->expirytime, &timer->expirytime, - &timer->value.it_interval); -+#ifndef DELAYTIMER_MAX -+#define DELAYTIMER_MAX INT_MAX -+#endif - if (timer->overrun_count < DELAYTIMER_MAX) - ++timer->overrun_count; - } -@@ -481,7 +484,7 @@ __timer_thread_wakeup (struct thread_nod - pthread_cond_broadcast (&thread->cond); - } - -- -+#if 0 - /* Compare two pthread_attr_t thread attributes for exact equality. - Returns 1 if they are equal, otherwise zero if they are not equal - or contain illegal values. This version is NPTL-specific for -@@ -506,6 +509,7 @@ thread_attr_compare (const pthread_attr_ - && memcmp (ileft->cpuset, iright->cpuset, - ileft->cpusetsize) == 0))); - } -+#endif - - - /* Search the list of active threads and find one which has matching -@@ -514,6 +518,7 @@ struct thread_node * - __timer_thread_find_matching (const pthread_attr_t *desired_attr, - clockid_t desired_clock_id) - { -+#if 0 - struct list_head *iter = list_first (&thread_active_list); - - while (iter != list_null (&thread_active_list)) -@@ -526,6 +531,7 @@ __timer_thread_find_matching (const pthr - - iter = list_next (iter); - } -+#endif - - return NULL; - } diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-tls.diff glibc-2.27/debian/patches/hurd-i386/tg-tls.diff --- glibc-2.27/debian/patches/hurd-i386/tg-tls.diff 2017-09-03 20:41:15.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-tls.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,423 +0,0 @@ -From: Thomas Schwinge -Subject: [PATCH] tls - -TLS support. - -All by Samuel Thibault. - -glibc-2.8/debian/patches/hurd-i386/local-tls-support.diff 3151 - -2009-07-30 Samuel Thibault - - Align up includes as on Linux, to fix build. - * sysdeps/mach/hurd/tls.h: Include . - ---- - sysdeps/mach/thread_state.h | 3 ++ - csu/libc-start.c | 2 + - include/errno.h | 14 +++++---- - hurd/hurdfault.c | 2 + - hurd/hurdsig.c | 2 + - mach/mach.h | 3 ++ - mach/setup-thread.c | 30 +++++++++++++++++++- - sysdeps/generic/thread_state.h | 1 - sysdeps/mach/hurd/libc-lock.h | 3 ++ - sysdeps/mach/hurd/fork.c | 7 ++++ - sysdeps/mach/hurd/i386/init-first.c | 49 +++++++++++++++++++++------------ - sysdeps/mach/hurd/i386/tls.h | 53 +++++++++++++++++++++++++++++------- - sysdeps/mach/hurd/i386/trampoline.c | 2 - - sysdeps/mach/hurd/profil.c | 2 + - sysdeps/mach/hurd/setitimer.c | 3 +- - sysdeps/mach/hurd/tls.h | 2 + - sysdeps/mach/i386/thread_state.h | 11 ++++++- - 17 files changed, 150 insertions(+), 39 deletions(-) - ---- a/include/errno.h -+++ b/include/errno.h -@@ -21,13 +21,15 @@ extern int rtld_errno attribute_hidden; - - # include - --# undef errno --# if IS_IN (libc) --# define errno __libc_errno --# else --# define errno errno /* For #ifndef errno tests. */ --# endif -+# if !defined(__GNU__) -+# undef errno -+# if IS_IN (libc) -+# define errno __libc_errno -+# else -+# define errno errno /* For #ifndef errno tests. */ -+# endif - extern __thread int errno attribute_tls_model_ie; -+# endif - - # endif /* IS_IN_LIB */ - ---- a/hurd/hurdfault.c -+++ b/hurd/hurdfault.c -@@ -204,6 +204,8 @@ _hurdsig_fault_init (void) - /* This state will be restored when we fault. - It runs the function above. */ - memset (&state, 0, sizeof state); -+ -+ MACHINE_THREAD_STATE_FIX_NEW (&state); - MACHINE_THREAD_STATE_SET_PC (&state, faulted); - MACHINE_THREAD_STATE_SET_SP (&state, faultstack, sizeof faultstack); - ---- a/hurd/hurdsig.c -+++ b/hurd/hurdsig.c -@@ -1266,6 +1266,8 @@ _hurdsig_init (const int *intarray, size - (vm_address_t *) &__hurd_sigthread_stack_base, - &stacksize); - assert_perror (err); -+ err = __mach_setup_tls (_hurd_msgport_thread); -+ assert_perror (err); - - __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + stacksize; - __hurd_sigthread_variables = ---- a/mach/mach.h -+++ b/mach/mach.h -@@ -100,5 +100,8 @@ kern_return_t mach_setup_thread (task_t - vm_address_t *stack_base, - vm_size_t *stack_size); - -+/* Give THREAD a TLS area. */ -+kern_return_t __mach_setup_tls (thread_t thread); -+kern_return_t mach_setup_tls (thread_t thread); - - #endif /* mach.h */ ---- a/mach/setup-thread.c -+++ b/mach/setup-thread.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include "sysdep.h" /* Defines stack direction. */ - - #define STACK_SIZE (16 * 1024 * 1024) /* 16MB, arbitrary. */ -@@ -72,8 +73,35 @@ __mach_setup_thread (task_t task, thread - if (error = __vm_protect (task, stack, __vm_page_size, 0, VM_PROT_NONE)) - return error; - -- return __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, -+ return __thread_set_state (thread, MACHINE_NEW_THREAD_STATE_FLAVOR, - (natural_t *) &ts, tssize); - } - - weak_alias (__mach_setup_thread, mach_setup_thread) -+ -+/* Give THREAD a TLS area. */ -+kern_return_t -+__mach_setup_tls (thread_t thread) -+{ -+ kern_return_t error; -+ struct machine_thread_state ts; -+ mach_msg_type_number_t tssize = MACHINE_THREAD_STATE_COUNT; -+ tcbhead_t *tcb; -+ -+ if (error = __thread_get_state (thread, MACHINE_THREAD_STATE_FLAVOR, -+ (natural_t *) &ts, &tssize)) -+ return error; -+ assert (tssize == MACHINE_THREAD_STATE_COUNT); -+ -+ tcb = _dl_allocate_tls(NULL); -+ if (!tcb) -+ return KERN_RESOURCE_SHORTAGE; -+ -+ _hurd_tls_new(thread, &ts, tcb); -+ -+ error = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, -+ (natural_t *) &ts, tssize); -+ return error; -+} -+ -+weak_alias (__mach_setup_tls, mach_setup_tls) ---- a/sysdeps/generic/thread_state.h -+++ b/sysdeps/generic/thread_state.h -@@ -22,6 +22,7 @@ - - /* Replace with "i386" or "mips" or whatever. */ - -+#define MACHINE_NEW_THREAD_STATE_FLAVOR _NEW_THREAD_STATE - #define MACHINE_THREAD_STATE_FLAVOR _THREAD_STATE - #define MACHINE_THREAD_STATE_COUNT _THREAD_STATE_COUNT - ---- a/sysdeps/mach/hurd/libc-lock.h -+++ b/sysdeps/mach/hurd/libc-lock.h -@@ -20,6 +20,9 @@ - #define _LIBC_LOCK_H 1 - - #if (_LIBC - 0) || (_CTHREADS_ - 0) -+#if (_LIBC - 0) -+#include -+#endif - #include - #include - ---- a/sysdeps/mach/hurd/fork.c -+++ b/sysdeps/mach/hurd/fork.c -@@ -528,6 +528,11 @@ __fork (void) - #endif - MACHINE_THREAD_STATE_SET_PC (&state, - (unsigned long int) _hurd_msgport_receive); -+ -+ /* Do special thread setup for TLS if needed. */ -+ if (err = _hurd_tls_fork (sigthread, _hurd_msgport_thread, &state)) -+ LOSE; -+ - if (err = __thread_set_state (sigthread, MACHINE_THREAD_STATE_FLAVOR, - (natural_t *) &state, statecount)) - LOSE; -@@ -538,7 +543,7 @@ __fork (void) - _hurd_longjmp_thread_state (&state, env, 1); - - /* Do special thread setup for TLS if needed. */ -- if (err = _hurd_tls_fork (thread, &state)) -+ if (err = _hurd_tls_fork (thread, ss->thread, &state)) - LOSE; - - if (err = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, ---- a/sysdeps/mach/hurd/i386/init-first.c -+++ b/sysdeps/mach/hurd/i386/init-first.c -@@ -113,31 +113,11 @@ init1 (int argc, char *arg0, ...) - data block; the argument strings start there. */ - if ((void *) d == argv[0]) - { --#ifndef SHARED -- /* With a new enough linker (binutils-2.23 or better), -- the magic __ehdr_start symbol will be available and -- __libc_start_main will have done this that way already. */ -- if (_dl_phdr == NULL) -- { -- /* We may need to see our own phdrs, e.g. for TLS setup. -- Try the usual kludge to find the headers without help from -- the exec server. */ -- extern const void __executable_start; -- const ElfW(Ehdr) *const ehdr = &__executable_start; -- _dl_phdr = (const void *) ehdr + ehdr->e_phoff; -- _dl_phnum = ehdr->e_phnum; -- assert (ehdr->e_phentsize == sizeof (ElfW(Phdr))); -- } --#endif - return; - } - - #ifndef SHARED - __libc_enable_secure = d->flags & EXEC_SECURE; -- -- _dl_phdr = (ElfW(Phdr) *) d->phdr; -- _dl_phnum = d->phdrsz / sizeof (ElfW(Phdr)); -- assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0); - #endif - - _hurd_init_dtable = d->dtable; -@@ -193,6 +173,40 @@ init (int *data) - ++envp; - d = (void *) ++envp; - -+#ifndef SHARED -+ /* If we are the bootstrap task started by the kernel, -+ then after the environment pointers there is no Hurd -+ data block; the argument strings start there. */ -+ if ((void *) d == argv[0]) -+ { -+ /* With a new enough linker (binutils-2.23 or better), -+ the magic __ehdr_start symbol will be available and -+ __libc_start_main will have done this that way already. */ -+ if (_dl_phdr == NULL) -+ { -+ /* We may need to see our own phdrs, e.g. for TLS setup. -+ Try the usual kludge to find the headers without help from -+ the exec server. */ -+ extern const void __executable_start; -+ const ElfW(Ehdr) *const ehdr = &__executable_start; -+ _dl_phdr = (const void *) ehdr + ehdr->e_phoff; -+ _dl_phnum = ehdr->e_phnum; -+ assert (ehdr->e_phentsize == sizeof (ElfW(Phdr))); -+ } -+ } -+ else -+ { -+ _dl_phdr = (ElfW(Phdr) *) d->phdr; -+ _dl_phnum = d->phdrsz / sizeof (ElfW(Phdr)); -+ assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0); -+ } -+ -+ /* We need to setup TLS before starting sigthread */ -+ extern void __pthread_initialize_minimal(void); -+ if (__pthread_initialize_minimal != NULL) -+ __pthread_initialize_minimal(); -+#endif -+ - /* The user might have defined a value for this, to get more variables. - Otherwise it will be zero on startup. We must make sure it is set - properly before before cthreads initialization, so cthreads can know ---- a/sysdeps/mach/hurd/i386/tls.h -+++ b/sysdeps/mach/hurd/i386/tls.h -@@ -56,6 +56,15 @@ typedef struct - #define TLS_TCB_AT_TP 1 - #define TLS_DTV_AT_TP 0 - -+/* Alignment requirement for TCB. -+ -+ Some processors such as Intel Atom pay a big penalty on every -+ access using a segment override if that segment's base is not -+ aligned to the size of a cache line. (See Intel 64 and IA-32 -+ Architectures Optimization Reference Manual, section 13.3.3.3, -+ "Segment Base".) On such machines, a cache line is 64 bytes. */ -+#define TCB_ALIGNMENT 64 -+ - #ifndef __ASSEMBLER__ - - /* Use i386-specific RPCs to arrange that %gs segment register prefix -@@ -70,7 +70,7 @@ _hurd_tls_init (tcbhead_t *tcb, int seco - - /* Get the first available selector. */ - int sel = -1; -- error_t err = __i386_set_gdt (tcb->self, &sel, desc); -+ kern_return_t err = __i386_set_gdt (tcb->self, &sel, desc); - if (err == MIG_BAD_ID) - { - /* Old kernel, use a per-thread LDT. */ -@@ -139,9 +139,40 @@ _hurd_tls_init (tcbhead_t *tcb, int seco - - # include - --/* Set up TLS in the new thread of a fork child, copying from our own. */ --static inline error_t __attribute__ ((unused)) --_hurd_tls_fork (thread_t child, struct i386_thread_state *state) -+/* Set up TLS in the new thread of a fork child, copying from the original. */ -+static inline kern_return_t __attribute__ ((unused)) -+_hurd_tls_fork (thread_t child, thread_t orig, struct i386_thread_state *state) -+{ -+ /* Fetch the selector set by _hurd_tls_init. */ -+ int sel; -+ asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0)); -+ if (sel == state->ds) /* _hurd_tls_init was never called. */ -+ return 0; -+ -+ struct descriptor desc, *_desc = &desc; -+ int err; -+ unsigned int count = 1; -+ -+ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */ -+ err = __i386_get_ldt (orig, sel, 1, &_desc, &count); -+ else -+ err = __i386_get_gdt (orig, sel, &desc); -+ -+ assert_perror (err); -+ if (err) -+ return err; -+ -+ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */ -+ err = __i386_set_ldt (child, sel, &desc, 1); -+ else -+ err = __i386_set_gdt (child, &sel, desc); -+ -+ state->gs = sel; -+ return err; -+} -+ -+static inline kern_return_t __attribute__ ((unused)) -+_hurd_tls_new (thread_t child, struct i386_thread_state *state, tcbhead_t *tcb) - { - /* Fetch the selector set by _hurd_tls_init. */ - int sel; -@@ -149,11 +180,13 @@ _hurd_tls_fork (thread_t child, struct i - if (sel == state->ds) /* _hurd_tls_init was never called. */ - return 0; - -- tcbhead_t *const tcb = THREAD_SELF; - HURD_TLS_DESC_DECL (desc, tcb); -- error_t err; -+ kern_return_t err; -+ -+ tcb->tcb = tcb; -+ tcb->self = child; - -- if (__builtin_expect (sel, 0x50) & 4) /* LDT selector */ -+ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */ - err = __i386_set_ldt (child, sel, &desc, 1); - else - err = __i386_set_gdt (child, &sel, desc); ---- a/sysdeps/mach/hurd/i386/trampoline.c -+++ b/sysdeps/mach/hurd/i386/trampoline.c -@@ -63,7 +63,7 @@ _hurd_setup_sighandler (struct hurd_sigs - sizeof (state->basic)); - memcpy (&state->fpu, &ss->context->sc_i386_float_state, - sizeof (state->fpu)); -- state->set |= (1 << i386_THREAD_STATE) | (1 << i386_FLOAT_STATE); -+ state->set |= (1 << i386_REGS_SEGS_STATE) | (1 << i386_FLOAT_STATE); - } - } - ---- a/sysdeps/mach/hurd/profil.c -+++ b/sysdeps/mach/hurd/profil.c -@@ -68,6 +68,8 @@ update_waiter (u_short *sample_buffer, s - if (! err) - err = __mach_setup_thread (__mach_task_self (), profile_thread, - &profile_waiter, NULL, NULL); -+ if (! err) -+ err = __mach_setup_tls(profile_thread); - } - else - err = 0; ---- a/sysdeps/mach/hurd/setitimer.c -+++ b/sysdeps/mach/hurd/setitimer.c -@@ -221,11 +221,12 @@ setitimer_locked (const struct itimerval - goto out; - _hurd_itimer_thread_stack_base = 0; /* Anywhere. */ - _hurd_itimer_thread_stack_size = __vm_page_size; /* Small stack. */ -- if (err = __mach_setup_thread (__mach_task_self (), -+ if ((err = __mach_setup_thread (__mach_task_self (), - _hurd_itimer_thread, - &timer_thread, - &_hurd_itimer_thread_stack_base, - &_hurd_itimer_thread_stack_size)) -+ || (err = __mach_setup_tls(_hurd_itimer_thread))) - { - __thread_terminate (_hurd_itimer_thread); - _hurd_itimer_thread = MACH_PORT_NULL; ---- a/sysdeps/mach/i386/thread_state.h -+++ b/sysdeps/mach/i386/thread_state.h -@@ -21,7 +21,8 @@ - - #include - --#define MACHINE_THREAD_STATE_FLAVOR i386_THREAD_STATE -+#define MACHINE_NEW_THREAD_STATE_FLAVOR i386_THREAD_STATE -+#define MACHINE_THREAD_STATE_FLAVOR i386_REGS_SEGS_STATE - #define MACHINE_THREAD_STATE_COUNT i386_THREAD_STATE_COUNT - - #define machine_thread_state i386_thread_state -@@ -30,6 +31,14 @@ - #define SP uesp - #define SYSRETURN eax - -+#define MACHINE_THREAD_STATE_FIX_NEW(ts) do { \ -+ asm ("mov %%cs, %w0" : "=q" ((ts)->cs)); \ -+ asm ("mov %%ds, %w0" : "=q" ((ts)->ds)); \ -+ asm ("mov %%es, %w0" : "=q" ((ts)->es)); \ -+ asm ("mov %%fs, %w0" : "=q" ((ts)->fs)); \ -+ asm ("mov %%gs, %w0" : "=q" ((ts)->gs)); \ -+} while(0) -+ - struct machine_thread_all_state - { - int set; /* Mask of bits (1 << FLAVOR). */ ---- a/sysdeps/mach/thread_state.h -+++ b/sysdeps/mach/thread_state.h -@@ -37,6 +37,9 @@ - ((ts)->SP = (unsigned long int) (stack) + (size)) - #endif - #endif -+#ifndef MACHINE_THREAD_STATE_FIX_NEW -+#define MACHINE_THREAD_STATE_FIX_NEW(ts) -+#endif - - /* These functions are of use in machine-dependent signal trampoline - implementations. */ diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-tls_thread_leak.diff glibc-2.27/debian/patches/hurd-i386/tg-tls_thread_leak.diff --- glibc-2.27/debian/patches/hurd-i386/tg-tls_thread_leak.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-tls_thread_leak.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -From: Richard Braun -Subject: [PATCH] Hurd: fix port leak in TLS - -Depending on whether the thread is the main thread or not, the threading -library can have trouble determining whether the thread reference in the -TCB is valid. The simple solution is to let the threading library -initialize the TCB, and use a temporary reference when initializing TLS. - -* sysdeps/mach/hurd/i386/tls.h (_hurd_tls_init): Use a temporary thread -reference. - ---- - sysdeps/mach/hurd/i386/tls.h | 35 +++++++++++++++++++++++------------ - 1 file changed, 23 insertions(+), 12 deletions(-) - ---- a/sysdeps/mach/hurd/i386/tls.h -+++ b/sysdeps/mach/hurd/i386/tls.h -@@ -69,6 +69,8 @@ static inline const char * __attribute__ - _hurd_tls_init (tcbhead_t *tcb) - { - HURD_TLS_DESC_DECL (desc, tcb); -+ thread_t self = __mach_thread_self (); -+ const char *msg = NULL; - - /* This field is used by TLS accesses to get our "thread pointer" - from the TLS point of view. */ -@@ -76,25 +78,26 @@ _hurd_tls_init (tcbhead_t *tcb, int seco - from the TLS point of view. */ - tcb->tcb = tcb; - -- /* Cache our thread port. */ -- tcb->self = __mach_thread_self (); -- - /* Get the first available selector. */ - int sel = -1; -- kern_return_t err = __i386_set_gdt (tcb->self, &sel, desc); -+ kern_return_t err = __i386_set_gdt (self, &sel, desc); - if (err == MIG_BAD_ID) - { - /* Old kernel, use a per-thread LDT. */ - sel = 0x27; -- err = __i386_set_ldt (tcb->self, sel, &desc, 1); -+ err = __i386_set_ldt (self, sel, &desc, 1); - assert_perror (err); - if (err) -- return "i386_set_ldt failed"; -+ { -+ msg = "i386_set_ldt failed"; -+ goto out; -+ } - } - else if (err) - { - assert_perror (err); /* Separate from above with different line #. */ -- return "i386_set_gdt failed"; -+ msg = "i386_set_gdt failed"; -+ goto out; - } - - /* Now install the new selector. */ -@@ -107,7 +110,9 @@ _hurd_tls_init (tcbhead_t *tcb, int seco - /* Now install the new selector. */ - asm volatile ("mov %w0, %%gs" :: "q" (sel)); - -- return 0; -+out: -+ __mach_port_deallocate (__mach_task_self (), self); -+ return msg; - } - - /* Code to initially initialize the thread pointer. This might need diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-tls-threadvar.diff glibc-2.27/debian/patches/hurd-i386/tg-tls-threadvar.diff --- glibc-2.27/debian/patches/hurd-i386/tg-tls-threadvar.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-tls-threadvar.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,846 +0,0 @@ -From: Thomas Schwinge -Subject: [PATCH] tls-threadvar - -replace the custom threadvar mechanism with generic TLS. -That will fix sigaltstack. - -Note: the added reply_port and _hurd_sigstate fields should be kept last. - ---- - hurd/Versions | 6 - - hurd/hurd/signal.h | 23 ++++--- - hurd/hurd/threadvar.h | 85 ++-------------------------- - hurd/hurdsig.c | 51 ++++++++++------ - hurd/hurdstartup.c | 1 - hurd/sigunwind.c | 4 - - include/errno.h | 2 - sysdeps/mach/hurd/Versions | 4 - - sysdeps/mach/hurd/cthreads.c | 2 - sysdeps/mach/hurd/dl-sysdep.c | 19 ------ - sysdeps/mach/hurd/errno-loc.c | 22 ++++--- - sysdeps/mach/hurd/errno.c | 1 - sysdeps/mach/hurd/fork.c | 7 -- - sysdeps/mach/hurd/i386/init-first.c | 36 ----------- - sysdeps/mach/hurd/i386/makecontext-helper.c | 2 - sysdeps/mach/hurd/i386/makecontext.S | 2 - sysdeps/mach/hurd/i386/sigreturn.c | 5 - - sysdeps/mach/hurd/i386/tls.h | 29 +++++++++ - sysdeps/mach/hurd/libc-lock.h | 4 - - sysdeps/mach/hurd/libc-tsd.h | 34 ----------- - sysdeps/mach/hurd/mig-reply.c | 39 +++--------- - sysdeps/mach/hurd/profil.c | 6 - - 22 files changed, 126 insertions(+), 258 deletions(-) - ---- a/hurd/Versions -+++ b/hurd/Versions -@@ -4,14 +4,9 @@ - _end; - - # variables used in macros & inline functions -- __hurd_sigthread_stack_base; __hurd_sigthread_stack_end; -- __hurd_sigthread_variables; - __hurd_threadvar_max; - __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset; - -- # functions used in macros & inline functions -- __hurd_errno_location; -- - # functions used in libmachuser and libhurduser - _S_catch_exception_raise; - _S_catch_exception_raise_state; -@@ -146,6 +141,7 @@ - HURD_CTHREADS_0.3 { - # weak refs to libthreads functions that libc calls iff libthreads in use - cthread_fork; cthread_detach; -+ pthread_getattr_np; pthread_attr_getstack; - - # variables used for detecting cthreads - _cthread_exit_routine; _cthread_init_routine; ---- a/hurd/hurd/signal.h -+++ b/hurd/hurd/signal.h -@@ -40,7 +40,6 @@ - #include /* For `struct mutex'. */ - #include /* For `jmp_buf'. */ - #include --#include /* We cache sigstate in a threadvar. */ - struct hurd_signal_preemptor; /* */ - #if defined __USE_EXTERN_INLINES && defined _LIBC - # if IS_IN (libc) || IS_IN (libpthread) -@@ -139,11 +138,9 @@ - _HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * - _hurd_self_sigstate (void) - { -- struct hurd_sigstate **location = (struct hurd_sigstate **) -- (void *) __hurd_threadvar_location (_HURD_THREADVAR_SIGSTATE); -- if (*location == NULL) -- *location = _hurd_thread_sigstate (__mach_thread_self ()); -- return *location; -+ if (THREAD_SELF->_hurd_sigstate == NULL) -+ THREAD_SELF->_hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); -+ return THREAD_SELF->_hurd_sigstate; - } - # endif - #endif -@@ -180,16 +177,22 @@ - _HURD_SIGNAL_H_EXTERN_INLINE void * - _hurd_critical_section_lock (void) - { -- struct hurd_sigstate **location = (struct hurd_sigstate **) -- (void *) __hurd_threadvar_location (_HURD_THREADVAR_SIGSTATE); -- struct hurd_sigstate *ss = *location; -+ struct hurd_sigstate *ss; -+ -+#ifdef __LIBC_NO_TLS -+ if (__LIBC_NO_TLS()) -+ /* TLS is currently initializing, no need to enter critical section. */ -+ return NULL; -+#endif -+ -+ ss = THREAD_SELF->_hurd_sigstate; - if (ss == NULL) - { - /* The thread variable is unset; this must be the first time we've - asked for it. In this case, the critical section flag cannot - possible already be set. Look up our sigstate structure the slow - way. */ -- ss = *location = _hurd_thread_sigstate (__mach_thread_self ()); -+ ss = THREAD_SELF->_hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); - } - - if (! __spin_try_lock (&ss->critical_section_lock)) ---- a/hurd/hurd/threadvar.h -+++ b/hurd/hurd/threadvar.h -@@ -20,6 +20,7 @@ - #define _HURD_THREADVAR_H - - #include -+#include - - /* The per-thread variables are found by ANDing this mask - with the value of the stack pointer and then adding this offset. -@@ -30,96 +31,24 @@ - __hurd_threadvar_stack_offset to a small offset that skips the data - cthreads itself maintains at the base of each thread's stack. - -- In the single-threaded case, __hurd_threadvar_stack_mask is zero, so the -- stack pointer is ignored; and __hurd_threadvar_stack_offset gives the -- address of a small allocated region which contains the variables for the -- single thread. */ -+ In the single-threaded or libpthread case, __hurd_threadvar_stack_mask is -+ zero, so the stack pointer is ignored. */ - - extern unsigned long int __hurd_threadvar_stack_mask; - extern unsigned long int __hurd_threadvar_stack_offset; - --/* A special case must always be made for the signal thread. Even when there -- is only one user thread and an allocated region can be used for the user -- thread's variables, the signal thread needs to have its own location for -- per-thread variables. The variables __hurd_sigthread_stack_base and -+/* The variables __hurd_sigthread_stack_base and - __hurd_sigthread_stack_end define the bounds of the stack used by the - signal thread, so that thread can always be specifically identified. */ - - extern unsigned long int __hurd_sigthread_stack_base; - extern unsigned long int __hurd_sigthread_stack_end; --extern unsigned long int *__hurd_sigthread_variables; - - --/* At the location described by the two variables above, -- there are __hurd_threadvar_max `unsigned long int's of per-thread data. */ -+/* We do not use threadvars any more, this is kept as zero for compatibility with cthreads */ - extern unsigned int __hurd_threadvar_max; - --/* These values are the indices for the standard per-thread variables. */ --enum __hurd_threadvar_index -- { -- _HURD_THREADVAR_MIG_REPLY, /* Reply port for MiG user stub functions. */ -- _HURD_THREADVAR_ERRNO, /* `errno' value for this thread. */ -- _HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */ -- _HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */ -- _HURD_THREADVAR_MALLOC, /* For use of malloc. */ -- _HURD_THREADVAR_DL_ERROR, /* For use of -ldl and dynamic linker. */ -- _HURD_THREADVAR_RPC_VARS, /* For state of RPC functions. */ -- _HURD_THREADVAR_LOCALE, /* For thread-local locale setting. */ -- _HURD_THREADVAR_CTYPE_B, /* Cache of thread-local locale data. */ -- _HURD_THREADVAR_CTYPE_TOLOWER, /* Cache of thread-local locale data. */ -- _HURD_THREADVAR_CTYPE_TOUPPER, /* Cache of thread-local locale data. */ -- _HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */ -- }; -- -- --#ifndef _HURD_THREADVAR_H_EXTERN_INLINE --#define _HURD_THREADVAR_H_EXTERN_INLINE __extern_inline --#endif -- --/* Return the location of the value for the per-thread variable with index -- INDEX used by the thread whose stack pointer is SP. */ -- --extern unsigned long int *__hurd_threadvar_location_from_sp -- (enum __hurd_threadvar_index __index, void *__sp); -- --#if defined __USE_EXTERN_INLINES && defined _LIBC --# if IS_IN (libc) --_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * --__hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index, -- void *__sp) --{ -- unsigned long int __stack = (unsigned long int) __sp; -- return &((__stack >= __hurd_sigthread_stack_base && -- __stack < __hurd_sigthread_stack_end) -- ? __hurd_sigthread_variables -- : (unsigned long int *) ((__stack & __hurd_threadvar_stack_mask) + -- __hurd_threadvar_stack_offset))[__index]; --} --# endif --#endif -- --#include /* Define __thread_stack_pointer. */ -- --/* Return the location of the current thread's value for the -- per-thread variable with index INDEX. */ -- --extern unsigned long int * --__hurd_threadvar_location (enum __hurd_threadvar_index __index) __THROW -- /* This declaration tells the compiler that the value is constant -- given the same argument. We assume this won't be called twice from -- the same stack frame by different threads. */ -- __attribute__ ((__const__)); -- --#if defined __USE_EXTERN_INLINES && defined _LIBC --# if IS_IN (libc) --_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * --__hurd_threadvar_location (enum __hurd_threadvar_index __index) --{ -- return __hurd_threadvar_location_from_sp (__index, -- __thread_stack_pointer ()); --} --# endif --#endif -- -+extern mach_port_t __hurd_reply_port0; -+#define __hurd_local_reply_port (*(__LIBC_NO_TLS() ? &__hurd_reply_port0 : &THREAD_SELF->reply_port)) - - #endif /* hurd/threadvar.h */ ---- a/hurd/hurdsig.c -+++ b/hurd/hurdsig.c -@@ -20,6 +20,7 @@ - #include - - #include /* For `struct mutex'. */ -+#include - #include - #include - -@@ -48,7 +49,6 @@ - /* These are set up by _hurdsig_init. */ - unsigned long int __hurd_sigthread_stack_base; - unsigned long int __hurd_sigthread_stack_end; --unsigned long int *__hurd_sigthread_variables; - - /* Linked-list of per-thread signal state. */ - struct hurd_sigstate *_hurd_sigstates; -@@ -234,14 +234,14 @@ - that this location can be set without faulting, or else return NULL. */ - - static mach_port_t * --interrupted_reply_port_location (struct machine_thread_all_state *thread_state, -+interrupted_reply_port_location (thread_t thread, -+ struct machine_thread_all_state *thread_state, - int sigthread) - { -- mach_port_t *portloc = (mach_port_t *) __hurd_threadvar_location_from_sp -- (_HURD_THREADVAR_MIG_REPLY, (void *) thread_state->basic.SP); -+ mach_port_t *portloc = &THREAD_TCB(thread, thread_state)->reply_port; - - if (sigthread && _hurdsig_catch_memory_fault (portloc)) -- /* Faulted trying to read the stack. */ -+ /* Faulted trying to read the TCB. */ - return NULL; - - /* Fault now if this pointer is bogus. */ -@@ -323,7 +323,8 @@ - our nonzero return tells the trampoline code to finish the message - receive operation before running the handler. */ - -- mach_port_t *reply = interrupted_reply_port_location (state, -+ mach_port_t *reply = interrupted_reply_port_location (ss->thread, -+ state, - sigthread); - error_t err = __interrupt_operation (intr_port, _hurdsig_interrupt_timeout); - -@@ -835,7 +836,8 @@ - - if (! machine_get_basic_state (ss->thread, &thread_state)) - goto sigbomb; -- loc = interrupted_reply_port_location (&thread_state, 1); -+ loc = interrupted_reply_port_location (ss->thread, -+ &thread_state, 1); - if (loc && *loc != MACH_PORT_NULL) - /* This is the reply port for the context which called - sigreturn. Since we are abandoning that context entirely -@@ -901,7 +903,8 @@ - { - /* Fetch the thread variable for the MiG reply port, - and set it to MACH_PORT_NULL. */ -- mach_port_t *loc = interrupted_reply_port_location (&thread_state, -+ mach_port_t *loc = interrupted_reply_port_location (ss->thread, -+ &thread_state, - 1); - if (loc) - { -@@ -1255,7 +1258,11 @@ - - /* Start the signal thread listening on the message port. */ - -- if (__hurd_threadvar_stack_mask == 0) -+#pragma weak cthread_fork -+#pragma weak cthread_detach -+#pragma weak pthread_getattr_np -+#pragma weak pthread_attr_getstack -+ if (!cthread_fork) - { - err = __thread_create (__mach_task_self (), &_hurd_msgport_thread); - assert_perror (err); -@@ -1270,14 +1277,6 @@ - assert_perror (err); - - __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + stacksize; -- __hurd_sigthread_variables = -- malloc (__hurd_threadvar_max * sizeof (unsigned long int)); -- if (__hurd_sigthread_variables == NULL) -- __libc_fatal ("hurd: Can't allocate threadvars for signal thread\n"); -- memset (__hurd_sigthread_variables, 0, -- __hurd_threadvar_max * sizeof (unsigned long int)); -- __hurd_sigthread_variables[_HURD_THREADVAR_LOCALE] -- = (unsigned long int) &_nl_global_locale; - - /* Reinitialize the MiG support routines so they will use a per-thread - variable for the cached reply port. */ -@@ -1288,6 +1287,7 @@ - } - else - { -+ cthread_t thread; - /* When cthreads is being used, we need to make the signal thread a - proper cthread. Otherwise it cannot use mutex_lock et al, which - will be the cthreads versions. Various of the message port RPC -@@ -1297,9 +1297,20 @@ - we'll let the signal thread's per-thread variables be found as for - any normal cthread, and just leave the magic __hurd_sigthread_* - values all zero so they'll be ignored. */ --#pragma weak cthread_fork --#pragma weak cthread_detach -- cthread_detach (cthread_fork ((cthread_fn_t) &_hurd_msgport_receive, 0)); -+ cthread_detach (thread = cthread_fork ((cthread_fn_t) &_hurd_msgport_receive, 0)); -+ -+ if (pthread_getattr_np) -+ { -+ /* Record stack layout for fork() */ -+ pthread_attr_t attr; -+ void *addr; -+ size_t size; -+ -+ pthread_getattr_np ((pthread_t) thread, &attr); -+ pthread_attr_getstack (&attr, &addr, &size); -+ __hurd_sigthread_stack_base = (uintptr_t) addr; -+ __hurd_sigthread_stack_end = __hurd_sigthread_stack_base + size; -+ } - - /* XXX We need the thread port for the signal thread further on - in this thread (see hurdfault.c:_hurdsigfault_init). ---- a/hurd/hurdstartup.c -+++ b/hurd/hurdstartup.c -@@ -23,7 +23,6 @@ - #include - #include - #include --#include - #include - #include - #include ---- a/hurd/sigunwind.c -+++ b/hurd/sigunwind.c -@@ -18,6 +18,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -38,8 +39,7 @@ - { - /* Destroy the MiG reply port used by the signal handler, and restore - the reply port in use by the thread when interrupted. */ -- mach_port_t *reply_port = -- (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY); -+ mach_port_t *reply_port = &__hurd_local_reply_port; - if (*reply_port) - { - mach_port_t port = *reply_port; ---- a/include/errno.h -+++ b/include/errno.h -@@ -24,7 +24,7 @@ - - # include - --# if !defined(__GNU__) -+# if !(defined(__GNU__) && IS_IN (rtld)) - # undef errno - # if IS_IN (libc) - # define errno __libc_errno ---- a/sysdeps/mach/hurd/Versions -+++ b/sysdeps/mach/hurd/Versions -@@ -6,6 +6,7 @@ - GLIBC_PRIVATE { - # Functions shared with the dynamic linker - __libc_read; __libc_write; __libc_lseek64; -+ __libc_lock_self0; - - _dl_init_first; - } -@@ -14,8 +15,6 @@ - ld { - GLIBC_2.0 { - # variables that must be shared with libc -- __hurd_sigthread_stack_base; __hurd_sigthread_stack_end; -- __hurd_sigthread_variables; - __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset; - - # functions that must be shared with libc -@@ -33,5 +32,6 @@ - - # functions that must be shared with libc - __libc_read; __libc_write; __libc_lseek64; -+ __libc_lock_self0; - } - } ---- a/sysdeps/mach/hurd/libc-lock.h -+++ b/sysdeps/mach/hurd/libc-lock.h -@@ -24,7 +24,6 @@ - #include - #endif - #include --#include - - /* The locking here is very inexpensive, even for inlining. */ - #define _IO_lock_inexpensive 1 -@@ -38,7 +37,8 @@ - } __libc_lock_recursive_t; - typedef __libc_lock_recursive_t __rtld_lock_recursive_t; - --#define __libc_lock_owner_self() ((void *) __hurd_threadvar_location (0)) -+extern char __libc_lock_self0[0]; -+#define __libc_lock_owner_self() (__LIBC_NO_TLS() ? &__libc_lock_self0 : THREAD_SELF) - - #else - typedef struct __libc_lock_opaque__ __libc_lock_t; ---- a/sysdeps/mach/hurd/libc-tsd.h -+++ /dev/null -@@ -1,34 +0,0 @@ --/* libc-internal interface for thread-specific data. Hurd version. -- Copyright (C) 1998-2018 Free Software Foundation, Inc. -- This file is part of the GNU C Library. -- -- The GNU C Library is free software; you can redistribute it and/or -- modify it under the terms of the GNU Lesser General Public -- License as published by the Free Software Foundation; either -- version 2.1 of the License, or (at your option) any later version. -- -- The GNU C Library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Lesser General Public License for more details. -- -- You should have received a copy of the GNU Lesser General Public -- License along with the GNU C Library; if not, see -- . */ -- --#ifndef _LIBC_TSD_H --#define _LIBC_TSD_H 1 -- --#include -- --#define __libc_tsd_define(CLASS, TYPE, KEY) /* nothing, always have threadvars */ -- --#define __libc_tsd_address(TYPE, KEY) \ -- ((TYPE *) __hurd_threadvar_location (_HURD_THREADVAR_##KEY)) -- --#define __libc_tsd_get(TYPE, KEY) \ -- (*__libc_tsd_address (TYPE, KEY)) --#define __libc_tsd_set(TYPE, KEY, VALUE) \ -- (*__libc_tsd_address (TYPE, KEY) = (VALUE)) -- --#endif /* libc-tsd.h */ ---- a/sysdeps/mach/hurd/cthreads.c -+++ b/sysdeps/mach/hurd/cthreads.c -@@ -19,6 +19,8 @@ - #include - #include - -+char __libc_lock_self0[0]; -+ - /* Placeholder for key creation routine from Hurd cthreads library. */ - int - weak_function ---- a/sysdeps/mach/hurd/dl-sysdep.c -+++ b/sysdeps/mach/hurd/dl-sysdep.c -@@ -67,25 +67,6 @@ - - struct hurd_startup_data *_dl_hurd_data; - --/* This is used only within ld.so, via dl-minimal.c's __errno_location. */ --#undef errno --int errno attribute_hidden; -- --/* Defining these variables here avoids the inclusion of hurdsig.c. */ --unsigned long int __hurd_sigthread_stack_base; --unsigned long int __hurd_sigthread_stack_end; --unsigned long int *__hurd_sigthread_variables; -- --/* Defining these variables here avoids the inclusion of init-first.c. -- We need to provide temporary storage for the per-thread variables -- of the main user thread here, since it is used for storing the -- `errno' variable. Note that this information is lost once we -- relocate the dynamic linker. */ --static unsigned long int threadvars[_HURD_THREADVAR_MAX]; --unsigned long int __hurd_threadvar_stack_offset -- = (unsigned long int) &threadvars; --unsigned long int __hurd_threadvar_stack_mask; -- - #define FMH defined(__i386__) - #if ! FMH - # define fmh() ((void)0) ---- a/sysdeps/mach/hurd/errno-loc.c -+++ b/sysdeps/mach/hurd/errno-loc.c -@@ -16,13 +16,21 @@ - License along with the GNU C Library; if not, see - . */ - --#include --#include -- --int * -+#if IS_IN (rtld) -+/* -+ * rtld can not access TLS too early, thus rtld_errno. -+ * -+ * Instead of making __open/__close pass errno from TLS to rtld_errno, simply -+ * use a weak __errno_location using rtld_errno, which will be overriden by the -+ * libc definition. -+ */ -+static int rtld_errno; -+int * weak_function - __errno_location (void) - { -- return (int *) __hurd_threadvar_location (_HURD_THREADVAR_ERRNO); -+ return &rtld_errno; - } --strong_alias (__errno_location, __hurd_errno_location) --libc_hidden_def (__errno_location) -+libc_hidden_weak (__errno_location) -+#else -+#include <../../../csu/errno-loc.c> -+#endif ---- a/sysdeps/mach/hurd/errno.c -+++ /dev/null -@@ -1 +0,0 @@ --/* No definition of `errno' variable on the Hurd. */ ---- a/sysdeps/mach/hurd/fork.c -+++ b/sysdeps/mach/hurd/fork.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include - #include - #include /* For stack growth direction. */ -@@ -483,19 +484,17 @@ - (natural_t *) &state, &statecount)) - LOSE; - #ifdef STACK_GROWTH_UP --#define THREADVAR_SPACE (__hurd_threadvar_max \ -- * sizeof *__hurd_sightread_variables) - if (__hurd_sigthread_stack_base == 0) - { - state.SP &= __hurd_threadvar_stack_mask; -- state.SP += __hurd_threadvar_stack_offset + THREADVAR_SPACE; -+ state.SP += __hurd_threadvar_stack_offset; - } - else - state.SP = __hurd_sigthread_stack_base; - #else - if (__hurd_sigthread_stack_end == 0) - { -- /* The signal thread has a normal stack assigned by cthreads. -+ /* The signal thread has a stack assigned by cthreads. - The threadvar_stack variables conveniently tell us how - to get to the highest address in the stack, just below - the per-thread variables. */ ---- a/sysdeps/mach/hurd/i386/init-first.c -+++ b/sysdeps/mach/hurd/i386/init-first.c -@@ -149,15 +149,6 @@ - char **argv = (void *) (data + 1); - char **envp = &argv[argc + 1]; - struct hurd_startup_data *d; -- unsigned long int threadvars[_HURD_THREADVAR_MAX]; -- -- /* Provide temporary storage for thread-specific variables on the -- startup stack so the cthreads initialization code can use them -- for malloc et al, or so we can use malloc below for the real -- threadvars array. */ -- memset (threadvars, 0, sizeof threadvars); -- threadvars[_HURD_THREADVAR_LOCALE] = (unsigned long int) &_nl_global_locale; -- __hurd_threadvar_stack_offset = (unsigned long int) threadvars; - - /* Since the cthreads initialization code uses malloc, and the - malloc initialization code needs to get at the environment, make -@@ -204,13 +195,6 @@ - __pthread_initialize_minimal(); - #endif - -- /* The user might have defined a value for this, to get more variables. -- Otherwise it will be zero on startup. We must make sure it is set -- properly before before cthreads initialization, so cthreads can know -- how much space to leave for thread variables. */ -- if (__hurd_threadvar_max < _HURD_THREADVAR_MAX) -- __hurd_threadvar_max = _HURD_THREADVAR_MAX; -- - - /* After possibly switching stacks, call `init1' (above) with the user - code as the return address, and the argument data immediately above -@@ -226,11 +210,6 @@ - - __libc_stack_end = newsp; - -- /* Copy per-thread variables from that temporary -- area onto the new cthread stack. */ -- memcpy (__hurd_threadvar_location_from_sp (0, newsp), -- threadvars, sizeof threadvars); -- - /* Copy the argdata from the old stack to the new one. */ - newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data, - (char *) d - (char *) data); -@@ -271,25 +250,10 @@ - } - else - { -- /* We are not using cthreads, so we will have just a single allocated -- area for the per-thread variables of the main user thread. */ -- unsigned long int *array; -- unsigned int i; - int usercode; - - void call_init1 (void); - -- array = malloc (__hurd_threadvar_max * sizeof (unsigned long int)); -- if (array == NULL) -- __libc_fatal ("Can't allocate single-threaded thread variables."); -- -- /* Copy per-thread variables from the temporary array into the -- newly malloc'd space. */ -- memcpy (array, threadvars, sizeof threadvars); -- __hurd_threadvar_stack_offset = (unsigned long int) array; -- for (i = _HURD_THREADVAR_MAX; i < __hurd_threadvar_max; ++i) -- array[i] = 0; -- - /* The argument data is just above the stack frame we will unwind by - returning. Mutate our own return address to run the code below. */ - /* The following expression would typically be written as ---- a/sysdeps/mach/hurd/i386/makecontext-helper.c -+++ b/sysdeps/mach/hurd/i386/makecontext-helper.c -@@ -22,6 +22,7 @@ - #include - #include - -+#if 0 - - void - __makecontext_helper (ucontext_t *ucp) -@@ -67,3 +68,4 @@ - ucp->uc_stack.ss_size -= t_size; - } - } -+#endif ---- a/sysdeps/mach/hurd/i386/makecontext.S -+++ b/sysdeps/mach/hurd/i386/makecontext.S -@@ -27,7 +27,7 @@ - subl $4, %esp - cfi_adjust_cfa_offset (4) - movl %eax, (%esp) -- call HIDDEN_JUMPTARGET (__makecontext_helper) -+ /* call HIDDEN_JUMPTARGET (__makecontext_helper) */ - addl $4, %esp - cfi_adjust_cfa_offset (-4) - ---- a/sysdeps/mach/hurd/i386/sigreturn.c -+++ b/sysdeps/mach/hurd/i386/sigreturn.c -@@ -68,7 +68,7 @@ - - if (scp->sc_onstack) - { -- ss->sigaltstack.ss_flags &= ~SS_ONSTACK; /* XXX threadvars */ -+ ss->sigaltstack.ss_flags &= ~SS_ONSTACK; - /* XXX cannot unlock until off sigstack */ - abort (); - } -@@ -77,8 +77,7 @@ - - /* Destroy the MiG reply port used by the signal handler, and restore the - reply port in use by the thread when interrupted. */ -- reply_port = -- (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY); -+ reply_port = &__hurd_local_reply_port; - if (*reply_port) - { - mach_port_t port = *reply_port; ---- a/sysdeps/mach/hurd/i386/tls.h -+++ b/sysdeps/mach/hurd/i386/tls.h -@@ -43,6 +43,10 @@ - void *__private_tm[4]; - /* GCC split stack support. */ - void *__private_ss; -+ -+ /* Keep this field last */ -+ mach_port_t reply_port; /* This thread's reply port. */ -+ struct hurd_sigstate *_hurd_sigstate; - } tcbhead_t; - #endif - -@@ -87,6 +91,17 @@ - | (((unsigned int) (tcb)) & 0xff000000) /* base 24..31 */ \ - } - -+# define HURD_DESC_TLS(desc) \ -+ ({ \ -+ (tcbhead_t *) ( (desc->low_word >> 16) \ -+ | ((desc->high_word & 0xff) << 16) \ -+ | (desc->high_word & 0xff000000) \ -+ );}) -+ -+#define __LIBC_NO_TLS() \ -+ ({ unsigned short ds, gs; \ -+ asm ("movw %%ds,%w0; movw %%gs,%w1" : "=q" (ds), "=q" (gs)); \ -+ ds == gs; }) - - static inline const char * __attribute__ ((unused)) - _hurd_tls_init (tcbhead_t *tcb) -@@ -137,6 +152,20 @@ - : "i" (offsetof (tcbhead_t, tcb))); \ - __tcb;}) - -+/* Return the TCB address of a thread given its state. */ -+# define THREAD_TCB(thread, thread_state) \ -+ ({ int __sel = (thread_state)->basic.gs; \ -+ struct descriptor __desc, *___desc = &__desc; \ -+ unsigned int __count = 1; \ -+ kern_return_t __err; \ -+ if (__builtin_expect (__sel, 0x48) & 4) /* LDT selector */ \ -+ __err = __i386_get_ldt ((thread), __sel, 1, &___desc, &__count); \ -+ else \ -+ __err = __i386_get_gdt ((thread), __sel, &__desc); \ -+ assert_perror (__err); \ -+ assert (__count == 1); \ -+ HURD_DESC_TLS(___desc);}) -+ - /* Install new dtv for current thread. */ - # define INSTALL_NEW_DTV(dtvp) \ - ({ asm volatile ("movl %0,%%gs:%P1" \ ---- a/sysdeps/mach/hurd/mig-reply.c -+++ b/sysdeps/mach/hurd/mig-reply.c -@@ -18,26 +18,20 @@ - #include - #include - --#define GETPORT \ -- mach_port_t *portloc = \ -- (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY) --#define reply_port (*(use_threadvar ? portloc : &global_reply_port)) -- --static int use_threadvar; --static mach_port_t global_reply_port; -- - /* These functions are called by MiG-generated code. */ - -+mach_port_t __hurd_reply_port0; -+ - /* Called by MiG to get a reply port. */ - mach_port_t - __mig_get_reply_port (void) - { -- GETPORT; -- -- if (reply_port == MACH_PORT_NULL) -- reply_port = __mach_reply_port (); -+ if (__hurd_local_reply_port == MACH_PORT_NULL || -+ (&__hurd_local_reply_port != &__hurd_reply_port0 -+ && __hurd_local_reply_port == __hurd_reply_port0)) -+ __hurd_local_reply_port = __mach_reply_port (); - -- return reply_port; -+ return __hurd_local_reply_port; - } - weak_alias (__mig_get_reply_port, mig_get_reply_port) - -@@ -45,12 +39,8 @@ - void - __mig_dealloc_reply_port (mach_port_t arg) - { -- mach_port_t port; -- -- GETPORT; -- -- port = reply_port; -- reply_port = MACH_PORT_NULL; /* So the mod_refs RPC won't use it. */ -+ mach_port_t port = __hurd_local_reply_port; -+ __hurd_local_reply_port = MACH_PORT_NULL; /* So the mod_refs RPC won't use it. */ - - if (MACH_PORT_VALID (port)) - __mach_port_mod_refs (__mach_task_self (), port, -@@ -73,15 +63,6 @@ - void - __mig_init (void *stack) - { -- use_threadvar = stack != 0; -- -- if (use_threadvar) -- { -- /* Recycle the reply port used before multithreading was enabled. */ -- mach_port_t *portloc = (mach_port_t *) -- __hurd_threadvar_location_from_sp (_HURD_THREADVAR_MIG_REPLY, stack); -- *portloc = global_reply_port; -- global_reply_port = MACH_PORT_NULL; -- } -+ /* Do nothing. */ - } - weak_alias (__mig_init, mig_init) ---- a/sysdeps/mach/hurd/profil.c -+++ b/sysdeps/mach/hurd/profil.c -@@ -143,7 +143,7 @@ - static volatile error_t special_profil_failure; - - /* Fetch PC samples. This function must be very careful not to depend -- on Hurd threadvar variables. We arrange that by using a special -+ on Hurd TLS variables. We arrange that by using a special - stub arranged for at the end of this file. */ - static void - fetch_samples (void) -@@ -178,7 +178,7 @@ - } - - --/* This function must be very careful not to depend on Hurd threadvar -+/* This function must be very careful not to depend on Hurd TLS - variables. We arrange that by using special stubs arranged for at the - end of this file. */ - static void -@@ -269,7 +269,7 @@ - are fatal in profile_waiter anyhow. */ - #define __mig_put_reply_port(foo) - --/* Use our static variable instead of the usual threadvar mechanism for -+/* Use our static variable instead of the usual TLS mechanism for - this. */ - #define __mig_get_reply_port() profil_reply_port - diff -Nru glibc-2.27/debian/patches/hurd-i386/tg-verify.h.diff glibc-2.27/debian/patches/hurd-i386/tg-verify.h.diff --- glibc-2.27/debian/patches/hurd-i386/tg-verify.h.diff 2016-01-27 14:17:05.000000000 +0000 +++ glibc-2.27/debian/patches/hurd-i386/tg-verify.h.diff 2018-04-16 20:02:33.000000000 +0000 @@ -5,7 +5,7 @@ * include/verify.h: New file, from gnulib. -TODO: Use it in all sensible places. +TODO: Remove, not needed any more. --- include/verify.h | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff -Nru glibc-2.27/debian/patches/localedata/locales-fr.diff glibc-2.27/debian/patches/localedata/locales-fr.diff --- glibc-2.27/debian/patches/localedata/locales-fr.diff 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/localedata/locales-fr.diff 2018-04-16 20:02:33.000000000 +0000 @@ -20,7 +20,7 @@ t_fmt "%T" am_pm "";"" t_fmt_ampm "" -+date_fmt "%A %-e %B %Y, %H:%M:%S +(UTC%z)" ++date_fmt "%A %-e %B %Y, %H:%M:%S (UTC%z)" week 7;19971130;4 first_weekday 2 @@ -48,7 +48,7 @@ t_fmt "%T" am_pm "";"" t_fmt_ampm "" -+date_fmt "%A %-e +%B %Y, +%H:%M:%S +(UTC%z)" ++date_fmt "%A %-e %B %Y, %H:%M:%S (UTC%z)" week 7;19971130;1 END LC_TIME @@ -58,7 +58,7 @@ t_fmt "%T" am_pm "";"" t_fmt_ampm "" -+date_fmt "%A %-e +%B %Y, +%H:%M:%S +(UTC%z)" ++date_fmt "%A %-e %B %Y, %H:%M:%S (UTC%z)" week 7;19971130;4 first_weekday 2 END LC_TIME @@ -86,7 +86,7 @@ t_fmt "%T" am_pm "";"" t_fmt_ampm "" -+date_fmt "%A %-e +%B %Y, +%H:%M:%S +(UTC%z)" ++date_fmt "%A %-e %B %Y, %H:%M:%S (UTC%z)" week 7;19971130;4 first_weekday 2 @@ -116,7 +116,7 @@ t_fmt "%T" am_pm "";"" t_fmt_ampm "" -+date_fmt "%A %-e +%B %Y, +%H:%M:%S +(UTC%z)" ++date_fmt "%A %-e %B %Y, %H:%M:%S (UTC%z)" week 7;19971130;4 first_weekday 2 END LC_TIME diff -Nru glibc-2.27/debian/patches/series glibc-2.27/debian/patches/series --- glibc-2.27/debian/patches/series 2018-02-23 13:01:23.000000000 +0000 +++ glibc-2.27/debian/patches/series 2018-04-16 20:02:50.000000000 +0000 @@ -26,6 +26,7 @@ alpha/submitted-dl-support.diff alpha/local-string-functions.diff alpha/submitted-fts64.diff +alpha/submitted-makecontext.diff arm/local-sigaction.diff arm/unsubmitted-ldconfig-cache-abi.diff @@ -39,21 +40,21 @@ hurd-i386/local-enable-ldconfig.diff hurd-i386/tg-context_functions.diff -hurd-i386/tg-tls.diff -hurd-i386/tg-tls-threadvar.diff +hurd-i386/git-tls.diff +hurd-i386/git-tls-threadvar.diff hurd-i386/tg-sysvshm.diff -hurd-i386/tg-_dl_random.diff +hurd-i386/git-_dl_random.diff hurd-i386/tg-thread-cancel.diff hurd-i386/tg-bigmem.diff hurd-i386/local-disable-ioctls.diff hurd-i386/tg-locarchive.diff hurd-i386/tg-sendmsg-SCM_RIGHTS.diff hurd-i386/tg-sendmsg-SCM_CREDS.diff -hurd-i386/tg-grantpt.diff +hurd-i386/git-grantpt.diff hurd-i386/tg-mach-hurd-link.diff hurd-i386/local-ED.diff hurd-i386/tg-posix_thread.diff -hurd-i386/tg-gai_misc.diff +hurd-i386/git-gai_misc.diff hurd-i386/local-madvise_warn.diff hurd-i386/tg-hurdsig-fixes.diff hurd-i386/tg-hurdsig-global-dispositions.diff @@ -73,7 +74,7 @@ hurd-i386/tg-pie-sbrk.diff hurd-i386/tg-ifaddrs_v6.diff hurd-i386/tg-remap_getcwd.diff -hurd-i386/tg-exec-static.diff +hurd-i386/git-exec-static.diff hurd-i386/tg-EIEIO-fr.diff hurd-i386/tg-EGREGIOUS-fr.diff hurd-i386/tg-io_select_timeout.diff @@ -84,38 +85,41 @@ hurd-i386/tg-socketpair_flags.diff hurd-i386/tg-pipe2.diff hurd-i386/tg-libc_getspecific.diff -hurd-i386/tg-futimens.diff +hurd-i386/git-futimens.diff hurd-i386/tg-sigstate_thread_reference.diff -hurd-i386/tg-tls_thread_leak.diff +hurd-i386/git-tls_thread_leak.diff hurd-i386/submitted-bind_umask2.diff -hurd-i386/local-libpthread-stacksize.diff +hurd-i386/git-libpthread-stacksize.diff hurd-i386/tg-WRLCK-upgrade.diff -hurd-i386/tg-reboot-startup.diff +hurd-i386/git-reboot-startup.diff hurd-i386/cvs-revert-gnu-gnu-cleanup.diff hurd-i386/libpthread_pthread_types.diff hurd-i386/tg-bootstrap.diff hurd-i386/local-mach_print.diff -hurd-i386/submitted-hurd-abilist.diff +hurd-i386/git-hurd-abilist.diff #hurd-i386/submitted-anon-mmap-shared.diff hurd-i386/tg-eintr.diff hurd-i386/tg-gsync-libc.diff hurd-i386/tg-pthread_deps.diff -hurd-i386/tg-libpthread-gsync-spin.diff +hurd-i386/git-libpthread-gsync-spin.diff hurd-i386/tg-ONSTACK.diff -hurd-i386/tg-libpthread-gsync-mutex.diff -hurd-i386/tg-NOFOLLOW.diff -hurd-i386/tg-NOFOLLOW-DIRECTORY.diff +hurd-i386/git-libpthread-gsync-mutex.diff +hurd-i386/git-NOFOLLOW.diff +hurd-i386/git-NOFOLLOW-DIRECTORY.diff hurd-i386/tg-libc_rwlock_recursive.diff hurd-i386/tg-magic-pid.diff -hurd-i386/tg-mlockall.diff +hurd-i386/git-mlockall.diff hurd-i386/local-no_unsupported_ioctls.diff -hurd-i386/tg2.25-tls.diff +hurd-i386/git2.25-tls.diff hurd-i386/local-nocheck-installed-headers.diff hurd-i386/git-libpthread-2.26.diff -hurd-i386/tg-thread-linkspace.diff +hurd-i386/git-thread-linkspace.diff hurd-i386/libpthread_includes.diff hurd-i386/local-exec_filename.diff +hurd-i386/git-libpthread-trylock.diff hurd-i386/git-test-atexit-race-common.diff +hurd-i386/git-UTIME.diff +#hurd-i386/libpthread_sigs.diff i386/local-biarch.diff i386/unsubmitted-quiet-ldconfig.diff diff -Nru glibc-2.27/debian/patches/series.hurd-i386 glibc-2.27/debian/patches/series.hurd-i386 --- glibc-2.27/debian/patches/series.hurd-i386 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/patches/series.hurd-i386 2018-04-16 20:02:33.000000000 +0000 @@ -1,16 +1,15 @@ hurd-i386/submitted-net.diff -hurd-i386/tg-gscope.diff +hurd-i386/git-gscope.diff hurd-i386/tg-bits_atomic.h_multiple_threads.diff hurd-i386/tg-unlockpt-chroot.diff hurd-i386/local-clock_gettime_MONOTONIC.diff hurd-i386/submitted-AF_LINK.diff hurd-i386/unsubmitted-mremap.diff hurd-i386/tg-verify.h.diff -hurd-i386/tg-pagesize.diff +hurd-i386/git-pagesize.diff hurd-i386/local-no-bootstrap-fs-access.diff -hurd-i386/tg-timer_routines.diff +hurd-i386/git-timer_routines.diff hurd-i386/local-versions-hack.diff hurd-i386/unsubmitted-prof-eintr.diff -#hurd-i386/submitted-malloc-setstate.diff hurd-i386/tg-glibc-2.24-restore-malloc-hook.diff hurd-i386/tg2.26-sched_param.diff diff -Nru glibc-2.27/debian/rules glibc-2.27/debian/rules --- glibc-2.27/debian/rules 2018-02-22 09:47:56.000000000 +0000 +++ glibc-2.27/debian/rules 2018-04-16 20:02:50.000000000 +0000 @@ -128,19 +128,13 @@ # Which build pass are we on? curpass = $(filter-out %_,$(subst _,_ ,$@)) -# Provide backward compatibility for the old DEB_STAGE and DEB_BUILD_PROFILE for now -ifeq ($(DEB_STAGE),stage1) - DEB_BUILD_PROFILES+=stage1 -else -ifeq ($(DEB_BUILD_PROFILE),bootstrap) - DEB_BUILD_PROFILES+=stage1 -endif -endif - ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),) DEB_ARCH_REGULAR_PACKAGES = $(libc)-dev DEB_INDEP_REGULAR_PACKAGES = DEB_UDEB_PACKAGES = + ifeq ($(filter nocheck,$(DEB_BUILD_OPTIONS)),) + DEB_BUILD_OPTIONS+=nocheck + endif else DEB_ARCH_REGULAR_PACKAGES = $(libc) $(libc)-dev $(libc)-dbg $(libc)-pic libc-bin libc-dev-bin multiarch-support DEB_INDEP_REGULAR_PACKAGES = glibc-doc glibc-source locales diff -Nru glibc-2.27/debian/sysdeps/amd64.mk glibc-2.27/debian/sysdeps/amd64.mk --- glibc-2.27/debian/sysdeps/amd64.mk 2018-02-22 09:47:56.000000000 +0000 +++ glibc-2.27/debian/sysdeps/amd64.mk 2018-04-16 20:02:50.000000000 +0000 @@ -27,12 +27,13 @@ ln -sf x86_64-linux-gnu/fpu_control.h debian/libc6-dev-i386/usr/include/ mkdir -p debian/libc6-dev-i386/usr/include/x86_64-linux-gnu/gnu -cp -a debian/tmp-i386/usr/include/gnu/stubs-32.h \ - debian/libc6-dev-i386/usr/include/x86_64-linux-gnu/gnu +cp -a debian/tmp-i386/usr/include/gnu/lib-names-32.h \ + debian/tmp-i386/usr/include/gnu/stubs-32.h \ + debian/libc6-dev-i386/usr/include/x86_64-linux-gnu/gnu mkdir -p debian/libc6-dev-i386/usr/include/sys for i in `ls debian/tmp-libc/usr/include/x86_64-linux-gnu/sys` ; do \ - ln -sf ../x86_64-linux-gnu/sys/$$i debian/libc6-dev-i386/usr/include/sys/$$i ; \ + ln -sf ../x86_64-linux-gnu/sys/$$i debian/libc6-dev-i386/usr/include/sys/$$i ; \ done endef @@ -57,7 +58,8 @@ define libc6-dev-x32_extra_pkg_install mkdir -p debian/libc6-dev-x32/usr/include/x86_64-linux-gnu/gnu -cp -a debian/tmp-x32/usr/include/gnu/stubs-x32.h \ +cp -a debian/tmp-x32/usr/include/gnu/lib-names-x32.h \ + debian/tmp-x32/usr/include/gnu/stubs-x32.h \ debian/libc6-dev-x32/usr/include/x86_64-linux-gnu/gnu/ endef diff -Nru glibc-2.27/debian/sysdeps/armel.mk glibc-2.27/debian/sysdeps/armel.mk --- glibc-2.27/debian/sysdeps/armel.mk 2018-02-22 10:56:54.000000000 +0000 +++ glibc-2.27/debian/sysdeps/armel.mk 2018-04-16 20:07:19.000000000 +0000 @@ -21,7 +21,8 @@ ln -sf arm-linux-gnueabi/fpu_control.h debian/libc6-dev-armhf/usr/include/ mkdir -p debian/libc6-dev-armhf/usr/include/arm-linux-gnueabi/gnu -cp -a debian/tmp-armhf/usr/include/gnu/stubs-hard.h \ +cp -a debian/tmp-armhf/usr/include/gnu/lib-names-hard.h \ + debian/tmp-armhf/usr/include/gnu/stubs-hard.h \ debian/libc6-dev-armhf/usr/include/arm-linux-gnueabi/gnu mkdir -p debian/libc6-dev-armhf/usr/include/sys diff -Nru glibc-2.27/debian/sysdeps/armhf.mk glibc-2.27/debian/sysdeps/armhf.mk --- glibc-2.27/debian/sysdeps/armhf.mk 2018-02-22 10:58:06.000000000 +0000 +++ glibc-2.27/debian/sysdeps/armhf.mk 2018-04-16 20:05:54.000000000 +0000 @@ -32,7 +32,8 @@ ln -sf arm-linux-gnueabihf/fpu_control.h debian/libc6-dev-armel/usr/include/ mkdir -p debian/libc6-dev-armel/usr/include/arm-linux-gnueabihf/gnu -cp -a debian/tmp-armel/usr/include/gnu/stubs-soft.h \ +cp -a debian/tmp-armel/usr/include/gnu/lib-names-soft.h \ + debian/tmp-armel/usr/include/gnu/stubs-soft.h \ debian/libc6-dev-armel/usr/include/arm-linux-gnueabihf/gnu mkdir -p debian/libc6-dev-armel/usr/include/sys diff -Nru glibc-2.27/debian/sysdeps/i386.mk glibc-2.27/debian/sysdeps/i386.mk --- glibc-2.27/debian/sysdeps/i386.mk 2018-02-22 10:51:37.000000000 +0000 +++ glibc-2.27/debian/sysdeps/i386.mk 2018-04-16 20:02:50.000000000 +0000 @@ -32,8 +32,9 @@ ln -sf i386-linux-gnu/fpu_control.h debian/libc6-dev-amd64/usr/include/ mkdir -p debian/libc6-dev-amd64/usr/include/i386-linux-gnu/gnu -cp -a debian/tmp-amd64/usr/include/gnu/stubs-64.h \ - debian/libc6-dev-amd64/usr/include/i386-linux-gnu/gnu +cp -a debian/tmp-amd64/usr/include/gnu/lib-names-64.h \ + debian/tmp-amd64/usr/include/gnu/stubs-64.h \ + debian/libc6-dev-amd64/usr/include/i386-linux-gnu/gnu mkdir -p debian/libc6-dev-amd64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/i386-linux-gnu/sys` ; do \ @@ -57,7 +58,8 @@ define libc6-dev-x32_extra_pkg_install mkdir -p debian/libc6-dev-x32/usr/include/i386-linux-gnu/gnu -cp -a debian/tmp-x32/usr/include/gnu/stubs-x32.h \ +cp -a debian/tmp-x32/usr/include/gnu/lib-names-x32.h \ + debian/tmp-x32/usr/include/gnu/stubs-x32.h \ debian/libc6-dev-x32/usr/include/i386-linux-gnu/gnu endef diff -Nru glibc-2.27/debian/sysdeps/kfreebsd-amd64.mk glibc-2.27/debian/sysdeps/kfreebsd-amd64.mk --- glibc-2.27/debian/sysdeps/kfreebsd-amd64.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/kfreebsd-amd64.mk 2018-04-16 20:02:33.000000000 +0000 @@ -22,12 +22,13 @@ ln -s x86_64-kfreebsd-gnu/fpu_control.h debian/libc0.1-dev-i386/usr/include/ mkdir -p debian/libc0.1-dev-i386/usr/include/x86_64-kfreebsd-gnu/gnu -cp -a debian/tmp-i386/usr/include/gnu/stubs-32.h \ - debian/libc0.1-dev-i386/usr/include/x86_64-kfreebsd-gnu/gnu +cp -a debian/tmp-i386/usr/include/gnu/lib-names-32.h \ + debian/tmp-i386/usr/include/gnu/stubs-32.h \ + debian/libc0.1-dev-i386/usr/include/x86_64-kfreebsd-gnu/gnu mkdir -p debian/libc0.1-dev-i386/usr/include/sys for i in `ls debian/tmp-libc/usr/include/x86_64-kfreebsd-gnu/sys` ; do \ - ln -s ../x86_64-kfreebsd-gnu/sys/$$i debian/libc0.1-dev-i386/usr/include/sys/$$i ; \ + ln -s ../x86_64-kfreebsd-gnu/sys/$$i debian/libc0.1-dev-i386/usr/include/sys/$$i ; \ done cp -a debian/tmp-i386/usr/include/sys/vm86.h \ diff -Nru glibc-2.27/debian/sysdeps/mips64el.mk glibc-2.27/debian/sysdeps/mips64el.mk --- glibc-2.27/debian/sysdeps/mips64el.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mips64el.mk 2018-04-16 20:02:33.000000000 +0000 @@ -37,8 +37,9 @@ ln -sf mips64el-linux-gnuabi64/fpu_control.h debian/libc6-dev-mipsn32/usr/include/ mkdir -p debian/libc6-dev-mipsn32/usr/include/mips64el-linux-gnuabi64/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ - debian/libc6-dev-mipsn32/usr/include/mips64el-linux-gnuabi64/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ + debian/libc6-dev-mipsn32/usr/include/mips64el-linux-gnuabi64/gnu mkdir -p debian/libc6-dev-mipsn32/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mips64el-linux-gnuabi64/sys` ; do \ @@ -50,8 +51,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mips64el-linux-gnuabi64/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ - debian/libc6-dev-mips32/usr/include/mips64el-linux-gnuabi64/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ + debian/libc6-dev-mips32/usr/include/mips64el-linux-gnuabi64/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mips64.mk glibc-2.27/debian/sysdeps/mips64.mk --- glibc-2.27/debian/sysdeps/mips64.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mips64.mk 2018-04-16 20:02:33.000000000 +0000 @@ -37,8 +37,9 @@ ln -sf mips64-linux-gnuabi64/fpu_control.h debian/libc6-dev-mipsn32/usr/include/ mkdir -p debian/libc6-dev-mipsn32/usr/include/mips64-linux-gnuabi64/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ - debian/libc6-dev-mipsn32/usr/include/mips64-linux-gnuabi64/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ + debian/libc6-dev-mipsn32/usr/include/mips64-linux-gnuabi64/gnu mkdir -p debian/libc6-dev-mipsn32/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mips64-linux-gnuabi64/sys` ; do \ @@ -50,8 +51,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mips64-linux-gnuabi64/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ - debian/libc6-dev-mips32/usr/include/mips64-linux-gnuabi64/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ + debian/libc6-dev-mips32/usr/include/mips64-linux-gnuabi64/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mips64r6el.mk glibc-2.27/debian/sysdeps/mips64r6el.mk --- glibc-2.27/debian/sysdeps/mips64r6el.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mips64r6el.mk 2018-04-16 20:02:33.000000000 +0000 @@ -37,12 +37,13 @@ ln -sf mipsisa64r6el-linux-gnuabi64/fpu_control.h debian/libc6-dev-mipsn32/usr/include/ mkdir -p debian/libc6-dev-mipsn32/usr/include/mipsisa64r6el-linux-gnuabi64/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ - debian/libc6-dev-mipsn32/usr/include/mipsisa64r6el-linux-gnuabi64/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard_2008.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ + debian/libc6-dev-mipsn32/usr/include/mipsisa64r6el-linux-gnuabi64/gnu mkdir -p debian/libc6-dev-mipsn32/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mipsisa64r6el-linux-gnuabi64/sys` ; do \ - ln -sf ../mipsisa64r6el-linux-gnuabi64/sys/$$i debian/libc6-dev-mipsn32/usr/include/sys/$$i ; \ + ln -sf ../mipsisa64r6el-linux-gnuabi64/sys/$$i debian/libc6-dev-mipsn32/usr/include/sys/$$i ; \ done endef @@ -50,8 +51,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mipsisa64r6el-linux-gnuabi64/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ - debian/libc6-dev-mips32/usr/include/mipsisa64r6el-linux-gnuabi64/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard_2008.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ + debian/libc6-dev-mips32/usr/include/mipsisa64r6el-linux-gnuabi64/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mips64r6.mk glibc-2.27/debian/sysdeps/mips64r6.mk --- glibc-2.27/debian/sysdeps/mips64r6.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mips64r6.mk 2018-04-16 20:02:33.000000000 +0000 @@ -37,12 +37,13 @@ ln -sf mipsisa64r6-linux-gnuabi64/fpu_control.h debian/libc6-dev-mipsn32/usr/include/ mkdir -p debian/libc6-dev-mipsn32/usr/include/mipsisa64r6-linux-gnuabi64/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ - debian/libc6-dev-mipsn32/usr/include/mipsisa64r6-linux-gnuabi64/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard_2008.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ + debian/libc6-dev-mipsn32/usr/include/mipsisa64r6-linux-gnuabi64/gnu mkdir -p debian/libc6-dev-mipsn32/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mipsisa64r6-linux-gnuabi64/sys` ; do \ - ln -sf ../mipsisa64r6-linux-gnuabi64/sys/$$i debian/libc6-dev-mipsn32/usr/include/sys/$$i ; \ + ln -sf ../mipsisa64r6-linux-gnuabi64/sys/$$i debian/libc6-dev-mipsn32/usr/include/sys/$$i ; \ done endef @@ -50,8 +51,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mipsisa64r6-linux-gnuabi64/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ - debian/libc6-dev-mips32/usr/include/mipsisa64r6-linux-gnuabi64/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard_2008.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ + debian/libc6-dev-mips32/usr/include/mipsisa64r6-linux-gnuabi64/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mipsel.mk glibc-2.27/debian/sysdeps/mipsel.mk --- glibc-2.27/debian/sysdeps/mipsel.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mipsel.mk 2018-04-16 20:02:33.000000000 +0000 @@ -34,12 +34,13 @@ ln -sf mipsel-linux-gnu/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mipsel-linux-gnu/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ - debian/libc6-dev-mips64/usr/include/mipsel-linux-gnu/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ + debian/libc6-dev-mips64/usr/include/mipsel-linux-gnu/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mipsel-linux-gnu/sys` ; do \ - ln -sf ../mipsel-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mipsel-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -47,8 +48,9 @@ define libc6-dev-mipsn32_extra_pkg_install mkdir -p debian/libc6-dev-mipsn32/usr/include/mipsel-linux-gnu/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ - debian/libc6-dev-mipsn32/usr/include/mipsel-linux-gnu/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ + debian/libc6-dev-mipsn32/usr/include/mipsel-linux-gnu/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mips.mk glibc-2.27/debian/sysdeps/mips.mk --- glibc-2.27/debian/sysdeps/mips.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mips.mk 2018-04-16 20:02:33.000000000 +0000 @@ -34,12 +34,13 @@ ln -sf mips-linux-gnu/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mips-linux-gnu/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ - debian/libc6-dev-mips64/usr/include/mips-linux-gnu/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ + debian/libc6-dev-mips64/usr/include/mips-linux-gnu/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mips-linux-gnu/sys` ; do \ - ln -sf ../mips-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mips-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -47,8 +48,9 @@ define libc6-dev-mipsn32_extra_pkg_install mkdir -p debian/libc6-dev-mipsn32/usr/include/mips-linux-gnu/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ - debian/libc6-dev-mipsn32/usr/include/mips-linux-gnu/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard.h \ + debian/libc6-dev-mipsn32/usr/include/mips-linux-gnu/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mipsn32el.mk glibc-2.27/debian/sysdeps/mipsn32el.mk --- glibc-2.27/debian/sysdeps/mipsn32el.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mipsn32el.mk 2018-04-16 20:02:33.000000000 +0000 @@ -37,12 +37,13 @@ ln -sf mips64el-linux-gnuabin32/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mips64el-linux-gnuabin32/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ - debian/libc6-dev-mips64/usr/include/mips64el-linux-gnuabin32/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ + debian/libc6-dev-mips64/usr/include/mips64el-linux-gnuabin32/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mips64el-linux-gnuabin32/sys` ; do \ - ln -sf ../mips64el-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mips64el-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -50,8 +51,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mips64el-linux-gnuabin32/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ - debian/libc6-dev-mips32/usr/include/mips64el-linux-gnuabin32/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ + debian/libc6-dev-mips32/usr/include/mips64el-linux-gnuabin32/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mipsn32.mk glibc-2.27/debian/sysdeps/mipsn32.mk --- glibc-2.27/debian/sysdeps/mipsn32.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mipsn32.mk 2018-04-16 20:02:33.000000000 +0000 @@ -39,12 +39,13 @@ ln -sf mips64-linux-gnuabin32/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mips64-linux-gnuabin32/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ - debian/libc6-dev-mips64/usr/include/mips64-linux-gnuabin32/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard.h \ + debian/libc6-dev-mips64/usr/include/mips64-linux-gnuabin32/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mips64-linux-gnuabin32/sys` ; do \ - ln -sf ../mips64-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mips64-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -52,8 +53,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mips64-linux-gnuabin32/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ - debian/libc6-dev-mips32/usr/include/mips64-linux-gnuabin32/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard.h \ + debian/libc6-dev-mips32/usr/include/mips64-linux-gnuabin32/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mipsn32r6el.mk glibc-2.27/debian/sysdeps/mipsn32r6el.mk --- glibc-2.27/debian/sysdeps/mipsn32r6el.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mipsn32r6el.mk 2018-04-16 20:02:33.000000000 +0000 @@ -37,12 +37,13 @@ ln -sf mipsisa64r6el-linux-gnuabin32/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mipsisa64r6el-linux-gnuabin32/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ - debian/libc6-dev-mips64/usr/include/mipsisa64r6el-linux-gnuabin32/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard_2008.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ + debian/libc6-dev-mips64/usr/include/mipsisa64r6el-linux-gnuabin32/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mipsisa64r6el-linux-gnuabin32/sys` ; do \ - ln -sf ../mipsisa64r6el-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mipsisa64r6el-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -50,8 +51,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mipsisa64r6el-linux-gnuabin32/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ - debian/libc6-dev-mips32/usr/include/mipsisa64r6el-linux-gnuabin32/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard_2008.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ + debian/libc6-dev-mips32/usr/include/mipsisa64r6el-linux-gnuabin32/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mipsn32r6.mk glibc-2.27/debian/sysdeps/mipsn32r6.mk --- glibc-2.27/debian/sysdeps/mipsn32r6.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mipsn32r6.mk 2018-04-16 20:02:33.000000000 +0000 @@ -39,12 +39,13 @@ ln -sf mipsisa64r6-linux-gnuabin32/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mipsisa64r6-linux-gnuabin32/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ - debian/libc6-dev-mips64/usr/include/mipsisa64r6-linux-gnuabin32/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard_2008.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ + debian/libc6-dev-mips64/usr/include/mipsisa64r6-linux-gnuabin32/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mipsisa64r6-linux-gnuabin32/sys` ; do \ - ln -sf ../mipsisa64r6-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mipsisa64r6-linux-gnuabin32/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -52,8 +53,9 @@ define libc6-dev-mips32_extra_pkg_install mkdir -p debian/libc6-dev-mips32/usr/include/mipsisa64r6-linux-gnuabin32/gnu -cp -a debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ - debian/libc6-dev-mips32/usr/include/mipsisa64r6-linux-gnuabin32/gnu +cp -a debian/tmp-mips32/usr/include/gnu/lib-names-o32_hard_2008.h \ + debian/tmp-mips32/usr/include/gnu/stubs-o32_hard_2008.h \ + debian/libc6-dev-mips32/usr/include/mipsisa64r6-linux-gnuabin32/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mipsr6el.mk glibc-2.27/debian/sysdeps/mipsr6el.mk --- glibc-2.27/debian/sysdeps/mipsr6el.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mipsr6el.mk 2018-04-16 20:02:33.000000000 +0000 @@ -34,12 +34,13 @@ ln -sf mipsisa32r6el-linux-gnu/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mipsisa32r6el-linux-gnu/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ - debian/libc6-dev-mips64/usr/include/mipsisa32r6el-linux-gnu/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard_2008.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ + debian/libc6-dev-mips64/usr/include/mipsisa32r6el-linux-gnu/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mipsisa32r6el-linux-gnu/sys` ; do \ - ln -sf ../mipsisa32r6el-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mipsisa32r6el-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -47,8 +48,9 @@ define libc6-dev-mipsn32_extra_pkg_install mkdir -p debian/libc6-dev-mipsn32/usr/include/mipsisa32r6el-linux-gnu/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ - debian/libc6-dev-mipsn32/usr/include/mipsisa32r6el-linux-gnu/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard_2008.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ + debian/libc6-dev-mipsn32/usr/include/mipsisa32r6el-linux-gnu/gnu endef diff -Nru glibc-2.27/debian/sysdeps/mipsr6.mk glibc-2.27/debian/sysdeps/mipsr6.mk --- glibc-2.27/debian/sysdeps/mipsr6.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/mipsr6.mk 2018-04-16 20:02:33.000000000 +0000 @@ -34,12 +34,13 @@ ln -sf mipsisa32r6-linux-gnu/fpu_control.h debian/libc6-dev-mips64/usr/include/ mkdir -p debian/libc6-dev-mips64/usr/include/mipsisa32r6-linux-gnu/gnu -cp -a debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ - debian/libc6-dev-mips64/usr/include/mipsisa32r6-linux-gnu/gnu +cp -a debian/tmp-mips64/usr/include/gnu/lib-names-n64_hard_2008.h \ + debian/tmp-mips64/usr/include/gnu/stubs-n64_hard_2008.h \ + debian/libc6-dev-mips64/usr/include/mipsisa32r6-linux-gnu/gnu mkdir -p debian/libc6-dev-mips64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/mipsisa32r6-linux-gnu/sys` ; do \ - ln -sf ../mipsisa32r6-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ + ln -sf ../mipsisa32r6-linux-gnu/sys/$$i debian/libc6-dev-mips64/usr/include/sys/$$i ; \ done endef @@ -47,8 +48,9 @@ define libc6-dev-mipsn32_extra_pkg_install mkdir -p debian/libc6-dev-mipsn32/usr/include/mipsisa32r6-linux-gnu/gnu -cp -a debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ - debian/libc6-dev-mipsn32/usr/include/mipsisa32r6-linux-gnu/gnu +cp -a debian/tmp-mipsn32/usr/include/gnu/lib-names-n32_hard_2008.h \ + debian/tmp-mipsn32/usr/include/gnu/stubs-n32_hard_2008.h \ + debian/libc6-dev-mipsn32/usr/include/mipsisa32r6-linux-gnu/gnu endef diff -Nru glibc-2.27/debian/sysdeps/powerpc.mk glibc-2.27/debian/sysdeps/powerpc.mk --- glibc-2.27/debian/sysdeps/powerpc.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/powerpc.mk 2018-04-16 20:02:33.000000000 +0000 @@ -23,12 +23,13 @@ ln -s powerpc-linux-gnu/fpu_control.h debian/libc6-dev-ppc64/usr/include/ mkdir -p debian/libc6-dev-ppc64/usr/include/powerpc-linux-gnu/gnu -cp -a debian/tmp-ppc64/usr/include/gnu/stubs-64-v1.h \ - debian/libc6-dev-ppc64/usr/include/powerpc-linux-gnu/gnu +cp -a debian/tmp-ppc64/usr/include/gnu/lib-names-64-v1.h \ + debian/tmp-ppc64/usr/include/gnu/stubs-64-v1.h \ + debian/libc6-dev-ppc64/usr/include/powerpc-linux-gnu/gnu mkdir -p debian/libc6-dev-ppc64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/powerpc-linux-gnu/sys` ; do \ - ln -s ../powerpc-linux-gnu/sys/$$i debian/libc6-dev-ppc64/usr/include/sys/$$i ; \ + ln -s ../powerpc-linux-gnu/sys/$$i debian/libc6-dev-ppc64/usr/include/sys/$$i ; \ done endef diff -Nru glibc-2.27/debian/sysdeps/ppc64.mk glibc-2.27/debian/sysdeps/ppc64.mk --- glibc-2.27/debian/sysdeps/ppc64.mk 2018-02-22 09:47:56.000000000 +0000 +++ glibc-2.27/debian/sysdeps/ppc64.mk 2018-04-16 20:02:50.000000000 +0000 @@ -27,12 +27,13 @@ ln -s powerpc64-linux-gnu/fpu_control.h debian/libc6-dev-powerpc/usr/include/ mkdir -p debian/libc6-dev-powerpc/usr/include/powerpc64-linux-gnu/gnu -cp -a debian/tmp-powerpc/usr/include/gnu/stubs-32.h \ - debian/libc6-dev-powerpc/usr/include/powerpc64-linux-gnu/gnu +cp -a debian/tmp-powerpc/usr/include/gnu/lib-names-32.h \ + debian/tmp-powerpc/usr/include/gnu/stubs-32.h \ + debian/libc6-dev-powerpc/usr/include/powerpc64-linux-gnu/gnu mkdir -p debian/libc6-dev-powerpc/usr/include/sys for i in `ls debian/tmp-libc/usr/include/powerpc64-linux-gnu/sys` ; do \ - ln -s ../powerpc64-linux-gnu/sys/$$i debian/libc6-dev-powerpc/usr/include/sys/$$i ; \ + ln -s ../powerpc64-linux-gnu/sys/$$i debian/libc6-dev-powerpc/usr/include/sys/$$i ; \ done endef diff -Nru glibc-2.27/debian/sysdeps/s390x.mk glibc-2.27/debian/sysdeps/s390x.mk --- glibc-2.27/debian/sysdeps/s390x.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/s390x.mk 2018-04-16 20:02:33.000000000 +0000 @@ -25,12 +25,13 @@ ln -s s390x-linux-gnu/fpu_control.h debian/libc6-dev-s390/usr/include/ mkdir -p debian/libc6-dev-s390/usr/include/s390x-linux-gnu/gnu -cp -a debian/tmp-s390/usr/include/gnu/stubs-32.h \ - debian/libc6-dev-s390/usr/include/s390x-linux-gnu/gnu +cp -a debian/tmp-s390/usr/include/gnu/lib-names-32.h \ + debian/tmp-s390/usr/include/gnu/stubs-32.h \ + debian/libc6-dev-s390/usr/include/s390x-linux-gnu/gnu mkdir -p debian/libc6-dev-s390/usr/include/sys for i in `ls debian/tmp-libc/usr/include/s390x-linux-gnu/sys` ; do \ - ln -s ../s390x-linux-gnu/sys/$$i debian/libc6-dev-s390/usr/include/sys/$$i ; \ + ln -s ../s390x-linux-gnu/sys/$$i debian/libc6-dev-s390/usr/include/sys/$$i ; \ done endef diff -Nru glibc-2.27/debian/sysdeps/sparc64.mk glibc-2.27/debian/sysdeps/sparc64.mk --- glibc-2.27/debian/sysdeps/sparc64.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/sparc64.mk 2018-04-16 20:02:33.000000000 +0000 @@ -26,12 +26,13 @@ ln -s sparc64-linux-gnu/fpu_control.h debian/libc6-dev-sparc/usr/include/ mkdir -p debian/libc6-dev-sparc/usr/include/sparc64-linux-gnu/gnu -cp -a debian/tmp-sparc/usr/include/gnu/stubs-32.h \ - debian/libc6-dev-sparc/usr/include/sparc64-linux-gnu/gnu +cp -a debian/tmp-sparc/usr/include/gnu/lib-names-32.h \ + debian/tmp-sparc/usr/include/gnu/stubs-32.h \ + debian/libc6-dev-sparc/usr/include/sparc64-linux-gnu/gnu mkdir -p debian/libc6-dev-sparc/usr/include/sys for i in `ls debian/tmp-libc/usr/include/sparc64-linux-gnu/sys` ; do \ - ln -s ../sparc64-linux-gnu/sys/$$i debian/libc6-dev-sparc/usr/include/sys/$$i ; \ + ln -s ../sparc64-linux-gnu/sys/$$i debian/libc6-dev-sparc/usr/include/sys/$$i ; \ done endef diff -Nru glibc-2.27/debian/sysdeps/sparc.mk glibc-2.27/debian/sysdeps/sparc.mk --- glibc-2.27/debian/sysdeps/sparc.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/sparc.mk 2018-04-16 20:02:33.000000000 +0000 @@ -26,12 +26,13 @@ ln -s sparc-linux-gnu/fpu_control.h debian/libc6-dev-sparc64/usr/include/ mkdir -p debian/libc6-dev-sparc64/usr/include/sparc-linux-gnu/gnu -cp -a debian/tmp-sparc64/usr/include/gnu/stubs-64.h \ - debian/libc6-dev-sparc64/usr/include/sparc-linux-gnu/gnu +cp -a debian/tmp-sparc64/usr/include/gnu/lib-names-64.h \ + debian/tmp-sparc64/usr/include/gnu/stubs-64.h \ + debian/libc6-dev-sparc64/usr/include/sparc-linux-gnu/gnu mkdir -p debian/libc6-dev-sparc64/usr/include/sys for i in `ls debian/tmp-libc/usr/include/sparc-linux-gnu/sys` ; do \ - ln -s ../sparc-linux-gnu/sys/$$i debian/libc6-dev-sparc64/usr/include/sys/$$i ; \ + ln -s ../sparc-linux-gnu/sys/$$i debian/libc6-dev-sparc64/usr/include/sys/$$i ; \ done endef diff -Nru glibc-2.27/debian/sysdeps/x32.mk glibc-2.27/debian/sysdeps/x32.mk --- glibc-2.27/debian/sysdeps/x32.mk 2018-02-22 09:46:35.000000000 +0000 +++ glibc-2.27/debian/sysdeps/x32.mk 2018-04-16 20:02:33.000000000 +0000 @@ -28,7 +28,8 @@ ln -s x86_64-linux-gnux32/fpu_control.h debian/libc6-dev-amd64/usr/include/ mkdir -p debian/libc6-dev-amd64/usr/include/x86_64-linux-gnux32/gnu -cp -a debian/tmp-amd64/usr/include/gnu/stubs-64.h \ +cp -a debian/tmp-amd64/usr/include/gnu/lib-names-64.h \ + debian/tmp-amd64/usr/include/gnu/stubs-64.h \ debian/libc6-dev-amd64/usr/include/x86_64-linux-gnux32/gnu mkdir -p debian/libc6-dev-amd64/usr/include/sys @@ -52,7 +53,8 @@ define libc6-dev-i386_extra_pkg_install mkdir -p debian/libc6-dev-i386/usr/include/x86_64-linux-gnux32/gnu -cp -a debian/tmp-i386/usr/include/gnu/stubs-32.h \ +cp -a debian/tmp-i386/usr/include/gnu/lib-names-32.h \ + debian/tmp-i386/usr/include/gnu/stubs-32.h \ debian/libc6-dev-i386/usr/include/x86_64-linux-gnux32/gnu endef diff -Nru glibc-2.27/debian/testsuite-xfail-debian.mk glibc-2.27/debian/testsuite-xfail-debian.mk --- glibc-2.27/debian/testsuite-xfail-debian.mk 2018-02-22 15:43:15.000000000 +0000 +++ glibc-2.27/debian/testsuite-xfail-debian.mk 2018-04-16 20:14:20.000000000 +0000 @@ -1046,6 +1046,23 @@ ###################################################################### +# s390 +###################################################################### +ifeq ($(config-machine)-$(config-os),s390-linux-gnu) +# https://sourceware.org/bugzilla/show_bug.cgi?id=22916 +test-xfail-tst-backtrace4 = yes +test-xfail-tst-backtrace5 = yes +# https://sourceware.org/bugzilla/show_bug.cgi?id=22917 +test-xfail-tst-cancelx20 = yes +test-xfail-tst-cancelx21 = yes + +# In some conditions the kernel might not provide a heap, causing +# some tests to fail. See bug#889817 for details. +test-xfail-tst-malloc-usable-tunables = yes +endif + + +###################################################################### # s390x ###################################################################### ifeq ($(config-machine)-$(config-os),s390x-linux-gnu)