diff options
34 files changed, 663 insertions, 255 deletions
@@ -1,3 +1,58 @@ +2005-12-16 Thorsten Kukuk <kukuk@suse.de> + + [BZ #1978] + * sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags): + Map more filesystem types to a string. + * sysdeps/unix/sysv/linux/linux_fsinfo.h: Add SYSFS_MAGIC. + +2005-12-19 Jakub Jelinek <jakub@redhat.com> + + * locale/Makefile (programs/%-kw.h): Run $(GPERF) inside of the + programs subdirectory. + + * sysdeps/powerpc/powerpc32/__longjmp-common.S (__longjmp): Use + PTR_DEMANGLE for PC if defined. + * sysdeps/powerpc/powerpc64/__longjmp-common.S (__longjmp): + Likewise. + * sysdeps/unix/sysv/linux/ia64/__longjmp.S (__longjmp): Likewise. + * sysdeps/s390/s390-32/__longjmp.c (__longjmp): Xor %r14 with + THREAD_GET_POINTER_GUARD () if PTR_DEMANGLE is defined. + * sysdeps/s390/s390-64/__longjmp.c (__longjmp): Likewise. + * sysdeps/powerpc/powerpc32/setjmp-common.S (__sigsetjmp): Use + PTR_MANGLE for PC if defined. + * sysdeps/powerpc/powerpc64/setjmp-common.S (__sigsetjmp): Likewise. + * sysdeps/s390/s390-32/setjmp.S (__sigsetjmp): Likewise. + Avoid call to __sigjmp_save if IS_IN_rtld. + * sysdeps/s390/s390-32/elf/setjmp.S (__sigsetjmp): Likewise. + * sysdeps/s390/s390-64/setjmp.S (__sigsetjmp): Likewise. + * sysdeps/s390/s390-64/elf/setjmp.S (__sigsetjmp): Likewise. + * sysdeps/unix/sysv/linux/ia64/setjmp.S (__sigsetjmp): Likewise. + * sysdeps/unix/sysv/linux/ia64/sysdep.h (PTR_MANGLE, PTR_DEMANGLE): + Define. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h: Include tls.h. + (PTR_MANGLE, PTR_DEMANGLE): Define. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: Include tls.h + (PTR_MANGLE, PTR_DEMANGLE): Define. + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Include tls.h. + (PTR_MANGLE, PTR_DEMANGLE): Define. + (SYSCALL_ERROR_HANDLER): Add missing semicolons. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Include tls.h. + (PTR_MANGLE, PTR_DEMANGLE): Define. + * sysdeps/unix/sysv/linux/s390/s390-64/socket.S (__socket): Add + SYSCALL_ERROR_HANDLER. + +2005-12-19 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Handle NO_WEAK_ALIAS. + * sysdeps/unix/sysv/linux/sparc/sparc64/socket.S: Likewise. + Patch by Clint Adams. + +2005-12-16 Martin Schwidefsky <schwidefsky@de.ibm.com> + + * sysdeps/unix/sysv/linux/s390/sys/user.h: Copy struct user and + dependent definitions from the kernel header to sys/user.h and + remove the #include of asm/user.h. + 2005-12-19 Ulrich Drepper <drepper@redhat.com> * sysdeps/gnu/Makefile: Make sure the correct errlist.c file is diff --git a/locale/Makefile b/locale/Makefile index 2f2d2ba5f1..d9ab1947e7 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991,1992,1995-2002,2003 Free Software Foundation, Inc. +# Copyright (C) 1991,1992,1995-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 @@ -72,7 +72,8 @@ GPERFFLAGS = -acCgopt -k1,2,5,9,$$ -L ANSI-C include ../Rules programs/%-kw.h: programs/%-kw.gperf - $(GPERF) $(GPERFFLAGS) -N $(@F:-kw.h=_hash) $< > $@.new + cd programs \ + && $(GPERF) $(GPERFFLAGS) -N $(@F:-kw.h=_hash) $(<F) > $(@F).new mv -f $@.new $@ $(objpfx)localedef: $(localedef-modules:%=$(objpfx)%.o) diff --git a/locale/programs/charmap-kw.h b/locale/programs/charmap-kw.h index 25996f4346..d7d85774da 100644 --- a/locale/programs/charmap-kw.h +++ b/locale/programs/charmap-kw.h @@ -1,5 +1,5 @@ /* ANSI-C code produced by gperf version 3.0.1 */ -/* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N charmap_hash programs/charmap-kw.gperf */ +/* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N charmap_hash charmap-kw.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ @@ -28,7 +28,7 @@ #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." #endif -#line 1 "programs/charmap-kw.gperf" +#line 1 "charmap-kw.gperf" /* Copyright (C) 1995,1996,1997,1998,1999,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -50,7 +50,7 @@ #include <string.h> #include "locfile-token.h" -#line 23 "programs/charmap-kw.gperf" +#line 23 "charmap-kw.gperf" struct keyword_t ; #define TOTAL_KEYWORDS 17 @@ -133,45 +133,45 @@ charmap_hash (register const char *str, register unsigned int len) static const struct keyword_t wordlist[] = { {""}, {""}, {""}, -#line 38 "programs/charmap-kw.gperf" +#line 38 "charmap-kw.gperf" {"END", tok_end, 0}, {""}, -#line 39 "programs/charmap-kw.gperf" +#line 39 "charmap-kw.gperf" {"WIDTH", tok_width, 0}, -#line 34 "programs/charmap-kw.gperf" +#line 34 "charmap-kw.gperf" {"escseq", tok_escseq, 1}, -#line 36 "programs/charmap-kw.gperf" +#line 36 "charmap-kw.gperf" {"include", tok_include, 1}, {""}, {""}, -#line 27 "programs/charmap-kw.gperf" +#line 27 "charmap-kw.gperf" {"mb_cur_min", tok_mb_cur_min, 1}, -#line 28 "programs/charmap-kw.gperf" +#line 28 "charmap-kw.gperf" {"escape_char", tok_escape_char, 1}, -#line 29 "programs/charmap-kw.gperf" +#line 29 "charmap-kw.gperf" {"comment_char", tok_comment_char, 1}, -#line 25 "programs/charmap-kw.gperf" +#line 25 "charmap-kw.gperf" {"code_set_name", tok_code_set_name, 1}, -#line 40 "programs/charmap-kw.gperf" +#line 40 "charmap-kw.gperf" {"WIDTH_VARIABLE", tok_width_variable, 0}, -#line 26 "programs/charmap-kw.gperf" +#line 26 "charmap-kw.gperf" {"mb_cur_max", tok_mb_cur_max, 1}, -#line 35 "programs/charmap-kw.gperf" +#line 35 "charmap-kw.gperf" {"addset", tok_addset, 1}, -#line 37 "programs/charmap-kw.gperf" +#line 37 "charmap-kw.gperf" {"CHARMAP", tok_charmap, 0}, -#line 41 "programs/charmap-kw.gperf" +#line 41 "charmap-kw.gperf" {"WIDTH_DEFAULT", tok_width_default, 0}, {""}, -#line 33 "programs/charmap-kw.gperf" +#line 33 "charmap-kw.gperf" {"g3esc", tok_g3esc, 1}, {""}, {""}, {""}, {""}, -#line 32 "programs/charmap-kw.gperf" +#line 32 "charmap-kw.gperf" {"g2esc", tok_g2esc, 1}, {""}, {""}, {""}, {""}, -#line 31 "programs/charmap-kw.gperf" +#line 31 "charmap-kw.gperf" {"g1esc", tok_g1esc, 1}, {""}, {""}, {""}, {""}, -#line 30 "programs/charmap-kw.gperf" +#line 30 "charmap-kw.gperf" {"g0esc", tok_g0esc, 1} }; diff --git a/locale/programs/locfile-kw.h b/locale/programs/locfile-kw.h index 8692b0936c..6ec2134cdd 100644 --- a/locale/programs/locfile-kw.h +++ b/locale/programs/locfile-kw.h @@ -1,5 +1,5 @@ /* ANSI-C code produced by gperf version 3.0.1 */ -/* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N locfile_hash programs/locfile-kw.gperf */ +/* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N locfile_hash locfile-kw.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ @@ -28,7 +28,7 @@ #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." #endif -#line 1 "programs/locfile-kw.gperf" +#line 1 "locfile-kw.gperf" /* Copyright (C) 1996,1997,1998,1999,2000,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -50,7 +50,7 @@ #include <string.h> #include "locfile-token.h" -#line 23 "programs/locfile-kw.gperf" +#line 23 "locfile-kw.gperf" struct keyword_t ; #define TOTAL_KEYWORDS 175 @@ -133,457 +133,457 @@ locfile_hash (register const char *str, register unsigned int len) static const struct keyword_t wordlist[] = { {""}, {""}, {""}, -#line 30 "programs/locfile-kw.gperf" +#line 30 "locfile-kw.gperf" {"END", tok_end, 0}, {""}, {""}, -#line 69 "programs/locfile-kw.gperf" +#line 69 "locfile-kw.gperf" {"IGNORE", tok_ignore, 0}, -#line 127 "programs/locfile-kw.gperf" +#line 127 "locfile-kw.gperf" {"LC_TIME", tok_lc_time, 0}, -#line 29 "programs/locfile-kw.gperf" +#line 29 "locfile-kw.gperf" {"LC_CTYPE", tok_lc_ctype, 0}, {""}, -#line 164 "programs/locfile-kw.gperf" +#line 164 "locfile-kw.gperf" {"LC_ADDRESS", tok_lc_address, 0}, -#line 149 "programs/locfile-kw.gperf" +#line 149 "locfile-kw.gperf" {"LC_MESSAGES", tok_lc_messages, 0}, -#line 157 "programs/locfile-kw.gperf" +#line 157 "locfile-kw.gperf" {"LC_NAME", tok_lc_name, 0}, -#line 154 "programs/locfile-kw.gperf" +#line 154 "locfile-kw.gperf" {"LC_PAPER", tok_lc_paper, 0}, -#line 182 "programs/locfile-kw.gperf" +#line 182 "locfile-kw.gperf" {"LC_MEASUREMENT", tok_lc_measurement, 0}, -#line 55 "programs/locfile-kw.gperf" +#line 55 "locfile-kw.gperf" {"LC_COLLATE", tok_lc_collate, 0}, {""}, -#line 184 "programs/locfile-kw.gperf" +#line 184 "locfile-kw.gperf" {"LC_IDENTIFICATION", tok_lc_identification, 0}, -#line 197 "programs/locfile-kw.gperf" +#line 197 "locfile-kw.gperf" {"revision", tok_revision, 0}, -#line 68 "programs/locfile-kw.gperf" +#line 68 "locfile-kw.gperf" {"UNDEFINED", tok_undefined, 0}, -#line 123 "programs/locfile-kw.gperf" +#line 123 "locfile-kw.gperf" {"LC_NUMERIC", tok_lc_numeric, 0}, -#line 80 "programs/locfile-kw.gperf" +#line 80 "locfile-kw.gperf" {"LC_MONETARY", tok_lc_monetary, 0}, -#line 177 "programs/locfile-kw.gperf" +#line 177 "locfile-kw.gperf" {"LC_TELEPHONE", tok_lc_telephone, 0}, {""}, -#line 130 "programs/locfile-kw.gperf" +#line 130 "locfile-kw.gperf" {"week", tok_week, 0}, {""}, -#line 74 "programs/locfile-kw.gperf" +#line 74 "locfile-kw.gperf" {"define", tok_define, 0}, -#line 150 "programs/locfile-kw.gperf" +#line 150 "locfile-kw.gperf" {"yesexpr", tok_yesexpr, 0}, -#line 139 "programs/locfile-kw.gperf" +#line 139 "locfile-kw.gperf" {"era_year", tok_era_year, 0}, {""}, -#line 53 "programs/locfile-kw.gperf" +#line 53 "locfile-kw.gperf" {"translit_ignore", tok_translit_ignore, 0}, -#line 152 "programs/locfile-kw.gperf" +#line 152 "locfile-kw.gperf" {"yesstr", tok_yesstr, 0}, {""}, -#line 87 "programs/locfile-kw.gperf" +#line 87 "locfile-kw.gperf" {"negative_sign", tok_negative_sign, 0}, {""}, -#line 135 "programs/locfile-kw.gperf" +#line 135 "locfile-kw.gperf" {"t_fmt", tok_t_fmt, 0}, -#line 155 "programs/locfile-kw.gperf" +#line 155 "locfile-kw.gperf" {"height", tok_height, 0}, {""}, {""}, -#line 51 "programs/locfile-kw.gperf" +#line 51 "locfile-kw.gperf" {"translit_start", tok_translit_start, 0}, -#line 134 "programs/locfile-kw.gperf" +#line 134 "locfile-kw.gperf" {"d_fmt", tok_d_fmt, 0}, {""}, -#line 52 "programs/locfile-kw.gperf" +#line 52 "locfile-kw.gperf" {"translit_end", tok_translit_end, 0}, -#line 92 "programs/locfile-kw.gperf" +#line 92 "locfile-kw.gperf" {"n_cs_precedes", tok_n_cs_precedes, 0}, -#line 142 "programs/locfile-kw.gperf" +#line 142 "locfile-kw.gperf" {"era_t_fmt", tok_era_t_fmt, 0}, -#line 38 "programs/locfile-kw.gperf" +#line 38 "locfile-kw.gperf" {"space", tok_space, 0}, -#line 71 "programs/locfile-kw.gperf" +#line 71 "locfile-kw.gperf" {"reorder-end", tok_reorder_end, 0}, -#line 72 "programs/locfile-kw.gperf" +#line 72 "locfile-kw.gperf" {"reorder-sections-after", tok_reorder_sections_after, 0}, {""}, -#line 140 "programs/locfile-kw.gperf" +#line 140 "locfile-kw.gperf" {"era_d_fmt", tok_era_d_fmt, 0}, -#line 185 "programs/locfile-kw.gperf" +#line 185 "locfile-kw.gperf" {"title", tok_title, 0}, {""}, {""}, -#line 147 "programs/locfile-kw.gperf" +#line 147 "locfile-kw.gperf" {"timezone", tok_timezone, 0}, {""}, -#line 73 "programs/locfile-kw.gperf" +#line 73 "locfile-kw.gperf" {"reorder-sections-end", tok_reorder_sections_end, 0}, {""}, {""}, {""}, -#line 93 "programs/locfile-kw.gperf" +#line 93 "locfile-kw.gperf" {"n_sep_by_space", tok_n_sep_by_space, 0}, {""}, {""}, -#line 98 "programs/locfile-kw.gperf" +#line 98 "locfile-kw.gperf" {"int_n_cs_precedes", tok_int_n_cs_precedes, 0}, {""}, {""}, {""}, -#line 25 "programs/locfile-kw.gperf" +#line 25 "locfile-kw.gperf" {"escape_char", tok_escape_char, 0}, {""}, -#line 27 "programs/locfile-kw.gperf" +#line 27 "locfile-kw.gperf" {"repertoiremap", tok_repertoiremap, 0}, -#line 45 "programs/locfile-kw.gperf" +#line 45 "locfile-kw.gperf" {"charclass", tok_charclass, 0}, -#line 42 "programs/locfile-kw.gperf" +#line 42 "locfile-kw.gperf" {"print", tok_print, 0}, -#line 43 "programs/locfile-kw.gperf" +#line 43 "locfile-kw.gperf" {"xdigit", tok_xdigit, 0}, -#line 108 "programs/locfile-kw.gperf" +#line 108 "locfile-kw.gperf" {"duo_n_cs_precedes", tok_duo_n_cs_precedes, 0}, -#line 125 "programs/locfile-kw.gperf" +#line 125 "locfile-kw.gperf" {"thousands_sep", tok_thousands_sep, 0}, -#line 193 "programs/locfile-kw.gperf" +#line 193 "locfile-kw.gperf" {"territory", tok_territory, 0}, -#line 35 "programs/locfile-kw.gperf" +#line 35 "locfile-kw.gperf" {"digit", tok_digit, 0}, {""}, {""}, -#line 90 "programs/locfile-kw.gperf" +#line 90 "locfile-kw.gperf" {"p_cs_precedes", tok_p_cs_precedes, 0}, {""}, -#line 156 "programs/locfile-kw.gperf" +#line 156 "locfile-kw.gperf" {"width", tok_width, 0}, -#line 61 "programs/locfile-kw.gperf" +#line 61 "locfile-kw.gperf" {"script", tok_script, 0}, -#line 28 "programs/locfile-kw.gperf" +#line 28 "locfile-kw.gperf" {"include", tok_include, 0}, {""}, -#line 77 "programs/locfile-kw.gperf" +#line 77 "locfile-kw.gperf" {"else", tok_else, 0}, -#line 180 "programs/locfile-kw.gperf" +#line 180 "locfile-kw.gperf" {"int_select", tok_int_select, 0}, {""}, {""}, {""}, {""}, -#line 32 "programs/locfile-kw.gperf" +#line 32 "locfile-kw.gperf" {"upper", tok_upper, 0}, {""}, {""}, -#line 190 "programs/locfile-kw.gperf" +#line 190 "locfile-kw.gperf" {"tel", tok_tel, 0}, -#line 91 "programs/locfile-kw.gperf" +#line 91 "locfile-kw.gperf" {"p_sep_by_space", tok_p_sep_by_space, 0}, {""}, {""}, -#line 96 "programs/locfile-kw.gperf" +#line 96 "locfile-kw.gperf" {"int_p_cs_precedes", tok_int_p_cs_precedes, 0}, {""}, {""}, -#line 40 "programs/locfile-kw.gperf" +#line 40 "locfile-kw.gperf" {"punct", tok_punct, 0}, {""}, {""}, -#line 99 "programs/locfile-kw.gperf" +#line 99 "locfile-kw.gperf" {"int_n_sep_by_space", tok_int_n_sep_by_space, 0}, {""}, {""}, {""}, -#line 106 "programs/locfile-kw.gperf" +#line 106 "locfile-kw.gperf" {"duo_p_cs_precedes", tok_duo_p_cs_precedes, 0}, {""}, {""}, -#line 46 "programs/locfile-kw.gperf" +#line 46 "locfile-kw.gperf" {"class", tok_class, 0}, -#line 112 "programs/locfile-kw.gperf" +#line 112 "locfile-kw.gperf" {"duo_int_n_cs_precedes", tok_duo_int_n_cs_precedes, 0}, -#line 113 "programs/locfile-kw.gperf" +#line 113 "locfile-kw.gperf" {"duo_int_n_sep_by_space", tok_duo_int_n_sep_by_space, 0}, -#line 109 "programs/locfile-kw.gperf" +#line 109 "locfile-kw.gperf" {"duo_n_sep_by_space", tok_duo_n_sep_by_space, 0}, -#line 117 "programs/locfile-kw.gperf" +#line 117 "locfile-kw.gperf" {"duo_int_n_sign_posn", tok_duo_int_n_sign_posn, 0}, {""}, {""}, {""}, -#line 47 "programs/locfile-kw.gperf" +#line 47 "locfile-kw.gperf" {"charconv", tok_charconv, 0}, {""}, {""}, -#line 183 "programs/locfile-kw.gperf" +#line 183 "locfile-kw.gperf" {"measurement", tok_measurement, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 57 "programs/locfile-kw.gperf" +#line 57 "locfile-kw.gperf" {"section-symbol", tok_section_symbol, 0}, -#line 181 "programs/locfile-kw.gperf" +#line 181 "locfile-kw.gperf" {"int_prefix", tok_int_prefix, 0}, {""}, {""}, {""}, {""}, -#line 137 "programs/locfile-kw.gperf" +#line 137 "locfile-kw.gperf" {"t_fmt_ampm", tok_t_fmt_ampm, 0}, {""}, {""}, -#line 97 "programs/locfile-kw.gperf" +#line 97 "locfile-kw.gperf" {"int_p_sep_by_space", tok_int_p_sep_by_space, 0}, {""}, -#line 41 "programs/locfile-kw.gperf" +#line 41 "locfile-kw.gperf" {"graph", tok_graph, 0}, {""}, {""}, -#line 124 "programs/locfile-kw.gperf" +#line 124 "locfile-kw.gperf" {"decimal_point", tok_decimal_point, 0}, {""}, {""}, -#line 110 "programs/locfile-kw.gperf" +#line 110 "locfile-kw.gperf" {"duo_int_p_cs_precedes", tok_duo_int_p_cs_precedes, 0}, -#line 111 "programs/locfile-kw.gperf" +#line 111 "locfile-kw.gperf" {"duo_int_p_sep_by_space", tok_duo_int_p_sep_by_space, 0}, -#line 107 "programs/locfile-kw.gperf" +#line 107 "locfile-kw.gperf" {"duo_p_sep_by_space", tok_duo_p_sep_by_space, 0}, -#line 116 "programs/locfile-kw.gperf" +#line 116 "locfile-kw.gperf" {"duo_int_p_sign_posn", tok_duo_int_p_sign_posn, 0}, -#line 153 "programs/locfile-kw.gperf" +#line 153 "locfile-kw.gperf" {"nostr", tok_nostr, 0}, {""}, {""}, -#line 138 "programs/locfile-kw.gperf" +#line 138 "locfile-kw.gperf" {"era", tok_era, 0}, {""}, -#line 82 "programs/locfile-kw.gperf" +#line 82 "locfile-kw.gperf" {"currency_symbol", tok_currency_symbol, 0}, {""}, -#line 163 "programs/locfile-kw.gperf" +#line 163 "locfile-kw.gperf" {"name_ms", tok_name_ms, 0}, -#line 161 "programs/locfile-kw.gperf" +#line 161 "locfile-kw.gperf" {"name_mrs", tok_name_mrs, 0}, -#line 162 "programs/locfile-kw.gperf" +#line 162 "locfile-kw.gperf" {"name_miss", tok_name_miss, 0}, -#line 81 "programs/locfile-kw.gperf" +#line 81 "locfile-kw.gperf" {"int_curr_symbol", tok_int_curr_symbol, 0}, -#line 186 "programs/locfile-kw.gperf" +#line 186 "locfile-kw.gperf" {"source", tok_source, 0}, -#line 160 "programs/locfile-kw.gperf" +#line 160 "locfile-kw.gperf" {"name_mr", tok_name_mr, 0}, -#line 159 "programs/locfile-kw.gperf" +#line 159 "locfile-kw.gperf" {"name_gen", tok_name_gen, 0}, -#line 198 "programs/locfile-kw.gperf" +#line 198 "locfile-kw.gperf" {"date", tok_date, 0}, {""}, {""}, -#line 187 "programs/locfile-kw.gperf" +#line 187 "locfile-kw.gperf" {"address", tok_address, 0}, -#line 158 "programs/locfile-kw.gperf" +#line 158 "locfile-kw.gperf" {"name_fmt", tok_name_fmt, 0}, -#line 31 "programs/locfile-kw.gperf" +#line 31 "locfile-kw.gperf" {"copy", tok_copy, 0}, {""}, {""}, -#line 49 "programs/locfile-kw.gperf" +#line 49 "locfile-kw.gperf" {"tolower", tok_tolower, 0}, -#line 129 "programs/locfile-kw.gperf" +#line 129 "locfile-kw.gperf" {"day", tok_day, 0}, -#line 103 "programs/locfile-kw.gperf" +#line 103 "locfile-kw.gperf" {"duo_currency_symbol", tok_duo_currency_symbol, 0}, -#line 101 "programs/locfile-kw.gperf" +#line 101 "locfile-kw.gperf" {"int_n_sign_posn", tok_int_n_sign_posn, 0}, {""}, {""}, -#line 148 "programs/locfile-kw.gperf" +#line 148 "locfile-kw.gperf" {"date_fmt", tok_date_fmt, 0}, -#line 63 "programs/locfile-kw.gperf" +#line 63 "locfile-kw.gperf" {"order_end", tok_order_end, 0}, {""}, {""}, -#line 166 "programs/locfile-kw.gperf" +#line 166 "locfile-kw.gperf" {"country_name", tok_country_name, 0}, -#line 70 "programs/locfile-kw.gperf" +#line 70 "locfile-kw.gperf" {"reorder-after", tok_reorder_after, 0}, -#line 118 "programs/locfile-kw.gperf" +#line 118 "locfile-kw.gperf" {"uno_valid_from", tok_uno_valid_from, 0}, -#line 115 "programs/locfile-kw.gperf" +#line 115 "locfile-kw.gperf" {"duo_n_sign_posn", tok_duo_n_sign_posn, 0}, -#line 151 "programs/locfile-kw.gperf" +#line 151 "locfile-kw.gperf" {"noexpr", tok_noexpr, 0}, {""}, -#line 194 "programs/locfile-kw.gperf" +#line 194 "locfile-kw.gperf" {"audience", tok_audience, 0}, {""}, -#line 44 "programs/locfile-kw.gperf" +#line 44 "locfile-kw.gperf" {"blank", tok_blank, 0}, {""}, -#line 48 "programs/locfile-kw.gperf" +#line 48 "locfile-kw.gperf" {"toupper", tok_toupper, 0}, -#line 67 "programs/locfile-kw.gperf" +#line 67 "locfile-kw.gperf" {"position", tok_position, 0}, -#line 120 "programs/locfile-kw.gperf" +#line 120 "locfile-kw.gperf" {"duo_valid_from", tok_duo_valid_from, 0}, -#line 39 "programs/locfile-kw.gperf" +#line 39 "locfile-kw.gperf" {"cntrl", tok_cntrl, 0}, {""}, -#line 26 "programs/locfile-kw.gperf" +#line 26 "locfile-kw.gperf" {"comment_char", tok_comment_char, 0}, -#line 86 "programs/locfile-kw.gperf" +#line 86 "locfile-kw.gperf" {"positive_sign", tok_positive_sign, 0}, {""}, {""}, {""}, {""}, -#line 132 "programs/locfile-kw.gperf" +#line 132 "locfile-kw.gperf" {"mon", tok_mon, 0}, {""}, {""}, -#line 171 "programs/locfile-kw.gperf" +#line 171 "locfile-kw.gperf" {"country_car", tok_country_car, 0}, {""}, -#line 60 "programs/locfile-kw.gperf" +#line 60 "locfile-kw.gperf" {"symbol-equivalence", tok_symbol_equivalence, 0}, -#line 102 "programs/locfile-kw.gperf" +#line 102 "locfile-kw.gperf" {"duo_int_curr_symbol", tok_duo_int_curr_symbol, 0}, -#line 100 "programs/locfile-kw.gperf" +#line 100 "locfile-kw.gperf" {"int_p_sign_posn", tok_int_p_sign_posn, 0}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 172 "programs/locfile-kw.gperf" +#line 172 "locfile-kw.gperf" {"country_isbn", tok_country_isbn, 0}, -#line 36 "programs/locfile-kw.gperf" +#line 36 "locfile-kw.gperf" {"outdigit", tok_outdigit, 0}, {""}, -#line 114 "programs/locfile-kw.gperf" +#line 114 "locfile-kw.gperf" {"duo_p_sign_posn", tok_duo_p_sign_posn, 0}, {""}, -#line 133 "programs/locfile-kw.gperf" +#line 133 "locfile-kw.gperf" {"d_t_fmt", tok_d_t_fmt, 0}, {""}, {""}, -#line 33 "programs/locfile-kw.gperf" +#line 33 "locfile-kw.gperf" {"lower", tok_lower, 0}, {""}, -#line 167 "programs/locfile-kw.gperf" +#line 167 "locfile-kw.gperf" {"country_post", tok_country_post, 0}, -#line 146 "programs/locfile-kw.gperf" +#line 146 "locfile-kw.gperf" {"cal_direction", tok_cal_direction, 0}, {""}, -#line 189 "programs/locfile-kw.gperf" +#line 189 "locfile-kw.gperf" {"email", tok_email, 0}, -#line 141 "programs/locfile-kw.gperf" +#line 141 "locfile-kw.gperf" {"era_d_t_fmt", tok_era_d_t_fmt, 0}, {""}, {""}, -#line 173 "programs/locfile-kw.gperf" +#line 173 "locfile-kw.gperf" {"lang_name", tok_lang_name, 0}, {""}, -#line 179 "programs/locfile-kw.gperf" +#line 179 "locfile-kw.gperf" {"tel_dom_fmt", tok_tel_dom_fmt, 0}, {""}, {""}, {""}, -#line 54 "programs/locfile-kw.gperf" +#line 54 "locfile-kw.gperf" {"default_missing", tok_default_missing, 0}, -#line 89 "programs/locfile-kw.gperf" +#line 89 "locfile-kw.gperf" {"frac_digits", tok_frac_digits, 0}, {""}, {""}, {""}, -#line 88 "programs/locfile-kw.gperf" +#line 88 "locfile-kw.gperf" {"int_frac_digits", tok_int_frac_digits, 0}, -#line 170 "programs/locfile-kw.gperf" +#line 170 "locfile-kw.gperf" {"country_num", tok_country_num, 0}, -#line 119 "programs/locfile-kw.gperf" +#line 119 "locfile-kw.gperf" {"uno_valid_to", tok_uno_valid_to, 0}, {""}, {""}, {""}, {""}, {""}, -#line 50 "programs/locfile-kw.gperf" +#line 50 "locfile-kw.gperf" {"map", tok_map, 0}, {""}, -#line 105 "programs/locfile-kw.gperf" +#line 105 "locfile-kw.gperf" {"duo_frac_digits", tok_duo_frac_digits, 0}, -#line 178 "programs/locfile-kw.gperf" +#line 178 "locfile-kw.gperf" {"tel_int_fmt", tok_tel_int_fmt, 0}, -#line 121 "programs/locfile-kw.gperf" +#line 121 "locfile-kw.gperf" {"duo_valid_to", tok_duo_valid_to, 0}, -#line 144 "programs/locfile-kw.gperf" +#line 144 "locfile-kw.gperf" {"first_weekday", tok_first_weekday, 0}, {""}, -#line 143 "programs/locfile-kw.gperf" +#line 143 "locfile-kw.gperf" {"alt_digits", tok_alt_digits, 0}, -#line 95 "programs/locfile-kw.gperf" +#line 95 "locfile-kw.gperf" {"n_sign_posn", tok_n_sign_posn, 0}, -#line 84 "programs/locfile-kw.gperf" +#line 84 "locfile-kw.gperf" {"mon_thousands_sep", tok_mon_thousands_sep, 0}, -#line 145 "programs/locfile-kw.gperf" +#line 145 "locfile-kw.gperf" {"first_workday", tok_first_workday, 0}, -#line 64 "programs/locfile-kw.gperf" +#line 64 "locfile-kw.gperf" {"from", tok_from, 0}, -#line 131 "programs/locfile-kw.gperf" +#line 131 "locfile-kw.gperf" {"abmon", tok_abmon, 0}, {""}, {""}, -#line 192 "programs/locfile-kw.gperf" +#line 192 "locfile-kw.gperf" {"language", tok_language, 0}, {""}, {""}, -#line 195 "programs/locfile-kw.gperf" +#line 195 "locfile-kw.gperf" {"application", tok_application, 0}, {""}, -#line 126 "programs/locfile-kw.gperf" +#line 126 "locfile-kw.gperf" {"grouping", tok_grouping, 0}, -#line 78 "programs/locfile-kw.gperf" +#line 78 "locfile-kw.gperf" {"elif", tok_elif, 0}, -#line 128 "programs/locfile-kw.gperf" +#line 128 "locfile-kw.gperf" {"abday", tok_abday, 0}, {""}, -#line 196 "programs/locfile-kw.gperf" +#line 196 "locfile-kw.gperf" {"abbreviation", tok_abbreviation, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 56 "programs/locfile-kw.gperf" +#line 56 "locfile-kw.gperf" {"coll_weight_max", tok_coll_weight_max, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 66 "programs/locfile-kw.gperf" +#line 66 "locfile-kw.gperf" {"backward", tok_backward, 0}, -#line 104 "programs/locfile-kw.gperf" +#line 104 "locfile-kw.gperf" {"duo_int_frac_digits", tok_duo_int_frac_digits, 0}, {""}, -#line 94 "programs/locfile-kw.gperf" +#line 94 "locfile-kw.gperf" {"p_sign_posn", tok_p_sign_posn, 0}, {""}, -#line 199 "programs/locfile-kw.gperf" +#line 199 "locfile-kw.gperf" {"category", tok_category, 0}, {""}, -#line 122 "programs/locfile-kw.gperf" +#line 122 "locfile-kw.gperf" {"conversion_rate", tok_conversion_rate, 0}, {""}, -#line 83 "programs/locfile-kw.gperf" +#line 83 "locfile-kw.gperf" {"mon_decimal_point", tok_mon_decimal_point, 0}, {""}, {""}, {""}, -#line 62 "programs/locfile-kw.gperf" +#line 62 "locfile-kw.gperf" {"order_start", tok_order_start, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 188 "programs/locfile-kw.gperf" +#line 188 "locfile-kw.gperf" {"contact", tok_contact, 0}, {""}, {""}, {""}, -#line 169 "programs/locfile-kw.gperf" +#line 169 "locfile-kw.gperf" {"country_ab3", tok_country_ab3, 0}, {""}, {""}, {""}, {""}, -#line 168 "programs/locfile-kw.gperf" +#line 168 "locfile-kw.gperf" {"country_ab2", tok_country_ab2, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 174 "programs/locfile-kw.gperf" +#line 174 "locfile-kw.gperf" {"lang_ab", tok_lang_ab, 0}, -#line 176 "programs/locfile-kw.gperf" +#line 176 "locfile-kw.gperf" {"lang_lib", tok_lang_lib, 0}, {""}, {""}, {""}, {""}, -#line 191 "programs/locfile-kw.gperf" +#line 191 "locfile-kw.gperf" {"fax", tok_fax, 0}, {""}, -#line 136 "programs/locfile-kw.gperf" +#line 136 "locfile-kw.gperf" {"am_pm", tok_am_pm, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 37 "programs/locfile-kw.gperf" +#line 37 "locfile-kw.gperf" {"alnum", tok_alnum, 0}, {""}, {""}, {""}, -#line 175 "programs/locfile-kw.gperf" +#line 175 "locfile-kw.gperf" {"lang_term", tok_lang_term, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 79 "programs/locfile-kw.gperf" +#line 79 "locfile-kw.gperf" {"endif", tok_endif, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 165 "programs/locfile-kw.gperf" +#line 165 "locfile-kw.gperf" {"postal_fmt", tok_postal_fmt, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 75 "programs/locfile-kw.gperf" +#line 75 "locfile-kw.gperf" {"undef", tok_undef, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 58 "programs/locfile-kw.gperf" +#line 58 "locfile-kw.gperf" {"collating-element", tok_collating_element, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 85 "programs/locfile-kw.gperf" +#line 85 "locfile-kw.gperf" {"mon_grouping", tok_mon_grouping, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 65 "programs/locfile-kw.gperf" +#line 65 "locfile-kw.gperf" {"forward", tok_forward, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 59 "programs/locfile-kw.gperf" +#line 59 "locfile-kw.gperf" {"collating-symbol", tok_collating_symbol, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 34 "programs/locfile-kw.gperf" +#line 34 "locfile-kw.gperf" {"alpha", tok_alpha, 0}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -595,7 +595,7 @@ locfile_hash (register const char *str, register unsigned int len) {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 76 "programs/locfile-kw.gperf" +#line 76 "locfile-kw.gperf" {"ifdef", tok_ifdef, 0} }; diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 7a35696b38..77ce922963 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,19 @@ +2005-12-19 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ia64/tls.h (TLS_PRE_TCB_SIZE): Make room for 2 uintptr_t's + rather than one. + (THREAD_GET_POINTER_GUARD, THREAD_SET_POINTER_GUARD, + THREAD_COPY_POINTER_GUARD): Define. + * sysdeps/powerpc/tcb-offsets.sym (POINTER_GUARD): Add. + * sysdeps/powerpc/tls.h (tcbhead_t): Add pointer_guard field. + (THREAD_GET_POINTER_GUARD, THREAD_SET_POINTER_GUARD, + THREAD_COPY_POINTER_GUARD): Define. + * sysdeps/s390/tcb-offsets.sym (STACK_GUARD): Add. + * sysdeps/s390/tls.h (THREAD_GET_POINTER_GUARD, + THREAD_SET_POINTER_GUARD, THREAD_COPY_POINTER_GUARD): Define. + * sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S (__ia64_longjmp): + Use PTR_DEMANGLE for B0 if defined. + 2005-12-17 Ulrich Drepper <drepper@redhat.com> * pthread_create.c (__pthread_create_2_1): Use diff --git a/nptl/sysdeps/ia64/tls.h b/nptl/sysdeps/ia64/tls.h index e3ad0681d6..eb773aa97d 100644 --- a/nptl/sysdeps/ia64/tls.h +++ b/nptl/sysdeps/ia64/tls.h @@ -81,13 +81,14 @@ register struct pthread *__thread_self __asm__("r13"); # define TLS_TCB_SIZE sizeof (tcbhead_t) /* This is the size we need before TCB. - If there is not any room for uintptr_t stack_guard in struct pthread's - final padding, we need to put struct pthread 16 byte slower. */ + If there is not any room for uintptr_t stack_guard and + uintptr_t pointer_guard in struct pthread's final padding, + we need to put struct pthread 16 byte slower. */ # define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + (PTHREAD_STRUCT_END_PADDING < sizeof (uintptr_t) \ - ? ((sizeof (uintptr_t) + __alignof__ (struct pthread) - 1)\ - & ~(__alignof__ (struct pthread) - 1)) \ + (sizeof (struct pthread) \ + + (PTHREAD_STRUCT_END_PADDING < 2 * sizeof (uintptr_t) \ + ? ((2 * sizeof (uintptr_t) + __alignof__ (struct pthread) - 1) \ + & ~(__alignof__ (struct pthread) - 1)) \ : 0)) /* Alignment requirements for the TCB. */ @@ -156,6 +157,15 @@ register struct pthread *__thread_self __asm__("r13"); (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-1] \ = ((uintptr_t *) __thread_self)[-1]) +/* Set the pointer guard field in TCB head. */ +#define THREAD_GET_POINTER_GUARD() \ + (((uintptr_t *) __thread_self)[-2]) +#define THREAD_SET_POINTER_GUARD(value) \ + (((uintptr_t *) __thread_self)[-2] = (value)) +#define THREAD_COPY_POINTER_GUARD(descr) \ + (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-2] \ + = THREAD_GET_POINTER_GUARD ()) + #endif /* __ASSEMBLER__ */ #endif /* tls.h */ diff --git a/nptl/sysdeps/powerpc/tcb-offsets.sym b/nptl/sysdeps/powerpc/tcb-offsets.sym index 3962edbd54..4a8671e802 100644 --- a/nptl/sysdeps/powerpc/tcb-offsets.sym +++ b/nptl/sysdeps/powerpc/tcb-offsets.sym @@ -14,3 +14,4 @@ MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) #endif PID thread_offsetof (pid) TID thread_offsetof (tid) +POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) diff --git a/nptl/sysdeps/powerpc/tls.h b/nptl/sysdeps/powerpc/tls.h index b2322b09bd..976a271362 100644 --- a/nptl/sysdeps/powerpc/tls.h +++ b/nptl/sysdeps/powerpc/tls.h @@ -66,9 +66,11 @@ typedef union dtv # include <nptl/descr.h> /* The stack_guard is accessed directly by GCC -fstack-protector code, - so it is a part of public ABI. The dtv field is private. */ + so it is a part of public ABI. The dtv and pointer_guard fields + are private. */ typedef struct { + uintptr_t pointer_guard; uintptr_t stack_guard; dtv_t *dtv; } tcbhead_t; @@ -166,6 +168,17 @@ register void *__thread_register __asm__ ("r13"); = ((tcbhead_t *) ((char *) __thread_register \ - TLS_TCB_OFFSET))[-1].stack_guard) +/* Set the stack guard field in TCB head. */ +# define THREAD_GET_POINTER_GUARD() \ + (((tcbhead_t *) ((char *) __thread_register \ + - TLS_TCB_OFFSET))[-1].pointer_guard) +# define THREAD_SET_POINTER_GUARD(value) \ + (THREAD_GET_POINTER_GUARD () = (value)) +# define THREAD_COPY_POINTER_GUARD(descr) \ + (((tcbhead_t *) ((char *) (descr) \ + + TLS_PRE_TCB_SIZE))[-1].pointer_guard \ + = THREAD_GET_POINTER_GUARD()) + /* l_tls_offset == 0 is perfectly valid on PPC, so we have to use some different value to mean unset l_tls_offset. */ # define NO_TLS_OFFSET -1 diff --git a/nptl/sysdeps/s390/tcb-offsets.sym b/nptl/sysdeps/s390/tcb-offsets.sym index 237f975b25..9cfae211e0 100644 --- a/nptl/sysdeps/s390/tcb-offsets.sym +++ b/nptl/sysdeps/s390/tcb-offsets.sym @@ -2,5 +2,6 @@ #include <tls.h> MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) +STACK_GUARD offsetof (tcbhead_t, stack_guard) PID offsetof (struct pthread, pid) TID offsetof (struct pthread, tid) diff --git a/nptl/sysdeps/s390/tls.h b/nptl/sysdeps/s390/tls.h index f90b35b1e5..89ff095d52 100644 --- a/nptl/sysdeps/s390/tls.h +++ b/nptl/sysdeps/s390/tls.h @@ -164,6 +164,13 @@ typedef struct ((descr)->header.stack_guard \ = THREAD_GETMEM (THREAD_SELF, header.stack_guard)) +/* s390 doesn't have HP_TIMING_*, so for the time being + use stack_guard as pointer_guard. */ +#define THREAD_GET_POINTER_GUARD() \ + THREAD_GETMEM (THREAD_SELF, header.stack_guard) +#define THREAD_SET_POINTER_GUARD(value) +#define THREAD_COPY_POINTER_GUARD(descr) + #endif /* __ASSEMBLER__ */ #endif /* tls.h */ diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S b/nptl/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S index 1ceb210c2f..a1120d4d72 100644 --- a/nptl/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S +++ b/nptl/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001, 2004, 2005 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com>. The GNU C Library is free software; you can redistribute it and/or @@ -102,6 +102,9 @@ LEAF(__ia64_longjmp) ;; ld8.nta r20=[r2],16 // b4 ld8.nta r21=[r3],16 // b5 +#ifdef PTR_DEMANGLE + PTR_DEMANGLE (r16, r24) +#endif ;; ld8.nta r11=[r2],16 // ar.pfs ld8.nta r22=[r3],56 // ar.lc diff --git a/sysdeps/powerpc/powerpc32/__longjmp-common.S b/sysdeps/powerpc/powerpc32/__longjmp-common.S index 82531ad6b3..80f5905208 100644 --- a/sysdeps/powerpc/powerpc32/__longjmp-common.S +++ b/sysdeps/powerpc/powerpc32/__longjmp-common.S @@ -1,5 +1,6 @@ /* longjmp for PowerPC. - Copyright (C) 1995-1997,1999-2001,2003,2004 Free Software Foundation, Inc. + Copyright (C) 1995-1997, 1999-2001, 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 @@ -40,6 +41,9 @@ ENTRY (BP_SYM (__longjmp)) lwz r18,((JB_GPRS+4)*4)(r3) lwz r19,((JB_GPRS+5)*4)(r3) lwz r20,((JB_GPRS+6)*4)(r3) +#ifdef PTR_DEMANGLE + PTR_DEMANGLE (r0, r25) +#endif mtlr r0 lwz r21,((JB_GPRS+7)*4)(r3) lwz r22,((JB_GPRS+8)*4)(r3) diff --git a/sysdeps/powerpc/powerpc32/setjmp-common.S b/sysdeps/powerpc/powerpc32/setjmp-common.S index ae21284e03..750075459c 100644 --- a/sysdeps/powerpc/powerpc32/setjmp-common.S +++ b/sysdeps/powerpc/powerpc32/setjmp-common.S @@ -36,6 +36,9 @@ ENTRY (BP_SYM (__sigsetjmp)) stw r1,(JB_GPR1*4)(3) mflr r0 stw r14,((JB_GPRS+0)*4)(3) +#ifdef PTR_MANGLE + PTR_MANGLE (r0, r10) +#endif stw r0,(JB_LR*4)(3) stw r15,((JB_GPRS+1)*4)(3) mfcr r0 diff --git a/sysdeps/powerpc/powerpc64/__longjmp-common.S b/sysdeps/powerpc/powerpc64/__longjmp-common.S index 30087d7db4..73967e0093 100644 --- a/sysdeps/powerpc/powerpc64/__longjmp-common.S +++ b/sysdeps/powerpc/powerpc64/__longjmp-common.S @@ -1,5 +1,5 @@ /* longjmp for PowerPC64. - Copyright (C) 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004 + Copyright (C) 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -128,6 +128,9 @@ L(no_vmx): lfd fp19,((JB_FPRS+5)*8)(r3) ld r20,((JB_GPRS+6)*8)(r3) lfd fp20,((JB_FPRS+6)*8)(r3) +#ifdef PTR_DEMANGLE + PTR_DEMANGLE (r0, r25) +#endif mtlr r0 /* std r2,40(r1) Restore the TOC save area. */ ld r21,((JB_GPRS+7)*8)(r3) diff --git a/sysdeps/powerpc/powerpc64/setjmp-common.S b/sysdeps/powerpc/powerpc64/setjmp-common.S index c1926ecd68..4098fd63f5 100644 --- a/sysdeps/powerpc/powerpc64/setjmp-common.S +++ b/sysdeps/powerpc/powerpc64/setjmp-common.S @@ -56,6 +56,9 @@ JUMPTARGET(GLUE(__sigsetjmp,_ent)): #endif std r14,((JB_GPRS+0)*8)(3) stfd fp14,((JB_FPRS+0)*8)(3) +#ifdef PTR_MANGLE + PTR_MANGLE (r0, r10) +#endif std r0,(JB_LR*8)(3) std r15,((JB_GPRS+1)*8)(3) stfd fp15,((JB_FPRS+1)*8)(3) diff --git a/sysdeps/s390/s390-32/__longjmp.c b/sysdeps/s390/s390-32/__longjmp.c index c1b977cd49..07814e080a 100644 --- a/sysdeps/s390/s390-32/__longjmp.c +++ b/sysdeps/s390/s390-32/__longjmp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). @@ -29,14 +29,24 @@ void __longjmp (__jmp_buf env, int val) { - /* Restore registers and jump back. */ - asm volatile ("lr %%r2,%0\n\t" /* PUT val in grp 2. */ - "ld %%f6,48(%1)\n\t" - "ld %%f4,40(%1)\n\t" - "lm %%r6,%%r15,0(%1)\n\t" - "br %%r14" - : : "r" (val == 0 ? 1 : val), - "a" (env) : "2" ); +#ifdef PTR_DEMANGLE + register uintptr_t r5 __asm ("%r5") = THREAD_GET_POINTER_GUARD (); +#endif + /* Restore registers and jump back. */ + asm volatile ("lr %%r2,%0\n\t" /* PUT val in grp 2. */ + "ld %%f6,48(%1)\n\t" + "ld %%f4,40(%1)\n\t" + "lm %%r6,%%r15,0(%1)\n\t" +#ifdef PTR_DEMANGLE + "xr %%r14,%2\n\t" +#endif + "br %%r14" + : : "r" (val == 0 ? 1 : val), + "a" (env) +#ifdef PTR_DEMANGLE + , "r" (r5) +#endif + : "2" ); /* Avoid `volatile function does return' warnings. */ for (;;); diff --git a/sysdeps/s390/s390-32/elf/setjmp.S b/sysdeps/s390/s390-32/elf/setjmp.S index 0d1fa8e41d..f3ca8af6c2 100644 --- a/sysdeps/s390/s390-32/elf/setjmp.S +++ b/sysdeps/s390/s390-32/elf/setjmp.S @@ -1,5 +1,5 @@ /* setjmp for s390, ELF version. - Copyright (C) 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -46,10 +46,22 @@ END (__setjmp) ENTRY(__sigsetjmp) .Linternal_sigsetjmp: +#ifdef PTR_MANGLE + stm %r6,%r13,0(%r2) /* store registers in jmp_buf */ + lr %r4,%r14 + PTR_MANGLE (%r4, %r5) + st %r4,32(%r2) + st %r15,36(%r2) +#else stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ +#endif std %f4,40(%r2) std %f6,48(%r2) -#ifdef PIC +#if defined NOT_IN_libc && defined IS_IN_rtld + /* In ld.so we never save the signal mask. */ + lhi %r2,0 + br %r14 +#elif defined PIC /* We cannot use the PLT, because it requires that %r12 be set, but we can't save and restore our caller's value. Instead, we do an indirect jump through the GOT. */ diff --git a/sysdeps/s390/s390-32/setjmp.S b/sysdeps/s390/s390-32/setjmp.S index dc4862b2a6..a438595945 100644 --- a/sysdeps/s390/s390-32/setjmp.S +++ b/sysdeps/s390/s390-32/setjmp.S @@ -1,5 +1,5 @@ /* - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -29,10 +29,22 @@ /* R2 = pointer to jmp_buf, R3 = savemask */ ENTRY(__sigsetjmp) +#ifdef PTR_MANGLE + stm %r6,%r13,0(%r2) /* store registers in jmp_buf */ + lr %r4,%r14 + PTR_MANGLE (%r4, %r5) + st %r4,32(%r2) + st %r15,36(%r2) +#else stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ +#endif std %f4,40(%r2) std %f6,48(%r2) -#ifdef PIC +#if defined NOT_IN_libc && defined IS_IN_rtld + /* In ld.so we never save the signal mask. */ + lhi %r2,0 + br %r14 +#elif defined PIC /* We cannot use the PLT, because it requires that %r12 be set, but we can't save and restore our caller's value. Instead, we do an indirect jump through the GOT. */ diff --git a/sysdeps/s390/s390-64/__longjmp.c b/sysdeps/s390/s390-64/__longjmp.c index 80abd3849a..6650bf702f 100644 --- a/sysdeps/s390/s390-64/__longjmp.c +++ b/sysdeps/s390/s390-64/__longjmp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). @@ -29,18 +29,27 @@ void __longjmp (__jmp_buf env, int val) { - /* Restore registers and jump back. */ - asm volatile ("lgr %%r2,%0\n\t" /* Put val in grp 2. */ - "ld %%f7,104(%1)\n\t" - "ld %%f5,96(%1)\n\t" - "ld %%f3,88(%1)\n\t" - "ld %%f1,80(%1)\n\t" - "lmg %%r6,%%r15,0(%1)\n\t" - "br %%r14" - : : "r" (val == 0 ? 1 : val), - "a" (env) : "2" ); +#ifdef PTR_DEMANGLE + register uintptr_t r5 __asm ("%r5") = THREAD_GET_POINTER_GUARD (); +#endif + /* Restore registers and jump back. */ + asm volatile ("lgr %%r2,%0\n\t" /* Put val in grp 2. */ + "ld %%f7,104(%1)\n\t" + "ld %%f5,96(%1)\n\t" + "ld %%f3,88(%1)\n\t" + "ld %%f1,80(%1)\n\t" + "lmg %%r6,%%r15,0(%1)\n\t" +#ifdef PTR_DEMANGLE + "xgr %%r14,%2\n\t" +#endif + "br %%r14" + : : "r" (val == 0 ? 1 : val), + "a" (env) +#ifdef PTR_DEMANGLE + , "r" (r5) +#endif + : "2" ); /* Avoid `volatile function does return' warnings. */ for (;;); } - diff --git a/sysdeps/s390/s390-64/elf/setjmp.S b/sysdeps/s390/s390-64/elf/setjmp.S index fa3ac72480..44f7cf08cc 100644 --- a/sysdeps/s390/s390-64/elf/setjmp.S +++ b/sysdeps/s390/s390-64/elf/setjmp.S @@ -1,5 +1,5 @@ /* setjmp for 64 bit S/390, ELF version. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -46,12 +46,24 @@ END (setjmp) ENTRY(__sigsetjmp) .Linternal_sigsetjmp: +#ifdef PTR_MANGLE + stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */ + lgr %r4,%r14 + PTR_MANGLE (%r4, %r5) + stg %r4,64(%r2) + stg %r15,72(%r2) +#else stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ +#endif std %f1,80(%r2) std %f3,88(%r2) std %f5,96(%r2) std %f7,104(%r2) -#ifdef PIC +#if defined NOT_IN_libc && defined IS_IN_rtld + /* In ld.so we never save the signal mask. */ + lghi %r2,0 + br %r14 +#elif defined PIC jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */ #else jg __sigjmp_save diff --git a/sysdeps/s390/s390-64/setjmp.S b/sysdeps/s390/s390-64/setjmp.S index 7f245c2a1d..25d97b6a6a 100644 --- a/sysdeps/s390/s390-64/setjmp.S +++ b/sysdeps/s390/s390-64/setjmp.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2005 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -28,16 +28,26 @@ /* R2 = pointer to jmp_buf, R3 = savemask. */ ENTRY(__sigsetjmp) +#ifdef PTR_MANGLE + stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */ + lgr %r4,%r14 + PTR_MANGLE (%r4, %r5) + stg %r4,64(%r2) + stg %r15,72(%r2) +#else stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ +#endif std %f1,80(%r2) std %f3,88(%r2) std %f5,96(%r2) std %f7,104(%r2) -#ifdef PIC +#if defined NOT_IN_libc && defined IS_IN_rtld + /* In ld.so we never save the signal mask. */ + lghi %r2,0 + br %r14 +#elif defined PIC jg __sigjmp_save@PLT /* Tail-call __sigjmp_save. */ #else jg __sigjmp_save /* Tail-call __sigjmp_save. */ #endif END (__sigsetjmp) - - diff --git a/sysdeps/unix/sysv/linux/ia64/__longjmp.S b/sysdeps/unix/sysv/linux/ia64/__longjmp.S index 7922e81bea..aa18fadf9c 100644 --- a/sysdeps/unix/sysv/linux/ia64/__longjmp.S +++ b/sysdeps/unix/sysv/linux/ia64/__longjmp.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com>. The GNU C Library is free software; you can redistribute it and/or @@ -101,6 +101,9 @@ LEAF(__longjmp) ld8.nta r18=[r2],16 // b2 ld8.nta r19=[r3],16 // b3 ;; +#ifdef PTR_DEMANGLE + PTR_DEMANGLE (r16, r24) +#endif ld8.nta r20=[r2],16 // b4 ld8.nta r21=[r3],16 // b5 ;; diff --git a/sysdeps/unix/sysv/linux/ia64/setjmp.S b/sysdeps/unix/sysv/linux/ia64/setjmp.S index 9c987c7ef8..53f80d203e 100644 --- a/sysdeps/unix/sysv/linux/ia64/setjmp.S +++ b/sysdeps/unix/sysv/linux/ia64/setjmp.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005 + Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com>. The GNU C Library is free software; you can redistribute it and/or @@ -86,7 +87,7 @@ libc_hidden_def (_setjmp) ENTRY(__sigsetjmp) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) - alloc loc1=ar.pfs,2,3,2,0 + alloc loc1=ar.pfs,2,5,2,0 .save ar.unat, loc2 mov loc2=ar.unat ;; @@ -140,7 +141,13 @@ ENTRY(__sigsetjmp) ;; stf.spill.nta [r8]=f28,32 stf.spill.nta [r9]=f29,32 +#ifdef PTR_MANGLE + mov loc3=loc0 ;; + PTR_MANGLE (loc3, loc4) +#else + ;; +#endif stf.spill.nta [r8]=f30 stf.spill.nta [r9]=f31 @@ -151,7 +158,11 @@ ENTRY(__sigsetjmp) mov r25=ar.unat mov out0=in0 +#ifdef PTR_MANGLE + st8.nta [r2]=loc3,16 // b0 +#else st8.nta [r2]=loc0,16 // b0 +#endif st8.nta [r3]=r17,16 // b1 mov out1=in1 ;; @@ -169,7 +180,12 @@ ENTRY(__sigsetjmp) ;; st8.nta [r2]=r25 // ar.unat st8.nta [r3]=in0 // &__jmp_buf +#if defined NOT_IN_libc && defined IS_IN_rtld + /* In ld.so we never save the signal mask. */ + ;; +#else br.call.dpnt.few rp=__sigjmp_save +#endif .ret0: // force a new bundle ::q mov.m ar.unat=loc2 // restore caller's unat mov rp=loc0 diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h index a4453ddcc7..ef7bc8e136 100644 --- a/sysdeps/unix/sysv/linux/ia64/sysdep.h +++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 + Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Jes Sorensen, <Jes.Sorensen@cern.ch>, April 1999. Based on code originally written by David Mosberger-Tang @@ -360,4 +361,24 @@ #endif /* not __ASSEMBLER__ */ +/* Pointer mangling support. */ +#if defined NOT_IN_libc && defined IS_IN_rtld +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(reg, tmpreg) \ + add tmpreg=-16,r13 \ + ;; \ + ld8 tmpreg=[tmpreg] \ + ;; \ + xor reg=reg, tmpreg +# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) +# else +# define PTR_MANGLE(var) \ + (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + #endif /* linux/ia64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/internal_statvfs.c b/sysdeps/unix/sysv/linux/internal_statvfs.c index ea26729d55..73317ecafd 100644 --- a/sysdeps/unix/sysv/linux/internal_statvfs.c +++ b/sysdeps/unix/sysv/linux/internal_statvfs.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1998-2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -71,6 +71,33 @@ __statvfs_getflags (const char *name, int fstype, struct stat64 *st) case NFS_SUPER_MAGIC: fsname = "nfs"; break; + case SYSFS_MAGIC: + fsname = "sysfs"; + break; + case REISERFS_SUPER_MAGIC: + fsname = "reiserfs"; + break; + case XFS_SUPER_MAGIC: + fsname = "xfs"; + break; + case JFS_SUPER_MAGIC: + fsname = "jfs"; + break; + case HPFS_SUPER_MAGIC: + fsname = "hpfs"; + break; + case DEVFS_SUPER_MAGIC: + fsname = "devfs"; + break; + case ISOFS_SUPER_MAGIC: + fsname = "iso9660"; + break; + case MSDOS_SUPER_MAGIC: + fsname = "msdos"; + break; + case NTFS_SUPER_MAGIC: + fsname = "ntfs"; + break; } FILE *mtab = __setmntent ("/proc/mounts", "r"); diff --git a/sysdeps/unix/sysv/linux/linux_fsinfo.h b/sysdeps/unix/sysv/linux/linux_fsinfo.h index 13c3856266..8c6591ada3 100644 --- a/sysdeps/unix/sysv/linux/linux_fsinfo.h +++ b/sysdeps/unix/sysv/linux/linux_fsinfo.h @@ -1,5 +1,5 @@ /* Constants from kernel header for various FSes. - Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc. + Copyright (C) 1998,1999,2000,2001,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 @@ -135,6 +135,9 @@ /* Constants that identify the `vxfs' filesystem. */ #define VXFS_SUPER_MAGIC 0xa501fcf5 +/* Constants that identify the `sysfs´ filesystem. */ +#define SYSFS_MAGIC 0x62656572 + /* Maximum link counts. */ #define COH_LINK_MAX 10000 #define EXT2_LINK_MAX 32000 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h index 81f37c5103..546e712edc 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h @@ -20,6 +20,7 @@ #define _LINUX_POWERPC_SYSDEP_H 1 #include <sysdeps/unix/powerpc/sysdep.h> +#include <tls.h> /* Some systen calls got renamed over time, but retained the same semantics. Handle them here so they can be catched by both C and assembler stubs in @@ -170,4 +171,21 @@ #endif /* __ASSEMBLER__ */ +/* Pointer mangling support. */ +#if defined NOT_IN_libc && defined IS_IN_rtld +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(reg, tmpreg) \ + lwz tmpreg,POINTER_GUARD(r2); \ + xor reg,tmpreg,reg +# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) +# else +# define PTR_MANGLE(var) \ + (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + #endif /* linux/powerpc/powerpc32/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h index c3463f7431..3ece017563 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h @@ -23,6 +23,7 @@ #define _LINUX_POWERPC_SYSDEP_H 1 #include <sysdeps/unix/powerpc/sysdep.h> +#include <tls.h> /* Define __set_errno() for INLINE_SYSCALL macro below. */ #ifndef __ASSEMBLER__ @@ -180,4 +181,22 @@ #define ASM_INPUT_5 ASM_INPUT_4, "5" (r7) #define ASM_INPUT_6 ASM_INPUT_5, "6" (r8) + +/* Pointer mangling support. */ +#if defined NOT_IN_libc && defined IS_IN_rtld +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(reg, tmpreg) \ + ld tmpreg,POINTER_GUARD(r13); \ + xor reg,tmpreg,reg +# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) +# else +# define PTR_MANGLE(var) \ + (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + #endif /* linux/powerpc/powerpc64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h index 43b1b951d5..355108a493 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h @@ -1,4 +1,5 @@ -/* Copyright (C) 2000,01,02,03,04 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 + Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -23,6 +24,7 @@ #include <sysdeps/s390/s390-32/sysdep.h> #include <sysdeps/unix/sysdep.h> #include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */ +#include <tls.h> /* For Linux we can use the system call table in the header file /usr/include/asm/unistd.h @@ -111,8 +113,8 @@ 0: lcr %r0,%r2; \ basr %r1,0; \ 1: al %r1,2f-1b(%r1); \ - l %r1,SYSCALL_ERROR_ERRNO@gotntpoff(%r1) \ - ear %r2,%a0 \ + l %r1,SYSCALL_ERROR_ERRNO@gotntpoff(%r1); \ + ear %r2,%a0; \ st %r0,0(%r1,%r2); \ lhi %r2,-1; \ br %r14; \ @@ -261,4 +263,24 @@ #define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5) #define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) + +/* Pointer mangling support. */ +#if defined NOT_IN_libc && defined IS_IN_rtld +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +#else +/* For the time being just use stack_guard rather than a separate + pointer_guard. */ +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(reg, tmpreg) \ + ear tmpreg,%a0; \ + x reg,STACK_GUARD(tmpreg) +# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) +# else +# define PTR_MANGLE(var) \ + (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + #endif /* _LINUX_S390_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/socket.S b/sysdeps/unix/sysv/linux/s390/s390-64/socket.S index c98a97449b..d4c3a1c4e1 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/socket.S +++ b/sysdeps/unix/sysv/linux/s390/s390-64/socket.S @@ -128,6 +128,7 @@ L(socket_cancel): j 4b #endif + SYSCALL_ERROR_HANDLER END (__socket) #ifndef NO_WEAK_ALIAS diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h index 154bc06803..562fc7df76 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h @@ -1,5 +1,5 @@ /* Assembler macros for 64 bit S/390. - Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -24,6 +24,7 @@ #include <sysdeps/s390/s390-64/sysdep.h> #include <sysdeps/unix/sysdep.h> #include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */ +#include <tls.h> /* For Linux we can use the system call table in the header file /usr/include/asm/unistd.h @@ -263,4 +264,25 @@ #define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5) #define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) +/* Pointer mangling support. */ +#if defined NOT_IN_libc && defined IS_IN_rtld +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +#else +/* For the time being just use stack_guard rather than a separate + pointer_guard. */ +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(reg, tmpreg) \ + ear tmpreg,%a0; \ + sllg tmpreg,tmpreg,32; \ + ear tmpreg,%a1; \ + xg reg,STACK_GUARD(tmpreg) +# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) +# else +# define PTR_MANGLE(var) \ + (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + #endif /* _LINUX_S390_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/s390/sys/user.h b/sysdeps/unix/sysv/linux/s390/sys/user.h index eddd196c72..f00caea84d 100644 --- a/sysdeps/unix/sysv/linux/s390/sys/user.h +++ b/sysdeps/unix/sysv/linux/s390/sys/user.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 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 @@ -19,6 +19,65 @@ #ifndef _SYS_USER_H #define _SYS_USER_H 1 -#include <asm/user.h> +/* The whole purpose of this file is for GDB and GDB only. Don't read + too much into it. Don't use it for anything other than GDB unless + you know what you are doing. */ + +struct _user_psw_struct +{ + unsigned long mask; + unsigned long addr; +}; + +struct _user_fpregs_struct +{ + unsigned int fpc; + double fprs[16]; +}; + +struct _user_per_struct +{ + unsigned long control_regs[3]; + unsigned single_step : 1; + unsigned instruction_fetch : 1; + unsigned : 30; + unsigned long starting_addr; + unsigned long ending_addr; + unsigned short perc_atmid; + unsigned long address; + unsigned char access_id; +}; + +struct _user_regs_struct +{ + struct _user_psw_struct psw; /* Program status word. */ + unsigned long gprs[16]; /* General purpose registers. */ + unsigned int acrs[16]; /* Access registers. */ + unsigned long orig_gpr2; /* Original gpr2. */ + struct _user_fpregs_struct fp_regs; /* Floating point registers. */ + struct _user_per_struct per_info; /* Hardware tracing registers. */ + unsigned long ieee_instruction_pointer; +}; + +struct user { + struct _user_regs_struct regs; /* User registers. */ + unsigned long int u_tsize; /* Text segment size (pages). */ + unsigned long int u_dsize; /* Data segment size (pages). */ + unsigned long int u_ssize; /* Stack segment size (pages). */ + unsigned long start_code; /* Starting address of text. */ + unsigned long start_stack; /* Starting address of stack area. */ + long int signal; /* Signal causing the core dump. */ + struct _user_regs_struct *u_ar0; /* Help gdb find registers. */ + unsigned long magic; /* Identifies a core file. */ + char u_comm[32]; /* User command naem. */ +}; + +#define PAGE_SHIFT 12 +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) +#define NBPG PAGE_SIZE +#define UPAGES 1 +#define HOST_TEXT_START_ADDR (u.start_code) +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) #endif /* _SYS_USER_H */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S index 3c12278e6a..911d5c6b39 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S @@ -40,7 +40,11 @@ The .S files for the other calls just #define socket and #include this. */ #ifndef __socket -#define __socket P(__,socket) +# ifndef NO_WEAK_ALIAS +# define __socket P(__,socket) +# else +# define __socket socket +# endif #endif .globl __socket @@ -105,4 +109,6 @@ ENTRY (__socket) END (__socket) +#ifndef NO_WEAK_ALIAS weak_alias (__socket, socket) +#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S b/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S index 575416ff3f..7a8b205538 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S @@ -40,7 +40,11 @@ The .S files for the other calls just #define socket and #include this. */ #ifndef __socket -#define __socket P(__,socket) +# ifndef NO_WEAK_ALIAS +# define __socket P(__,socket) +# else +# define __socket socket +# endif #endif .globl __socket @@ -107,4 +111,6 @@ ENTRY (__socket) END (__socket) +#ifndef NO_WEAK_ALIAS weak_alias (__socket, socket) +#endif |