diff options
173 files changed, 1976 insertions, 537 deletions
diff --git a/ChangeLog b/ChangeLog index 6188d1cd31..47224b74cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,358 @@ +2005-06-20 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/sys/quota.h: Add definitions and types for + _LINUX_QUOTA_VERSION >= 2. + (_LINUX_QUOTA_VERSION): Define if not yet defined. + + * sysdeps/unix/sysv/linux/bits/resource.h (RLIMIT_NICE, + RLIMIT_RTPRIO): Add. + (RLIMIT_NLIMITS): Adjust. + * sysdeps/unix/sysv/linux/alpha/bits/resource.h (RLIMIT_NICE, + RLIMIT_RTPRIO): Add. + (RLIMIT_NLIMITS): Adjust. + * sysdeps/unix/sysv/linux/mips/bits/resource.h (RLIMIT_NICE, + RLIMIT_RTPRIO): Add. + (RLIMIT_NLIMITS): Adjust. + * sysdeps/unix/sysv/linux/sparc/bits/resource.h (RLIMIT_NICE, + RLIMIT_RTPRIO): Add. + (RLIMIT_NLIMITS): Adjust. + +2005-06-17 Ulrich Drepper <drepper@redhat.com> + + * time/mktime.c: Always include <string.h> for prototype of + implicitly used memcpy. + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c + (truncate64): Use __truncate, not truncate. + (__have_no_truncate64): Renamed from have_no_truncate64. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c + (__have_no_truncate64): Renamed from have_no_truncate64. + + * sysdeps/powerpc/fpu/libm-test-ulps: Adjust ulps for complex + float functions for gcc 4. + +2005-06-10 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_runtime_setup): + Handle prelinked libraries and binaries with new style PLT. + +2005-06-07 Jakub Jelinek <jakub@redhat.com> + + * elf/elf.h (R_PPC_REL16, R_PPC_REL16_LO, R_PPC_REL16_HI, + R_PPC_REL16_HA): Define. + +2005-06-14 Alan Modra <amodra@bigpond.net.au> + + * config.h.in (HAVE_ASM_PPC_REL16): Add. + * elf/elf.h (DT_PPC_GOT, DT_PPC_NUM): Define. + * elf/tls-macros.h (PowerPC32): Include config.h. Add variants of + TLS_IE, TLS_LD and TLS_GD for new PLT/GOT layout. + * sysdeps/powerpc/powerpc32/configure.in: New file, + * sysdeps/powerpc/powerpc32/dl-dtprocnum.h: New file. + * sysdeps/powerpc/powerpc32/dl-machine.h (DT_PPC): Define. + (ppc_got): New inline function. + (elf_machine_dynamic): Use ppc_got. Add attribute const. + (elf_machine_load_address): Add attribute const. Don't use int vars. + Use bcl rather than bl to save trashing branch target stack. Use + elf_machine_dynamic rather than duplicating code here. + (elf_machine_runtime_setup): New inline function replacing define. + Handle new PLT. + (elf_machine_fixup_plt): Handle new PLT. + (elf_machine_rela): Likewise. + * sysdeps/powerpc/powerpc32/sysdep.h: Include config.h. + (CALL_MCOUNT): Don't set up counter vars. + * sysdeps/powerpc/powerpc32/ppc-mcount.S: Correct comment. + * sysdeps/powerpc/powerpc32/elf/start.S (start_addressesp): Don't + define when HAVE_ASM_PPC_REL16. + (_start): Add HAVE_ASM_PPC_REL16 code. + * sysdeps/powerpc/powerpc32/dl-start.S (_dl_start_user): Don't bl + into the GOT when HAVE_ASM_PPC_REL16. + * sysdeps/powerpc/powerpc32/memset.S (memset): Likewise. + * sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S (__longjmp): Ditto. + * sysdeps/powerpc/powerpc32/fpu/s_ceil.S (__ceil): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S (__ceilf): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_floor.S (__floor): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_floorf.S (__floorf): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_lround.S (__lround): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_rint.S (__rint): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_rintf.S (__rintf): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_round.S (__round): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_roundf.S (__roundf): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_trunc.S (__trunc): Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_truncf.S (__truncf): Likewise. + * sysdeps/powerpc/powerpc32/fpu/setjmp-common.S (__sigsetjmp): + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S (__brk): Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S + (__getcontext): Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S + (__setcontext): Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S + (__swapcontext): Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S (stackblock): + Comment. + (__socket): Bomb if NARGS >= 7. Invoke CGOTSETUP and CGOTRESTORE. + +2005-06-17 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/sigignore.c: Include <string.h> to tell the compiler + to use __GI_memset. + * sysdeps/posix/signal.c: Likewise. + * sysdeps/posix/sigset.c: Likewise. + * sysdeps/posix/sysv_signal.c: Likewise. + * sysdeps/unix/sysv/linux/sleep.c: Likewise. + * sysdeps/unix/sysv/linux/sysctl.c: Likewise. + * sysdeps/unix/sysv/linux/system.c: Likewise. + +2005-06-15 Jakub Jelinek <jakub@redhat.com> + + * hesiod/hesiod.c (hesiod_init): Don't check for ctx->classes[0] == 0 + or both classes equal here. + (parse_config_file): If both classes are equal, clear the second one. + +2005-06-08 Karl Kelley <kekelley@iastate.edu> + + * hesiod/hesiod_p.h (struct hesiod_p): Add classes array. + * hesiod/hesiod.c (hesiod_init): Initialize classes. Fail if no + valid classes were given or if both are equal. + (hesiod_resolve): Use ctx->classes instead of hardcoded C_IN + and C_HS order. + (parse_config_file): Handle classes keyword. + * hesiod/README.hesiod: Mention addition of the classes keyword. + +2005-06-14 Ulrich Drepper <drepper@redhat.com> + + * configure.in: Add test for availability of libaudit. + * config.h.in: Define HAVE_LIBAUDIT. + * config.make.in: Define have-libaudit. + * nscd/Makefile: If libaudit is available, link nscd with it. + * nscd/selinux.c: If HAVE_LIBAUDIT is defined, log using libaudit. + Patch by Steve Grubb <sgrubb@redhat.com>. + + * debug/pread64_chk.c: Use __libc_pread64 instead of __pread64. + * sysdeps/posix/posix_fallocate64.c: Likewise. + * include/string.h: Use libc_hidden_proto for strnlen. + * sysdeps/generic/strnlen.c: Add libc_hidden_def. + * include/libintl.h: Use libc_hidden_proto for __dcgettext. + * intl/dcgettext.c: Add libc_hidden_def. + * include/execinfo.h: Add libc_hidden_proto for __backtrace and + __backtrace_symbols_fd. + * sysdeps/generic/backtrace.c: Add libc_hidden_def. + * sysdeps/generic/backtracesymsfd.c: Likewise. + * sysdeps/generic/elf/backtracesymsfd.c: Likewise. + * sysdeps/i386/backtrace.c: Likewise. + * sysdeps/ia64/backtrace.c: Likewise. + * sysdeps/powerpc/powerpc32/backtrace.c: Likewise. + * sysdeps/powerpc/powerpc64/backtrace.c: Likewise. + * sysdeps/s390/s390-32/backtrace.c: Likewise. + * sysdeps/s390/s390-64/backtrace.c: Likewise. + +2005-06-13 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/clock_gettime.c (clock_gettime): Implement case + where HANDLED_REALTIME is not defined. [BZ #966] + +2005-06-13 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/netlinkaccess.h (__netlink_sendreq, + __netlink_receive): Remove prototypes. + (__netlink_request): New prototype. + * sysdeps/unix/sysv/linux/ifaddrs.c: Include <alloca.h> and + <stdint.h>. + (__netlink_sendreq): Make static. + (__netlink_receive): Rename to... + (__netlink_request): ... this. Add type argument, call + __netlink_sendreq. If MSG_TRUNC is set after recvmsg, retry + with a bigger buffer. Don't record buffers that contain no + messages we are expecting. + (getifaddrs): Use __netlink_request instead of __netlink_sendreq + and __netlink_receive pairs. Formatting. + * sysdeps/unix/sysv/linux/if_index.c (if_nameindex_netlink): Use + __netlink_request instead of __netlink_sendreq and __netlink_receive + pair. + +2005-06-13 Thorsten Kukuk <kukuk@suse.de> + + * sysdeps/unix/sysv/linux/netinet/if_tr.h: Don't include kernel + headers, instead copy important structs/defines. + +2005-06-13 Jakub Jelinek <jakub@redhat.com> + + * elf/rtld.c (dl_main): Move DT_DEBUG setup before first + _dl_debug_state call. + +2005-06-12 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-error.c (_dl_signal_error): Store information about use of + real malloc in the catch object. + (_dl_catch_error): Forward information about malloc use to caller + in new parameter. + (_dl_out_of_memory): Make static. + * elf/dl-deps.c: Adjust callers of _dl_catch_error. + * elf/dl-libc.c: Likewise. + * elf/dl-open.c: Likewise. + * elf/rtld.c: Likewise. + Add new --audit option. + * sysdeps/generic/ldsodefs.h: Remove _dl_out_of_memory declaration. + (rtld_global_ro._dl_signal_error): Add new parameter. + * include/dlfcn.h (_dl_catch_error): Add new parameter. + * dlfcn/dlfcn.c (_dlerror_run): Pass additional parameter to + _dl_catch_error. Only free if the returned newly value says so. + +2005-06-01 Roland McGrath <roland@redhat.com> + + [BZ #959] + * posix/tst-mmap.c (main): Fill the test file with enough data for the + page size. + 2005-05-30 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/dl-osinfo.h (DL_SYSDEP_OSCHECK): If GLRO(dl_osversion) has been already set to a value smaller than _dl_discover_osversion (), don't overwrite it here. +2005-05-24 Thomas Schwinge <schwinge@nic-nac-project.de> + + * sysdeps/mach/i386/syscall.S (syscall): Call END. + +2005-05-28 Richard Henderson <rth@redhat.com> + + * elf/elf.h (DT_ALPHA_PLTRO, DT_ALPHA_NUM): New. + * sysdeps/alpha/dl-dtprocnum.h: New file. + * sysdeps/alpha/dl-machine.h (DT_ALPHA): New. + (elf_machine_load_address): Simplify to rely on gprel relocations. + (elf_machine_runtime_setup): Handle DT_ALPHA_PLTRO plt format. + Remove thread safety workaround for binutils 2.6. + (elf_machine_fixup_plt): Handle DT_ALPHA_PLTRO plt format. + * sysdeps/alpha/dl-trampoline.S (_dl_runtime_resolve_new): New. + (_dl_runtime_profile_new): New. + (_dl_runtime_resolve_old): Rename from _dl_runtime_resolve. + (_dl_runtime_profile_old): Rename from _dl_runtime_profile. Fix + typo in _dl_call_pltexit argument loading. + + * sysdeps/alpha/div_libc.h (funcnoplt): New. + * sysdeps/alpha/divl.S: Use it. + * sysdeps/alpha/divq.S: Likewise + * sysdeps/alpha/divqu.S: Likewise. + * sysdeps/alpha/reml.S: Likewise. + * sysdeps/alpha/remq.S: Likewise. + * sysdeps/alpha/remqu.S: Likewise. + +2005-05-26 Andreas Schwab <schwab@suse.de> + + * locale/Makefile (CFLAGS-loadlocale.c): Don't define. + +2005-05-26 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (O_DIRECT): Fix value. + Reported by Colin Gibbs <colin@gibbsonline.net>. [BZ #954] + +2005-05-17 Alan Modra <amodra@bigpond.net.au> + + * sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S (__longjmp): Corrent + _dl_hwcap access in PIC && !SHARED case. + * sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Likewise. + +2005-05-25 Dwayne Grant McConnell <dgm69@us.ibm.com> + + * gmon/gmon.c: Add space in weak_alias use. + * linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S: Likewise. + * sysdeps/alpha/htonl.S: Likewise. + * sysdeps/alpha/htons.S: Likewise. + * sysdeps/alpha/elf/start.S: Likewise. + * sysdeps/i386/i386-mcount.S: Likewise. + * sysdeps/ia64/strchr.S: Likewise. + * sysdeps/ia64/fpu/e_lgamma_r.c: Likewise. + * sysdeps/ia64/fpu/e_lgamma_r.c: Likewise. + * sysdeps/ia64/fpu/e_lgammaf_r.c: Likewise. + * sysdeps/ia64/fpu/e_lgammaf_r.c: Likewise. + * sysdeps/ia64/fpu/e_lgammal_r.c: Likewise. + * sysdeps/ia64/fpu/e_lgammal_r.c: Likewise. + * sysdeps/ia64/fpu/w_lgamma.c: Likewise. + * sysdeps/ia64/fpu/w_lgamma.c: Likewise. + * sysdeps/ia64/fpu/w_lgammaf.c: Likewise. + * sysdeps/ia64/fpu/w_lgammaf.c: Likewise. + * sysdeps/ia64/fpu/w_lgammal.c: Likewise. + * sysdeps/ia64/fpu/w_lgammal.c: Likewise. + * sysdeps/mach/hurd/readdir64_r.c: Likewise. + * sysdeps/mach/hurd/sigaltstack.c: Likewise. + * sysdeps/powerpc/fpu/s_fabs.S: Likewise. + * sysdeps/powerpc/fpu/s_fabs.S: Likewise. + * sysdeps/powerpc/fpu/s_fabs.S: Likewise. + * sysdeps/powerpc/fpu/s_fabs.S: Likewise. + * sysdeps/powerpc/fpu/s_fmax.S: Likewise. + * sysdeps/powerpc/fpu/s_fmax.S: Likewise. + * sysdeps/powerpc/fpu/s_fmax.S: Likewise. + * sysdeps/powerpc/fpu/s_fmax.S: Likewise. + * sysdeps/powerpc/fpu/s_fmin.S: Likewise. + * sysdeps/powerpc/fpu/s_fmin.S: Likewise. + * sysdeps/powerpc/fpu/s_fmin.S: Likewise. + * sysdeps/powerpc/fpu/s_fmin.S: Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Likewise. + * sysdeps/s390/s390-32/s390-mcount.S: Likewise. + * sysdeps/s390/s390-64/s390x-mcount.S: Likewise. + * sysdeps/sparc/sparc32/memset.S: Likewise. + * sysdeps/sparc/sparc32/stpcpy.S: Likewise. + * sysdeps/sparc/sparc32/strchr.S: Likewise. + * sysdeps/sparc/sparc32/strchr.S: Likewise. + * sysdeps/sparc/sparc64/memcmp.S: Likewise. + * sysdeps/sparc/sparc64/memcpy.S: Likewise. + * sysdeps/sparc/sparc64/memcpy.S: Likewise. + * sysdeps/sparc/sparc64/memset.S: Likewise. + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Likewise. + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Likewise. + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Likewise. + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Likewise. + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Likewise. + * sysdeps/unix/sysv/linux/alpha/clone.S: Likewise. + * sysdeps/unix/sysv/linux/alpha/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/alpha/getrusage.S: Likewise. + * sysdeps/unix/sysv/linux/alpha/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/alpha/sigsuspend.S: Likewise. + * sysdeps/unix/sysv/linux/alpha/swapcontext.S: Likewise. + * sysdeps/unix/sysv/linux/alpha/syscall.S: Likewise. + * sysdeps/unix/sysv/linux/readdir64.c: Likewise. + * sysdeps/unix/sysv/linux/readdir64_r.c: Likewise. + * sysdeps/unix/sysv/linux/hppa/clone.S: Likewise. + * sysdeps/unix/sysv/linux/i386/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/i386/makecontext.S: Likewise. + * sysdeps/unix/sysv/linux/i386/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/i386/swapcontext.S: Likewise. + * sysdeps/unix/sysv/linux/ia64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/ia64/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/mips/clone.S: Likewise. + * sysdeps/unix/sysv/linux/mips/vfork.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Likewise. + * sysdeps/unix/sysv/linux/wordsize-64/getdents.c: Likewise. + * sysdeps/unix/sysv/linux/x86_64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/makecontext.c: Likewise. + * sysdeps/unix/sysv/linux/x86_64/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/swapcontext.S: Likewise. + * sysdeps/x86_64/_mcount.S: Likewise. + +2005-05-24 Roland McGrath <roland@redhat.com> + + * sysdeps/unix/sysv/linux/i386/sysdep.h + (SETUP_PIC_REG, LOAD_PIC_REG): Move these macros ... + * sysdeps/i386/sysdep.h [PIC]: ... to here. + 2005-05-23 Roland McGrath <roland@redhat.com> * sysdeps/arm, sysdeps/unix/arm, sysdeps/unix/sysv/linux/arm: diff --git a/config.h.in b/config.h.in index db3defc6b0..70e67bb912 100644 --- a/config.h.in +++ b/config.h.in @@ -21,6 +21,9 @@ /* Define if building with SELinux support. Set by --with-selinux. */ #undef HAVE_SELINUX +/* Defined if building with SELinux support & audit libs are detected. */ +#undef HAVE_LIBAUDIT + /* Define if using XCOFF. Set by --with-xcoff. */ #undef HAVE_XCOFF @@ -217,6 +220,9 @@ /* Define if inlined system calls are available. */ #undef HAVE_INLINED_SYSCALLS +/* Define if your assembler and linker support R_PPC_REL16* relocs. */ +#undef HAVE_ASM_PPC_REL16 + /* */ diff --git a/config.make.in b/config.make.in index 1bd025e97e..1ab4bfbfc4 100644 --- a/config.make.in +++ b/config.make.in @@ -59,6 +59,7 @@ enable-check-abi = @enable_check_abi@ have-forced-unwind = @libc_cv_forced_unwind@ have-fpie = @libc_cv_fpie@ have-selinux = @have_selinux@ +have-libaudit = @have_libaudit@ have-cc-with-libunwind = @libc_cv_cc_with_libunwind@ fno-unit-at-a-time = @fno_unit_at_a_time@ bind-now = @bindnow@ diff --git a/configure b/configure index cb86530899..8c978e7512 100755 --- a/configure +++ b/configure @@ -313,7 +313,7 @@ ac_includes_default="\ # include <unistd.h> #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_cc_with_libunwind libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_z_relro libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie fno_unit_at_a_time libc_cv_have_initfini no_whole_archive exceptions LIBGD have_selinux EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_cc_with_libunwind libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_z_relro libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie fno_unit_at_a_time libc_cv_have_initfini no_whole_archive exceptions LIBGD have_libaudit have_selinux EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -1924,7 +1924,6 @@ fi test -n "$base_machine" || case "$machine" in a29k | am29000) base_machine=a29k machine=a29k ;; alpha*) base_machine=alpha machine=alpha/$machine ;; -arm*) base_machine=arm machine=arm/arm32/$machine ;; c3[012]) base_machine=cx0 machine=cx0/c30 ;; c4[04]) base_machine=cx0 machine=cx0/c40 ;; hppa*64*) base_machine=hppa machine=hppa/hppa64 ;; @@ -1980,7 +1979,6 @@ sparc64) base_machine=sparc machine=sparc/sparc64 ;; sparc64b) base_machine=sparc machine=sparc/sparc64/sparcv9b ;; -thumb*) base_machine=thumb machine=arm/thumb/$machine ;; *) base_machine=$machine ;; esac @@ -6731,6 +6729,86 @@ cat >>confdefs.h <<\_ACEOF #define HAVE_SELINUX 1 _ACEOF + + # See if we have the libaudit library + echo "$as_me:$LINENO: checking for audit_log_avc in -laudit" >&5 +echo $ECHO_N "checking for audit_log_avc in -laudit... $ECHO_C" >&6 +if test "${ac_cv_lib_audit_audit_log_avc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-laudit $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char audit_log_avc (); +int +main () +{ +audit_log_avc (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_audit_audit_log_avc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_audit_audit_log_avc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_audit_audit_log_avc" >&5 +echo "${ECHO_T}$ac_cv_lib_audit_audit_log_avc" >&6 +if test $ac_cv_lib_audit_audit_log_avc = yes; then + have_libaudit=yes +else + have_libaudit=no +fi + + if test "x$have_libaudit" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBAUDIT 1 +_ACEOF + + fi + fi @@ -8343,6 +8421,7 @@ s,@libc_cv_have_initfini@,$libc_cv_have_initfini,;t t s,@no_whole_archive@,$no_whole_archive,;t t s,@exceptions@,$exceptions,;t t s,@LIBGD@,$LIBGD,;t t +s,@have_libaudit@,$have_libaudit,;t t s,@have_selinux@,$have_selinux,;t t s,@EGREP@,$EGREP,;t t s,@sizeof_long_double@,$sizeof_long_double,;t t diff --git a/configure.in b/configure.in index 503611a6b9..5f46b5e4ef 100644 --- a/configure.in +++ b/configure.in @@ -1938,6 +1938,14 @@ fi # Check if we're building with SELinux support. if test "x$have_selinux" = xyes; then AC_DEFINE(HAVE_SELINUX,1,[SELinux support]) + + # See if we have the libaudit library + AC_CHECK_LIB(audit, audit_log_avc, + have_libaudit=yes, have_libaudit=no) + if test "x$have_libaudit" = xyes; then + AC_DEFINE(HAVE_LIBAUDIT,1,[SELinux libaudit support]) + fi + AC_SUBST(have_libaudit) fi AC_SUBST(have_selinux) diff --git a/debug/pread64_chk.c b/debug/pread64_chk.c index c0e0efdf85..9db1894765 100644 --- a/debug/pread64_chk.c +++ b/debug/pread64_chk.c @@ -26,6 +26,6 @@ __pread64_chk (int fd, void *buf, size_t nbytes, off64_t offset, size_t buflen) if (nbytes > buflen) __chk_fail (); - return __pread64 (fd, buf, nbytes, offset); + return __libc_pread64 (fd, buf, nbytes, offset); } #endif diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c index 1254381f2b..7ea31d4392 100644 --- a/dlfcn/dlerror.c +++ b/dlfcn/dlerror.c @@ -19,6 +19,7 @@ #include <dlfcn.h> #include <libintl.h> +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -40,6 +41,7 @@ struct dl_action_result { int errcode; int returned; + bool malloced; const char *objname; const char *errstring; }; @@ -154,13 +156,13 @@ _dlerror_run (void (*operate) (void *), void *args) { /* Free the error string from the last failed command. This can happen if `dlerror' was not run after an error was found. */ - if (strcmp (result->errstring, "out of memory") != 0) + if (result->malloced) free ((char *) result->errstring); result->errstring = NULL; } result->errcode = GLRO(dl_catch_error) (&result->objname, &result->errstring, - operate, args); + &result->malloced, operate, args); /* If no error we mark that no error string is available. */ result->returned = result->errstring == NULL; diff --git a/elf/dl-deps.c b/elf/dl-deps.c index 50d7a0e71c..a73e21db7b 100644 --- a/elf/dl-deps.c +++ b/elf/dl-deps.c @@ -235,16 +235,22 @@ _dl_map_object_deps (struct link_map *map, { /* Map in the needed object. */ struct link_map *dep; - int err; /* Recognize DSTs. */ name = expand_dst (l, strtab + d->d_un.d_val, 0); /* Store the tag in the argument structure. */ args.name = name; - err = _dl_catch_error (&objname, &errstring, openaux, &args); + bool malloced; + int err = _dl_catch_error (&objname, &errstring, &malloced, + openaux, &args); if (__builtin_expect (errstring != NULL, 0)) { + char *new_errstring = strdupa (errstring); + if (malloced) + free ((char *) errstring); + errstring = new_errstring; + if (err) errno_reason = err; else @@ -288,8 +294,6 @@ _dl_map_object_deps (struct link_map *map, if (d->d_tag == DT_AUXILIARY) { - int err; - /* Say that we are about to load an auxiliary library. */ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0)) @@ -301,13 +305,14 @@ _dl_map_object_deps (struct link_map *map, /* We must be prepared that the addressed shared object is not available. */ - err = _dl_catch_error (&objname, &errstring, openaux, - &args); + bool malloced; + (void) _dl_catch_error (&objname, &errstring, &malloced, + openaux, &args); if (__builtin_expect (errstring != NULL, 0)) { /* We are not interested in the error message. */ assert (errstring != NULL); - if (errstring != _dl_out_of_memory) + if (malloced) free ((char *) errstring); /* Simply ignore this error and continue the work. */ @@ -316,8 +321,6 @@ _dl_map_object_deps (struct link_map *map, } else { - int err; - /* Say that we are about to load an auxiliary library. */ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0)) @@ -328,10 +331,16 @@ _dl_map_object_deps (struct link_map *map, ? l->l_name : rtld_progname); /* For filter objects the dependency must be available. */ - err = _dl_catch_error (&objname, &errstring, openaux, - &args); + bool malloced; + int err = _dl_catch_error (&objname, &errstring, &malloced, + openaux, &args); if (__builtin_expect (errstring != NULL, 0)) { + char *new_errstring = strdupa (errstring); + if (malloced) + free ((char *) errstring); + errstring = new_errstring; + if (err) errno_reason = err; else diff --git a/elf/dl-error.c b/elf/dl-error.c index 993b7c29ab..a63d801411 100644 --- a/elf/dl-error.c +++ b/elf/dl-error.c @@ -19,6 +19,7 @@ #include <libintl.h> #include <setjmp.h> +#include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> @@ -30,6 +31,8 @@ struct catch { const char *objname; /* Object/File name. */ const char *errstring; /* Error detail filled in here. */ + bool malloced; /* Nonzero if the string is malloced + by the libc malloc. */ jmp_buf env; /* longjmp here on error. */ }; @@ -44,8 +47,7 @@ struct catch /* This message we return as a last resort. We define the string in a variable since we have to avoid freeing it and so have to enable a pointer comparison. See below and in dlfcn/dlerror.c. */ -const char _dl_out_of_memory[] = "out of memory"; -rtld_hidden_data_def (_dl_out_of_memory) +static const char _dl_out_of_memory[] = "out of memory"; /* This points to a function which is called when an continuable error is @@ -87,15 +89,27 @@ _dl_signal_error (int errcode, const char *objname, const char *occation, lcatch->errstring = (char *) malloc (len_objname + len_errstring); if (lcatch->errstring != NULL) - /* Make a copy of the object file name and the error string. */ - lcatch->objname = memcpy (__mempcpy ((char *) lcatch->errstring, - errstring, len_errstring), - objname, len_objname); + { + /* Make a copy of the object file name and the error string. */ + lcatch->objname = memcpy (__mempcpy ((char *) lcatch->errstring, + errstring, len_errstring), + objname, len_objname); + + /* If the main executable is relocated it means the libc's malloc + is used. */ +#ifdef SHARED + lcatch->malloced = (GL(dl_ns)[LM_ID_BASE]._ns_loaded->l_relocated + != 0); +#else + lcatch->malloced = true; +#endif + } else { /* This is better than nothing. */ lcatch->objname = ""; lcatch->errstring = _dl_out_of_memory; + lcatch->malloced = false; } longjmp (lcatch->env, errcode ?: -1); } @@ -140,7 +154,7 @@ _dl_signal_cerror (int errcode, const char *objname, const char *occation, int internal_function _dl_catch_error (const char **objname, const char **errstring, - void (*operate) (void *), void *args) + bool *mallocedp, void (*operate) (void *), void *args) { int errcode; struct catch *volatile old; @@ -162,6 +176,7 @@ _dl_catch_error (const char **objname, const char **errstring, *catchp = old; *objname = NULL; *errstring = NULL; + *mallocedp = false; return 0; } @@ -169,6 +184,7 @@ _dl_catch_error (const char **objname, const char **errstring, *catchp = old; *objname = c.objname; *errstring = c.errstring; + *mallocedp = c.malloced; return errcode == -1 ? 0 : errcode; } diff --git a/elf/dl-libc.c b/elf/dl-libc.c index 5e76069139..1b995eda92 100644 --- a/elf/dl-libc.c +++ b/elf/dl-libc.c @@ -1,5 +1,5 @@ /* Handle loading and unloading shared objects for internal libc purposes. - Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 1999,2000,2001,2002,2004,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Zack Weinberg <zack@rabi.columbia.edu>, 1999. @@ -42,12 +42,13 @@ dlerror_run (void (*operate) (void *), void *args) { const char *objname; const char *last_errstring = NULL; - int result; + bool malloced; - (void) GLRO(dl_catch_error) (&objname, &last_errstring, operate, args); + (void) GLRO(dl_catch_error) (&objname, &last_errstring, &malloced, + operate, args); - result = last_errstring != NULL; - if (result && last_errstring != _dl_out_of_memory) + int result = last_errstring != NULL; + if (result && malloced) free ((char *) last_errstring); return result; diff --git a/elf/dl-open.c b/elf/dl-open.c index a65690e5a3..984f4a4ec6 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -504,11 +504,6 @@ void * _dl_open (const char *file, int mode, const void *caller_dlopen, Lmid_t nsid, int argc, char *argv[], char *env[]) { - struct dl_open_args args; - const char *objname; - const char *errstring; - int errcode; - if ((mode & RTLD_BINDING_MASK) == 0) /* One of the flags must be set. */ _dl_signal_error (EINVAL, file, NULL, N_("invalid mode for dlopen()")); @@ -543,6 +538,7 @@ no more namespaces available for dlmopen()")); _dl_signal_error (EINVAL, file, NULL, N_("invalid target namespace in dlmopen()")); + struct dl_open_args args; args.file = file; args.mode = mode; args.caller_dlopen = caller_dlopen; @@ -552,7 +548,12 @@ no more namespaces available for dlmopen()")); args.argc = argc; args.argv = argv; args.env = env; - errcode = _dl_catch_error (&objname, &errstring, dl_open_worker, &args); + + const char *objname; + const char *errstring; + bool malloced; + int errcode = _dl_catch_error (&objname, &errstring, &malloced, + dl_open_worker, &args); #ifndef MAP_COPY /* We must munmap() the cache file. */ @@ -603,7 +604,7 @@ no more namespaces available for dlmopen()")); memcpy (local_errstring, errstring, len_errstring); } - if (errstring != _dl_out_of_memory) + if (malloced) free ((char *) errstring); assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT); diff --git a/elf/elf.h b/elf/elf.h index e246519fab..a09d279dbf 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -1866,6 +1866,9 @@ typedef Elf32_Addr Elf32_Conflict; #define LITUSE_ALPHA_TLS_GD 4 #define LITUSE_ALPHA_TLS_LDM 5 +/* Legal values for d_tag of Elf64_Dyn. */ +#define DT_ALPHA_PLTRO 0x70000000 +#define DT_ALPHA_NUM 1 /* PowerPC specific declarations */ @@ -1976,10 +1979,19 @@ typedef Elf32_Addr Elf32_Conflict; #define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ #define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ +/* GNU relocs used in PIC code sequences. */ +#define R_PPC_REL16 249 /* word32 (sym-.) */ +#define R_PPC_REL16_LO 250 /* half16 (sym-.)@l */ +#define R_PPC_REL16_HI 251 /* half16 (sym-.)@h */ +#define R_PPC_REL16_HA 252 /* half16 (sym-.)@ha */ + /* This is a phony reloc to handle any old fashioned TOC16 references that may still be in object files. */ #define R_PPC_TOC16 255 +/* PowerPC specific values for the Dyn d_tag field. */ +#define DT_PPC_GOT (DT_LOPROC + 0) +#define DT_PPC_NUM 1 /* PowerPC64 relocations defined by the ABIs */ #define R_PPC64_NONE R_PPC_NONE diff --git a/elf/rtld.c b/elf/rtld.c index b7f16f7b37..a3dbb867f3 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -61,6 +61,9 @@ static void print_missing_version (int errcode, const char *objname, /* Print the various times we collected. */ static void print_statistics (hp_timing_t *total_timep); +/* Add audit objects. */ +static void process_dl_audit (char *str); + /* This is a list of all the modes the dynamic loader can be in. */ enum mode { normal, list, verify, trace }; @@ -771,6 +774,7 @@ do_preload (char *fname, struct link_map *main_map, const char *where) const char *objname; const char *err_str = NULL; struct map_args args; + bool malloced; args.str = fname; args.loader = main_map; @@ -779,7 +783,7 @@ do_preload (char *fname, struct link_map *main_map, const char *where) unsigned int old_nloaded = GL(dl_ns)[LM_ID_BASE]._ns_nloaded; - (void) _dl_catch_error (&objname, &err_str, map_doit, &args); + (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit, &args); if (__builtin_expect (err_str != NULL, 0)) { _dl_error_printf ("\ @@ -927,6 +931,14 @@ dl_main (const ElfW(Phdr) *phdr, _dl_argc -= 2; INTUSE(_dl_argv) += 2; } + else if (! strcmp (INTUSE(_dl_argv)[1], "--audit") && _dl_argc > 2) + { + process_dl_audit (INTUSE(_dl_argv)[2]); + + _dl_skip_args += 2; + _dl_argc -= 2; + INTUSE(_dl_argv) += 2; + } else break; @@ -983,12 +995,14 @@ of this helper program; chances are you did not intend to run this program.\n\ const char *objname; const char *err_str = NULL; struct map_args args; + bool malloced; args.str = rtld_progname; args.loader = NULL; args.is_preloaded = 0; args.mode = __RTLD_OPENEXEC; - (void) _dl_catch_error (&objname, &err_str, map_doit, &args); + (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit, + &args); if (__builtin_expect (err_str != NULL, 0)) /* We don't free the returned string, the programs stops anyway. */ @@ -1451,14 +1465,17 @@ ld.so does not support TLS, but program uses it!\n"); const char *objname; const char *err_str = NULL; - (void) _dl_catch_error (&objname, &err_str, dlmopen_doit, &dlmargs); + bool malloced; + (void) _dl_catch_error (&objname, &err_str, &malloced, dlmopen_doit, + &dlmargs); if (__builtin_expect (err_str != NULL, 0)) { not_loaded: _dl_error_printf ("\ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", al->name, err_str); - free ((char *) err_str); + if (malloced) + free ((char *) err_str); } else { @@ -1467,7 +1484,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", largs.map = dlmargs.map; /* Check whether the interface version matches. */ - (void) _dl_catch_error (&objname, &err_str, lookup_doit, &largs); + (void) _dl_catch_error (&objname, &err_str, &malloced, + lookup_doit, &largs); unsigned int (*laversion) (unsigned int); unsigned int lav; @@ -1508,8 +1526,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", do { largs.name = cp; - (void) _dl_catch_error (&objname, &err_str, lookup_doit, - &largs); + (void) _dl_catch_error (&objname, &err_str, &malloced, + lookup_doit, &largs); /* Store the pointer. */ if (err_str == NULL && largs.result != NULL) @@ -1593,6 +1611,23 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", } } + /* Set up debugging before the debugger is notified for the first time. */ +#ifdef ELF_MACHINE_DEBUG_SETUP + /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way. */ + ELF_MACHINE_DEBUG_SETUP (main_map, r); + ELF_MACHINE_DEBUG_SETUP (&GL(dl_rtld_map), r); +#else + if (main_map->l_info[DT_DEBUG] != NULL) + /* There is a DT_DEBUG entry in the dynamic section. Fill it in + with the run-time address of the r_debug structure */ + main_map->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r; + + /* Fill in the pointer in the dynamic linker's own dynamic section, in + case you run gdb on the dynamic linker directly. */ + if (GL(dl_rtld_map).l_info[DT_DEBUG] != NULL) + GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r; +#endif + /* We start adding objects. */ r->r_state = RT_ADD; _dl_debug_state (); @@ -2162,30 +2197,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", } - { - struct link_map *l = main_map; - -#ifdef ELF_MACHINE_DEBUG_SETUP - - /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way. */ - - ELF_MACHINE_DEBUG_SETUP (l, r); - ELF_MACHINE_DEBUG_SETUP (&GL(dl_rtld_map), r); - -#else - - if (l->l_info[DT_DEBUG] != NULL) - /* There is a DT_DEBUG entry in the dynamic section. Fill it in - with the run-time address of the r_debug structure */ - l->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r; - - /* Fill in the pointer in the dynamic linker's own dynamic section, in - case you run gdb on the dynamic linker directly. */ - if (GL(dl_rtld_map).l_info[DT_DEBUG] != NULL) - GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r; -#endif - } - /* Now set up the variable which helps the assembler startup code. */ GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist = &main_map->l_searchlist; GL(dl_ns)[LM_ID_BASE]._ns_global_scope[0] = &main_map->l_searchlist; diff --git a/elf/tls-macros.h b/elf/tls-macros.h index 0ae9e65dc0..37cbe7514f 100644 --- a/elf/tls-macros.h +++ b/elf/tls-macros.h @@ -703,6 +703,8 @@ register void *__gp __asm__("$29"); #elif defined __powerpc__ && !defined __powerpc64__ +#include "config.h" + # define __TLS_CALL_CLOBBERS \ "0", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", \ "lr", "ctr", "cr0", "cr1", "cr5", "cr6", "cr7" @@ -715,7 +717,20 @@ register void *__gp __asm__("$29"); __result; }) /* PowerPC32 Initial Exec TLS access. */ -# define TLS_IE(x) \ +# ifdef HAVE_ASM_PPC_REL16 +# define TLS_IE(x) \ + ({ int *__result; \ + asm ("bcl 20,31,1f\n1:\t" \ + "mflr %0\n\t" \ + "addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t" \ + "addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n\t" \ + "lwz %0," #x "@got@tprel(%0)\n\t" \ + "add %0,%0," #x "@tls" \ + : "=b" (__result) : \ + : "lr"); \ + __result; }) +# else +# define TLS_IE(x) \ ({ int *__result; \ asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ "mflr %0\n\t" \ @@ -724,9 +739,24 @@ register void *__gp __asm__("$29"); : "=b" (__result) : \ : "lr"); \ __result; }) +# endif /* PowerPC32 Local Dynamic TLS access. */ -# define TLS_LD(x) \ +# ifdef HAVE_ASM_PPC_REL16 +# define TLS_LD(x) \ + ({ int *__result; \ + asm ("bcl 20,31,1f\n1:\t" \ + "mflr 3\n\t" \ + "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t" \ + "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t" \ + "addi 3,3," #x "@got@tlsld\n\t" \ + "bl __tls_get_addr@plt\n\t" \ + "addi %0,3," #x "@dtprel" \ + : "=r" (__result) : \ + : __TLS_CALL_CLOBBERS); \ + __result; }) +# else +# define TLS_LD(x) \ ({ int *__result; \ asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ "mflr 3\n\t" \ @@ -736,9 +766,23 @@ register void *__gp __asm__("$29"); : "=r" (__result) : \ : __TLS_CALL_CLOBBERS); \ __result; }) +# endif /* PowerPC32 General Dynamic TLS access. */ -# define TLS_GD(x) \ +# ifdef HAVE_ASM_PPC_REL16 +# define TLS_GD(x) \ + ({ register int *__result __asm__ ("r3"); \ + asm ("bcl 20,31,1f\n1:\t" \ + "mflr 3\n\t" \ + "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t" \ + "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t" \ + "addi 3,3," #x "@got@tlsgd\n\t" \ + "bl __tls_get_addr@plt" \ + : : \ + : __TLS_CALL_CLOBBERS); \ + __result; }) +# else +# define TLS_GD(x) \ ({ register int *__result __asm__ ("r3"); \ asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ "mflr 3\n\t" \ @@ -747,6 +791,7 @@ register void *__gp __asm__("$29"); : : \ : __TLS_CALL_CLOBBERS); \ __result; }) +# endif #elif defined __powerpc__ && defined __powerpc64__ diff --git a/fedora/branch.mk b/fedora/branch.mk index 022b255fbb..90bf380a3c 100644 --- a/fedora/branch.mk +++ b/fedora/branch.mk @@ -1,5 +1,5 @@ # This file is updated automatically by Makefile. glibc-branch := fedora glibc-base := HEAD -fedora-sync-date := 2005-05-24 16:06 UTC -fedora-sync-tag := fedora-glibc-20050524T1606 +fedora-sync-date := 2005-06-20 15:30 UTC +fedora-sync-tag := fedora-glibc-20050620T1530 diff --git a/gmon/gmon.c b/gmon/gmon.c index 575adbcd8b..8eb0736193 100644 --- a/gmon/gmon.c +++ b/gmon/gmon.c @@ -171,7 +171,7 @@ __monstartup (lowpc, highpc) __moncontrol(1); } -weak_alias(__monstartup, monstartup) +weak_alias (__monstartup, monstartup) static void diff --git a/hesiod/README.hesiod b/hesiod/README.hesiod index 18cd5d45dd..259ce8d447 100644 --- a/hesiod/README.hesiod +++ b/hesiod/README.hesiod @@ -71,6 +71,14 @@ will want to create your own. It should look something like: rhs=.your.domain lhs=.ns + classes=in,hs + +The optional classes settings specifies which DNS classes Hesiod +should do lookups in. Possible values are IN (the preferred class) +and HS (the deprecated class, still used by some sites). +You may specify both classes separated by a comma to try one class +first and then the other if no entry is available in the first +class. The default value of the classes variable is `IN,HS'. The value of rhs can be overridden by the environment variable `HES_DOMAIN'. diff --git a/hesiod/hesiod.c b/hesiod/hesiod.c index 7fffb310f1..b73aa3ce94 100644 --- a/hesiod/hesiod.c +++ b/hesiod/hesiod.c @@ -83,6 +83,9 @@ hesiod_init(void **context) { ctx->LHS = NULL; ctx->RHS = NULL; ctx->res = NULL; + /* Set default query classes. */ + ctx->classes[0] = C_IN; + ctx->classes[1] = C_HS; configname = __secure_getenv("HESIOD_CONFIG"); if (!configname) @@ -234,15 +237,12 @@ hesiod_resolve(void *context, const char *name, const char *type) { return (NULL); } - if ((retvec = get_txt_records(ctx, C_IN, bindname))) { - free(bindname); - return (retvec); - } + retvec = get_txt_records(ctx, ctx->classes[0], bindname); + + if (retvec == NULL && (errno == ENOENT || errno == ECONNREFUSED) && ctx->classes[1]) + retvec = get_txt_records(ctx, ctx->classes[1], bindname); - if (errno != ENOENT && errno != ECONNREFUSED) - return (NULL); - retvec = get_txt_records(ctx, C_HS, bindname); free(bindname); return (retvec); } @@ -261,7 +261,6 @@ hesiod_free_list(void *context, char **list) { */ static int parse_config_file(struct hesiod_p *ctx, const char *filename) { - char *key, *data, *cp, **cpp; char buf[MAXDNAME+7]; FILE *fp; @@ -272,6 +271,9 @@ parse_config_file(struct hesiod_p *ctx, const char *filename) { free(ctx->RHS); free(ctx->LHS); ctx->RHS = ctx->LHS = 0; + /* Set default query classes. */ + ctx->classes[0] = C_IN; + ctx->classes[1] = C_HS; /* * Now open and parse the file... @@ -280,6 +282,8 @@ parse_config_file(struct hesiod_p *ctx, const char *filename) { return (-1); while (fgets(buf, sizeof(buf), fp) != NULL) { + char *key, *data, *cp, **cpp; + cp = buf; if (*cp == '#' || *cp == '\n' || *cp == '\r') continue; @@ -297,17 +301,36 @@ parse_config_file(struct hesiod_p *ctx, const char *filename) { cp++; *cp++ = '\0'; - if (strcmp(key, "lhs") == 0) + cpp = NULL; + if (strcasecmp(key, "lhs") == 0) cpp = &ctx->LHS; - else if (strcmp(key, "rhs") == 0) + else if (strcasecmp(key, "rhs") == 0) cpp = &ctx->RHS; - else - continue; - - *cpp = malloc(strlen(data) + 1); - if (!*cpp) - goto cleanup; - strcpy(*cpp, data); + if (cpp) { + *cpp = strdup(data); + if (!*cpp) + goto cleanup; + } else if (strcasecmp(key, "classes") == 0) { + int n = 0; + while (*data && n < 2) { + cp = strchrnul(data, ','); + if (*cp != '\0') + *cp++ = '\0'; + if (strcasecmp(data, "IN") == 0) + ctx->classes[n++] = C_IN; + else if (strcasecmp(data, "HS") == 0) + ctx->classes[n++] = C_HS; + data = cp; + } + if (n == 0) { + /* Restore the default. Better than + nother at all. */ + ctx->classes[0] = C_IN; + ctx->classes[1] = C_HS; + } else if (n == 1 + || ctx->classes[0] == ctx->classes[1]) + ctx->classes[1] = 0; + } } fclose(fp); return (0); diff --git a/hesiod/hesiod_p.h b/hesiod/hesiod_p.h index 71aca0976d..5010d71bc9 100644 --- a/hesiod/hesiod_p.h +++ b/hesiod/hesiod_p.h @@ -41,6 +41,7 @@ struct hesiod_p { void (*res_set)(struct hesiod_p *, struct __res_state *, void (*)(void *)); struct __res_state * (*res_get)(struct hesiod_p *); + int classes[2]; /* The class search order. */ }; #define MAX_HESRESP 1024 diff --git a/include/dlfcn.h b/include/dlfcn.h index 460c037ed1..9144dd2f3f 100644 --- a/include/dlfcn.h +++ b/include/dlfcn.h @@ -1,6 +1,7 @@ #ifndef _DLFCN_H #include <dlfcn/dlfcn.h> #include <link.h> /* For ElfW. */ +#include <stdbool.h> /* Internally used flag. */ #define __RTLD_DLOPEN 0x80000000 @@ -67,9 +68,10 @@ extern void *_dl_vsym (void *handle, const char *name, const char *version, and the error code passed is the return value and *OBJNAME is set to the object name which experienced the problems. ERRSTRING if nonzero points to a malloc'ed string which the caller has to free after use. - ARGS is passed as argument to OPERATE. */ + ARGS is passed as argument to OPERATE. MALLOCEDP is set to true only + if the returned string is allocated using the libc's malloc. */ extern int _dl_catch_error (const char **objname, const char **errstring, - void (*operate) (void *), + bool *mallocedp, void (*operate) (void *), void *args) internal_function; diff --git a/include/execinfo.h b/include/execinfo.h index 143a9cc4ce..840a0818cb 100644 --- a/include/execinfo.h +++ b/include/execinfo.h @@ -2,10 +2,12 @@ #include <debug/execinfo.h> extern int __backtrace (void **__array, int __size); +libc_hidden_proto (__backtrace) extern char **__backtrace_symbols (void *__const *__array, int __size); extern void __backtrace_symbols_fd (void *__const *__array, int __size, int __fd); +libc_hidden_proto (__backtrace_symbols_fd) #endif diff --git a/include/libintl.h b/include/libintl.h index 20083d4264..8875c9444f 100644 --- a/include/libintl.h +++ b/include/libintl.h @@ -11,6 +11,7 @@ extern char *__dgettext (__const char *__domainname, extern char *__dcgettext (__const char *__domainname, __const char *__msgid, int __category) __attribute_format_arg__ (2); +libc_hidden_proto (__dcgettext) extern char *__dcgettext_internal (__const char *__domainname, __const char *__msgid, int __category) __attribute_format_arg__ (2) diff --git a/include/string.h b/include/string.h index 738dd8e27c..532d5ed333 100644 --- a/include/string.h +++ b/include/string.h @@ -96,6 +96,7 @@ libc_hidden_builtin_proto (strcmp) libc_hidden_builtin_proto (strcpy) libc_hidden_builtin_proto (strcspn) libc_hidden_builtin_proto (strlen) +libc_hidden_builtin_proto (strnlen) libc_hidden_builtin_proto (strncmp) libc_hidden_builtin_proto (strncpy) libc_hidden_builtin_proto (strpbrk) diff --git a/intl/dcgettext.c b/intl/dcgettext.c index 55f81eb887..edf98b6973 100644 --- a/intl/dcgettext.c +++ b/intl/dcgettext.c @@ -1,5 +1,5 @@ /* Implementation of the dcgettext(3) function. - Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1995-2002, 2005 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 @@ -57,4 +57,5 @@ DCGETTEXT (domainname, msgid, category) /* Alias for function name in GNU C Library. */ INTDEF(__dcgettext) weak_alias (__dcgettext, dcgettext); +libc_hidden_def (__dcgettext) #endif diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 1ae8d3fd3a..d952f9c164 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,12 @@ +2005-06-14 Alan Modra <amodra@bigpond.net.au> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h (PSEUDO): + Invoke CGOTSETUP and CGOTRESTORE. + (CGOTSETUP, CGOTRESTORE): Define. + (SINGLE_THREAD_P): Add variant for new PLT/GOT layout. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S (__vfork): Avoid + bl into the GOT when HAVE_ASM_PPC_REL16. + 2005-05-30 Jakub Jelinek <jakub@redhat.com> * man/Makefile (SOURCES): Remove all man pages but diff --git a/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S b/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S index bf541439b5..7bbab5c59c 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S +++ b/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S @@ -101,4 +101,4 @@ L(call_fork): END(__vfork) libc_hidden_def(__vfork) -weak_alias(__vfork, vfork) +weak_alias (__vfork, vfork) diff --git a/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h index 2f7c546a4c..865da8e8ca 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h +++ b/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h @@ -37,6 +37,7 @@ stwu 1,-48(1); \ mflr 9; \ stw 9,52(1); \ + CGOTSETUP; \ DOCARGS_##args; /* save syscall args around CENABLE. */ \ CENABLE; \ stw 3,16(1); /* store CENABLE return value (MASK). */ \ @@ -50,6 +51,7 @@ lwz 4,52(1); \ lwz 0,12(1); /* restore CR/R3. */ \ lwz 3,8(1); \ + CGOTRESTORE; \ mtlr 4; \ mtcr 0; \ addi 1,1,48; @@ -75,6 +77,9 @@ # define DOCARGS_6 stw 8,40(1); DOCARGS_5 # define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5 +# define CGOTSETUP +# define CGOTRESTORE + # ifdef IS_IN_libpthread # define CENABLE bl __pthread_enable_asynccancel@local # define CDISABLE bl __pthread_disable_asynccancel@local @@ -84,6 +89,18 @@ # else # define CENABLE bl JUMPTARGET(__librt_enable_asynccancel) # define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel) +# if defined HAVE_AS_REL16 && defined PIC +# undef CGOTSETUP +# define CGOTSETUP \ + bcl 20,31,1f; \ + 1: stw 30,44(1); \ + mflr 30; \ + addis 30,30,_GLOBAL_OFFSET_TABLE-1b@ha; \ + addi 30,30,_GLOBAL_OFFSET_TABLE-1b@l +# undef CGOTRESTORE +# define CGOTRESTORE \ + lwz 30,44(1) +# endif # endif # ifdef HAVE_TLS_SUPPORT @@ -111,7 +128,17 @@ extern int __local_multiple_threads attribute_hidden; lwz 10,__local_multiple_threads@l(10); \ cmpwi 10,0 # else -# define SINGLE_THREAD_P \ +# ifdef HAVE_ASM_PPC_REL16 +# define SINGLE_THREAD_P \ + mflr 9; \ + bcl 20,31,1f; \ +1:mflr 10; \ + addis 10,10,__local_multiple_threads-1b@ha; \ + lwz 10,__local_multiple_threads-1b@l(10); \ + mtlr 9; \ + cmpwi 10,0 +# else +# define SINGLE_THREAD_P \ mflr 9; \ bl _GLOBAL_OFFSET_TABLE_@local-4; \ mflr 10; \ @@ -119,6 +146,7 @@ extern int __local_multiple_threads attribute_hidden; lwz 10,__local_multiple_threads@got(10); \ lwz 10,0(10); \ cmpwi 10,0 +# endif # endif # endif # endif diff --git a/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S b/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S index 920c45eee2..724d4cc541 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S +++ b/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S @@ -31,11 +31,19 @@ ENTRY (__vfork) #ifdef __NR_vfork # ifdef SHARED mflr 9 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr 10 + addis 10,10,__libc_pthread_functions-1b@ha + lwz 10,__libc_pthread_functions-1b@l(10) + mtlr 9 +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr 10 mtlr 9 lwz 10,__libc_pthread_functions@got(10) lwz 10,0(10) +# endif # else .weak pthread_create lis 10,pthread_create@ha diff --git a/locale/Makefile b/locale/Makefile index b493c1c9b9..2f2d2ba5f1 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -100,7 +100,6 @@ locale-CPPFLAGS := -DLOCALE_PATH='$(localepath)' \ CFLAGS-charmap.c = -Wno-write-strings -Wno-char-subscripts CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts CFLAGS-charmap-dir.c = -Wno-write-strings -CFLAGS-loadlocale.c = $(fno-unit-at-a-time) # This makes sure -DNOT_IN_libc is passed for all these modules. cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \ diff --git a/localedata/ChangeLog b/localedata/ChangeLog index d5b6cdd26e..d375eb62d9 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,9 @@ +2005-05-28 Jakub Jelinek <jakub@redhat.com> + + [BZ #622] + * locales/pa_IN (am_pm): Fix typos. + Patch by Denis Barbier <barbier@linuxfr.org>. + 2005-05-22 Ulrich Drepper <drepper@redhat.com> * locales/mn_MN: Update. Patch by Sanlig Badral <s_badral@yahoo.com>. diff --git a/localedata/locales/pa_IN b/localedata/locales/pa_IN index 96fa896e85..f7b0bf2173 100644 --- a/localedata/locales/pa_IN +++ b/localedata/locales/pa_IN @@ -122,8 +122,8 @@ mon "<U0A1C><U0A28><U0A35><U0A30><U0A40>";/ % % Equivalent of AM PM -am_pm "<U0A38><U0035><U0A47><U0A30><U0A47>";/ - "<U0A36><U0A3E><U002E>" +am_pm "<U0A38><U0A35><U0A47><U0A30><U0A47>";/ + "<U0A36><U0A3E><U0A2E>" % % Appropriate date and time representation diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 0452afe8b5..470d4b9887 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,16 @@ +2005-06-14 Alan Modra <amodra@bigpond.net.au> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h (PSEUDO): + Invoke CGOTSETUP and CGOTRESTORE. + (CGOTSETUP, CGOTRESTORE): Define. + +2005-05-29 Richard Henderson <rth@redhat.com> + + * tst-cancel4.c (WRITE_BUFFER_SIZE): New. + (tf_write, tf_writev): Use it. + (do_test): Use socketpair instead of pipe. Set SO_SNDBUF to + the system minimum. + 2005-05-23 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h index 393c171eef..84acf38434 100644 --- a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h @@ -45,6 +45,7 @@ mflr 9; \ stw 9,52(1); \ cfi_offset (lr, 4); \ + CGOTSETUP; \ DOCARGS_##args; /* save syscall args around CENABLE. */ \ CENABLE; \ stw 3,16(1); /* store CENABLE return value (MASK). */ \ @@ -58,6 +59,7 @@ lwz 4,52(1); \ lwz 0,12(1); /* restore CR/R3. */ \ lwz 3,8(1); \ + CGOTRESTORE; \ mtlr 4; \ mtcr 0; \ addi 1,1,48; \ @@ -84,6 +86,9 @@ # define DOCARGS_6 stw 8,40(1); DOCARGS_5 # define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5 +# define CGOTSETUP +# define CGOTRESTORE + # ifdef IS_IN_libpthread # define CENABLE bl __pthread_enable_asynccancel@local # define CDISABLE bl __pthread_disable_asynccancel@local @@ -93,6 +98,18 @@ # elif defined IS_IN_librt # define CENABLE bl JUMPTARGET(__librt_enable_asynccancel) # define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel) +# if defined HAVE_AS_REL16 && defined PIC +# undef CGOTSETUP +# define CGOTSETUP \ + bcl 20,31,1f; \ + 1: stw 30,44(1); \ + mflr 30; \ + addis 30,30,_GLOBAL_OFFSET_TABLE-1b@ha; \ + addi 30,30,_GLOBAL_OFFSET_TABLE-1b@l +# undef CGOTRESTORE +# define CGOTRESTORE \ + lwz 30,44(1) +# endif # else # error Unsupported library # endif diff --git a/nptl/tst-cancel4.c b/nptl/tst-cancel4.c index c3e527fd1c..cb7619688e 100644 --- a/nptl/tst-cancel4.c +++ b/nptl/tst-cancel4.c @@ -84,6 +84,8 @@ static pthread_barrier_t b2; # define IPC_ADDVAL 0 #endif +#define WRITE_BUFFER_SIZE 4096 + /* Cleanup handling test. */ static int cl_called; @@ -220,7 +222,7 @@ tf_write (void *arg) ssize_t s; pthread_cleanup_push (cl, NULL); - char buf[100000]; + char buf[WRITE_BUFFER_SIZE]; memset (buf, '\0', sizeof (buf)); s = write (fd, buf, sizeof (buf)); @@ -266,7 +268,7 @@ tf_writev (void *arg) ssize_t s; pthread_cleanup_push (cl, NULL); - char buf[100000]; + char buf[WRITE_BUFFER_SIZE]; memset (buf, '\0', sizeof (buf)); struct iovec iov[1] = { [0] = { .iov_base = buf, .iov_len = sizeof (buf) } }; s = writev (fd, iov, 1); @@ -2043,11 +2045,29 @@ static struct static int do_test (void) { - if (pipe (fds) != 0) + int val; + socklen_t len; + + if (socketpair (AF_UNIX, SOCK_STREAM, PF_UNIX, fds) != 0) + { + perror ("socketpair"); + exit (1); + } + + val = 1; + len = sizeof(val); + setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)); + if (getsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, &len) < 0) + { + perror ("getsockopt"); + exit (1); + } + if (val >= WRITE_BUFFER_SIZE) { - puts ("pipe failed"); + puts ("minimum write buffer size too large"); exit (1); } + setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)); int result = 0; size_t cnt; diff --git a/nscd/Makefile b/nscd/Makefile index 7e0c4eb30a..2ebd90b989 100644 --- a/nscd/Makefile +++ b/nscd/Makefile @@ -53,8 +53,12 @@ endif all-nscd-modules := $(nscd-modules) selinux ifeq (yes,$(have-selinux)) +ifeq (yes,$(have-libaudit)) +libaudit = -laudit +endif + nscd-modules += selinux -selinux-LIBS := -lselinux +selinux-LIBS := -lselinux $(libaudit) endif LDLIBS-nscd = $(selinux-LIBS) diff --git a/nscd/selinux.c b/nscd/selinux.c index f57f0920ae..4dc4df3648 100644 --- a/nscd/selinux.c +++ b/nscd/selinux.c @@ -18,6 +18,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include "config.h" #include <error.h> #include <errno.h> #include <libintl.h> @@ -30,6 +31,9 @@ #include <selinux/avc.h> #include <selinux/flask.h> #include <selinux/selinux.h> +#ifdef HAVE_LIBAUDIT +#include <libaudit.h> +#endif #include "dbg_log.h" #include "selinux.h" @@ -66,6 +70,11 @@ static struct avc_entry_ref aeref; /* Thread to listen for SELinux status changes via netlink. */ static pthread_t avc_notify_thread; +#ifdef HAVE_LIBAUDIT +/* Prototype for supporting the audit daemon */ +static void log_callback (const char *fmt, ...); +#endif + /* Prototypes for AVC callback functions. */ static void *avc_create_thread (void (*run) (void)); static void avc_stop_thread (void *thread); @@ -77,7 +86,11 @@ static void avc_free_lock (void *lock); /* AVC callback structures for use in avc_init. */ static const struct avc_log_callback log_cb = { +#ifdef HAVE_LIBAUDIT + .func_log = log_callback, +#else .func_log = dbg_log, +#endif .func_audit = NULL }; static const struct avc_thread_callback thread_cb = @@ -93,6 +106,30 @@ static const struct avc_lock_callback lock_cb = .func_free_lock = avc_free_lock }; +#ifdef HAVE_LIBAUDIT +/* The audit system's netlink socket descriptor */ +static int audit_fd = -1; + +/* When an avc denial occurs, log it to audit system */ +static void +log_callback (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + audit_log_avc (audit_fd, AUDIT_USER_AVC, fmt, ap); + va_end (ap); +} + +/* Initialize the connection to the audit system */ +static void +audit_init (void) +{ + audit_fd = audit_open (); + if (audit_fd < 0) + dbg_log (_("Failed opening connection to the audit subsystem")); +} +#endif /* HAVE_LIBAUDIT */ /* Determine if we are running on an SELinux kernel. Set selinux_enabled to the result. */ @@ -182,6 +219,9 @@ nscd_avc_init (void) error (EXIT_FAILURE, errno, _("Failed to start AVC")); else dbg_log (_("Access Vector Cache (AVC) started")); +#ifdef HAVE_LIBAUDIT + audit_init (); +#endif } @@ -262,6 +302,9 @@ void nscd_avc_destroy (void) { avc_destroy (); +#ifdef HAVE_LIBAUDIT + audit_close (audit_fd); +#endif } #endif /* HAVE_SELINUX */ diff --git a/posix/tst-mmap.c b/posix/tst-mmap.c index 355a784124..c03acf5e16 100644 --- a/posix/tst-mmap.c +++ b/posix/tst-mmap.c @@ -30,7 +30,7 @@ main (void) for (c = 0; c < sizeof (buf); ++c) buf[c] = '0' + (c % 10); - for (c = 0; c < 20; ++c) + for (c = 0; c < (ps * 4) / sizeof (buf); ++c) if (fwrite (buf, 1, sizeof (buf), fp) != sizeof (buf)) { printf ("`fwrite' failed: %m\n"); @@ -40,7 +40,7 @@ main (void) assert (ps + 1000 < c * sizeof (buf)); /* First try something which is not allowed: map at an offset which is - not module the pagesize. */ + not modulo the pagesize. */ ptr = mmap (NULL, 1000, PROT_READ, MAP_SHARED, fd, ps - 1); if (ptr != MAP_FAILED) { diff --git a/sysdeps/alpha/div_libc.h b/sysdeps/alpha/div_libc.h index 62b4470355..b731b02e25 100644 --- a/sysdeps/alpha/div_libc.h +++ b/sysdeps/alpha/div_libc.h @@ -34,6 +34,12 @@ #define RV t12 #define RA t9 +/* The secureplt format does not allow the division routines to be called + via plt; there aren't enough registers free to be clobbered. Avoid + setting the symbol type to STT_FUNC, so that the linker won't be tempted + to create a plt entry. */ +#define funcnoplt notype + /* None of these functions should use implicit anything. */ .set nomacro .set noat diff --git a/sysdeps/alpha/divl.S b/sysdeps/alpha/divl.S index 408d66db00..9bac0450d0 100644 --- a/sysdeps/alpha/divl.S +++ b/sysdeps/alpha/divl.S @@ -36,7 +36,7 @@ .text .align 4 .globl __divl - .type __divl, @function + .type __divl, @funcnoplt .usepv __divl, no cfi_startproc diff --git a/sysdeps/alpha/divq.S b/sysdeps/alpha/divq.S index 7f245ac056..d2ed2c5af6 100644 --- a/sysdeps/alpha/divq.S +++ b/sysdeps/alpha/divq.S @@ -43,7 +43,7 @@ .text .align 4 .globl __divq - .type __divq, @function + .type __divq, @funcnoplt .usepv __divq, no cfi_startproc diff --git a/sysdeps/alpha/divqu.S b/sysdeps/alpha/divqu.S index fc00fa133c..f2a8a4d533 100644 --- a/sysdeps/alpha/divqu.S +++ b/sysdeps/alpha/divqu.S @@ -43,7 +43,7 @@ .text .align 4 .globl __divqu - .type __divqu, @function + .type __divqu, @funcnoplt .usepv __divqu, no cfi_startproc diff --git a/sysdeps/alpha/dl-dtprocnum.h b/sysdeps/alpha/dl-dtprocnum.h new file mode 100644 index 0000000000..67845cdd62 --- /dev/null +++ b/sysdeps/alpha/dl-dtprocnum.h @@ -0,0 +1,3 @@ +/* Number of extra dynamic section entries for this architecture. By + default there are none. */ +#define DT_THISPROCNUM DT_ALPHA_NUM diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h index 173a4111f8..88c357ea07 100644 --- a/sysdeps/alpha/dl-machine.h +++ b/sysdeps/alpha/dl-machine.h @@ -33,6 +33,9 @@ where the dynamic linker should not map anything. */ #define ELF_MACHINE_USER_ADDRESS_MASK 0x120000000UL +/* Translate a processor specific dynamic tag to the index in l_info array. */ +#define DT_ALPHA(x) (DT_ALPHA_##x - DT_LOPROC + DT_NUM) + /* Return nonzero iff ELF header is compatible with the running host. */ static inline int elf_machine_matches_host (const Elf64_Ehdr *ehdr) @@ -55,105 +58,74 @@ elf_machine_dynamic (void) } /* Return the run-time load address of the shared object. */ + static inline Elf64_Addr elf_machine_load_address (void) { - /* NOTE: While it is generally unfriendly to put data in the text - segment, it is only slightly less so when the "data" is an - instruction. While we don't have to worry about GLD just yet, an - optimizing linker might decide that our "data" is an unreachable - instruction and throw it away -- with the right switches, DEC's - linker will do this. What ought to happen is we should add - something to GAS to allow us access to the new GPREL_HI32/LO32 - relocation types stolen from OSF/1 3.0. */ - /* This code relies on the fact that BRADDR relocations do not - appear in dynamic relocation tables. Not that that would be very - useful anyway -- br/bsr has a 4MB range and the shared libraries - are usually many many terabytes away. */ - - Elf64_Addr dot; - long int zero_disp; - - asm("br %0, 1f\n" - "0:\n\t" - "br $0, 2f\n" - "1:\n\t" - ".section\t.data\n" - "2:\n\t" - ".quad 0b\n\t" - ".previous" - : "=r"(dot)); - - zero_disp = *(int *) dot; - zero_disp = (zero_disp << 43) >> 41; - - return dot - *(Elf64_Addr *) (dot + 4 + zero_disp); + /* This relies on the compiler using gp-relative addresses for static symbols. */ + static void *dot = ˙ + return (void *)&dot - dot; } /* Set up the loaded object described by L so its unrelocated PLT entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *map, int lazy, int profile) { - Elf64_Addr plt; - extern void _dl_runtime_resolve (void); - extern void _dl_runtime_profile (void); + extern char _dl_runtime_resolve_new[] attribute_hidden; + extern char _dl_runtime_profile_new[] attribute_hidden; + extern char _dl_runtime_resolve_old[] attribute_hidden; + extern char _dl_runtime_profile_old[] attribute_hidden; + + struct pltgot { + char *resolve; + struct link_map *link; + }; + + struct pltgot *pg; + long secureplt; + char *resolve; + + if (map->l_info[DT_JMPREL] == 0 || !lazy) + return lazy; + + /* Check to see if we're using the read-only plt form. */ + secureplt = map->l_info[DT_ALPHA(PLTRO)] != 0; + + /* If the binary uses the read-only secure plt format, PG points to + the .got.plt section, which is the right place for ld.so to place + its hooks. Otherwise, PG is currently pointing at the start of + the plt; the hooks go at offset 16. */ + pg = (struct pltgot *) D_PTR (map, l_info[DT_PLTGOT]); + pg += !secureplt; + + /* This function will be called to perform the relocation. They're + not declared as functions to convince the compiler to use gp + relative relocations for them. */ + if (secureplt) + resolve = _dl_runtime_resolve_new; + else + resolve = _dl_runtime_resolve_old; - if (l->l_info[DT_JMPREL] && lazy) + if (__builtin_expect (profile, 0)) { - /* The GOT entries for the functions in the PLT have not been - filled in yet. Their initial contents are directed to the - PLT which arranges for the dynamic linker to be called. */ - plt = D_PTR (l, l_info[DT_PLTGOT]); - - /* This function will be called to perform the relocation. */ - if (__builtin_expect (profile, 0)) - { - *(Elf64_Addr *)(plt + 16) = (Elf64_Addr) &_dl_runtime_profile; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - { - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - } + if (secureplt) + resolve = _dl_runtime_profile_new; else - *(Elf64_Addr *)(plt + 16) = (Elf64_Addr) &_dl_runtime_resolve; - - /* Identify this shared object */ - *(Elf64_Addr *)(plt + 24) = (Elf64_Addr) l; + resolve = _dl_runtime_profile_old; - /* If the first instruction of the plt entry is not - "br $28, plt0", we have to reinitialize .plt for lazy relocation. */ - if (*(unsigned int *)(plt + 32) != 0xc39ffff7) + if (GLRO(dl_profile) && _dl_name_match_p (GLRO(dl_profile), map)) { - unsigned int val = 0xc39ffff7; - unsigned int *slot, *end; - const Elf64_Rela *rela = (const Elf64_Rela *) - D_PTR (l, l_info[DT_JMPREL]); - Elf64_Addr l_addr = l->l_addr; - - /* br t12,.+4; ldq t12,12(t12); nop; jmp t12,(t12),.+4 */ - *(unsigned long *)plt = 0xa77b000cc3600000; - *(unsigned long *)(plt + 8) = 0x6b7b000047ff041f; - slot = (unsigned int *)(plt + 32); - end = (unsigned int *)(plt + 32 - + l->l_info[DT_PLTRELSZ]->d_un.d_val / 2); - while (slot < end) - { - /* br at,.plt+0 */ - *slot = val; - *(Elf64_Addr *) rela->r_offset = (Elf64_Addr) slot - l_addr; - val -= 3; - slot += 3; - ++rela; - } + /* This is the object we are looking for. Say that we really + want profiling and the timers are started. */ + GL(dl_profile_map) = map; } } + pg->resolve = resolve; + pg->link = map; + return lazy; } @@ -280,7 +252,7 @@ $fixup_stack: \n\ /* Fix up the instructions of a PLT entry to invoke the function rather than the dynamic linker. */ static inline Elf64_Addr -elf_machine_fixup_plt (struct link_map *l, lookup_t t, +elf_machine_fixup_plt (struct link_map *map, lookup_t t, const Elf64_Rela *reloc, Elf64_Addr *got_addr, Elf64_Addr value) { @@ -291,10 +263,16 @@ elf_machine_fixup_plt (struct link_map *l, lookup_t t, /* Store the value we are going to load. */ *got_addr = value; + /* If this binary uses the read-only secure plt format, we're done. */ + if (map->l_info[DT_ALPHA(PLTRO)]) + return value; + + /* Otherwise we have to modify the plt entry in place to do the branch. */ + /* Recover the PLT entry address by calculating reloc's index into the .rela.plt, and finding that entry in the .plt. */ - rela_plt = (void *) D_PTR (l, l_info[DT_JMPREL]); - plte = (void *) (D_PTR (l, l_info[DT_PLTGOT]) + 32); + rela_plt = (const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL]); + plte = (Elf64_Word *) (D_PTR (map, l_info[DT_PLTGOT]) + 32); plte += 3 * (reloc - rela_plt); /* Find the displacement from the plt entry to the function. */ diff --git a/sysdeps/alpha/dl-trampoline.S b/sysdeps/alpha/dl-trampoline.S index 42350836ef..c52efbb3bc 100644 --- a/sysdeps/alpha/dl-trampoline.S +++ b/sysdeps/alpha/dl-trampoline.S @@ -21,13 +21,202 @@ .set noat - .globl _dl_runtime_resolve - .ent _dl_runtime_resolve +.macro savei regno, offset + stq $\regno, \offset($30) + cfi_rel_offset(\regno, \offset) +.endm + +.macro savef regno, offset + stt $f\regno, \offset($30) + cfi_rel_offset(\regno+32, \offset) +.endm + + .align 4 + .globl _dl_runtime_resolve_new + .ent _dl_runtime_resolve_new + +#undef FRAMESIZE +#define FRAMESIZE 14*8 + +_dl_runtime_resolve_new: + .frame $30, FRAMESIZE, $26, 0 + .mask 0x4000000, 0 + + ldah $29, 0($27) !gpdisp!1 + lda $30, -FRAMESIZE($30) + stq $26, 0*8($30) + stq $16, 2*8($30) + + stq $17, 3*8($30) + lda $29, 0($29) !gpdisp!1 + stq $18, 4*8($30) + mov $28, $16 /* link_map from .got.plt */ + + stq $19, 5*8($30) + mov $25, $17 /* offset of reloc entry */ + stq $20, 6*8($30) + mov $26, $18 /* return address */ + + stq $21, 7*8($30) + stt $f16, 8*8($30) + stt $f17, 9*8($30) + stt $f18, 10*8($30) + + stt $f19, 11*8($30) + stt $f20, 12*8($30) + stt $f21, 13*8($30) + .prologue 2 + + bsr $26, _dl_fixup !samegp + mov $0, $27 + + ldq $26, 0*8($30) + ldq $16, 2*8($30) + ldq $17, 3*8($30) + ldq $18, 4*8($30) + ldq $19, 5*8($30) + ldq $20, 6*8($30) + ldq $21, 7*8($30) + ldt $f16, 8*8($30) + ldt $f17, 9*8($30) + ldt $f18, 10*8($30) + ldt $f19, 11*8($30) + ldt $f20, 12*8($30) + ldt $f21, 13*8($30) + lda $30, FRAMESIZE($30) + jmp $31, ($27), 0 + .end _dl_runtime_resolve_new + + .globl _dl_runtime_profile_new + .type _dl_runtime_profile_new, @function + +#undef FRAMESIZE +#define FRAMESIZE 20*8 + + /* We save the registers in a different order than desired by + .mask/.fmask, so we have to use explicit cfi directives. */ + cfi_startproc + +_dl_runtime_profile_new: + ldah $29, 0($27) !gpdisp!2 + lda $30, -FRAMESIZE($30) + savei 26, 0*8 + stq $16, 2*8($30) + + stq $17, 3*8($30) + lda $29, 0($29) !gpdisp!2 + stq $18, 4*8($30) + lda $1, FRAMESIZE($30) /* incoming sp value */ + + stq $1, 1*8($30) + stq $19, 5*8($30) + stq $20, 6*8($30) + mov $28, $16 /* link_map from .got.plt */ + + stq $21, 7*8($30) + mov $25, $17 /* offset of reloc entry */ + stt $f16, 8*8($30) + mov $26, $18 /* return address */ + + stt $f17, 9*8($30) + mov $30, $19 /* La_alpha_regs address */ + stt $f18, 10*8($30) + lda $20, 14*8($30) /* framesize address */ + + stt $f19, 11*8($30) + stt $f20, 12*8($30) + stt $f21, 13*8($30) + stq $28, 16*8($30) + stq $25, 17*8($30) + + bsr $26, _dl_profile_fixup !samegp + mov $0, $27 + + /* Discover if we're wrapping this call. */ + ldq $18, 14*8($30) + bge $18, 1f + + ldq $26, 0*8($30) + ldq $16, 2*8($30) + ldq $17, 3*8($30) + ldq $18, 4*8($30) + ldq $19, 5*8($30) + ldq $20, 6*8($30) + ldq $21, 7*8($30) + ldt $f16, 8*8($30) + ldt $f17, 9*8($30) + ldt $f18, 10*8($30) + ldt $f19, 11*8($30) + ldt $f20, 12*8($30) + ldt $f21, 13*8($30) + lda $30, FRAMESIZE($30) + jmp $31, ($27), 0 + +1: + /* Create a frame pointer and allocate a new argument frame. */ + savei 15, 15*8 + mov $30, $15 + cfi_def_cfa_register (15) + addq $18, 15, $18 + bic $18, 15, $18 + subq $30, $18, $30 + + /* Save the call destination around memcpy. */ + stq $0, 14*8($30) + + /* Copy the stack arguments into place. */ + lda $16, 0($30) + lda $17, FRAMESIZE($15) + jsr $26, memcpy + ldgp $29, 0($26) + + /* Reload the argument registers. */ + ldq $27, 14*8($30) + ldq $16, 2*8($15) + ldq $17, 3*8($15) + ldq $18, 4*8($15) + ldq $19, 5*8($15) + ldq $20, 6*8($15) + ldq $21, 7*8($15) + ldt $f16, 8*8($15) + ldt $f17, 9*8($15) + ldt $f18, 10*8($15) + ldt $f19, 11*8($15) + ldt $f20, 12*8($15) + ldt $f21, 13*8($15) + + jsr $26, ($27), 0 + ldgp $29, 0($26) + + /* Set up for call to _dl_call_pltexit. */ + ldq $16, 16*8($15) + ldq $17, 17*8($15) + stq $0, 16*8($15) + lda $18, 0($15) + stq $1, 17*8($15) + lda $19, 16*8($15) + stt $f0, 18*8($15) + stt $f1, 19*8($15) + bsr $26, _dl_call_pltexit !samegp + + mov $15, $30 + cfi_def_cfa_register (30) + ldq $26, 0($30) + ldq $15, 15*8($30) + lda $30, FRAMESIZE($30) + ret + + cfi_endproc + .size _dl_runtime_profile_new, .-_dl_runtime_profile_new + + .align 4 + .globl _dl_runtime_resolve_old + .ent _dl_runtime_resolve_old #undef FRAMESIZE #define FRAMESIZE 44*8 -_dl_runtime_resolve: +_dl_runtime_resolve_old: lda $30, -FRAMESIZE($30) .frame $30, FRAMESIZE, $26 /* Preserve all registers that C normally doesn't. */ @@ -146,30 +335,21 @@ _dl_runtime_resolve: lda $30, FRAMESIZE($30) jmp $31, ($27) - .end _dl_runtime_resolve + .end _dl_runtime_resolve_old - .globl _dl_runtime_profile - .usepv _dl_runtime_profile, no - .type _dl_runtime_profile, @function + .globl _dl_runtime_profile_old + .usepv _dl_runtime_profile_old, no + .type _dl_runtime_profile_old, @function /* We save the registers in a different order than desired by .mask/.fmask, so we have to use explicit cfi directives. */ cfi_startproc -.macro savei regno, offset - stq $\regno, \offset($30) - cfi_rel_offset(\regno, \offset) -.endm - -.macro savef regno, offset - stt $f\regno, \offset($30) - cfi_rel_offset(\regno+32, \offset) -.endm - #undef FRAMESIZE #define FRAMESIZE 50*8 -_dl_runtime_profile: + .align 4 +_dl_runtime_profile_old: lda $30, -FRAMESIZE($30) cfi_adjust_cfa_offset (FRAMESIZE) @@ -340,8 +520,8 @@ _dl_runtime_profile: ldgp $29, 0($26) /* Set up for call to _dl_call_pltexit. */ - ldq $16, 48($15) - ldq $17, 49($15) + ldq $16, 48*8($15) + ldq $17, 49*8($15) stq $0, 46*8($15) lda $18, 0($15) stq $1, 47*8($15) @@ -358,4 +538,4 @@ _dl_runtime_profile: ret cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile + .size _dl_runtime_profile_old, .-_dl_runtime_profile_old diff --git a/sysdeps/alpha/elf/start.S b/sysdeps/alpha/elf/start.S index 3c2bc59adc..ebe14b4c8e 100644 --- a/sysdeps/alpha/elf/start.S +++ b/sysdeps/alpha/elf/start.S @@ -77,7 +77,7 @@ _start: .end _start /* For ECOFF backwards compatibility. */ -weak_alias(_start, __start) +weak_alias (_start, __start) /* Define a symbol for the first piece of initialized data. */ .data diff --git a/sysdeps/alpha/htonl.S b/sysdeps/alpha/htonl.S index eb4fbd2ab4..ef2a575995 100644 --- a/sysdeps/alpha/htonl.S +++ b/sysdeps/alpha/htonl.S @@ -41,4 +41,4 @@ ENTRY(htonl) END(htonl) -weak_alias(htonl, ntohl) +weak_alias (htonl, ntohl) diff --git a/sysdeps/alpha/htons.S b/sysdeps/alpha/htons.S index f1ef754814..7c6270226d 100644 --- a/sysdeps/alpha/htons.S +++ b/sysdeps/alpha/htons.S @@ -37,4 +37,4 @@ ENTRY(htons) END(htons) -weak_alias(htons, ntohs) +weak_alias (htons, ntohs) diff --git a/sysdeps/alpha/reml.S b/sysdeps/alpha/reml.S index bfc3be5c3f..ae291b0505 100644 --- a/sysdeps/alpha/reml.S +++ b/sysdeps/alpha/reml.S @@ -38,7 +38,7 @@ .text .align 4 .globl __reml - .type __reml, @function + .type __reml, @funcnoplt .usepv __reml, no cfi_startproc diff --git a/sysdeps/alpha/remq.S b/sysdeps/alpha/remq.S index 645a834453..64e958bb95 100644 --- a/sysdeps/alpha/remq.S +++ b/sysdeps/alpha/remq.S @@ -43,7 +43,7 @@ .text .align 4 .globl __remq - .type __remq, @function + .type __remq, @funcnoplt .usepv __remq, no cfi_startproc diff --git a/sysdeps/alpha/remqu.S b/sysdeps/alpha/remqu.S index bfa78dff57..dcc1c88b3c 100644 --- a/sysdeps/alpha/remqu.S +++ b/sysdeps/alpha/remqu.S @@ -43,7 +43,7 @@ .text .align 4 .globl __remqu - .type __remqu, @function + .type __remqu, @funcnoplt .usepv __remqu, no cfi_startproc diff --git a/sysdeps/generic/backtrace.c b/sysdeps/generic/backtrace.c index 6a3336c6d2..f2d52372d5 100644 --- a/sysdeps/generic/backtrace.c +++ b/sysdeps/generic/backtrace.c @@ -1,5 +1,5 @@ /* Return backtrace of current program state. Generic version. - Copyright (C) 1998, 2000, 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -91,3 +91,4 @@ __backtrace (array, size) return cnt; } weak_alias (__backtrace, backtrace) +libc_hidden_def (__backtrace) diff --git a/sysdeps/generic/backtracesymsfd.c b/sysdeps/generic/backtracesymsfd.c index c704362ec7..b01f8b0094 100644 --- a/sysdeps/generic/backtracesymsfd.c +++ b/sysdeps/generic/backtracesymsfd.c @@ -1,5 +1,5 @@ /* Write formatted list with names for addresses in backtrace to a file. - Copyright (C) 1998, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -61,3 +61,4 @@ __backtrace_symbols_fd (array, size, fd) } } weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd) +libc_hidden_def (__backtrace_symbols_fd) diff --git a/sysdeps/generic/elf/backtracesymsfd.c b/sysdeps/generic/elf/backtracesymsfd.c index 16df53883c..6754d145b0 100644 --- a/sysdeps/generic/elf/backtracesymsfd.c +++ b/sysdeps/generic/elf/backtracesymsfd.c @@ -1,5 +1,5 @@ /* Write formatted list with names for addresses in backtrace to a file. - Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -107,3 +107,4 @@ __backtrace_symbols_fd (array, size, fd) } } weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd) +libc_hidden_def (__backtrace_symbols_fd) diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 2e3254356b..a24c2ff58e 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -674,7 +674,7 @@ struct rtld_global_ro void (*_dl_debug_printf) (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2))); int (internal_function *_dl_catch_error) (const char **, const char **, - void (*) (void *), void *); + bool *, void (*) (void *), void *); void (internal_function *_dl_signal_error) (int, const char *, const char *, const char *); void (*_dl_mcount) (ElfW(Addr) frompc, ElfW(Addr) selfpc); @@ -754,10 +754,6 @@ extern char **_dl_argv_internal attribute_hidden # define rtld_progname _dl_argv[0] #endif -/* The array with message we print as a last resort. */ -extern const char _dl_out_of_memory[]; -rtld_hidden_proto (_dl_out_of_memory) - /* Flag set at startup and cleared when the last initializer has run. */ extern int _dl_starting_up; weak_extern (_dl_starting_up) diff --git a/sysdeps/generic/strnlen.c b/sysdeps/generic/strnlen.c index c83520e349..454257b2bc 100644 --- a/sysdeps/generic/strnlen.c +++ b/sysdeps/generic/strnlen.c @@ -1,5 +1,5 @@ /* Find the length of STRING, but scan at most MAXLEN characters. - Copyright (C) 1991, 1993, 1997, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1991,1993,1997,2000,2001,2005 Free Software Foundation, Inc. Contributed by Jakub Jelinek <jakub@redhat.com>. Based on strlen written by Torbjorn Granlund (tege@sics.se), @@ -158,3 +158,4 @@ __strnlen (const char *str, size_t maxlen) return char_ptr - str; } weak_alias (__strnlen, strnlen) +libc_hidden_def (strnlen) diff --git a/sysdeps/i386/backtrace.c b/sysdeps/i386/backtrace.c index cb7530396b..8b61913dde 100644 --- a/sysdeps/i386/backtrace.c +++ b/sysdeps/i386/backtrace.c @@ -1,5 +1,5 @@ /* Return backtrace of current program state. - Copyright (C) 1998, 2000, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -141,3 +141,4 @@ __backtrace (array, size) return arg.cnt != -1 ? arg.cnt : 0; } weak_alias (__backtrace, backtrace) +libc_hidden_def (__backtrace) diff --git a/sysdeps/i386/i386-mcount.S b/sysdeps/i386/i386-mcount.S index 727d7a0ab8..8b11adb2e3 100644 --- a/sysdeps/i386/i386-mcount.S +++ b/sysdeps/i386/i386-mcount.S @@ -52,4 +52,4 @@ C_LABEL(_mcount) ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) #undef mcount -weak_alias(_mcount, mcount) +weak_alias (_mcount, mcount) diff --git a/sysdeps/i386/sysdep.h b/sysdeps/i386/sysdep.h index 56ba304328..2739cb00b3 100644 --- a/sysdeps/i386/sysdep.h +++ b/sysdeps/i386/sysdep.h @@ -131,6 +131,33 @@ lose: SYSCALL_PIC_SETUP \ 0: popl %ebx; \ cfi_adjust_cfa_offset (-4); \ addl $_GLOBAL_OFFSET_TABLE+[.-0b], %ebx; + +# ifndef HAVE_HIDDEN +# define SETUP_PIC_REG(reg) \ + call 1f; \ + .subsection 1; \ +1:movl (%esp), %e##reg; \ + ret; \ + .previous +# else +# define SETUP_PIC_REG(reg) \ + .ifndef __i686.get_pc_thunk.reg; \ + .section .gnu.linkonce.t.__i686.get_pc_thunk.reg,"ax",@progbits; \ + .globl __i686.get_pc_thunk.reg; \ + .hidden __i686.get_pc_thunk.reg; \ + .type __i686.get_pc_thunk.reg,@function; \ +__i686.get_pc_thunk.reg: \ + movl (%esp), %e##reg; \ + ret; \ + .size __i686.get_pc_thunk.reg, . - __i686.get_pc_thunk.reg; \ + .previous; \ + .endif; \ + call __i686.get_pc_thunk.reg +# endif + +# define LOAD_PIC_REG(reg) \ + SETUP_PIC_REG(reg); addl $_GLOBAL_OFFSET_TABLE_, %e##reg + #else #define JUMPTARGET(name) name #define SYSCALL_PIC_SETUP /* Nothing. */ diff --git a/sysdeps/ia64/backtrace.c b/sysdeps/ia64/backtrace.c index efacccce15..3f2b75ec03 100644 --- a/sysdeps/ia64/backtrace.c +++ b/sysdeps/ia64/backtrace.c @@ -1,5 +1,5 @@ /* Return backtrace of current program state. - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -90,3 +90,4 @@ __backtrace (array, size) return arg.cnt != -1 ? arg.cnt : 0; } weak_alias (__backtrace, backtrace) +libc_hidden_def (__backtrace) diff --git a/sysdeps/ia64/fpu/e_lgamma_r.c b/sysdeps/ia64/fpu/e_lgamma_r.c index ebc90fc8f3..cb9efbfe02 100644 --- a/sysdeps/ia64/fpu/e_lgamma_r.c +++ b/sysdeps/ia64/fpu/e_lgamma_r.c @@ -60,12 +60,12 @@ double __ieee754_lgamma_r(double x, int* signgam) { return __libm_lgamma(x, signgam, sizeof(*signgam)); } -weak_alias(__ieee754_lgamma_r, lgamma_r) +weak_alias (__ieee754_lgamma_r, lgamma_r) #ifndef _LIBC double __ieee754_gamma_r(double x, int* signgam) { return __libm_lgamma(x, signgam, sizeof(*signgam)); } -weak_alias(__ieee754_gamma_r, gamma_r) +weak_alias (__ieee754_gamma_r, gamma_r) #endif diff --git a/sysdeps/ia64/fpu/e_lgammaf_r.c b/sysdeps/ia64/fpu/e_lgammaf_r.c index 4efa84064c..44911aeabd 100644 --- a/sysdeps/ia64/fpu/e_lgammaf_r.c +++ b/sysdeps/ia64/fpu/e_lgammaf_r.c @@ -60,12 +60,12 @@ float __ieee754_lgammaf_r(float x, int* signgam) { return __libm_lgammaf(x, signgam, sizeof(*signgam)); } -weak_alias(__ieee754_lgammaf_r, lgammaf_r) +weak_alias (__ieee754_lgammaf_r, lgammaf_r) #ifndef _LIBC float __ieee754_gammaf_r(float x, int* signgam) { return __libm_lgammaf(x, signgam, sizeof(*signgam)); } -weak_alias(__ieee754_gammaf_r, gammaf_r) +weak_alias (__ieee754_gammaf_r, gammaf_r) #endif diff --git a/sysdeps/ia64/fpu/e_lgammal_r.c b/sysdeps/ia64/fpu/e_lgammal_r.c index 3fbea703c8..4451201b77 100644 --- a/sysdeps/ia64/fpu/e_lgammal_r.c +++ b/sysdeps/ia64/fpu/e_lgammal_r.c @@ -59,12 +59,12 @@ long double __ieee754_lgammal_r(long double x, int* signgam) { return __libm_lgammal(x, signgam, sizeof(*signgam)); } -weak_alias(__ieee754_lgammal_r, lgammal_r) +weak_alias (__ieee754_lgammal_r, lgammal_r) #ifndef _LIBC long double __ieee754_gammal_r(long double x, int* signgam) { return __libm_lgammal(x, signgam, sizeof(*signgam)); } -weak_alias(__ieee754_gammal_r, gammal_r) +weak_alias (__ieee754_gammal_r, gammal_r) #endif diff --git a/sysdeps/ia64/fpu/w_lgamma.c b/sysdeps/ia64/fpu/w_lgamma.c index f16256ee1b..2006d3e806 100644 --- a/sysdeps/ia64/fpu/w_lgamma.c +++ b/sysdeps/ia64/fpu/w_lgamma.c @@ -66,7 +66,7 @@ double __ieee754_lgamma(double x) #endif return __libm_lgamma(x, &signgam, sizeof(signgam)); } -weak_alias(__ieee754_lgamma, lgamma) +weak_alias (__ieee754_lgamma, lgamma) double __ieee754_gamma(double x) { @@ -77,4 +77,4 @@ double __ieee754_gamma(double x) #endif return __libm_lgamma(x, &signgam, sizeof(signgam)); } -weak_alias(__ieee754_gamma, gamma) +weak_alias (__ieee754_gamma, gamma) diff --git a/sysdeps/ia64/fpu/w_lgammaf.c b/sysdeps/ia64/fpu/w_lgammaf.c index 5ac3b82278..cd0b4f6666 100644 --- a/sysdeps/ia64/fpu/w_lgammaf.c +++ b/sysdeps/ia64/fpu/w_lgammaf.c @@ -66,7 +66,7 @@ float __ieee754_lgammaf(float x) #endif return __libm_lgammaf(x, &signgam, sizeof(signgam)); } -weak_alias(__ieee754_lgammaf, lgammaf) +weak_alias (__ieee754_lgammaf, lgammaf) float __ieee754_gammaf(float x) { @@ -77,4 +77,4 @@ float __ieee754_gammaf(float x) #endif return __libm_lgammaf(x, &signgam, sizeof(signgam)); } -weak_alias(__ieee754_gammaf, gammaf) +weak_alias (__ieee754_gammaf, gammaf) diff --git a/sysdeps/ia64/fpu/w_lgammal.c b/sysdeps/ia64/fpu/w_lgammal.c index 8ddbb749ce..e3885296eb 100644 --- a/sysdeps/ia64/fpu/w_lgammal.c +++ b/sysdeps/ia64/fpu/w_lgammal.c @@ -65,7 +65,7 @@ long double __ieee754_lgammal(long double x) #endif return __libm_lgammal(x, &signgam, sizeof(signgam)); } -weak_alias(__ieee754_lgammal, lgammal) +weak_alias (__ieee754_lgammal, lgammal) long double __ieee754_gammal(long double x) { @@ -76,4 +76,4 @@ long double __ieee754_gammal(long double x) #endif return __libm_lgammal(x, &signgam, sizeof(signgam)); } -weak_alias(__ieee754_gammal, gammal) +weak_alias (__ieee754_gammal, gammal) diff --git a/sysdeps/ia64/strchr.S b/sysdeps/ia64/strchr.S index 258562796a..63db7ff7e5 100644 --- a/sysdeps/ia64/strchr.S +++ b/sysdeps/ia64/strchr.S @@ -108,5 +108,5 @@ ENTRY(strchr) br.cond.sptk .back END(strchr) -weak_alias(strchr, index) +weak_alias (strchr, index) libc_hidden_builtin_def (strchr) diff --git a/sysdeps/mach/hurd/readdir64_r.c b/sysdeps/mach/hurd/readdir64_r.c index c26b35bb70..5b5a7fe362 100644 --- a/sysdeps/mach/hurd/readdir64_r.c +++ b/sysdeps/mach/hurd/readdir64_r.c @@ -109,4 +109,4 @@ __readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result) return dp ? 0 : err ? errno : 0; } -weak_alias(__readdir64_r, readdir64_r) +weak_alias (__readdir64_r, readdir64_r) diff --git a/sysdeps/mach/hurd/sigaltstack.c b/sysdeps/mach/hurd/sigaltstack.c index ea3e07d26b..5b2f06561b 100644 --- a/sysdeps/mach/hurd/sigaltstack.c +++ b/sysdeps/mach/hurd/sigaltstack.c @@ -60,4 +60,4 @@ __sigaltstack (argss, oss) return 0; } -weak_alias(__sigaltstack, sigaltstack) +weak_alias (__sigaltstack, sigaltstack) diff --git a/sysdeps/mach/i386/syscall.S b/sysdeps/mach/i386/syscall.S index 9e718f354d..ff50e971cc 100644 --- a/sysdeps/mach/i386/syscall.S +++ b/sysdeps/mach/i386/syscall.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1997, 2005 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 @@ -24,3 +24,4 @@ ENTRY (syscall) pushl %ecx /* Push back return address. */ .byte 0x9a, 0, 0, 0, 0, 7, 0 /* lcall $7, $0 -- gas bug */ ret +END (syscall) diff --git a/sysdeps/posix/posix_fallocate64.c b/sysdeps/posix/posix_fallocate64.c index 91e71b74ac..64ca9ae83d 100644 --- a/sysdeps/posix/posix_fallocate64.c +++ b/sysdeps/posix/posix_fallocate64.c @@ -76,7 +76,7 @@ __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) if (offset < st.st_size) { unsigned char c; - ssize_t rsize = __pread64 (fd, &c, 1, offset); + ssize_t rsize = __libc_pread64 (fd, &c, 1, offset); if (rsize < 0) return errno; @@ -86,7 +86,7 @@ __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) continue; } - if (__pwrite64 (fd, "", 1, offset) != 1) + if (__libc_pwrite64 (fd, "", 1, offset) != 1) return errno; } diff --git a/sysdeps/posix/sigignore.c b/sysdeps/posix/sigignore.c index 361a19e0dc..9787e8d234 100644 --- a/sysdeps/posix/sigignore.c +++ b/sysdeps/posix/sigignore.c @@ -1,5 +1,5 @@ /* Set the disposition of SIG to SIG_IGN. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -22,6 +22,8 @@ #define __need_NULL #include <stddef.h> #include <signal.h> +#include <string.h> /* For the real memset prototype. */ + int sigignore (sig) diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c index 9a8efee043..9fc514c729 100644 --- a/sysdeps/posix/signal.c +++ b/sysdeps/posix/signal.c @@ -1,5 +1,6 @@ /* BSD-like signal function. - Copyright (C) 1991,1992,1996,1997,2000,2002 Free Software Foundation, Inc. + Copyright (C) 1991,1992,1996,1997,2000,2002,2005 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,6 +20,7 @@ #include <errno.h> #include <signal.h> +#include <string.h> /* For the real memset prototype. */ sigset_t _sigintr attribute_hidden; /* Set by siginterrupt. */ diff --git a/sysdeps/posix/sigset.c b/sysdeps/posix/sigset.c index 873c1cb1e6..31e39d78b5 100644 --- a/sysdeps/posix/sigset.c +++ b/sysdeps/posix/sigset.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -20,6 +20,7 @@ #define __need_NULL #include <stddef.h> #include <signal.h> +#include <string.h> /* For the real memset prototype. */ /* Set the disposition for SIG. */ diff --git a/sysdeps/posix/sysv_signal.c b/sysdeps/posix/sysv_signal.c index ca2e84f372..16fcd2c2ab 100644 --- a/sysdeps/posix/sysv_signal.c +++ b/sysdeps/posix/sysv_signal.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1996, 1997, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,6 +18,8 @@ #include <errno.h> #include <signal.h> +#include <string.h> /* For the real memset prototype. */ + /* Tolerate non-threads versions of Posix */ #ifndef SA_ONESHOT diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps index 6dd3940d22..850a10746c 100644 --- a/sysdeps/powerpc/fpu/libm-test-ulps +++ b/sysdeps/powerpc/fpu/libm-test-ulps @@ -226,9 +226,9 @@ idouble: 2 ifloat: 3 Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": double: 1 -float: 4 +float: 5 idouble: 1 -ifloat: 4 +ifloat: 5 Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": float: 2 ifloat: 2 @@ -351,6 +351,9 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +Test "j0 (2.0) == 0.223890779141235668051827454649948626": +float: 2 +ifloat: 2 Test "j0 (10.0) == -0.245935764451348335197760862485328754": double: 2 float: 1 @@ -382,6 +385,9 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +Test "jn (0, 2.0) == 0.223890779141235668051827454649948626": +float: 2 +ifloat: 2 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754": double: 2 float: 1 @@ -418,8 +424,8 @@ Test "jn (10, 10.0) == 0.207486106633358857697278723518753428": float: 1 ifloat: 1 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6": -float: 3 -ifloat: 3 +float: 4 +ifloat: 4 Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4": double: 1 float: 1 @@ -435,9 +441,9 @@ idouble: 3 ifloat: 1 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 # lgamma Test "lgamma (0.7) == 0.260867246531666514385732417016759578": @@ -730,9 +736,9 @@ ifloat: 1 Function: Real part of "cpow": double: 2 -float: 4 +float: 5 idouble: 2 -ifloat: 4 +ifloat: 5 Function: Imaginary part of "cpow": double: 2 @@ -800,9 +806,9 @@ ifloat: 1 Function: "j0": double: 2 -float: 1 +float: 2 idouble: 2 -ifloat: 1 +ifloat: 2 Function: "j1": double: 1 @@ -812,9 +818,9 @@ ifloat: 2 Function: "jn": double: 3 -float: 3 +float: 4 idouble: 3 -ifloat: 3 +ifloat: 4 Function: "lgamma": double: 1 diff --git a/sysdeps/powerpc/fpu/s_fabs.S b/sysdeps/powerpc/fpu/s_fabs.S index 157ef09507..ab9a3a99bb 100644 --- a/sysdeps/powerpc/fpu/s_fabs.S +++ b/sysdeps/powerpc/fpu/s_fabs.S @@ -25,13 +25,13 @@ ENTRY(__fabs) blr END(__fabs) -weak_alias(__fabs,fabs) +weak_alias (__fabs,fabs) /* It turns out that it's safe to use this code even for single-precision. */ strong_alias(__fabs,__fabsf) -weak_alias(__fabs,fabsf) +weak_alias (__fabs,fabsf) #ifdef NO_LONG_DOUBLE -weak_alias(__fabs,__fabsl) -weak_alias(__fabs,fabsl) +weak_alias (__fabs,__fabsl) +weak_alias (__fabs,fabsl) #endif diff --git a/sysdeps/powerpc/fpu/s_fmax.S b/sysdeps/powerpc/fpu/s_fmax.S index 5666cdd079..8502c863b2 100644 --- a/sysdeps/powerpc/fpu/s_fmax.S +++ b/sysdeps/powerpc/fpu/s_fmax.S @@ -31,13 +31,13 @@ ENTRY(__fmax) blr END(__fmax) -weak_alias(__fmax,fmax) +weak_alias (__fmax,fmax) /* It turns out that it's safe to use this code even for single-precision. */ strong_alias(__fmax,__fmaxf) -weak_alias(__fmax,fmaxf) +weak_alias (__fmax,fmaxf) #ifdef NO_LONG_DOUBLE -weak_alias(__fmax,__fmaxl) -weak_alias(__fmax,fmaxl) +weak_alias (__fmax,__fmaxl) +weak_alias (__fmax,fmaxl) #endif diff --git a/sysdeps/powerpc/fpu/s_fmin.S b/sysdeps/powerpc/fpu/s_fmin.S index 96387d9ae1..5f788d06f3 100644 --- a/sysdeps/powerpc/fpu/s_fmin.S +++ b/sysdeps/powerpc/fpu/s_fmin.S @@ -31,13 +31,13 @@ ENTRY(__fmin) blr END(__fmin) -weak_alias(__fmin,fmin) +weak_alias (__fmin,fmin) /* It turns out that it's safe to use this code even for single-precision. */ strong_alias(__fmin,__fminf) -weak_alias(__fmin,fminf) +weak_alias (__fmin,fminf) #ifdef NO_LONG_DOUBLE -weak_alias(__fmin,__fminl) -weak_alias(__fmin,fminl) +weak_alias (__fmin,__fminl) +weak_alias (__fmin,fminl) #endif diff --git a/sysdeps/powerpc/powerpc32/backtrace.c b/sysdeps/powerpc/powerpc32/backtrace.c index 118f0d6175..e7e12544c5 100644 --- a/sysdeps/powerpc/powerpc32/backtrace.c +++ b/sysdeps/powerpc/powerpc32/backtrace.c @@ -1,5 +1,5 @@ /* Return backtrace of current program state. - Copyright (C) 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2005 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 @@ -64,3 +64,4 @@ __backtrace (void **array, int size) return count; } weak_alias (__backtrace, backtrace) +libc_hidden_def (__backtrace) diff --git a/sysdeps/powerpc/powerpc32/configure b/sysdeps/powerpc/powerpc32/configure new file mode 100644 index 0000000000..9ebac38b57 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/configure @@ -0,0 +1,33 @@ +# This file is generated from configure.in by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/powerpc/powerpc32. + +# See whether gas has R_PPC_REL16 relocs. +echo "$as_me:$LINENO: checking for R_PPC_REL16 gas support" >&5 +echo $ECHO_N "checking for R_PPC_REL16 gas support... $ECHO_C" >&6 +if test "${libc_cv_ppc_rel16+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat > conftest.s <<\EOF + .text + addis 11,30,_GLOBAL_OFFSET_TABLE_-.@ha +EOF +if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libc_cv_ppc_rel16=yes +else + libc_cv_ppc_rel16=no +fi +rm -f conftest* +fi +echo "$as_me:$LINENO: result: $libc_cv_ppc_rel16" >&5 +echo "${ECHO_T}$libc_cv_ppc_rel16" >&6 +if test $libc_cv_ppc_rel16 = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_ASM_PPC_REL16 1 +_ACEOF + +fi diff --git a/sysdeps/powerpc/powerpc32/configure.in b/sysdeps/powerpc/powerpc32/configure.in new file mode 100644 index 0000000000..6d2c41cb9a --- /dev/null +++ b/sysdeps/powerpc/powerpc32/configure.in @@ -0,0 +1,18 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/powerpc/powerpc32. + +# See whether gas has R_PPC_REL16 relocs. +AC_CACHE_CHECK(for R_PPC_REL16 gas support, libc_cv_ppc_rel16, [dnl +cat > conftest.s <<\EOF + .text + addis 11,30,_GLOBAL_OFFSET_TABLE_-.@ha +EOF +if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then + libc_cv_ppc_rel16=yes +else + libc_cv_ppc_rel16=no +fi +rm -f conftest*]) +if test $libc_cv_ppc_rel16 = yes; then + AC_DEFINE(HAVE_ASM_PPC_REL16) +fi diff --git a/sysdeps/powerpc/powerpc32/dl-dtprocnum.h b/sysdeps/powerpc/powerpc32/dl-dtprocnum.h new file mode 100644 index 0000000000..7fe2be7939 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/dl-dtprocnum.h @@ -0,0 +1,3 @@ +/* Number of extra dynamic section entries for this architecture. By + default there are none. */ +#define DT_THISPROCNUM DT_PPC_NUM diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h index 545c19b300..496fa71ecc 100644 --- a/sysdeps/powerpc/powerpc32/dl-machine.h +++ b/sysdeps/powerpc/powerpc32/dl-machine.h @@ -25,6 +25,10 @@ #include <assert.h> #include <dl-tls.h> +/* Translate a processor specific dynamic tag to the index + in l_info array. */ +#define DT_PPC(x) (DT_PPC_##x - DT_LOPROC + DT_NUM) + /* Return nonzero iff ELF header is compatible with the running host. */ static inline int elf_machine_matches_host (const Elf32_Ehdr *ehdr) @@ -32,24 +36,38 @@ elf_machine_matches_host (const Elf32_Ehdr *ehdr) return ehdr->e_machine == EM_PPC; } +/* Return the value of the GOT pointer. */ +static inline Elf32_Addr * __attribute__ ((const)) +ppc_got (void) +{ + Elf32_Addr *got; +#ifdef HAVE_ASM_PPC_REL16 + asm ("bcl 20,31,1f\n" + "1: mflr %0\n" + " addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n" + " addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n" + : "=b" (got) : : "lr"); +#else + asm (" bl _GLOBAL_OFFSET_TABLE_-4@local" + : "=l" (got)); +#endif + return got; +} /* Return the link-time address of _DYNAMIC, stored as the first value in the GOT. */ -static inline Elf32_Addr +static inline Elf32_Addr __attribute__ ((const)) elf_machine_dynamic (void) { - Elf32_Addr *got; - asm (" bl _GLOBAL_OFFSET_TABLE_-4@local" - : "=l"(got)); - return *got; + return *ppc_got (); } /* Return the run-time load address of the shared object. */ -static inline Elf32_Addr +static inline Elf32_Addr __attribute__ ((const)) elf_machine_load_address (void) { - unsigned int *got; - unsigned int *branchaddr; + Elf32_Addr *branchaddr; + Elf32_Addr runtime_dynamic; /* This is much harder than you'd expect. Possibly I'm missing something. The 'obvious' way: @@ -80,19 +98,17 @@ elf_machine_load_address (void) the address ourselves. That gives us the following code: */ /* Get address of the 'b _DYNAMIC@local'... */ - asm ("bl 0f ;" + asm ("bcl 20,31,0f;" "b _DYNAMIC@local;" "0:" - : "=l"(branchaddr)); - - /* ... and the address of the GOT. */ - asm (" bl _GLOBAL_OFFSET_TABLE_-4@local" - : "=l"(got)); + : "=l" (branchaddr)); /* So now work out the difference between where the branch actually points, and the offset of that location in memory from the start of the file. */ - return ((Elf32_Addr)branchaddr - *got - + ((int)(*branchaddr << 6 & 0xffffff00) >> 6)); + runtime_dynamic = ((Elf32_Addr) branchaddr + + ((Elf32_Sword) (*branchaddr << 6 & 0xffffff00) >> 6)); + + return runtime_dynamic - elf_machine_dynamic (); } #define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) /* nothing */ @@ -144,13 +160,69 @@ __elf_preferred_address(struct link_map *loader, size_t maplength, /* The PowerPC never uses REL relocations. */ #define ELF_MACHINE_NO_REL 1 -/* Set up the loaded object described by L so its unrelocated PLT +/* Set up the loaded object described by MAP so its unrelocated PLT entries will jump to the on-demand fixup code in dl-runtime.c. Also install a small trampoline to be used by entries that have been relocated to an address too far away for a single branch. */ extern int __elf_machine_runtime_setup (struct link_map *map, int lazy, int profile); -#define elf_machine_runtime_setup __elf_machine_runtime_setup + +static inline int +elf_machine_runtime_setup (struct link_map *map, + int lazy, int profile) +{ + if (map->l_info[DT_JMPREL] == 0) + return lazy; + + if (map->l_info[DT_PPC(GOT)] == 0) + /* Handle old style PLT. */ + return __elf_machine_runtime_setup (map, lazy, profile); + + /* New style non-exec PLT consisting of an array of addresses. */ + map->l_info[DT_PPC(GOT)]->d_un.d_ptr += map->l_addr; + if (lazy) + { + Elf32_Addr *plt, *got, glink; + Elf32_Word num_plt_entries; + void (*dlrr) (void); + extern void _dl_runtime_resolve (void); + extern void _dl_prof_resolve (void); + + if (__builtin_expect (!profile, 1)) + dlrr = _dl_runtime_resolve; + else + { + if (GLRO(dl_profile) != NULL + &&_dl_name_match_p (GLRO(dl_profile), map)) + GL(dl_profile_map) = map; + dlrr = _dl_prof_resolve; + } + got = (Elf32_Addr *) map->l_info[DT_PPC(GOT)]->d_un.d_ptr; + glink = got[1]; + got[1] = (Elf32_Addr) dlrr; + got[2] = (Elf32_Addr) map; + + /* Relocate everything in .plt by the load address offset. */ + plt = (Elf32_Addr *) D_PTR (map, l_info[DT_PLTGOT]); + num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val + / sizeof (Elf32_Rela)); + + /* If a library is prelinked but we have to relocate anyway, + we have to be able to undo the prelinking of .plt section. + The prelinker saved us at got[1] address of .glink + section's start. */ + if (glink) + { + glink += map->l_addr; + while (num_plt_entries-- != 0) + *plt++ = glink, glink += 4; + } + else + while (num_plt_entries-- != 0) + *plt++ += map->l_addr; + } + return lazy; +} /* Change the PLT entry whose reloc is 'reloc' to call the actual routine. */ extern Elf32_Addr __elf_machine_fixup_plt (struct link_map *map, @@ -163,7 +235,12 @@ elf_machine_fixup_plt (struct link_map *map, lookup_t t, const Elf32_Rela *reloc, Elf32_Addr *reloc_addr, Elf64_Addr finaladdr) { - return __elf_machine_fixup_plt (map, reloc, reloc_addr, finaladdr); + if (map->l_info[DT_PPC(GOT)] == 0) + /* Handle old style PLT. */ + return __elf_machine_fixup_plt (map, reloc, reloc_addr, finaladdr); + + *reloc_addr = finaladdr; + return finaladdr; } /* Return the final value of a plt relocation. */ @@ -286,11 +363,16 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, break; #endif /* USE_TLS etc. */ -#ifdef RESOLVE_CONFLICT_FIND_MAP case R_PPC_JMP_SLOT: +#ifdef RESOLVE_CONFLICT_FIND_MAP RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr); - /* FALLTHROUGH */ #endif + if (map->l_info[DT_PPC(GOT)] != 0) + { + *reloc_addr = value; + break; + } + /* FALLTHROUGH */ default: __process_machine_rela (map, reloc, sym_map, sym, refsym, diff --git a/sysdeps/powerpc/powerpc32/dl-start.S b/sysdeps/powerpc/powerpc32/dl-start.S index d72202d4a4..e1f7f6e24a 100644 --- a/sysdeps/powerpc/powerpc32/dl-start.S +++ b/sysdeps/powerpc/powerpc32/dl-start.S @@ -47,8 +47,15 @@ ENTRY(_dl_start_user) passed by value!). */ /* Put our GOT pointer in r31, */ +#ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r31 + addis r31,r31,_GLOBAL_OFFSET_TABLE_-1b@ha + addi r31,r31,_GLOBAL_OFFSET_TABLE_-1b@l +#else bl _GLOBAL_OFFSET_TABLE_-4@local mflr r31 +#endif /* the address of _start in r30, */ mr r30,r3 /* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28. */ diff --git a/sysdeps/powerpc/powerpc32/elf/start.S b/sysdeps/powerpc/powerpc32/elf/start.S index 7827357a6c..bafd2ae001 100644 --- a/sysdeps/powerpc/powerpc32/elf/start.S +++ b/sysdeps/powerpc/powerpc32/elf/start.S @@ -52,7 +52,7 @@ L(start_addresses): ASM_SIZE_DIRECTIVE(L(start_addresses)) .section ".text" -#ifdef PIC +#if defined PIC && !defined HAVE_ASM_PPC_REL16 L(start_addressesp): .long L(start_addresses)-L(branch) #endif @@ -73,11 +73,19 @@ L(branch): mtlr r0 stw r0,0(r1) /* Set r13 to point at the 'small data area', and put the address of - start_addresses in r8... */ + start_addresses in r8. Also load the GOT pointer so that new PLT + calls work, like the one to __libc_start_main. */ #ifdef PIC +# ifdef HAVE_ASM_PPC_REL16 + addis r30,r13,_GLOBAL_OFFSET_TABLE_-L(branch)@ha + addis r8,r13,L(start_addresses)-L(branch)@ha + addi r30,r30,_GLOBAL_OFFSET_TABLE_-L(branch)@l + lwzu r13,L(start_addresses)-L(branch)@l(r8) +# else lwz r8,L(start_addressesp)-L(branch)(r13) add r8,r13,r8 lwz r13,0(r8) +# endif #else lis r8,L(start_addresses)@ha lwzu r13,L(start_addresses)@l(r8) diff --git a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S index a2415b9542..73cc8181f9 100644 --- a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S +++ b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S @@ -34,14 +34,21 @@ ENTRY (BP_SYM (__longjmp)) #ifndef __NO_VMX__ # ifdef PIC mflr r6 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r5 + addis r5,r5,_GLOBAL_OFFSET_TABLE_-1b@ha + addi r5,r5,_GLOBAL_OFFSET_TABLE_-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r5 +# endif # ifdef SHARED lwz r5,_rtld_global_ro@got(r5) mtlr r6 lwz r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5) # else - lwz r5,_rtld_global_ro@got(r5) + lwz r5,_dl_hwcap@got(r5) mtlr r6 lwz r5,0(r5) # endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_ceil.S b/sysdeps/powerpc/powerpc32/fpu/s_ceil.S index 7924e34648..13afba88f0 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_ceil.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_ceil.S @@ -29,11 +29,19 @@ ENTRY (__ceil) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S index 9315d8d2df..f8ca1de08c 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S @@ -20,7 +20,7 @@ #include <sysdep.h> .section .rodata.cst4,"aM",@progbits,4 - .align 2 + .align 2 .LC0: /* 2**23 */ .long 0x4b000000 @@ -29,11 +29,19 @@ ENTRY (__ceilf) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_copysign.S b/sysdeps/powerpc/powerpc32/fpu/s_copysign.S index 933435da3d..ee2c09cba8 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_copysign.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_copysign.S @@ -38,13 +38,13 @@ L(0): fnabs fp1,fp1 blr END (__copysign) -weak_alias(__copysign,copysign) +weak_alias (__copysign,copysign) /* It turns out that it's safe to use this code even for single-precision. */ -weak_alias(__copysign,copysignf) +weak_alias (__copysign,copysignf) strong_alias(__copysign,__copysignf) #ifdef NO_LONG_DOUBLE -weak_alias(__copysign,copysignl) +weak_alias (__copysign,copysignl) strong_alias(__copysign,__copysignl) #endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_floor.S b/sysdeps/powerpc/powerpc32/fpu/s_floor.S index c8f59c24a6..5dfe8f2d9a 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_floor.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_floor.S @@ -29,11 +29,19 @@ ENTRY (__floor) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_floorf.S b/sysdeps/powerpc/powerpc32/fpu/s_floorf.S index 8ee0644ac9..31b71ad229 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_floorf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_floorf.S @@ -20,7 +20,7 @@ #include <sysdep.h> .section .rodata.cst4,"aM",@progbits,4 - .align 2 + .align 2 .LC0: /* 2**23 */ .long 0x4b000000 @@ -29,11 +29,19 @@ ENTRY (__floorf) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_lround.S b/sysdeps/powerpc/powerpc32/fpu/s_lround.S index 72fd49ba46..a85743164c 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_lround.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_lround.S @@ -41,9 +41,16 @@ ENTRY (__lround) #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + addi r9,r9,.LC0-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) +# endif mtlr r11 lfs fp12,0(r9) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rint.S b/sysdeps/powerpc/powerpc32/fpu/s_rint.S index 4abdcedfe8..1cfcd78b5c 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_rint.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_rint.S @@ -31,11 +31,19 @@ ENTRY (__rint) #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S b/sysdeps/powerpc/powerpc32/fpu/s_rintf.S index d02bd066b8..93c02667fe 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_rintf.S @@ -20,7 +20,7 @@ #include <sysdep.h> .section .rodata.cst4,"aM",@progbits,4 - .align 2 + .align 2 .LC0: /* 2**23 */ .long 0x4b000000 @@ -28,11 +28,19 @@ ENTRY (__rintf) #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_round.S b/sysdeps/powerpc/powerpc32/fpu/s_round.S index 96fc2984fd..53b45916d1 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_round.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_round.S @@ -41,9 +41,16 @@ ENTRY (__round) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + addi r9,r9,.LC0-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) +# endif mtlr r11 lfs fp13,0(r9) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S b/sysdeps/powerpc/powerpc32/fpu/s_roundf.S index 87965dea80..39ba08655a 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_roundf.S @@ -41,9 +41,16 @@ ENTRY (__roundf ) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + addi r9,r9,.LC0-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) +# endif mtlr r11 lfs fp13,0(r9) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_trunc.S b/sysdeps/powerpc/powerpc32/fpu/s_trunc.S index 7a3e705a81..827e8cb940 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_trunc.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_trunc.S @@ -36,11 +36,19 @@ ENTRY (__trunc) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_truncf.S b/sysdeps/powerpc/powerpc32/fpu/s_truncf.S index 5275c69d29..55e7a74b41 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_truncf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_truncf.S @@ -20,7 +20,7 @@ #include <sysdep.h> .section .rodata.cst4,"aM",@progbits,4 - .align 2 + .align 2 .LC0: /* 2**23 */ .long 0x4b000000 @@ -36,11 +36,19 @@ ENTRY (__truncf) mffs fp11 /* Save current FPU rounding mode. */ #ifdef SHARED mflr r11 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r9 + addis r9,r9,.LC0-1b@ha + mtlr r11 + lfs fp13,.LC0-1b@l(r9) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r10 lwz r9,.LC0@got(10) mtlr r11 lfs fp13,0(r9) +# endif #else lis r9,.LC0@ha lfs fp13,.LC0@l(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S index e0c0606da4..cf3f215f2d 100644 --- a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S +++ b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S @@ -74,20 +74,27 @@ ENTRY (BP_SYM (__sigsetjmp)) stw r31,((JB_GPRS+17)*4)(3) stfd fp31,((JB_FPRS+17*2)*4)(3) #ifndef __NO_VMX__ -#ifdef PIC +# ifdef PIC mflr r6 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r5 + addis r5,r5,_GLOBAL_OFFSET_TABLE_-1b@ha + addi r5,r5,_GLOBAL_OFFSET_TABLE_-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r5 -#ifdef SHARED +# endif +# ifdef SHARED lwz r5,_rtld_global_ro@got(r5) mtlr r6 lwz r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5) -#else - lwz r5,_rtld_global_ro@got(r5) +# else + lwz r5,_dl_hwcap@got(r5) mtlr r6 lwz r5,0(r5) -#endif -#else +# endif +# else lis r5,_dl_hwcap@ha lwz r5,_dl_hwcap@l(r5) #endif diff --git a/sysdeps/powerpc/powerpc32/memset.S b/sysdeps/powerpc/powerpc32/memset.S index 4c0edc8e45..f09c294674 100644 --- a/sysdeps/powerpc/powerpc32/memset.S +++ b/sysdeps/powerpc/powerpc32/memset.S @@ -264,10 +264,17 @@ L(checklinesize): beq L(medium) /* Establishes GOT addressability so we can load __cache_line_size from static. This value was set from the aux vector during startup. */ +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr rGOT + addis rGOT,rGOT,__cache_line_size-1b@ha + lwz rCLS,__cache_line_size-1b@l(rGOT) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr rGOT lwz rGOT,__cache_line_size@got(rGOT) lwz rCLS,0(rGOT) +# endif mtlr rTMP #else /* Load __cache_line_size from static. This value was set from the diff --git a/sysdeps/powerpc/powerpc32/ppc-mcount.S b/sysdeps/powerpc/powerpc32/ppc-mcount.S index 314c8ee703..c1a08d379c 100644 --- a/sysdeps/powerpc/powerpc32/ppc-mcount.S +++ b/sysdeps/powerpc/powerpc32/ppc-mcount.S @@ -1,5 +1,5 @@ /* PowerPC-specific implementation of profiling support. - Copyright (C) 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2005 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 @@ -24,25 +24,19 @@ #include <sysdep.h> -/* We do profiling as described in the SYSV ELF ABI, _mcount is called - with the address of a data word in r0 (that is different for every - routine, initialised to 0, and otherwise unused). The caller has put - the address the caller will return to in the usual place on the stack, - 4(r1). _mcount is responsible for ensuring that when it returns no - argument-passing registers are disturbed, and that the LR is set back - to (what the caller sees as) 4(r1). +/* We do profiling as described in the SYSV ELF ABI, except that glibc + _mcount manages its own counters. The caller has put the address the + caller will return to in the usual place on the stack, 4(r1). _mcount + is responsible for ensuring that when it returns no argument-passing + registers are disturbed, and that the LR is set back to (what the + caller sees as) 4(r1). This is intended so that the following code can be inserted at the front of any routine without changing the routine: .data - .align 2 - 0: .long 0 - .previous mflr r0 - lis r11,0b@ha stw r0,4(r1) - addi r0,r11,0b@l bl _mcount */ diff --git a/sysdeps/powerpc/powerpc32/sysdep.h b/sysdeps/powerpc/powerpc32/sysdep.h index 775073f325..552f595a10 100644 --- a/sysdeps/powerpc/powerpc32/sysdep.h +++ b/sysdeps/powerpc/powerpc32/sysdep.h @@ -29,31 +29,10 @@ /* The mcount code relies on a the return address being on the stack to locate our caller and so it can restore it; so store one just for its benefit. */ -# ifdef PIC -# define CALL_MCOUNT \ - .pushsection; \ - .section ".data"; \ - .align ALIGNARG(2); \ -0:.long 0; \ - .previous; \ - mflr r0; \ - stw r0,4(r1); \ - bl _GLOBAL_OFFSET_TABLE_@local-4; \ - mflr r11; \ - lwz r0,0b@got(r11); \ - bl JUMPTARGET(_mcount); -# else /* PIC */ -# define CALL_MCOUNT \ - .section ".data"; \ - .align ALIGNARG(2); \ -0:.long 0; \ - .previous; \ +# define CALL_MCOUNT \ mflr r0; \ - lis r11,0b@ha; \ stw r0,4(r1); \ - addi r0,r11,0b@l; \ bl JUMPTARGET(_mcount); -# endif /* PIC */ #else /* PROF */ # define CALL_MCOUNT /* Do nothing. */ #endif /* PROF */ diff --git a/sysdeps/powerpc/powerpc64/backtrace.c b/sysdeps/powerpc/powerpc64/backtrace.c index 8669b6a689..9c8ebbb18d 100644 --- a/sysdeps/powerpc/powerpc64/backtrace.c +++ b/sysdeps/powerpc/powerpc64/backtrace.c @@ -1,5 +1,5 @@ /* Return backtrace of current program state. - Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -67,3 +67,4 @@ __backtrace (void **array, int size) return count; } weak_alias (__backtrace, backtrace) +libc_hidden_def (__backtrace) diff --git a/sysdeps/powerpc/powerpc64/fpu/s_copysign.S b/sysdeps/powerpc/powerpc64/fpu/s_copysign.S index a43ed12cf0..f083d2b7ea 100644 --- a/sysdeps/powerpc/powerpc64/fpu/s_copysign.S +++ b/sysdeps/powerpc/powerpc64/fpu/s_copysign.S @@ -39,13 +39,13 @@ L(0): fnabs fp1,fp1 blr END (__copysign) -weak_alias(__copysign,copysign) +weak_alias (__copysign,copysign) /* It turns out that it's safe to use this code even for single-precision. */ -weak_alias(__copysign,copysignf) +weak_alias (__copysign,copysignf) strong_alias(__copysign,__copysignf) #ifdef NO_LONG_DOUBLE -weak_alias(__copysign,copysignl) +weak_alias (__copysign,copysignl) strong_alias(__copysign,__copysignl) #endif diff --git a/sysdeps/s390/s390-32/backtrace.c b/sysdeps/s390/s390-32/backtrace.c index 7a632572b5..6adc3bc3d1 100644 --- a/sysdeps/s390/s390-32/backtrace.c +++ b/sysdeps/s390/s390-32/backtrace.c @@ -1,6 +1,6 @@ /* Return backtrace of current program state. - Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -142,3 +142,4 @@ __backtrace (void **array, int size) } weak_alias (__backtrace, backtrace) +libc_hidden_def (__backtrace) diff --git a/sysdeps/s390/s390-32/s390-mcount.S b/sysdeps/s390/s390-32/s390-mcount.S index 8ecdd0edae..6d11f9bbdb 100644 --- a/sysdeps/s390/s390-32/s390-mcount.S +++ b/sysdeps/s390/s390-32/s390-mcount.S @@ -81,4 +81,4 @@ C_LABEL(_mcount) ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) #undef mcount -weak_alias(_mcount, mcount) +weak_alias (_mcount, mcount) diff --git a/sysdeps/s390/s390-64/backtrace.c b/sysdeps/s390/s390-64/backtrace.c index 05321349ca..7ba195cb7a 100644 --- a/sysdeps/s390/s390-64/backtrace.c +++ b/sysdeps/s390/s390-64/backtrace.c @@ -1,6 +1,6 @@ /* Return backtrace of current program state. 64 bit S/390 version. - Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). + Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc. + Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -141,3 +141,4 @@ __backtrace (void **array, int size) } weak_alias (__backtrace, backtrace) +libc_hidden_def (__backtrace) diff --git a/sysdeps/s390/s390-64/s390x-mcount.S b/sysdeps/s390/s390-64/s390x-mcount.S index 5e3890b4f6..0fa614cbf4 100644 --- a/sysdeps/s390/s390-64/s390x-mcount.S +++ b/sysdeps/s390/s390-64/s390x-mcount.S @@ -69,4 +69,4 @@ C_LABEL(_mcount) ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) #undef mcount -weak_alias(_mcount, mcount) +weak_alias (_mcount, mcount) diff --git a/sysdeps/sparc/sparc32/memset.S b/sysdeps/sparc/sparc32/memset.S index 8e91e998bf..e6204e8ac9 100644 --- a/sysdeps/sparc/sparc32/memset.S +++ b/sysdeps/sparc/sparc32/memset.S @@ -152,4 +152,4 @@ ENTRY(memset) END(memset) libc_hidden_builtin_def (memset) -weak_alias(__bzero, bzero) +weak_alias (__bzero, bzero) diff --git a/sysdeps/sparc/sparc32/stpcpy.S b/sysdeps/sparc/sparc32/stpcpy.S index 937fed35f8..e6688a9b21 100644 --- a/sysdeps/sparc/sparc32/stpcpy.S +++ b/sysdeps/sparc/sparc32/stpcpy.S @@ -160,6 +160,6 @@ ENTRY(__stpcpy) nop END(__stpcpy) -weak_alias(__stpcpy, stpcpy) +weak_alias (__stpcpy, stpcpy) libc_hidden_def (__stpcpy) libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/sparc/sparc32/strchr.S b/sysdeps/sparc/sparc32/strchr.S index b5be3adf60..6120ecd6a3 100644 --- a/sysdeps/sparc/sparc32/strchr.S +++ b/sysdeps/sparc/sparc32/strchr.S @@ -278,7 +278,7 @@ ENTRY(strrchr) mov %o5, %o0 END(strrchr) -weak_alias(strchr, index) -weak_alias(strrchr, rindex) +weak_alias (strchr, index) +weak_alias (strrchr, rindex) libc_hidden_builtin_def (strchr) libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/sparc/sparc64/memcmp.S b/sysdeps/sparc/sparc64/memcmp.S index 074767b983..f9502d63f5 100644 --- a/sysdeps/sparc/sparc64/memcmp.S +++ b/sysdeps/sparc/sparc64/memcmp.S @@ -139,5 +139,5 @@ ENTRY(memcmp) END(memcmp) #undef bcmp -weak_alias(memcmp, bcmp) +weak_alias (memcmp, bcmp) libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/sparc/sparc64/memcpy.S b/sysdeps/sparc/sparc64/memcpy.S index 3742573248..a3f7b96a91 100644 --- a/sysdeps/sparc/sparc64/memcpy.S +++ b/sysdeps/sparc/sparc64/memcpy.S @@ -914,8 +914,8 @@ ENTRY(memmove) END(memmove) #ifdef USE_BPR -weak_alias(memcpy, __align_cpy_1) -weak_alias(memcpy, __align_cpy_2) +weak_alias (memcpy, __align_cpy_1) +weak_alias (memcpy, __align_cpy_2) #endif libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memmove) diff --git a/sysdeps/sparc/sparc64/memset.S b/sysdeps/sparc/sparc64/memset.S index b34ccc8869..99624ba9d7 100644 --- a/sysdeps/sparc/sparc64/memset.S +++ b/sysdeps/sparc/sparc64/memset.S @@ -312,4 +312,4 @@ ENTRY(__bzero) mov %o5, %o0 END(__bzero) -weak_alias(__bzero, bzero) +weak_alias (__bzero, bzero) diff --git a/sysdeps/sparc/sparc64/sparcv9b/memcpy.S b/sysdeps/sparc/sparc64/sparcv9b/memcpy.S index 8b70b0a932..760d526630 100644 --- a/sysdeps/sparc/sparc64/sparcv9b/memcpy.S +++ b/sysdeps/sparc/sparc64/sparcv9b/memcpy.S @@ -600,11 +600,11 @@ ENTRY(memmove) END(memmove) #ifdef USE_BPR -weak_alias(memcpy, __align_cpy_1) -weak_alias(memcpy, __align_cpy_2) -weak_alias(memcpy, __align_cpy_4) -weak_alias(memcpy, __align_cpy_8) -weak_alias(memcpy, __align_cpy_16) +weak_alias (memcpy, __align_cpy_1) +weak_alias (memcpy, __align_cpy_2) +weak_alias (memcpy, __align_cpy_4) +weak_alias (memcpy, __align_cpy_8) +weak_alias (memcpy, __align_cpy_16) #endif libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memmove) diff --git a/sysdeps/unix/clock_gettime.c b/sysdeps/unix/clock_gettime.c index 3a1717daf3..8f82ac848d 100644 --- a/sysdeps/unix/clock_gettime.c +++ b/sysdeps/unix/clock_gettime.c @@ -93,6 +93,7 @@ int clock_gettime (clockid_t clock_id, struct timespec *tp) { int retval = -1; + struct timeval tv; switch (clock_id) { @@ -102,7 +103,9 @@ clock_gettime (clockid_t clock_id, struct timespec *tp) #ifndef HANDLED_REALTIME case CLOCK_REALTIME: - HANDLE_REALTIME; + retval = gettimeofday (&tv, NULL); + if (retval == 0) + TIMEVAL_TO_TIMESPEC (&tv, tp); break; #endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h index ce4a5da37f..c4a9b77e2e 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-1999, 2000, 2004 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2004, 2005 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 @@ -44,9 +44,9 @@ #define O_ASYNC 020000 /* fcntl, for BSD compatibility */ #ifdef __USE_GNU -# define O_DIRECT 040000 /* Direct disk access. */ # define O_DIRECTORY 0100000 /* Must be a directory. */ # define O_NOFOLLOW 0200000 /* Do not follow links. */ +# define O_DIRECT 02000000 /* Direct disk access. */ # define O_NOATIME 04000000 /* Do not set atime. */ #endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/resource.h b/sysdeps/unix/sysv/linux/alpha/bits/resource.h index 54d6819412..8bbd301dd9 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/resource.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/resource.h @@ -1,5 +1,5 @@ /* Bit values & structures for resource limits. Alpha/Linux version. - Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004 + Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -89,7 +89,18 @@ enum __rlimit_resource __RLIMIT_MSGQUEUE = 12, #define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - __RLIMIT_NLIMITS = 13, + /* Maximum nice priority allowed to raise to. + Nice levels 19 .. -20 correspond to 0 .. 39 + values of this resource limit. */ + __RLIMIT_NICE = 13, +#define RLIMIT_NICE __RLIMIT_NICE + + /* Maximum realtime priority allowed for non-priviledged + processes. */ + __RLIMIT_RTPRIO = 14, +#define RLIMIT_RTPRIO _RLIMIT_RTPRIO + + __RLIMIT_NLIMITS = 15, __RLIM_NLIMITS = __RLIMIT_NLIMITS #define RLIMIT_NLIMITS __RLIMIT_NLIMITS #define RLIM_NLIMITS __RLIM_NLIMITS diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S index 1c450d1737..5e0b21ea15 100644 --- a/sysdeps/unix/sysv/linux/alpha/clone.S +++ b/sysdeps/unix/sysv/linux/alpha/clone.S @@ -146,4 +146,4 @@ thread_start: .end thread_start -weak_alias(__clone, clone) +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/alpha/getcontext.S b/sysdeps/unix/sysv/linux/alpha/getcontext.S index 3566890cf9..bf9820ac73 100644 --- a/sysdeps/unix/sysv/linux/alpha/getcontext.S +++ b/sysdeps/unix/sysv/linux/alpha/getcontext.S @@ -41,7 +41,7 @@ ENTRY (__getcontext) ret END(__getcontext) -weak_alias(__getcontext, getcontext) +weak_alias (__getcontext, getcontext) /* An internal routine used by getcontext and setcontext. diff --git a/sysdeps/unix/sysv/linux/alpha/getrusage.S b/sysdeps/unix/sysv/linux/alpha/getrusage.S index 2c34e98ce6..46797aa83b 100644 --- a/sysdeps/unix/sysv/linux/alpha/getrusage.S +++ b/sysdeps/unix/sysv/linux/alpha/getrusage.S @@ -145,5 +145,5 @@ strong_alias(__getrusage_tv64, ____getrusage_tv64) default_symbol_version (____getrusage_tv64, __getrusage, GLIBC_2.1) default_symbol_version (__getrusage_tv64, getrusage, GLIBC_2.1) #else -weak_alias(__getrusage, getrusage) +weak_alias (__getrusage, getrusage) #endif diff --git a/sysdeps/unix/sysv/linux/alpha/setcontext.S b/sysdeps/unix/sysv/linux/alpha/setcontext.S index 7d443d41c7..27abfd0c12 100644 --- a/sysdeps/unix/sysv/linux/alpha/setcontext.S +++ b/sysdeps/unix/sysv/linux/alpha/setcontext.S @@ -32,4 +32,4 @@ PSEUDO(__setcontext, sigreturn, 1) ret PSEUDO_END(__setcontext) -weak_alias(__setcontext, setcontext) +weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S index e5de55faeb..48c3f271c7 100644 --- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S +++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S @@ -29,5 +29,5 @@ PSEUDO(__sigsuspend, sigsuspend, 1) ret PSEUDO_END(__sigsuspend) libc_hidden_def (__sigsuspend) -weak_alias(__sigsuspend, sigsuspend) +weak_alias (__sigsuspend, sigsuspend) strong_alias (__sigsuspend, __libc_sigsuspend) diff --git a/sysdeps/unix/sysv/linux/alpha/swapcontext.S b/sysdeps/unix/sysv/linux/alpha/swapcontext.S index 5f6615e0b6..1221f67f78 100644 --- a/sysdeps/unix/sysv/linux/alpha/swapcontext.S +++ b/sysdeps/unix/sysv/linux/alpha/swapcontext.S @@ -48,4 +48,4 @@ ENTRY(__swapcontext) #endif END(__swapcontext) -weak_alias(__swapcontext, swapcontext) +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S index 10a32d5dc8..0c4081363a 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscall.S +++ b/sysdeps/unix/sysv/linux/alpha/syscall.S @@ -74,4 +74,4 @@ $error: END(__syscall) -weak_alias(__syscall, syscall) +weak_alias (__syscall, syscall) diff --git a/sysdeps/unix/sysv/linux/bits/resource.h b/sysdeps/unix/sysv/linux/bits/resource.h index c186a3a5d0..115739d439 100644 --- a/sysdeps/unix/sysv/linux/bits/resource.h +++ b/sysdeps/unix/sysv/linux/bits/resource.h @@ -1,5 +1,5 @@ /* Bit values & structures for resource limits. Linux version. - Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004 + Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -89,7 +89,18 @@ enum __rlimit_resource __RLIMIT_MSGQUEUE = 12, #define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - __RLIMIT_NLIMITS = 13, + /* Maximum nice priority allowed to raise to. + Nice levels 19 .. -20 correspond to 0 .. 39 + values of this resource limit. */ + __RLIMIT_NICE = 13, +#define RLIMIT_NICE __RLIMIT_NICE + + /* Maximum realtime priority allowed for non-priviledged + processes. */ + __RLIMIT_RTPRIO = 14, +#define RLIMIT_RTPRIO _RLIMIT_RTPRIO + + __RLIMIT_NLIMITS = 15, __RLIM_NLIMITS = __RLIMIT_NLIMITS #define RLIMIT_NLIMITS __RLIMIT_NLIMITS #define RLIM_NLIMITS __RLIM_NLIMITS diff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S index 4f3bb9e206..f497bca13d 100644 --- a/sysdeps/unix/sysv/linux/hppa/clone.S +++ b/sysdeps/unix/sysv/linux/hppa/clone.S @@ -96,4 +96,4 @@ thread_start: PSEUDO_END(__clone) -weak_alias(__clone, clone) +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/i386/getcontext.S b/sysdeps/unix/sysv/linux/i386/getcontext.S index 76ba6047c1..fe28f1e0e1 100644 --- a/sysdeps/unix/sysv/linux/i386/getcontext.S +++ b/sysdeps/unix/sysv/linux/i386/getcontext.S @@ -82,4 +82,4 @@ L(pseudo_end): ret PSEUDO_END(__getcontext) -weak_alias(__getcontext, getcontext) +weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S index 03dc648c59..12ba4e2d67 100644 --- a/sysdeps/unix/sysv/linux/i386/makecontext.S +++ b/sysdeps/unix/sysv/linux/i386/makecontext.S @@ -114,4 +114,4 @@ L(exitcode): cfi_startproc END(__makecontext) -weak_alias(__makecontext, makecontext) +weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/i386/setcontext.S b/sysdeps/unix/sysv/linux/i386/setcontext.S index c493cf9798..bf2d7d2bad 100644 --- a/sysdeps/unix/sysv/linux/i386/setcontext.S +++ b/sysdeps/unix/sysv/linux/i386/setcontext.S @@ -94,4 +94,4 @@ L(pseudo_end): ret PSEUDO_END(__setcontext) -weak_alias(__setcontext, setcontext) +weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/i386/swapcontext.S b/sysdeps/unix/sysv/linux/i386/swapcontext.S index d909e659e4..27c16200b2 100644 --- a/sysdeps/unix/sysv/linux/i386/swapcontext.S +++ b/sysdeps/unix/sysv/linux/i386/swapcontext.S @@ -109,4 +109,4 @@ L(pseudo_end): ret PSEUDO_END(__swapcontext) -weak_alias(__swapcontext, swapcontext) +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index a9637be33d..99f9bf1edf 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -109,32 +109,6 @@ # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ #else -# ifndef HAVE_HIDDEN -# define SETUP_PIC_REG(reg) \ - call 1f; \ - .subsection 1; \ -1:movl (%esp), %e##reg; \ - ret; \ - .previous -# else -# define SETUP_PIC_REG(reg) \ - .ifndef __i686.get_pc_thunk.reg; \ - .section .gnu.linkonce.t.__i686.get_pc_thunk.reg,"ax",@progbits; \ - .globl __i686.get_pc_thunk.reg; \ - .hidden __i686.get_pc_thunk.reg; \ - .type __i686.get_pc_thunk.reg,@function; \ -__i686.get_pc_thunk.reg: \ - movl (%esp), %e##reg; \ - ret; \ - .size __i686.get_pc_thunk.reg, . - __i686.get_pc_thunk.reg; \ - .previous; \ - .endif; \ - call __i686.get_pc_thunk.reg -# endif - -# define LOAD_PIC_REG(reg) \ - SETUP_PIC_REG(reg); addl $_GLOBAL_OFFSET_TABLE_, %e##reg - # if RTLD_PRIVATE_ERRNO # define SYSCALL_ERROR_HANDLER \ 0:SETUP_PIC_REG(cx); \ diff --git a/sysdeps/unix/sysv/linux/ia64/getcontext.S b/sysdeps/unix/sysv/linux/ia64/getcontext.S index 0f9cc5db19..4e18bace2d 100644 --- a/sysdeps/unix/sysv/linux/ia64/getcontext.S +++ b/sysdeps/unix/sysv/linux/ia64/getcontext.S @@ -155,4 +155,4 @@ ENTRY(__getcontext) ret END(__getcontext) -weak_alias(__getcontext, getcontext) +weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/ia64/setcontext.S b/sysdeps/unix/sysv/linux/ia64/setcontext.S index e18c40fa4c..ef0a93c0c0 100644 --- a/sysdeps/unix/sysv/linux/ia64/setcontext.S +++ b/sysdeps/unix/sysv/linux/ia64/setcontext.S @@ -150,4 +150,4 @@ ENTRY(__setcontext) ret END(__setcontext) -weak_alias(__setcontext, setcontext) +weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c index 377ccf5199..66f0ac1317 100644 --- a/sysdeps/unix/sysv/linux/if_index.c +++ b/sysdeps/unix/sysv/linux/if_index.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1997,98,99,2000,2002,2003,2004 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005 + 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 @@ -188,12 +189,8 @@ if_nameindex_netlink (void) /* Tell the kernel that we wish to get a list of all - active interfaces. */ - if (__netlink_sendreq (&nh, RTM_GETLINK) < 0) - goto exit_close; - - /* Collect all data for every interface. */ - if (__netlink_receive (&nh) < 0) + active interfaces. Collect all data for every interface. */ + if (__netlink_request (&nh, RTM_GETLINK) < 0) goto exit_free; /* Count the interfaces. */ @@ -290,7 +287,6 @@ if_nameindex_netlink (void) exit_free: __netlink_free_handle (&nh); - exit_close: __netlink_close (&nh); return idx; diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c index 8a052e212d..f743f702f0 100644 --- a/sysdeps/unix/sysv/linux/ifaddrs.c +++ b/sysdeps/unix/sysv/linux/ifaddrs.c @@ -1,5 +1,5 @@ /* getifaddrs -- get names and addresses of all network interfaces - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005 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 @@ -17,6 +17,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <alloca.h> #include <assert.h> #include <errno.h> #include <ifaddrs.h> @@ -24,6 +25,7 @@ #include <netinet/in.h> #include <netpacket/packet.h> #include <stdbool.h> +#include <stdint.h> #include <stdlib.h> #include <string.h> #include <sys/ioctl.h> @@ -84,7 +86,7 @@ __netlink_free_handle (struct netlink_handle *h) } -int +static int __netlink_sendreq (struct netlink_handle *h, int type) { struct @@ -114,15 +116,39 @@ __netlink_sendreq (struct netlink_handle *h, int type) int -__netlink_receive (struct netlink_handle *h) +__netlink_request (struct netlink_handle *h, int type) { struct netlink_res *nlm_next; - char buf[4096]; - struct iovec iov = { buf, sizeof (buf) }; + struct netlink_res **new_nlm_list; + static volatile size_t buf_size = 4096; + char *buf; struct sockaddr_nl nladdr; struct nlmsghdr *nlmh; - int read_len; + ssize_t read_len; bool done = false; + bool use_malloc = false; + + if (__netlink_sendreq (h, type) < 0) + return -1; + + size_t this_buf_size = buf_size; + if (__libc_use_alloca (this_buf_size)) + buf = alloca (this_buf_size); + else + { + buf = malloc (this_buf_size); + if (buf != NULL) + use_malloc = true; + else + goto out_fail; + } + + struct iovec iov = { buf, this_buf_size }; + + if (h->nlm_list != NULL) + new_nlm_list = &h->end_ptr->next; + else + new_nlm_list = &h->nlm_list; while (! done) { @@ -136,33 +162,66 @@ __netlink_receive (struct netlink_handle *h) read_len = TEMP_FAILURE_RETRY (__recvmsg (h->fd, &msg, 0)); if (read_len < 0) - return -1; + goto out_fail; - if (msg.msg_flags & MSG_TRUNC) - return -1; + if (nladdr.nl_pid != 0) + continue; - nlm_next = (struct netlink_res *) malloc (sizeof (struct netlink_res) - + read_len); - if (nlm_next == NULL) - return -1; - nlm_next->next = NULL; - nlm_next->nlh = memcpy (nlm_next + 1, buf, read_len); - nlm_next->size = read_len; - nlm_next->seq = h->seq; - if (h->nlm_list == NULL) - h->nlm_list = nlm_next; - else - h->end_ptr->next = nlm_next; - h->end_ptr = nlm_next; + if (__builtin_expect (msg.msg_flags & MSG_TRUNC, 0)) + { + if (this_buf_size >= SIZE_MAX / 2) + goto out_fail; + + nlm_next = *new_nlm_list; + while (nlm_next != NULL) + { + struct netlink_res *tmpptr; + + tmpptr = nlm_next->next; + free (nlm_next); + nlm_next = tmpptr; + } + *new_nlm_list = NULL; + + if (__libc_use_alloca (2 * this_buf_size)) + buf = extend_alloca (buf, this_buf_size, 2 * this_buf_size); + else + { + this_buf_size *= 2; + + char *new_buf = realloc (use_malloc ? buf : NULL, this_buf_size); + if (new_buf == NULL) + goto out_fail; + new_buf = buf; + use_malloc = true; + } + buf_size = this_buf_size; + + iov.iov_base = buf; + iov.iov_len = this_buf_size; + + /* Increase sequence number, so that we can distinguish + between old and new request messages. */ + h->seq++; + + if (__netlink_sendreq (h, type) < 0) + goto out_fail; + + continue; + } + + size_t count = 0; + size_t remaining_len = read_len; for (nlmh = (struct nlmsghdr *) buf; - NLMSG_OK (nlmh, (size_t) read_len); - nlmh = (struct nlmsghdr *) NLMSG_NEXT (nlmh, read_len)) + NLMSG_OK (nlmh, remaining_len); + nlmh = (struct nlmsghdr *) NLMSG_NEXT (nlmh, remaining_len)) { - if (nladdr.nl_pid != 0 || (pid_t) nlmh->nlmsg_pid != h->pid + if ((pid_t) nlmh->nlmsg_pid != h->pid || nlmh->nlmsg_seq != h->seq) continue; + ++count; if (nlmh->nlmsg_type == NLMSG_DONE) { /* We found the end, leave the loop. */ @@ -176,11 +235,38 @@ __netlink_receive (struct netlink_handle *h) errno = EIO; else errno = -nlerr->error; - return -1; + goto out_fail; } } + + /* If there was nothing with the expected nlmsg_pid and nlmsg_seq, + there is no point to record it. */ + if (count == 0) + continue; + + nlm_next = (struct netlink_res *) malloc (sizeof (struct netlink_res) + + read_len); + if (nlm_next == NULL) + goto out_fail; + nlm_next->next = NULL; + nlm_next->nlh = memcpy (nlm_next + 1, buf, read_len); + nlm_next->size = read_len; + nlm_next->seq = h->seq; + if (h->nlm_list == NULL) + h->nlm_list = nlm_next; + else + h->end_ptr->next = nlm_next; + h->end_ptr = nlm_next; } + + if (use_malloc) + free (buf); return 0; + +out_fail: + if (use_malloc) + free (buf); + return -1; } @@ -268,7 +354,7 @@ getifaddrs (struct ifaddrs **ifap) unsigned int i, newlink, newaddr, newaddr_idx; int *map_newlink_data; size_t ifa_data_size = 0; /* Size to allocate for all ifa_data. */ - char *ifa_data_ptr; /* Pointer to the unused part of memory for + char *ifa_data_ptr; /* Pointer to the unused part of memory for ifa_data. */ int result = 0; @@ -288,28 +374,20 @@ getifaddrs (struct ifaddrs **ifap) #endif /* Tell the kernel that we wish to get a list of all - active interfaces. */ - if (__netlink_sendreq (&nh, RTM_GETLINK) < 0) - { - result = -1; - goto exit_close; - } - /* Collect all data for every interface. */ - if (__netlink_receive (&nh) < 0) + active interfaces, collect all data for every interface. */ + if (__netlink_request (&nh, RTM_GETLINK) < 0) { result = -1; goto exit_free; } - /* Now ask the kernel for all addresses which are assigned - to an interface. Since we store the addresses after the - interfaces in the list, we will later always find the - interface before the corresponding addresses. */ + to an interface and collect all data for every interface. + Since we store the addresses after the interfaces in the + list, we will later always find the interface before the + corresponding addresses. */ ++nh.seq; - if (__netlink_sendreq (&nh, RTM_GETADDR) < 0 - /* Collect all data for every interface. */ - || __netlink_receive (&nh) < 0) + if (__netlink_request (&nh, RTM_GETADDR) < 0) { result = -1; goto exit_free; @@ -327,7 +405,7 @@ getifaddrs (struct ifaddrs **ifap) continue; /* Walk through all entries we got from the kernel and look, which - message type they contain. */ + message type they contain. */ for (nlh = nlp->nlh; NLMSG_OK (nlh, size); nlh = NLMSG_NEXT (nlh, size)) { /* Check if the message is what we want. */ @@ -423,7 +501,7 @@ getifaddrs (struct ifaddrs **ifap) /* Interfaces are stored in the first "newlink" entries of our list, starting in the order as we got from the kernel. */ - ifa_index = map_newlink (ifim->ifi_index - 1, ifas, + ifa_index = map_newlink (ifim->ifi_index - 1, ifas, map_newlink_data, newlink); ifas[ifa_index].ifa.ifa_flags = ifim->ifi_flags; @@ -767,8 +845,6 @@ getifaddrs (struct ifaddrs **ifap) exit_free: __netlink_free_handle (&nh); - - exit_close: __netlink_close (&nh); return result; diff --git a/sysdeps/unix/sysv/linux/mips/bits/resource.h b/sysdeps/unix/sysv/linux/mips/bits/resource.h index 2b6c887fd0..7e7152935b 100644 --- a/sysdeps/unix/sysv/linux/mips/bits/resource.h +++ b/sysdeps/unix/sysv/linux/mips/bits/resource.h @@ -1,5 +1,5 @@ /* Bit values & structures for resource limits. Linux/MIPS version. - Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004 + Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -89,7 +89,18 @@ enum __rlimit_resource __RLIMIT_MSGQUEUE = 12, #define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - __RLIMIT_NLIMITS = 13, + /* Maximum nice priority allowed to raise to. + Nice levels 19 .. -20 correspond to 0 .. 39 + values of this resource limit. */ + __RLIMIT_NICE = 13, +#define RLIMIT_NICE __RLIMIT_NICE + + /* Maximum realtime priority allowed for non-priviledged + processes. */ + __RLIMIT_RTPRIO = 14, +#define RLIMIT_RTPRIO _RLIMIT_RTPRIO + + __RLIMIT_NLIMITS = 15, __RLIM_NLIMITS = __RLIMIT_NLIMITS #define RLIMIT_NLIMITS __RLIMIT_NLIMITS #define RLIM_NLIMITS __RLIM_NLIMITS diff --git a/sysdeps/unix/sysv/linux/mips/clone.S b/sysdeps/unix/sysv/linux/mips/clone.S index 8b8e0072f5..f521df1771 100644 --- a/sysdeps/unix/sysv/linux/mips/clone.S +++ b/sysdeps/unix/sysv/linux/mips/clone.S @@ -163,4 +163,4 @@ L(gotpid): END(__thread_start) -weak_alias(__clone, clone) +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S index 1383ddc6a7..38b6195282 100644 --- a/sysdeps/unix/sysv/linux/mips/vfork.S +++ b/sysdeps/unix/sysv/linux/mips/vfork.S @@ -95,4 +95,4 @@ L(error): END(__vfork) libc_hidden_def(__vfork) -weak_alias(__vfork, vfork) +weak_alias (__vfork, vfork) diff --git a/sysdeps/unix/sysv/linux/netinet/if_tr.h b/sysdeps/unix/sysv/linux/netinet/if_tr.h index 1a7bc68c98..45c39115f3 100644 --- a/sysdeps/unix/sysv/linux/netinet/if_tr.h +++ b/sysdeps/unix/sysv/linux/netinet/if_tr.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2005 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 @@ -21,13 +21,83 @@ #include <sys/cdefs.h> #include <sys/types.h> -#include <asm/types.h> -#include <linux/if_tr.h> +/* IEEE 802.5 Token-Ring magic constants. The frame sizes omit the preamble + and FCS/CRC (frame check sequence). */ +#define TR_ALEN 6 /* Octets in one token-ring addr */ +#define TR_HLEN (sizeof (struct trh_hdr) + sizeof (struct trllc)) +#define AC 0x10 +#define LLC_FRAME 0x40 + +/* LLC and SNAP constants */ +#define EXTENDED_SAP 0xAA +#define UI_CMD 0x03 + +/* This is an Token-Ring frame header. */ +struct trh_hdr +{ + u_int8_t ac; /* access control field */ + u_int8_t fc; /* frame control field */ + u_int8_t daddr[TR_ALEN]; /* destination address */ + u_int8_t saddr[TR_ALEN]; /* source address */ + u_int16_t rcf; /* route control field */ + u_int16_t rseg[8]; /* routing registers */ +}; + +/* This is an Token-Ring LLC structure */ +struct trllc +{ + u_int8_t dsap; /* destination SAP */ + u_int8_t ssap; /* source SAP */ + u_int8_t llc; /* LLC control field */ + u_int8_t protid[3]; /* protocol id */ + u_int16_t ethertype; /* ether type field */ +}; + +/* Token-Ring statistics collection data. */ +struct tr_statistics +{ + unsigned long rx_packets; /* total packets received */ + unsigned long tx_packets; /* total packets transmitted */ + unsigned long rx_bytes; /* total bytes received */ + unsigned long tx_bytes; /* total bytes transmitted */ + unsigned long rx_errors; /* bad packets received */ + unsigned long tx_errors; /* packet transmit problems */ + unsigned long rx_dropped; /* no space in linux buffers */ + unsigned long tx_dropped; /* no space available in linux */ + unsigned long multicast; /* multicast packets received */ + unsigned long transmit_collision; + + /* detailed Token-Ring errors. See IBM Token-Ring Network + Architecture for more info */ + + unsigned long line_errors; + unsigned long internal_errors; + unsigned long burst_errors; + unsigned long A_C_errors; + unsigned long abort_delimiters; + unsigned long lost_frames; + unsigned long recv_congest_count; + unsigned long frame_copied_errors; + unsigned long frequency_errors; + unsigned long token_errors; + unsigned long dummy1; +}; + +/* source routing stuff */ +#define TR_RII 0x80 +#define TR_RCF_DIR_BIT 0x80 +#define TR_RCF_LEN_MASK 0x1f00 +#define TR_RCF_BROADCAST 0x8000 /* all-routes broadcast */ +#define TR_RCF_LIMITED_BROADCAST 0xC000 /* single-route broadcast */ +#define TR_RCF_FRAME2K 0x20 +#define TR_RCF_BROADCAST_MASK 0xC000 +#define TR_MAXRIFLEN 18 #ifdef __USE_BSD -struct trn_hdr { +struct trn_hdr +{ u_int8_t trn_ac; /* access control field */ u_int8_t trn_fc; /* field control field */ u_int8_t trn_dhost[TR_ALEN]; /* destination host */ diff --git a/sysdeps/unix/sysv/linux/netlinkaccess.h b/sysdeps/unix/sysv/linux/netlinkaccess.h index 6672e714ff..6b2d858c9d 100644 --- a/sysdeps/unix/sysv/linux/netlinkaccess.h +++ b/sysdeps/unix/sysv/linux/netlinkaccess.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2005 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 @@ -55,8 +55,7 @@ extern int __no_netlink_support attribute_hidden; extern int __netlink_open (struct netlink_handle *h); extern void __netlink_close (struct netlink_handle *h); extern void __netlink_free_handle (struct netlink_handle *h); -extern int __netlink_sendreq (struct netlink_handle *h, int type); -extern int __netlink_receive (struct netlink_handle *h); +extern int __netlink_request (struct netlink_handle *h, int type); #endif /* netlinkaccess.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S index a737322e2a..21ad98e501 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S @@ -34,11 +34,19 @@ ENTRY (BP_SYM (__brk)) lwz r6,8(r1) #ifdef PIC mflr r4 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r5 + addis r5,r5,__curbrk-1b@ha + mtlr r4 + stw r3,__curbrk-1b@l(r5) +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r5 lwz r5,__curbrk@got(r5) mtlr r4 stw r3,0(r5) +# endif #else lis r4,__curbrk@ha stw r3,__curbrk@l(r4) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c index e79d74cb75..069f94bd9d 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. +/* Copyright (C) 1997-2002, 2005 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 @@ -28,7 +28,7 @@ #ifdef __NR_ftruncate64 #ifndef __ASSUME_TRUNCATE64_SYSCALL /* The variable is shared between all wrappers around *truncate64 calls. */ -extern int have_no_truncate64; +extern int __have_no_truncate64; #endif @@ -39,7 +39,7 @@ __ftruncate64 (fd, length) off64_t length; { #ifndef __ASSUME_TRUNCATE64_SYSCALL - if (! have_no_truncate64) + if (! __have_no_truncate64) #endif { #ifndef __ASSUME_TRUNCATE64_SYSCALL @@ -57,7 +57,7 @@ __ftruncate64 (fd, length) #ifndef __ASSUME_TRUNCATE64_SYSCALL __set_errno (saved_errno); - have_no_truncate64 = 1; + __have_no_truncate64 = 1; #endif } diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S index 4e6cf4b352..10211458d5 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S @@ -129,8 +129,15 @@ ENTRY(__getcontext) #ifdef PIC mflr r8 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r7 + addis r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r7 +# endif # ifdef SHARED lwz r7,_rtld_global_ro@got(r7) mtlr r8 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S index b7a82a0182..eff60f9bbf 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S @@ -58,8 +58,15 @@ ENTRY(__setcontext) #ifdef PIC mflr r8 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r7 + addis r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r7 +# endif # ifdef SHARED lwz r7,_rtld_global_ro@got(r7) mtlr r8 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S index c52ad9babf..72170c95c0 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S @@ -39,6 +39,8 @@ #define NARGS 3 #endif +/* 0(r1) and 4(r1) are reserved by the ABI, 8(r1), 12(r1), 16(r1) are used + for temp saves. 44(r1) is used to save r30. */ #define stackblock 20 #ifndef __socket @@ -69,12 +71,6 @@ ENTRY(__socket) stw r8,20+stackblock(r1) #endif #if NARGS >= 7 - stw r9,24+stackblock(r1) -#endif -#if NARGS >= 8 - stw r10,28+stackblock(r1) -#endif -#if NARGS >= 9 #error too many arguments! #endif @@ -94,6 +90,7 @@ ENTRY(__socket) mflr r9 stw r9,52(r1) cfi_offset (lr, 4) + CGOTSETUP CENABLE stw r3,16(r1) li r3,P(SOCKOP_,socket) @@ -107,6 +104,7 @@ ENTRY(__socket) lwz r4,52(r1) lwz r0,12(r1) lwz r3,8(r1) + CGOTRESTORE mtlr r4 mtcr r0 addi r1,r1,48 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S index 0c84d48d10..6e46abadb0 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S @@ -130,8 +130,15 @@ ENTRY(__swapcontext) stfd fp0,_UC_FREGS+(32*8)(r3) #ifdef PIC mflr r8 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r7 + addis r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r7 +# endif # ifdef SHARED lwz r7,_rtld_global_ro@got(r7) mtlr r8 @@ -272,8 +279,15 @@ L(no_vec): #ifdef PIC mflr r8 +# ifdef HAVE_ASM_PPC_REL16 + bcl 20,31,1f +1: mflr r7 + addis r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l +# else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r7 +# endif # ifdef SHARED lwz r7,_rtld_global_ro@got(r7) mtlr r8 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c index ce8ebc2a97..ee1b50c04b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1997,1998,1999,2000,2002,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -29,7 +29,7 @@ #ifdef __NR_truncate64 #ifndef __ASSUME_TRUNCATE64_SYSCALL /* The variable is shared between all wrappers around *truncate64 calls. */ -int have_no_truncate64; +int __have_no_truncate64; #endif @@ -40,7 +40,7 @@ truncate64 (path, length) off64_t length; { #ifndef __ASSUME_TRUNCATE64_SYSCALL - if (! have_no_truncate64) + if (! __have_no_truncate64) #endif { #ifndef __ASSUME_TRUNCATE64_SYSCALL @@ -58,7 +58,7 @@ truncate64 (path, length) #ifndef __ASSUME_TRUNCATE64_SYSCALL __set_errno (saved_errno); - have_no_truncate64 = 1; + __have_no_truncate64 = 1; #endif } @@ -68,7 +68,7 @@ truncate64 (path, length) __set_errno (EINVAL); return -1; } - return truncate (path, (off_t) length); + return __truncate (path, (off_t) length); #endif } diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S index 8034559200..cf71a6df19 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S @@ -180,4 +180,4 @@ L(gotexitcodeaddr): #endif END(__makecontext) -weak_alias(__makecontext, makecontext) +weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/readdir64.c b/sysdeps/unix/sysv/linux/readdir64.c index fa815e9581..e2c5002390 100644 --- a/sysdeps/unix/sysv/linux/readdir64.c +++ b/sysdeps/unix/sysv/linux/readdir64.c @@ -4,4 +4,4 @@ #include <sysdeps/unix/readdir.c> -weak_alias(__readdir64, readdir64) +weak_alias (__readdir64, readdir64) diff --git a/sysdeps/unix/sysv/linux/readdir64_r.c b/sysdeps/unix/sysv/linux/readdir64_r.c index d63680bf9a..bce56124ef 100644 --- a/sysdeps/unix/sysv/linux/readdir64_r.c +++ b/sysdeps/unix/sysv/linux/readdir64_r.c @@ -4,4 +4,4 @@ #include <sysdeps/unix/readdir_r.c> -weak_alias(__readdir64_r, readdir64_r) +weak_alias (__readdir64_r, readdir64_r) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S index 2578b3ddc0..3b38d19488 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S @@ -72,4 +72,4 @@ ENTRY(__getcontext) br %r14 END(__getcontext) -weak_alias(__getcontext, getcontext) +weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S index 7ad360a3a0..cce8d29735 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S @@ -69,4 +69,4 @@ ENTRY(__setcontext) br %r14 END(__setcontext) -weak_alias(__setcontext, setcontext) +weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S index d9abb62c0b..bf70f11cc7 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S @@ -105,4 +105,4 @@ ENTRY(__swapcontext) /* Return. */ br %r14 END(__swapcontext) -weak_alias(__swapcontext, swapcontext) +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S index 5a0d7eca5d..8889b5359e 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S @@ -72,4 +72,4 @@ ENTRY(__getcontext) br %r14 END(__getcontext) -weak_alias(__getcontext, getcontext) +weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S index 268f36e713..7beca847c2 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S @@ -69,4 +69,4 @@ ENTRY(__setcontext) br %r14 END(__setcontext) -weak_alias(__setcontext, setcontext) +weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S index ef2a862c55..cb96fd3b6a 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S @@ -105,4 +105,4 @@ ENTRY(__swapcontext) /* Return. */ br %r14 END(__swapcontext) -weak_alias(__swapcontext, swapcontext) +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/sleep.c b/sysdeps/unix/sysv/linux/sleep.c index d94e4f62fd..0e41a11338 100644 --- a/sysdeps/unix/sysv/linux/sleep.c +++ b/sysdeps/unix/sysv/linux/sleep.c @@ -1,5 +1,5 @@ /* Implementation of the POSIX sleep function using nanosleep. - Copyright (C) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2003,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -21,6 +21,7 @@ #include <errno.h> #include <time.h> #include <signal.h> +#include <string.h> /* For the real memset prototype. */ #include <unistd.h> #include <sys/param.h> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/resource.h b/sysdeps/unix/sysv/linux/sparc/bits/resource.h index ed31b0e89c..8e7b64f996 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/resource.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/resource.h @@ -1,5 +1,5 @@ /* Bit values & structures for resource limits. Linux/SPARC version. - Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004 + Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -89,7 +89,18 @@ enum __rlimit_resource __RLIMIT_MSGQUEUE = 12, #define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - __RLIMIT_NLIMITS = 13, + /* Maximum nice priority allowed to raise to. + Nice levels 19 .. -20 correspond to 0 .. 39 + values of this resource limit. */ + __RLIMIT_NICE = 13, +#define RLIMIT_NICE __RLIMIT_NICE + + /* Maximum realtime priority allowed for non-priviledged + processes. */ + __RLIMIT_RTPRIO = 14, +#define RLIMIT_RTPRIO _RLIMIT_RTPRIO + + __RLIMIT_NLIMITS = 15, __RLIM_NLIMITS = __RLIMIT_NLIMITS #define RLIMIT_NLIMITS __RLIMIT_NLIMITS #define RLIM_NLIMITS __RLIM_NLIMITS diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S index 4d8fdb8200..95106d149f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -104,4 +104,4 @@ __thread_start: .size __thread_start, .-__thread_start -weak_alias(__clone, clone) +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index f6134599e2..0e1025ff6a 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -114,4 +114,4 @@ __thread_start: nop .size __thread_start, .-__thread_start -weak_alias(__clone, clone) +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S index ea18a9ae4e..e6f5b55d6f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S @@ -62,4 +62,4 @@ ENTRY(__getcontext) END(__getcontext) -weak_alias(__getcontext, getcontext) +weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S index 435bf99acb..88dc54e852 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S @@ -47,6 +47,6 @@ END(__libc_siglongjmp) strong_alias(__libc_siglongjmp, __longjmp) strong_alias(__libc_siglongjmp, __libc_longjmp) libc_hidden_def (__libc_longjmp) -weak_alias(__libc_siglongjmp, longjmp) -weak_alias(__libc_siglongjmp, _longjmp) -weak_alias(__libc_siglongjmp, siglongjmp) +weak_alias (__libc_siglongjmp, longjmp) +weak_alias (__libc_siglongjmp, _longjmp) +weak_alias (__libc_siglongjmp, siglongjmp) diff --git a/sysdeps/unix/sysv/linux/sys/quota.h b/sysdeps/unix/sysv/linux/sys/quota.h index a8baf40a91..be2810e0c7 100644 --- a/sysdeps/unix/sysv/linux/sys/quota.h +++ b/sysdeps/unix/sysv/linux/sys/quota.h @@ -41,6 +41,14 @@ #include <sys/types.h> /* + * Select between different incompatible quota versions. + * Default to the version used by Linux kernel version 2.4.22 + * or later. */ +#ifndef _LINUX_QUOTA_VERSION +# define _LINUX_QUOTA_VERSION 2 +#endif + +/* * Convert diskblocks to blocks and the other way around. * currently only to fool the BSD source. :-) */ @@ -94,21 +102,33 @@ #define SUBCMDSHIFT 8 #define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK)) -#define Q_QUOTAON 0x0100 /* enable quotas */ -#define Q_QUOTAOFF 0x0200 /* disable quotas */ -#define Q_GETQUOTA 0x0300 /* get limits and usage */ -#define Q_SETQUOTA 0x0400 /* set limits and usage */ -#define Q_SETUSE 0x0500 /* set usage */ -#define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */ -#define Q_SETQLIM 0x0700 /* set limits */ -#define Q_GETSTATS 0x0800 /* get collected stats */ -#define Q_RSQUASH 0x1000 /* set root_squash option */ +#if _LINUX_QUOTA_VERSION < 2 +# define Q_QUOTAON 0x0100 /* enable quotas */ +# define Q_QUOTAOFF 0x0200 /* disable quotas */ +# define Q_GETQUOTA 0x0300 /* get limits and usage */ +# define Q_SETQUOTA 0x0400 /* set limits and usage */ +# define Q_SETUSE 0x0500 /* set usage */ +# define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */ +# define Q_SETQLIM 0x0700 /* set limits */ +# define Q_GETSTATS 0x0800 /* get collected stats */ +# define Q_RSQUASH 0x1000 /* set root_squash option */ +#else +# define Q_SYNC 0x800001 /* sync disk copy of a filesystems quotas */ +# define Q_QUOTAON 0x800002 /* turn quotas on */ +# define Q_QUOTAOFF 0x800003 /* turn quotas off */ +# define Q_GETFMT 0x800004 /* get quota format used on given filesystem */ +# define Q_GETINFO 0x800005 /* get information about quota files */ +# define Q_SETINFO 0x800006 /* set information about quota files */ +# define Q_GETQUOTA 0x800007 /* get user quota structure */ +# define Q_SETQUOTA 0x800008 /* set user quota structure */ +#endif /* * The following structure defines the format of the disk quota file * (as it appears on disk) - the file is an array of these structures * indexed by user or group number. */ +#if _LINUX_QUOTA_VERSION < 2 struct dqblk { u_int32_t dqb_bhardlimit; /* absolute limit on disk blks alloc */ @@ -120,13 +140,45 @@ struct dqblk time_t dqb_btime; /* time limit for excessive disk use */ time_t dqb_itime; /* time limit for excessive files */ }; +#else + +/* Flags that indicate which fields in dqblk structure are valid. */ +#define QIF_BLIMITS 1 +#define QIF_SPACE 2 +#define QIF_ILIMITS 4 +#define QIF_INODES 8 +#define QIF_BTIME 16 +#define QIF_ITIME 32 +#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS) +#define QIF_USAGE (QIF_SPACE | QIF_INODES) +#define QIF_TIMES (QIF_BTIME | QIF_ITIME) +#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES) + +struct dqblk + { + u_int64_t dqb_bhardlimit; /* absolute limit on disk quota blocks alloc */ + u_int64_t dqb_bsoftlimit; /* preferred limit on disk quota blocks */ + u_int64_t dqb_curspace; /* current quota block count */ + u_int64_t dqb_ihardlimit; /* maximum # allocated inodes */ + u_int64_t dqb_isoftlimit; /* preferred inode limit */ + u_int64_t dqb_curinodes; /* current # allocated inodes */ + u_int64_t dqb_btime; /* time limit for excessive disk use */ + u_int64_t dqb_itime; /* time limit for excessive files */ + u_int32_t dqb_valid; /* bitmask of QIF_* constants */ + }; +#endif /* * Shorthand notation. */ #define dq_bhardlimit dq_dqb.dqb_bhardlimit #define dq_bsoftlimit dq_dqb.dqb_bsoftlimit -#define dq_curblocks dq_dqb.dqb_curblocks +#if _LINUX_QUOTA_VERSION < 2 +# define dq_curblocks dq_dqb.dqb_curblocks +#else +# define dq_curspace dq_dqb.dqb_curspace +# define dq_valid dq_dqb.dqb_valid +#endif #define dq_ihardlimit dq_dqb.dqb_ihardlimit #define dq_isoftlimit dq_dqb.dqb_isoftlimit #define dq_curinodes dq_dqb.dqb_curinodes @@ -135,6 +187,7 @@ struct dqblk #define dqoff(UID) ((loff_t)((UID) * sizeof (struct dqblk))) +#if _LINUX_QUOTA_VERSION < 2 struct dqstats { u_int32_t lookups; @@ -147,6 +200,22 @@ struct dqstats u_int32_t free_dquots; u_int32_t syncs; }; +#else + +/* Flags that indicate which fields in dqinfo structure are valid. */ +# define IIF_BGRACE 1 +# define IIF_IGRACE 2 +# define IIF_FLAGS 4 +# define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS) + +struct dqinfo + { + u_int64_t dqi_bgrace; + u_int64_t dqi_igrace; + u_int32_t dqi_flags; + u_int32_t dqi_valid; + }; +#endif __BEGIN_DECLS diff --git a/sysdeps/unix/sysv/linux/sysctl.c b/sysdeps/unix/sysv/linux/sysctl.c index 7e601acf2c..637fca5968 100644 --- a/sysdeps/unix/sysv/linux/sysctl.c +++ b/sysdeps/unix/sysv/linux/sysctl.c @@ -1,5 +1,5 @@ /* Read or write system information. Linux version. - Copyright (C) 1996-1999, 2000, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1996-2000,2002,2003,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,6 +18,7 @@ 02111-1307 USA. */ #include <errno.h> +#include <string.h> /* For the real memset prototype. */ #include <sys/sysctl.h> #include <sysdep.h> diff --git a/sysdeps/unix/sysv/linux/system.c b/sysdeps/unix/sysv/linux/system.c index 3fdff04c22..c5b389ea29 100644 --- a/sysdeps/unix/sysv/linux/system.c +++ b/sysdeps/unix/sysv/linux/system.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,6 +18,7 @@ #include <sched.h> #include <signal.h> +#include <string.h> /* For the real memset prototype. */ #include <sysdep.h> #include <unistd.h> #include <sys/wait.h> diff --git a/sysdeps/unix/sysv/linux/wordsize-64/getdents.c b/sysdeps/unix/sysv/linux/wordsize-64/getdents.c index 491fa9dfb2..5ea4c572a3 100644 --- a/sysdeps/unix/sysv/linux/wordsize-64/getdents.c +++ b/sysdeps/unix/sysv/linux/wordsize-64/getdents.c @@ -1,4 +1,4 @@ #define __getdents64 __no___getdents64_decl #include <sysdeps/unix/sysv/linux/getdents.c> #undef __getdents64 -weak_alias(__getdents, __getdents64); +weak_alias (__getdents, __getdents64); diff --git a/sysdeps/unix/sysv/linux/x86_64/getcontext.S b/sysdeps/unix/sysv/linux/x86_64/getcontext.S index d19c9f0d09..4bbc7a4d2e 100644 --- a/sysdeps/unix/sysv/linux/x86_64/getcontext.S +++ b/sysdeps/unix/sysv/linux/x86_64/getcontext.S @@ -85,4 +85,4 @@ L(pseudo_end): ret PSEUDO_END(__getcontext) -weak_alias(__getcontext, getcontext) +weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/x86_64/makecontext.c b/sysdeps/unix/sysv/linux/x86_64/makecontext.c index 6597d8980b..5deea7d1b2 100644 --- a/sysdeps/unix/sysv/linux/x86_64/makecontext.c +++ b/sysdeps/unix/sysv/linux/x86_64/makecontext.c @@ -110,4 +110,4 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) } -weak_alias(__makecontext, makecontext) +weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/x86_64/setcontext.S b/sysdeps/unix/sysv/linux/x86_64/setcontext.S index 51e4a50712..61fc07f44f 100644 --- a/sysdeps/unix/sysv/linux/x86_64/setcontext.S +++ b/sysdeps/unix/sysv/linux/x86_64/setcontext.S @@ -102,4 +102,4 @@ L(pseudo_end): ret PSEUDO_END(__setcontext) -weak_alias(__setcontext, setcontext) +weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/x86_64/swapcontext.S b/sysdeps/unix/sysv/linux/x86_64/swapcontext.S index 8d48d3bd5e..fc7996ccdc 100644 --- a/sysdeps/unix/sysv/linux/x86_64/swapcontext.S +++ b/sysdeps/unix/sysv/linux/x86_64/swapcontext.S @@ -120,4 +120,4 @@ L(pseudo_end): ret PSEUDO_END(__swapcontext) -weak_alias(__swapcontext, swapcontext) +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/x86_64/_mcount.S b/sysdeps/x86_64/_mcount.S index 1cc4e3065b..c005932c0c 100644 --- a/sysdeps/x86_64/_mcount.S +++ b/sysdeps/x86_64/_mcount.S @@ -64,4 +64,4 @@ C_LABEL(_mcount) ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) #undef mcount -weak_alias(_mcount, mcount) +weak_alias (_mcount, mcount) diff --git a/time/mktime.c b/time/mktime.c index 79221b8a74..258eec637b 100644 --- a/time/mktime.c +++ b/time/mktime.c @@ -38,10 +38,11 @@ #include <limits.h> +#include <string.h> /* For the real memcpy prototype. */ + #if DEBUG # include <stdio.h> # include <stdlib.h> -# include <string.h> /* Make it work even if the system's libc has its own mktime routine. */ # define mktime my_mktime #endif /* DEBUG */ |