diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S | 137 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S | 115 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 44 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S | 102 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S | 72 | ||||
-rw-r--r-- | string/strxfrm.c | 9 |
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; |