2003-04-14  Ulrich Drepper  <drepper@redhat.com>

	* string/strxfrm.c (STRXFRM): Terminate rulearr at correct
	position.  Reported by jreiser@BitWagon.com.
This commit is contained in:
Ulrich Drepper 2003-04-14 07:03:40 +00:00
parent 4ae7142df2
commit 39a46c42f5
7 changed files with 284 additions and 226 deletions

View File

@ -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.

View File

@ -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
.uleb128 20
.byte 4 # DW_CFA_advance_loc4
.long .Lpush4-.Lpush_ebx
.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
.uleb128 64
.byte 4 # DW_CFA_advance_loc4
.long .Laddl-.Lsubl
.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
.uleb128 16
.byte 4 # DW_CFA_advance_loc4
.long .Lpop_esi-.Lpop_ebx
.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
.uleb128 8
.byte 4 # DW_CFA_advance_loc4
.long .Lpop_ebp-.Lpop_edi
.byte 14 # DW_CFA_def_cfa_offset
.byte 0x86 # DW_CFA_offset %esi
.uleb128 4
.byte 4 # DW_CFA_advance_loc4
.long .LSbl1-.Lpop_edi
.byte 14 # DW_CFA_def_cfa_offset
.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 .LSbl2-.LSbl1
.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 0x40+.Lsubl-.Lpush4 # 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 0x40+.Laddl-.Lsubl # DW_CFA_advance_loc+N
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
.byte 0x40+.Lpop_ebx-.Laddl # DW_CFA_advance_loc+N
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 16
.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 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 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 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 0x40+.LSbl2-.LSbl1 # DW_CFA_advance_loc+N
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 64
.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

View File

@ -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
.uleb128 20
.byte 4 # DW_CFA_advance_loc4
.long .Lsubl-.Lpush4
.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
.uleb128 16
.byte 4 # DW_CFA_advance_loc4
.long .Lpop_ebx-.Laddl
.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
.uleb128 8
.byte 4 # DW_CFA_advance_loc4
.long .Lpop_edi-.Lpop_esi
.byte 14 # DW_CFA_def_cfa_offset
.byte 0x83 # DW_CFA_offset %ebx
.uleb128 4
.byte 4 # DW_CFA_advance_loc4
.long .LSbl1-.Lpop_edi
.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 0x40+.Lpush4-.Lpush_ebx # DW_CFA_advance_loc+N
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
.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 .LSbl3-.LSbl2
.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 0x40+ .Lpop_ebx-.Laddl # DW_CFA_advance_loc+N
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 12
.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 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 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 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 0x40+.LSbl3-.LSbl2 # DW_CFA_advance_loc+N
.byte 14 # DW_CFA_def_cfa_offset
.uleb128 20
.align 4
.LENDFDE:

View File

@ -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. */

View File

@ -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:

View File

@ -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:

View File

@ -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;