aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--localedata/ChangeLog3
-rw-r--r--localedata/locales/ca_ES2
-rw-r--r--localedata/locales/ml_IN2
-rw-r--r--localedata/locales/yi_US2
-rw-r--r--nptl/ChangeLog8
-rw-r--r--nptl/Makefile3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S27
-rw-r--r--nptl/tst-align3.c57
8 files changed, 93 insertions, 11 deletions
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index c8b1f23..8cf2809 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,5 +1,8 @@
2005-10-14 Ulrich Drepper <drepper@redhat.com>
+ [BZ #982]
+ * locales/ml_IN: Fix title.
+
[BZ #981]
* locales/ca_ES: Fix title.
diff --git a/localedata/locales/ca_ES b/localedata/locales/ca_ES
index 1750222..b62381c 100644
--- a/localedata/locales/ca_ES
+++ b/localedata/locales/ca_ES
@@ -19,7 +19,7 @@ escape_char /
% for commercial purposes.
LC_IDENTIFICATION
-title "Catalan locale for Catalonia"
+title "Catalan locale for Spain"
source "RAP"
address ""
contact ""
diff --git a/localedata/locales/ml_IN b/localedata/locales/ml_IN
index 7053dd9..5430df7 100644
--- a/localedata/locales/ml_IN
+++ b/localedata/locales/ml_IN
@@ -5,7 +5,7 @@ escape_char /
% E-Mail : gnu@gnu.org.in
LC_IDENTIFICATION
-title " Malayalam language locale for India"
+title "Malayalam language locale for India"
source "Free Software Foundation of India, Trivandrum"
address ""
contact ""
diff --git a/localedata/locales/yi_US b/localedata/locales/yi_US
index 625758b..134eeed 100644
--- a/localedata/locales/yi_US
+++ b/localedata/locales/yi_US
@@ -7,7 +7,7 @@ escape_char /
%
LC_IDENTIFICATION
-title "Yiddish Language locale"
+title "Yiddish Language locale for the USA"
source "http:////www.uyip.org//"
address ""
contact "Pablo Saratxaga"
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index b4fe8e0..7059de6 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,11 @@
+2005-10-14 Jakub Jelinek <jakub@redhat.com>
+ Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Fix stack
+ alignment in callback function.
+ * Makefile: Add rules to build and run tst-align3.
+ * tst-align3.c: New file.
+
2005-10-03 Jakub Jelinek <jakub@redhat.com>
* allocatestack.c (setxid_signal_thread): Add
diff --git a/nptl/Makefile b/nptl/Makefile
index e7cbbcb..e3c16dd 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -205,7 +205,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 \
tst-sem1 tst-sem2 tst-sem3 tst-sem4 tst-sem5 tst-sem6 tst-sem7 \
tst-sem8 tst-sem9 \
tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 \
- tst-align tst-align2 \
+ tst-align tst-align2 tst-align3 \
tst-basic1 tst-basic2 tst-basic3 tst-basic4 tst-basic5 tst-basic6 \
tst-kill1 tst-kill2 tst-kill3 tst-kill4 tst-kill5 tst-kill6 \
tst-raise1 \
@@ -412,6 +412,7 @@ CFLAGS-tst-cleanupx4.c += -fexceptions
CFLAGS-tst-oncex3.c += -fexceptions
CFLAGS-tst-oncex4.c += -fexceptions
CFLAGS-tst-align.c += $(stack-align-test-flags)
+CFLAGS-tst-align3.c += $(stack-align-test-flags)
CFLAGS-tst-initializers1.c += -W -Wall -Werror
tst-cancel7-ARGS = --command "$(built-program-cmd)"
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S
index 6bf8d09..9db5516 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S
@@ -86,9 +86,11 @@ __pthread_once:
/* Preserve the pointer to the control variable. */
3: pushq %rdi
.Lpush_rdi:
+ pushq %rdi
+.Lpush_rdi2:
.LcleanupSTART:
- callq *8(%rsp)
+ callq *16(%rsp)
.LcleanupEND:
/* Get the control variable address back. */
@@ -99,6 +101,9 @@ __pthread_once:
LOCK
incl (%rdi)
+ addq $8, %rsp
+.Ladd1:
+
/* Wake up all other threads. */
movl $0x7fffffff, %edx
movl $FUTEX_WAKE, %esi
@@ -106,7 +111,7 @@ __pthread_once:
syscall
4: addq $8, %rsp
-.Ladd:
+.Ladd2:
xorl %eax, %eax
retq
@@ -224,20 +229,28 @@ clear_once_control:
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 24
.byte 4 # DW_CFA_advance_loc4
- .long .Lpop_rdi-.Lpush_rdi
+ .long .Lpush_rdi2-.Lpush_rdi
+ .byte 14 # DW_CFA_def_cfa_offset
+ .uleb128 32
+ .byte 4 # DW_CFA_advance_loc4
+ .long .Lpop_rdi-.Lpush_rdi2
+ .byte 14 # DW_CFA_def_cfa_offset
+ .uleb128 24
+ .byte 4 # DW_CFA_advance_loc4
+ .long .Ladd1-.Lpop_rdi
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
.byte 4 # DW_CFA_advance_loc4
- .long .Ladd-.Lpop_rdi
+ .long .Ladd2-.Ladd1
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 8
.byte 4 # DW_CFA_advance_loc4
- .long clear_once_control-.Ladd
+ .long clear_once_control-.Ladd2
.byte 14 # DW_CFA_def_cfa_offset
- .uleb128 24
+ .uleb128 32
#if 0
.byte 4 # DW_CFA_advance_loc4
- .long .Lpop_rdi2-clear_once_control
+ .long .Lpop_rdi3-clear_once_control
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
#endif
diff --git a/nptl/tst-align3.c b/nptl/tst-align3.c
new file mode 100644
index 0000000..64df146
--- /dev/null
+++ b/nptl/tst-align3.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <pthread.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <tst-stack-align.h>
+
+static bool ok = true;
+static pthread_once_t once = PTHREAD_ONCE_INIT;
+
+static void
+once_test (void)
+{
+ puts ("in once_test");
+
+ if (TEST_STACK_ALIGN ())
+ ok = false;
+}
+
+static int
+do_test (void)
+{
+ puts ("in main");
+
+ if (TEST_STACK_ALIGN ())
+ ok = false;
+
+ if (pthread_once (&once, once_test))
+ {
+ puts ("pthread once failed");
+ return 1;
+ }
+
+ return ok ? 0 : 1;
+}
+
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"