Author: ps-guest Date: 2011-08-01 07:27:42 +0000 (Mon, 01 Aug 2011) New Revision: 4838
Modified: glibc-package/branches/glibc-branch-squeeze/debian/changelog glibc-package/branches/glibc-branch-squeeze/debian/patches/kfreebsd/local-sysdeps.diff Log: * kfreebsd/local-sysdeps.diff, update to r3662 (from squeeze glibc-bsd). - fixes LD_PRELOAD with a kfreebsd-9 kernel. Closes: #630695. - uses upstream RFTSIGZMB for exit signal selection when available. Modified: glibc-package/branches/glibc-branch-squeeze/debian/changelog =================================================================== --- glibc-package/branches/glibc-branch-squeeze/debian/changelog 2011-07-31 16:49:33 UTC (rev 4837) +++ glibc-package/branches/glibc-branch-squeeze/debian/changelog 2011-08-01 07:27:42 UTC (rev 4838) @@ -4,8 +4,10 @@ optimization with gcc-4.6. Closes: #619963. * Add patches/any/cvs-fnmatch.diff to fix an integer overflow in fnmatch() (CVE-2011-1659). Closes: #626370. - * Update patches/kfreebsd/local-sysdeps.diff to fix a crash in - if_nameindex() with more than 3 interfaces on GNU/kFreeBSD. + * kfreebsd/local-sysdeps.diff, update to r3662 (from squeeze glibc-bsd). + - fixes LD_PRELOAD with a kfreebsd-9 kernel. Closes: #630695. + - uses upstream RFTSIGZMB for exit signal selection when available. + - fixes a crash in if_nameindex() with more than 3 interfaces. * Fix preinst script wrt 3.0 kernel. Patch by Colin Watson. Closes: #630077. * Update submitted-resolv.conf-thread.diff from upstream to fix a Modified: glibc-package/branches/glibc-branch-squeeze/debian/patches/kfreebsd/local-sysdeps.diff =================================================================== --- glibc-package/branches/glibc-branch-squeeze/debian/patches/kfreebsd/local-sysdeps.diff 2011-07-31 16:49:33 UTC (rev 4837) +++ glibc-package/branches/glibc-branch-squeeze/debian/patches/kfreebsd/local-sysdeps.diff 2011-08-01 07:27:42 UTC (rev 4838) @@ -3175,6 +3175,46 @@ +#define _DIRENT_HAVE_D_NAMLEN 1 +#define _DIRENT_HAVE_D_TYPE 1 --- /dev/null ++++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/bits/elf.h +@@ -0,0 +1,37 @@ ++/* This file defines standard ELF types, structures, and macros. ++ Copyright (C) 1995-2003,2004,2005,2006,2007,2008,2009,2010 ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _BITS_ELF_H ++#define _BITS_ELF_H ++ ++__BEGIN_DECLS ++ ++#define AT_EXECPATH 15 /* Path to the executable. */ ++#define AT_CANARY 16 /* Canary for SSP. */ ++#define AT_CANARYLEN 17 /* Length of the canary. */ ++#define AT_OSRELDATE 18 /* OSRELDATE. */ ++#define AT_NCPUS 19 /* Number of CPUs. */ ++#define AT_PAGESIZES 20 /* Pagesizes. */ ++#define AT_PAGESIZESLEN 21 /* Number of pagesizes. */ ++#define AT_STACKPROT 23 /* Initial stack protection. */ ++ ++__END_DECLS ++ ++#endif /* elf.h */ +--- /dev/null +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/bits/errno.h @@ -0,0 +1,183 @@ +/*- @@ -7291,7 +7331,7 @@ +#include <sysdeps/unix/clock_settime.c> --- /dev/null +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/clone.c -@@ -0,0 +1,108 @@ +@@ -0,0 +1,144 @@ +/* Create a thread. + Copyright (C) 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. @@ -7320,6 +7360,29 @@ +#include <stddef.h> +#undef __clone + ++ ++#include <sys/sysctl.h> ++ ++static inline int ++__kernel_osreldate(void) ++{ ++ static int osreldate; ++ ++ int mib[2]; ++ size_t size; ++ char *temp; ++ ++ if (osreldate == 0) ++ { ++ mib[0] = CTL_KERN; ++ mib[1] = KERN_OSRELDATE; ++ size = sizeof osreldate; ++ if (__sysctl(mib, 2, &osreldate, &size, NULL, 0) == -1) ++ return (-1); ++ } ++ return (osreldate); ++} ++ +/* __start_thread (flags, child_stack, fn, arg) + is roughly equivalent to + @@ -7357,7 +7420,20 @@ + } + + if ((flags & CSIGNAL) != SIGCHLD) ++ { ++ if (__kernel_osreldate() >= 802510) ++ /* we slightly cheat here, */ ++ /* the 9.x snapshot prior to r223966 does not support it too */ + { ++ if ((flags & CSIGNAL) & ~RFTSIGMASK) ++ { ++ __set_errno (EINVAL); ++ return -1; ++ } ++ rfork_flags |= (RFTSIGZMB | RFTSIGFLAGS(flags & CSIGNAL)); ++ } ++ else ++ { + if ((flags & CSIGNAL) & ~RFTHPNMASK) + { + __set_errno (EINVAL); @@ -7368,7 +7444,7 @@ + else + rfork_flags |= (RFLINUXTHPN | ((flags & CSIGNAL) << RFTHPNSHIFT)); + } -+ ++ } + if (flags & CLONE_VM) + rfork_flags |= RFMEM; + @@ -8495,10 +8571,58 @@ +} + --- /dev/null ++++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/dl-support.c +@@ -0,0 +1,44 @@ ++/* Dynamic linker system dependencies for GNU/kFreeBSD. ++ Copyright (C) 2011 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define _dl_aux_init _dl_aux_init_ignored_code ++#include <elf/dl-support.c> ++#include <bits/elf.h> ++#undef _dl_aux_init ++ ++#ifdef HAVE_AUX_VECTOR ++void ++internal_function ++_dl_aux_init (ElfW(auxv_t) *av) ++{ ++ for (; av->a_type != AT_NULL; ++av) ++ switch (av->a_type) ++ { ++ case AT_PAGESZ: ++ GLRO(dl_pagesize) = av->a_un.a_val; ++ break; ++ case AT_PHDR: ++ GL(dl_phdr) = (void *) av->a_un.a_val; ++ break; ++ case AT_PHNUM: ++ GL(dl_phnum) = av->a_un.a_val; ++ break; ++ } ++} ++#endif +--- /dev/null +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/dl-sysdep.c -@@ -0,0 +1,56 @@ +@@ -0,0 +1,248 @@ +/* Dynamic linker system dependencies for GNU/kFreeBSD. -+ Copyright (C) 2008 Free Software Foundation, Inc. ++ Copyright (C) 1995-1998,2000-2008,2009,2010,2011 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or @@ -8527,9 +8651,200 @@ +#include <kernel-features.h> + +#ifdef SHARED ++# define _dl_sysdep_start _dl_sysdep_start_ignored_code ++# define _dl_show_auxv _dl_show_auxv_ignored_code +# include <elf/dl-sysdep.c> ++# include <bits/elf.h> ++# undef _dl_sysdep_start ++# undef _dl_show_auxv ++ ++ElfW(Addr) ++_dl_sysdep_start (void **start_argptr, ++ void (*dl_main) (const ElfW(Phdr) *phdr, ElfW(Word) phnum, ++ ElfW(Addr) *user_entry, ElfW(auxv_t) *auxv)) ++{ ++ const ElfW(Phdr) *phdr = NULL; ++ ElfW(Word) phnum = 0; ++ ElfW(Addr) user_entry; ++ ElfW(auxv_t) *av; ++ uid_t uid = 0; ++ gid_t gid = 0; ++#ifdef NEED_DL_SYSINFO ++ uintptr_t new_sysinfo = 0; +#endif + ++ __libc_stack_end = DL_STACK_END (start_argptr); ++ DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, INTUSE(_dl_argv), _environ, ++ _dl_auxv); ++ ++ user_entry = (ElfW(Addr)) ENTRY_POINT; ++ GLRO(dl_platform) = NULL; /* Default to nothing known about the platform. */ ++ ++ for (av = _dl_auxv; av->a_type != AT_NULL; av++) ++ switch (av->a_type) ++ { ++ case AT_PHDR: ++ phdr = (void *) av->a_un.a_val; ++ break; ++ case AT_PHNUM: ++ phnum = av->a_un.a_val; ++ break; ++ case AT_PAGESZ: ++ GLRO(dl_pagesize) = av->a_un.a_val; ++ break; ++ case AT_ENTRY: ++ user_entry = av->a_un.a_val; ++ break; ++#ifdef NEED_DL_BASE_ADDR ++ case AT_BASE: ++ _dl_base_addr = av->a_un.a_val; ++ break; ++#endif ++ } ++ ++ { ++ /* Fill in the values we have not gotten from the kernel through the ++ auxiliary vector. */ ++# undef SEE ++# define SEE(UID, var, uid) \ ++ var ^= __get##uid () ++ SEE (UID, uid, uid); ++ SEE (EUID, uid, euid); ++ SEE (GID, gid, gid); ++ SEE (EGID, gid, egid); ++ ++ /* If one of the two pairs of IDs does not match this is a setuid ++ or setgid run. */ ++ INTUSE(__libc_enable_secure) = uid | gid; ++ } ++ ++#ifndef HAVE_AUX_PAGESIZE ++ if (GLRO(dl_pagesize) == 0) ++ GLRO(dl_pagesize) = __getpagesize (); ++#endif ++ ++#if defined NEED_DL_SYSINFO ++ /* Only set the sysinfo value if we also have the vsyscall DSO. */ ++ if (GLRO(dl_sysinfo_dso) != 0 && new_sysinfo) ++ GLRO(dl_sysinfo) = new_sysinfo; ++#endif ++ ++#ifdef DL_SYSDEP_INIT ++ DL_SYSDEP_INIT; ++#endif ++ ++#ifdef DL_PLATFORM_INIT ++ DL_PLATFORM_INIT; ++#endif ++ ++ /* Determine the length of the platform name. */ ++ if (GLRO(dl_platform) != NULL) ++ GLRO(dl_platformlen) = strlen (GLRO(dl_platform)); ++ ++ if (__sbrk (0) == _end) ++ /* The dynamic linker was run as a program, and so the initial break ++ starts just after our bss, at &_end. The malloc in dl-minimal.c ++ will consume the rest of this page, so tell the kernel to move the ++ break up that far. When the user program examines its break, it ++ will see this new value and not clobber our data. */ ++ __sbrk (GLRO(dl_pagesize) ++ - ((_end - (char *) 0) & (GLRO(dl_pagesize) - 1))); ++ ++ /* If this is a SUID program we make sure that FDs 0, 1, and 2 are ++ allocated. If necessary we are doing it ourself. If it is not ++ possible we stop the program. */ ++ if (__builtin_expect (INTUSE(__libc_enable_secure), 0)) ++ __libc_check_standard_fds (); ++ ++ (*dl_main) (phdr, phnum, &user_entry, _dl_auxv); ++ return user_entry; ++} ++ ++void ++internal_function ++_dl_show_auxv (void) ++{ ++ char buf[64]; ++ ElfW(auxv_t) *av; ++ ++ /* Terminate string. */ ++ buf[63] = '\0'; ++ ++ /* The following code assumes that the AT_* values are encoded ++ starting from 0 with AT_NULL, 1 for AT_IGNORE, and all other values ++ close by (otherwise the array will be too large). In case we have ++ to support a platform where these requirements are not fulfilled ++ some alternative implementation has to be used. */ ++ for (av = _dl_auxv; av->a_type != AT_NULL; ++av) ++ { ++ static const struct ++ { ++ const char label[17]; ++ enum { unknown = 0, dec, hex, str, ignore } form : 8; ++ } auxvars[] = ++ { ++ [AT_EXECFD - 2] = { "EXECFD: ", dec }, ++ [AT_PHDR - 2] = { "PHDR: 0x", hex }, ++ [AT_PHENT - 2] = { "PHENT: ", dec }, ++ [AT_PHNUM - 2] = { "PHNUM: ", dec }, ++ [AT_PAGESZ - 2] = { "PAGESZ: ", dec }, ++ [AT_BASE - 2] = { "BASE: 0x", hex }, ++ [AT_FLAGS - 2] = { "FLAGS: 0x", hex }, ++ [AT_ENTRY - 2] = { "ENTRY: 0x", hex }, ++#ifndef __powerpc__ ++ /* For some odd reason these are not in sys/powerpc/include/elf.h. */ ++ [AT_NOTELF - 2] = { "NOTELF: ", hex }, ++ [AT_UID - 2] = { "UID: ", dec }, ++ [AT_EUID - 2] = { "EUID: ", dec }, ++ [AT_GID - 2] = { "GID: ", dec }, ++ [AT_EGID - 2] = { "EGID: ", dec }, ++#endif ++ [AT_EXECPATH - 2] = { "EXECPATH ", str }, ++ [AT_CANARY - 2] = { "CANARY: 0x", hex }, ++ [AT_CANARYLEN - 2] = { "CANARYLEN: ", dec }, ++ [AT_OSRELDATE - 2] = { "OSRELDATE: ", dec }, ++ [AT_NCPUS - 2] = { "NCPUS: ", dec }, ++ [AT_PAGESIZES - 2] = { "PAGESIZES: 0x", hex }, ++ [AT_PAGESIZESLEN - 2] = { "PAGESIZESLEN: ", dec }, ++ [AT_STACKPROT - 2] = { "STACKPROT: 0x", hex }, ++ }; ++ unsigned int idx = (unsigned int) (av->a_type - 2); ++ ++ if ((unsigned int) av->a_type < 2u || auxvars[idx].form == ignore) ++ continue; ++ ++ assert (AT_NULL == 0); ++ assert (AT_IGNORE == 1); ++ ++ if (idx < sizeof (auxvars) / sizeof (auxvars[0]) ++ && auxvars[idx].form != unknown) ++ { ++ const char *val = (char *) av->a_un.a_val; ++ ++ if (__builtin_expect (auxvars[idx].form, dec) == dec) ++ val = _itoa ((unsigned long int) av->a_un.a_val, ++ buf + sizeof buf - 1, 10, 0); ++ else if (__builtin_expect (auxvars[idx].form, hex) == hex) ++ val = _itoa ((unsigned long int) av->a_un.a_val, ++ buf + sizeof buf - 1, 16, 0); ++ ++ _dl_printf ("AT_%s%s\n", auxvars[idx].label, val); ++ ++ continue; ++ } ++ ++ /* Unknown value: print a generic line. */ ++ char buf2[17]; ++ buf2[sizeof (buf2) - 1] = '\0'; ++ const char *val2 = _itoa ((unsigned long int) av->a_un.a_val, ++ buf2 + sizeof buf2 - 1, 16, 0); ++ const char *val = _itoa ((unsigned long int) av->a_type, ++ buf + sizeof buf - 1, 16, 0); ++ _dl_printf ("AT_??? (0x%s): 0x%s\n", val, val2); ++ } ++} ++#endif ++ +int +attribute_hidden +_dl_discover_osversion (void) @@ -22341,7 +22656,7 @@ +#endif --- /dev/null +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/sys/rfork.h -@@ -0,0 +1,91 @@ +@@ -0,0 +1,98 @@ +/* Copyright (C) 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + @@ -22415,6 +22730,13 @@ +#define RFTHREAD (1<<13) /* enable kernel thread support */ +#define RFSIGSHARE (1<<14) /* share signal handlers */ +#define RFLINUXTHPN (1<<16) /* do linux clone exit parent notification */ ++#define RFSTOPPED (1<<17) /* leave child in a stopped state */ ++#define RFHIGHPID (1<<18) /* use a pid higher than 10 (idleproc) */ ++#define RFTSIGZMB (1<<19) /* select signal for exit parent notification */ ++#define RFTSIGSHIFT 20 /* selected signal number is in bits 20-27 */ ++#define RFTSIGMASK 0xFF ++#define RFTSIGNUM(flags) (((flags) >> RFTSIGSHIFT) & RFTSIGMASK) ++#define RFTSIGFLAGS(signum) ((signum) << RFTSIGSHIFT) +#define RFPPWAIT (1<<31) /* parent sleeps until child exits (vfork) */ + +#define RFTHPNSHIFT 24 /* reserve bits 24-30 */ -- To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1qnmud-0008kh...@vasks.debian.org