aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S137
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S115
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h44
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S102
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S72
-rw-r--r--string/strxfrm.c9
7 files changed, 271 insertions, 213 deletions
diff --git a/ChangeLog b/ChangeLog
index d45faaca8c..0c22f0f124 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-14 Ulrich Drepper <drepper@redhat.com>
+
+ * string/strxfrm.c (STRXFRM): Terminate rulearr at correct
+ position. Reported by jreiser@BitWagon.com.
+
2003-04-13 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/unwind-dw2-fde.c: Update from recent gcc version.
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
index cd80099406..9e7fff7e6a 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
@@ -345,103 +345,112 @@ versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,
.section .eh_frame,"a",@progbits
.LSTARTFRAME:
- .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
+ .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
.LSTARTCIE:
- .long 0 # CIE ID.
- .byte 1 # Version number.
+ .long 0 # CIE ID.
+ .byte 1 # Version number.
#ifdef SHARED
- .string "zR" # NUL-terminated augmentation string.
+ .string "zR" # NUL-terminated augmentation
+ # string.
#else
- .ascii "\0" # NUL-terminated augmentation string.
+ .ascii "\0" # NUL-terminated augmentation
+ # string.
#endif
- .uleb128 1 # Code alignment factor.
- .sleb128 -4 # Data alignment factor.
- .byte 8 # Return address register column.
+ .uleb128 1 # Code alignment factor.
+ .sleb128 -4 # Data alignment factor.
+ .byte 8 # Return address register
+ # column.
#ifdef SHARED
- .uleb128 1 # Augmentation value length.
- .byte 0x1b # Encoding: DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
+ .uleb128 1 # Augmentation value length.
+ .byte 0x1b # Encoding: DW_EH_PE_pcrel
+ # + DW_EH_PE_sdata4.
#endif
- .byte 0x0c # DW_CFA_def_cfa
+ .byte 0x0c # DW_CFA_def_cfa
.uleb128 4
.uleb128 4
- .byte 0x88 # DW_CFA_offset, column 0x8
+ .byte 0x88 # DW_CFA_offset, column 0x8
.uleb128 1
.align 4
.LENDCIE:
- .long .LENDFDE-.LSTARTFDE # Length of the FDE.
+ .long .LENDFDE-.LSTARTFDE # Length of the FDE.
.LSTARTFDE:
- .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
+ .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
#ifdef SHARED
- .long .LSTARTCODE-. # PC-relative start address of the code
+ .long .LSTARTCODE-. # PC-relative start address
+ # of the code
#else
- .long .LSTARTCODE # Start address of the code.
+ .long .LSTARTCODE # Start address of the code.
#endif
- .long .LENDCODE-.LSTARTCODE # Length of the code.
+ .long .LENDCODE-.LSTARTCODE # Length of the code.
#ifdef SHARED
- .uleb128 0 # No augmentation data.
+ .uleb128 0 # No augmentation data.
#endif
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_ebp-.LSTARTCODE
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lpush_ebp-.LSTARTCODE # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 8
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_edi-.Lpush_ebp
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x85 # DW_CFA_offset %ebp
+ .uleb128 2
+ .byte 0x40+ .Lpush_edi-.Lpush_ebp # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 12
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_esi-.Lpush_edi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x87 # DW_CFA_offset %edi
+ .uleb128 3
+ .byte 0x40+.Lpush_esi-.Lpush_edi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_ebx-.Lpush_esi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x86 # DW_CFA_offset %esi
+ .uleb128 4
+ .byte 0x40+.Lpush_ebx-.Lpush_esi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush4-.Lpush_ebx
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x83 # DW_CFA_offset %ebx
+ .uleb128 5
+ .byte 0x40+.Lpush4-.Lpush_ebx # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 24
- .byte 4 # DW_CFA_advance_loc4
- .long .Lsubl-.Lpush4
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lsubl-.Lpush4 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 64
- .byte 4 # DW_CFA_advance_loc4
- .long .Laddl-.Lsubl
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Laddl-.Lsubl # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_ebx-.Laddl
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lpop_ebx-.Laddl # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_esi-.Lpop_ebx
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xc3 # DW_CFA_restore %ebx
+ .byte 0x40+.Lpop_esi-.Lpop_ebx # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 12
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_edi-.Lpop_esi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xc6 # DW_CFA_restore %esi
+ .byte 0x40+.Lpop_edi-.Lpop_esi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 8
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_ebp-.Lpop_edi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xc7 # DW_CFA_restore %edi
+ .byte 0x40+.Lpop_ebp-.Lpop_edi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 4
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl1-.Lpop_edi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xc5 # DW_CFA_restore %ebp
+ .byte 0x40+.LSbl1-.Lpop_edi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl2-.LSbl1
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.LSbl2-.LSbl1 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 64
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl3-.LSbl2
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x85 # DW_CFA_offset %ebp
+ .uleb128 2
+ .byte 0x87 # DW_CFA_offset %edi
+ .uleb128 3
+ .byte 0x86 # DW_CFA_offset %esi
+ .uleb128 4
+ .byte 0x83 # DW_CFA_offset %ebx
+ .uleb128 5
+ .byte 0x40+.LSbl3-.LSbl2 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 24
#if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl4-.LSbl3
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.LSbl4-.LSbl3 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 64
#endif
.align 4
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
index 89bd4a66f0..d701d77fe4 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
@@ -316,88 +316,95 @@ versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
.LSTARTFRAME:
.long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
.LSTARTCIE:
- .long 0 # CIE ID.
- .byte 1 # Version number.
+ .long 0 # CIE ID.
+ .byte 1 # Version number.
#ifdef SHARED
- .string "zR" # NUL-terminated augmentation string.
+ .string "zR" # NUL-terminated augmentation
+ # string.
#else
- .ascii "\0" # NUL-terminated augmentation string.
+ .ascii "\0" # NUL-terminated augmentation
+ # string.
#endif
- .uleb128 1 # Code alignment factor.
- .sleb128 -4 # Data alignment factor.
- .byte 8 # Return address register column.
+ .uleb128 1 # Code alignment factor.
+ .sleb128 -4 # Data alignment factor.
+ .byte 8 # Return address register
+ # column.
#ifdef SHARED
- .uleb128 1 # Augmentation value length.
- .byte 0x1b # Encoding: DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
+ .uleb128 1 # Augmentation value length.
+ .byte 0x1b # Encoding: DW_EH_PE_pcrel
+ # + DW_EH_PE_sdata4.
#endif
- .byte 0x0c # DW_CFA_def_cfa
+ .byte 0x0c # DW_CFA_def_cfa
.uleb128 4
.uleb128 4
- .byte 0x88 # DW_CFA_offset, column 0x8
+ .byte 0x88 # DW_CFA_offset, column 0x8
.uleb128 1
.align 4
.LENDCIE:
- .long .LENDFDE-.LSTARTFDE # Length of the FDE.
+ .long .LENDFDE-.LSTARTFDE # Length of the FDE.
.LSTARTFDE:
- .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
+ .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
#ifdef SHARED
- .long .LSTARTCODE-. # PC-relative start address of the code
+ .long .LSTARTCODE-. # PC-relative start address
+ # of the code.
#else
- .long .LSTARTCODE # Start address of the code.
+ .long .LSTARTCODE # Start address of the code.
#endif
- .long .LENDCODE-.LSTARTCODE # Length of the code.
+ .long .LENDCODE-.LSTARTCODE # Length of the code.
#ifdef SHARED
- .uleb128 0 # No augmentation data.
+ .uleb128 0 # No augmentation data.
#endif
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_edi-.LSTARTCODE
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lpush_edi-.LSTARTCODE # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 8
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_esi-.Lpush_edi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x87 # DW_CFA_offset %edi
+ .uleb128 2
+ .byte 0x40+.Lpush_esi-.Lpush_edi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 12
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_ebx-.Lpush_esi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x86 # DW_CFA_offset %esi
+ .uleb128 3
+ .byte 0x40+.Lpush_ebx-.Lpush_esi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush4-.Lpush_ebx
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x83 # DW_CFA_offset %ebx
+ .uleb128 4
+ .byte 0x40+.Lpush4-.Lpush_ebx # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
- .byte 4 # DW_CFA_advance_loc4
- .long .Lsubl-.Lpush4
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lsubl-.Lpush4 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 52
- .byte 4 # DW_CFA_advance_loc4
- .long .Laddl-.Lsubl
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Laddl-.Lsubl # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_ebx-.Laddl
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+ .Lpop_ebx-.Laddl # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 12
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_esi-.Lpop_ebx
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xc3 # DW_CFA_restore %ebx
+ .byte 0x40+.Lpop_esi-.Lpop_ebx # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 8
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_edi-.Lpop_esi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xc6 # DW_CFA_restore %esi
+ .byte 0x40+.Lpop_edi-.Lpop_esi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 4
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl1-.Lpop_edi
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xc7 # DW_CFA_restore %edi
+ .byte 0x40+.LSbl1-.Lpop_edi # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl2-.LSbl1
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x87 # DW_CFA_offset %edi
+ .uleb128 2
+ .byte 0x86 # DW_CFA_offset %esi
+ .uleb128 3
+ .byte 0x83 # DW_CFA_offset %ebx
+ .uleb128 4
+ .byte 0x40+.LSbl2-.LSbl1 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 52
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl3-.LSbl2
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.LSbl3-.LSbl2 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
.align 4
.LENDFDE:
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
index 2f80654b5b..22fdc9421b 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
@@ -59,19 +59,16 @@
.long 0; \
/* Version number. */ \
.byte 1; \
- /* NUL-terminated augmentation string. Note "z" means there is an \
- augmentation value later on. */ \
- .string "zR"; \
+ /* NUL-terminated augmentation string. */ \
+ AUGMENTATION_STRING; \
/* Code alignment factor. */ \
.uleb128 1; \
/* Data alignment factor. */ \
.sleb128 -4; \
/* Return address register column. */ \
.byte 8; \
- /* Augmentation value length. */ \
- .uleb128 1; \
- /* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4. */ \
- .byte 0x1b; \
+ /* Optional augmentation parameter. */ \
+ AUGMENTATION_PARAM \
/* Start of the table initialization. */ \
.byte 0xc; /* DW_CFA_def_cfa */ \
.uleb128 4; \
@@ -85,12 +82,12 @@
L(STARTFDE): \
/* CIE pointer. */ \
.long L(STARTFDE)-L(STARTFRAME); \
- /* PC-relative start address of the code. */ \
- .long L(name##START)-.; \
+ /* Start address of the code. */ \
+ START_SYMBOL_REF (name); \
/* Length of the code. */ \
.long L(name##END)-L(name##START); \
- /* No augmentation data. */ \
- .uleb128 0; \
+ /* Augmentation data. */ \
+ AUGMENTATION_PARAM_FDE \
/* The rest of the code depends on the number of parameters the syscall \
takes. */ \
EH_FRAME_##args(name); \
@@ -98,6 +95,31 @@
L(ENDFDE): \
.previous
+#ifdef SHARED
+/* NUL-terminated augmentation string. Note "z" means there is an
+ augmentation value later on. */
+# define AUGMENTATION_STRING .string "zR"
+# define AUGMENTATION_PARAM \
+ /* Augmentation value length. */ \
+ .uleb128 1; \
+ /* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4. */ \
+ .byte 0x1b;
+# define AUGMENTATION_PARAM_FDE \
+ /* No augmentation data. */ \
+ .uleb128 0;
+# define START_SYMBOL_REF(name) \
+ /* PC-relative start address of the code. */ \
+ .long L(name##START)-.
+#else
+/* No augmentation. */
+# define AUGMENTATION_STRING .ascii "\0"
+# define AUGMENTATION_PARAM /* nothing */
+# define AUGMENTATION_PARAM_FDE /* nothing */
+# define START_SYMBOL_REF(name) \
+ /* Absolute start address of the code. */ \
+ .long L(name##START)
+#endif
+
/* Callframe description for syscalls without parameters. This is very
simple. The only place the stack pointer is changed is when the old
cancellation state value is saved. */
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
index 79d8a2aebe..a099b2b8f3 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
@@ -329,78 +329,88 @@ versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,
.section .eh_frame,"a",@progbits
.LSTARTFRAME:
- .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
+ .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
.LSTARTCIE:
- .long 0 # CIE ID.
- .byte 1 # Version number.
+ .long 0 # CIE ID.
+ .byte 1 # Version number.
#ifdef SHARED
- .string "zR" # NUL-terminated augmentation string.
+ .string "zR" # NUL-terminated augmentation
+ # string.
#else
- .ascii "\0" # NUL-terminated augmentation string.
+ .ascii "\0" # NUL-terminated augmentation
+ # string.
#endif
- .uleb128 1 # Code alignment factor.
- .sleb128 -8 # Data alignment factor.
- .byte 16 # Return address register column.
+ .uleb128 1 # Code alignment factor.
+ .sleb128 -8 # Data alignment factor.
+ .byte 16 # Return address register
+ # column.
#ifdef SHARED
- .uleb128 1 # Augmentation value length.
- .byte 0x1b # Encoding: DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
+ .uleb128 1 # Augmentation value length.
+ .byte 0x1b # Encoding: DW_EH_PE_pcrel
+ # + DW_EH_PE_sdata4.
#endif
- .byte 0x0c # DW_CFA_def_cfa
+ .byte 0x0c # DW_CFA_def_cfa
.uleb128 7
.uleb128 8
- .byte 0x90 # DW_CFA_offset, column 0x8
+ .byte 0x90 # DW_CFA_offset, column 0x8
.uleb128 1
.align 8
.LENDCIE:
- .long .LENDFDE-.LSTARTFDE # Length of the FDE.
+ .long .LENDFDE-.LSTARTFDE # Length of the FDE.
.LSTARTFDE:
- .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
+ .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
#ifdef SHARED
- .long .LSTARTCODE-. # PC-relative start address of the code
+ .long .LSTARTCODE-. # PC-relative start address
+ # of the code
#else
- .long .LSTARTCODE # Start address of the code.
+ .long .LSTARTCODE # Start address of the code.
#endif
- .long .LENDCODE-.LSTARTCODE # Length of the code.
+ .long .LENDCODE-.LSTARTCODE # Length of the code.
#ifdef SHARED
- .uleb128 0 # No augmentation data.
+ .uleb128 0 # No augmentation data.
#endif
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_r12-.LSTARTCODE
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lpush_r12-.LSTARTCODE # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_r13-.Lpush_r12
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x8c # DW_CFA_offset %r12
+ .uleb128 2
+ .byte 0x40+.Lpush_r13-.Lpush_r12 # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 24
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_r14-.Lpush_r13
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x8d # DW_CFA_offset %r13
+ .uleb128 3
+ .byte 0x40+.Lpush_r14-.Lpush_r13 # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 32
- .byte 4 # DW_CFA_advance_loc4
- .long .Lsubq-.Lpush_r14
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x84 # DW_CFA_offset %r14
+ .uleb128 4
+ .byte 0x40+.Lsubq-.Lpush_r14 # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 112
- .byte 4 # DW_CFA_advance_loc4
- .long .Laddq-.Lsubq
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Laddq-.Lsubq # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 32
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_r14-.Laddq
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lpop_r14-.Laddq # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 24
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_r13-.Lpop_r14
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xce # DW_CFA_restore %r14
+ .byte 0x40+.Lpop_r13-.Lpop_r14 # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_r12-.Lpop_r13
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xcd # DW_CFA_restore %r13
+ .byte 0x40+.Lpop_r12-.Lpop_r13 # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 8
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl1-.Lpop_r12
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xcc # DW_CFA_restore %r12
+ .byte 0x40+.LSbl1-.Lpop_r12 # DW_CFA_advance_loc4
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 112
+ .byte 0x8c # DW_CFA_offset %r12
+ .uleb128 2
+ .byte 0x8d # DW_CFA_offset %r13
+ .uleb128 3
+ .byte 0x84 # DW_CFA_offset %r14
+ .uleb128 4
.align 8
.LENDFDE:
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
index a7fcc8c8fc..916a388fbd 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
@@ -293,62 +293,66 @@ versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
.section .eh_frame,"a",@progbits
.LSTARTFRAME:
- .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
+ .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
.LSTARTCIE:
- .long 0 # CIE ID.
- .byte 1 # Version number.
+ .long 0 # CIE ID.
+ .byte 1 # Version number.
#ifdef SHARED
- .string "zR" # NUL-terminated augmentation string.
+ .string "zR" # NUL-terminated augmentation
+ # string.
#else
- .ascii "\0" # NUL-terminated augmentation string.
+ .ascii "\0" # NUL-terminated augmentation
+ # string.
#endif
- .uleb128 1 # Code alignment factor.
- .sleb128 -8 # Data alignment factor.
- .byte 16 # Return address register column.
+ .uleb128 1 # Code alignment factor.
+ .sleb128 -8 # Data alignment factor.
+ .byte 16 # Return address register
+ # column.
#ifdef SHARED
- .uleb128 1 # Augmentation value length.
- .byte 0x1b # Encoding: DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
+ .uleb128 1 # Augmentation value length.
+ .byte 0x1b # Encoding: DW_EH_PE_pcrel
+ # + DW_EH_PE_sdata4.
#endif
- .byte 0x0c # DW_CFA_def_cfa
+ .byte 0x0c # DW_CFA_def_cfa
.uleb128 7
.uleb128 8
- .byte 0x90 # DW_CFA_offset, column 0x8
+ .byte 0x90 # DW_CFA_offset, column 0x8
.uleb128 1
.align 8
.LENDCIE:
- .long .LENDFDE-.LSTARTFDE # Length of the FDE.
+ .long .LENDFDE-.LSTARTFDE # Length of the FDE.
.LSTARTFDE:
- .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
+ .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
#ifdef SHARED
- .long .LSTARTCODE-. # PC-relative start address of the code
+ .long .LSTARTCODE-. # PC-relative start address
+ # of the code
#else
- .long .LSTARTCODE # Start address of the code.
+ .long .LSTARTCODE # Start address of the code.
#endif
- .long .LENDCODE-.LSTARTCODE # Length of the code.
+ .long .LENDCODE-.LSTARTCODE # Length of the code.
#ifdef SHARED
- .uleb128 0 # No augmentation data.
+ .uleb128 0 # No augmentation data.
#endif
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpush_r12-.LSTARTCODE
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lpush_r12-.LSTARTCODE # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lsubq-.Lpush_r12
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x8c # DW_CFA_offset %r12
+ .uleb128 2
+ .byte 0x40+.Lsubq-.Lpush_r12 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 80
- .byte 4 # DW_CFA_advance_loc4
- .long .Laddq-.Lsubq
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Laddq-.Lsubq # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
- .byte 4 # DW_CFA_advance_loc4
- .long .Lpop_r12-.Laddq
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0x40+.Lpop_r12-.Laddq # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 8
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl1-.Lpop_r12
- .byte 14 # DW_CFA_def_cfa_offset
+ .byte 0xcc # DW_CFA_restore %r12
+ .byte 0x40+.LSbl1-.Lpop_r12 # DW_CFA_advance_loc+N
+ .byte 14 # DW_CFA_def_cfa_offset
.uleb128 80
+ .byte 0x8c # DW_CFA_offset %r12
+ .uleb128 2
.align 8
.LENDFDE:
diff --git a/string/strxfrm.c b/string/strxfrm.c
index 6475fa9206..9db57829d9 100644
--- a/string/strxfrm.c
+++ b/string/strxfrm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999,2000,2001,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999,2000,2001,2002,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
@@ -196,9 +196,6 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
idxarr = (int32_t *) alloca (srclen * sizeof (int32_t));
rulearr = (unsigned char *) alloca (srclen + 1);
}
- /* This element is only read, the value never used but to determine
- another value which then is ignored. */
- rulearr[srclen] = '\0';
idxmax = 0;
do
@@ -211,6 +208,10 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
}
while (*usrc != L('\0'));
+ /* This element is only read, the value never used but to determine
+ another value which then is ignored. */
+ rulearr[idxmax] = '\0';
+
/* Now the passes over the weights. We now use the indeces we found
before. */
needed = 0;