diff options
| author | Ulrich Drepper <drepper@redhat.com> | 2004-03-20 06:16:26 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 2004-03-20 06:16:26 +0000 |
| commit | 07bd2a3fda47e7cfa83e808eb99a0da9d1184a30 (patch) | |
| tree | a0e41495d990b736c8981a58677bc28175621728 | |
| parent | 3abb1ff7d1c7a2941df3c6234ec71b40a3879baa (diff) | |
| download | glibc-07bd2a3fda47e7cfa83e808eb99a0da9d1184a30.tar.xz glibc-07bd2a3fda47e7cfa83e808eb99a0da9d1184a30.zip | |
Update.
2004-03-17 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_CLONE_THREAD_FLAGS ): Define for newer SH kernel.
(__ASSUME_TGKILL, __ASSUME_UTIMES): Likewise.
* sysdeps/unix/sysv/linux/sh/socket.S: Add unwind information.
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | nptl/ChangeLog | 21 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h | 13 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S | 17 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S | 42 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S | 35 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S | 4 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S | 417 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S | 464 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S | 103 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S | 35 | ||||
| -rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 102 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/kernel-features.h | 8 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/sh/socket.S | 73 |
14 files changed, 1023 insertions, 318 deletions
@@ -1,3 +1,10 @@ +2004-03-17 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/kernel-features.h + (__ASSUME_CLONE_THREAD_FLAGS ): Define for newer SH kernel. + (__ASSUME_TGKILL, __ASSUME_UTIMES): Likewise. + * sysdeps/unix/sysv/linux/sh/socket.S: Add unwind information. + 2004-03-19 Ulrich Drepper <drepper@redhat.com> * time/tzfile.c (__tzfile_default): Correct setting of rule_stdoff diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 164a9b38ae..e0d09d5a1e 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -4,6 +4,27 @@ the return value to a safe register. (CDISABLE): Set the function argument correctly. +2004-03-17 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h (XCHG): Define. + * sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_mutex_lock_wait): + Rewrite so that only one locked memory operation per round is needed. + * sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S + (pthread_barrier_wait): After wakeup, release lock only when the + last thread stopped using the barrier object. + * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S + (__pthread_cond_wait): Don't store mutex address if the current + value is ~0l. Add correct cleanup support and unwind info. + * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S + (__pthread_cond_broadcast): Don't use requeue for pshared condvars. + * sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S: Update comment. + * sysdeps/unix/sysv/linux/sh/pthread_once.S (__pthread_once): + Add correct cleanup support and unwind info. + * sysdeps/unix/sysv/linux/sh/sem_wait.S (__new_sem_wait): Likewise. + * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h: Add unwind + information for syscall wrappers. + 2004-03-18 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/internaltypes.h (struct pthread_attr): Add diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h b/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h index 3a80ec8e14..76d22c88f9 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 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 @@ -20,6 +20,7 @@ #define _IMP1 #1 #define _IMM1 #-1 +#define _IMM4 #-4 #define _IMM6 #-6 #define _IMM8 #-8 @@ -53,6 +54,16 @@ mov.l reg, mem; \ 99: mov r1, r15 +#define XCHG(reg, mem, old) \ + .align 2; \ + mova 99f, r0; \ + nop; \ + mov r15, r1; \ + mov _IMM4, r15; \ +98: mov.l mem, old; \ + mov.l reg, mem; \ +99: mov r1, r15 + #define CMPXCHG(reg, mem, new, old) \ .align 2; \ mova 99f, r0; \ diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index 936a4e3868..320fe18fe8 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 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 @@ -38,17 +38,12 @@ __lll_mutex_lock_wait: mov r5, r8 mov #0, r7 /* No timeout. */ mov #FUTEX_WAIT, r5 -1: + mov #2, r4 cmp/eq r4, r6 - bt 3f - - mov #1, r3 - CMPXCHG (r3, @r8, r4, r2) - tst r2, r2 - bt 2f + bf 2f -3: +1: mov r8, r4 mov #SYS_futex, r3 extu.b r3, r3 @@ -56,9 +51,9 @@ __lll_mutex_lock_wait: SYSCALL_INST_PAD 2: - mov #0, r3 mov #2, r4 - CMPXCHG (r3, @r8, r4, r2) + XCHG (r4, @r8, r2) + tst r2, r2 bf 1b mov.l @r15+, r8 diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S index 6696898c18..1fbb23a5a6 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 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 @@ -80,6 +80,23 @@ pthread_barrier_wait: cmp/eq r0, r6 bt 8b + /* Increment LEFT. If this brings the count back to the + initial count unlock the object. */ + mov #1, r3 + mov.l @(INIT_COUNT,r8), r4 + XADD (r3, @(LEFT,r8), r2) + add #-1, r4 + cmp/eq r2, r4 + bf 10f + + /* Release the mutex. We cannot release the lock before + waking the waiting threads since otherwise a new thread might + arrive and gets waken up, too. */ + DEC (@(MUTEX,r8), r2) + tst r2, r2 + bf 9f + +10: mov #0, r0 /* != PTHREAD_BARRIER_SERIAL_THREAD */ lds.l @r15+, pr mov.l @r15+, r8 @@ -88,8 +105,6 @@ pthread_barrier_wait: 3: /* The necessary number of threads arrived. */ - mov.l @(INIT_COUNT,r8), r0 - mov.l r0, @(LEFT,r8) mov.l @(CURR_EVENT,r8), r1 add #1, r1 mov.l r1, @(CURR_EVENT,r8) @@ -108,6 +123,15 @@ pthread_barrier_wait: trapa #0x14 SYSCALL_INST_PAD + /* Increment LEFT. If this brings the count back to the + initial count unlock the object. */ + mov #1, r3 + mov.l @(INIT_COUNT,r8), r4 + XADD (r3, @(LEFT,r8), r2) + add #-1, r4 + cmp/eq r2, r4 + bf 5f + /* Release the mutex. */ DEC (@(MUTEX,r8), r2) tst r2, r2 @@ -148,6 +172,16 @@ pthread_barrier_wait: bra 7b mov r9, r6 +9: + mov r6, r9 + mov r8, r4 + mov.l .Lwake2, r1 + bsrf r1 + add #MUTEX, r4 +.Lwake2b: + bra 10b + mov r9, r6 + .align 2 .Lall: .long 0x7fffffff @@ -157,4 +191,6 @@ pthread_barrier_wait: .long __lll_mutex_unlock_wake-.Lwake0b .Lwake1: .long __lll_mutex_unlock_wake-.Lwake1b +.Lwake2: + .long __lll_mutex_unlock_wake-.Lwake2b .size pthread_barrier_wait,.-pthread_barrier_wait diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S index 5bcaec09c0..a433ba3c37 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 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 @@ -79,11 +79,16 @@ __pthread_cond_broadcast: #endif tst r2, r2 bf 7f + 8: - /* Wake up all threads. */ + /* Don't use requeue for pshared condvars. */ + mov #-1, r0 + cmp/eq r0, r9 mov r8, r4 - add #wakeup_seq, r4 -#ifdef __ASSUME_FUTEX_REQUEUE + bt/s 9f + add #wakeup_seq, r4 + + /* Wake up all threads. */ mov #FUTEX_REQUEUE, r5 mov #1, r6 mov #-1, r7 @@ -95,17 +100,9 @@ __pthread_cond_broadcast: mov #SYS_futex, r3 extu.b r3, r3 trapa #0x15 -#else - mov #FUTEX_WAKE, r5 - mov #-1, r6 - shlr r6 /* r6 = 0x7fffffff */ - mov #0, r7 - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 -#endif SYSCALL_INST_PAD +10: mov #0, r0 lds.l @r15+, pr mov.l @r15+, r8 @@ -167,6 +164,18 @@ __pthread_cond_broadcast: bra 8b nop +9: + mov #FUTEX_WAKE, r5 + mov #-1, r6 + shlr r6 /* r6 = 0x7fffffff */ + mov #0, r7 + mov #SYS_futex, r3 + extu.b r3, r3 + trapa #0x14 + SYSCALL_INST_PAD + bra 10b + nop + .align 2 .Lmwait5: .long __lll_mutex_lock_wait-.Lmwait5b diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S index 1a3a3485da..a0d188abb2 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 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 @@ -73,7 +73,7 @@ __pthread_cond_signal: mov.l r0,@(wakeup_seq,r8) mov.l r1,@(wakeup_seq+4,r8) - /* Wake up one thread by moving it to the internal lock futex. */ + /* Wake up one thread. */ mov r8, r4 add #wakeup_seq, r4 mov #FUTEX_WAKE, r5 diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S index 278f695b6e..661caa3fb5 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 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 @@ -36,17 +36,31 @@ .type __pthread_cond_timedwait, @function .align 5 __pthread_cond_timedwait: +.LSTARTCODE: mov.l r8, @-r15 +.Lpush_r8: mov.l r9, @-r15 +.Lpush_r9: mov.l r10, @-r15 +.Lpush_r10: mov.l r11, @-r15 +.Lpush_r11: mov.l r12, @-r15 +.Lpush_r12: mov.l r13, @-r15 +.Lpush_r13: sts.l pr, @-r15 +.Lpush_pr: add #-64, r15 +.Lalloc: mov r4, r8 mov r5, r9 mov r6, r13 +#ifdef PIC + mova .Lgot0, r0 + mov.l .Lgot0, r12 + add r0, r12 +#endif /* Get internal lock. */ mov #0, r3 @@ -59,11 +73,21 @@ __pthread_cond_timedwait: bt 2f bra 1f nop +#ifdef PIC + .align 2 +.Lgot0: + .long _GLOBAL_OFFSET_TABLE_ +#endif + 2: /* Store the reference to the mutex. If there is already a different value in there this is a bad user bug. */ + mov.l @(dep_mutex,r8),r0 + cmp/eq #-1, r0 + bt 17f mov.l r9, @(dep_mutex,r8) - + +17: /* Unlock the mutex. */ mov.l .Lmunlock1, r1 mov #0, r5 @@ -87,50 +111,11 @@ __pthread_cond_timedwait: mov.l r0,@(total_seq,r8) mov.l r1,@(total_seq+4,r8) - /* Install cancellation handler. */ -#ifdef PIC - mova .Lgot1, r0 - mov.l .Lgot1, r12 - add r0, r12 - mov.l .Lccleanup1, r5 - add r12, r5 -#else - mov.l .Lccleanup1, r5 -#endif - mov r15, r4 - add #32, r4 - - /* Prepare structure passed to cancellation handler. */ - mov.l r8, @(4,r15) - mov.l r9, @(8,r15) - - mov.l .Lccpush1, r1 - bsrf r1 - mov r15, r6 -.Lccpush1b: - /* Get and store current wakeup_seq value. */ mov.l @(wakeup_seq,r8), r10 mov.l @(wakeup_seq+4,r8), r11 - /* Unlock. */ -8: -#if cond_lock != 0 - DEC (@(cond_lock,r8), r2) -#else - DEC (@r8, r2) -#endif - tst r2, r2 - bt 4f - bra 3f - nop -4: - mov.l .Lenable1, r1 - bsrf r1 - nop -.Lenable1b: - mov.l r0, @r15 - +8: /* Get current time. */ mov r15, r4 add #16, r4 @@ -162,6 +147,24 @@ __pthread_cond_timedwait: mov.l r2, @(16,r15) mov.l r3, @(20,r15) + /* Unlock. */ +#if cond_lock != 0 + DEC (@(cond_lock,r8), r2) +#else + DEC (@r8, r2) +#endif + tst r2, r2 + bt 4f + bra 3f + nop +4: +.LcleanupSTART: + mov.l .Lenable1, r1 + bsrf r1 + nop +.Lenable1b: + mov.l r0, @r15 + mov r15, r7 add #16, r7 mov #FUTEX_WAIT, r5 @@ -178,6 +181,7 @@ __pthread_cond_timedwait: bsrf r1 mov.l @r15, r4 .Ldisable1b: +.LcleanupEND: /* Lock. */ mov #0, r3 @@ -195,20 +199,15 @@ __pthread_cond_timedwait: mov.l @(wakeup_seq,r8), r2 mov.l @(wakeup_seq+4,r8), r3 - cmp/hi r11, r3 - bt 7f - cmp/hi r3, r11 - bt 15f - - cmp/hs r2, r10 + cmp/eq r3, r11 + bf 7f + cmp/eq r2, r10 bt 15f 7: - cmp/hi r1, r3 - bt 9f - cmp/hi r3, r1 - bt 15f - cmp/hi r0, r2 - bt 9f + cmp/eq r1, r3 + bf 9f + cmp/eq r0, r2 + bf 9f 15: mov.l @(12,r15),r0 cmp/eq #-ETIMEDOUT, r0 @@ -252,14 +251,6 @@ __pthread_cond_timedwait: bf 10f 11: - /* Remove cancellation handler. */ - mov r15, r4 - add #32, r4 - mov.l .Lcpop1, r1 - bsrf r1 - mov #0, r5 -.Lcpop1b: - mov r9, r4 mov.l .Lmlocki1, r1 bsrf r1 @@ -273,44 +264,39 @@ __pthread_cond_timedwait: 18: add #64, r15 +.Lfree: lds.l @r15+, pr +.Lpop_pr: mov.l @r15+, r13 +.Lpop_r13: mov.l @r15+, r12 +.Lpop_r12: mov.l @r15+, r11 +.Lpop_r11: mov.l @r15+, r10 +.Lpop_r10: mov.l @r15+, r9 +.Lpop_r9: rts mov.l @r15+, r8 - ret +.Lpop_r8: .L1k: .word 1000 .align 2 .Lmunlock1: .long __pthread_mutex_unlock_usercnt-.Lmunlock1b -#ifdef PIC -.Lgot1: - .long _GLOBAL_OFFSET_TABLE_ -.Lccleanup1: - .long __condvar_cleanup@GOTOFF -#else -.Lccleanup1: - .long __condvar_cleanup -#endif -.Lccpush1: - .long __pthread_cleanup_push-.Lccpush1b .Lenable1: .long __pthread_enable_asynccancel-.Lenable1b .Ldisable1: .long __pthread_disable_asynccancel-.Ldisable1b -.Lcpop1: - .long __pthread_cleanup_pop-.Lcpop1b .Lmlocki1: .long __pthread_mutex_cond_lock-.Lmlocki1b .L1g: .long 1000000000 1: +.LSblSTART: /* Initial locking failed. */ mov r8, r5 #if cond_lock != 0 @@ -384,6 +370,7 @@ __pthread_cond_timedwait: 17: bra 18b mov.l @(24,r15), r0 +.LSblEND: .align 2 .Lmwait2: @@ -399,3 +386,281 @@ __pthread_cond_timedwait: .size __pthread_cond_timedwait, .-__pthread_cond_timedwait versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait, GLIBC_2_3_2) + + + .type __condvar_tw_cleanup, @function +__condvar_tw_cleanup: + mov r4, r11 + + /* Get internal lock. */ + mov #0, r3 + mov #1, r4 +#if cond_lock != 0 + CMPXCHG (r3, @(cond_lock,r8), r4, r2) +#else + CMPXCHG (r3, @r8, r4, r2) +#endif + bt 1f + nop + + mov r8, r5 +#if cond_lock != 0 + add #cond_lock, r5 +#endif + mov.l .Lmwait5, r1 + bsrf r1 + mov r2, r4 +.Lmwait5b: + +1: + mov #1, r2 + mov #0, r3 + + clrt + mov.l @(wakeup_seq,r8),r0 + mov.l @(wakeup_seq+4,r8),r1 + addc r2, r0 + addc r3, r1 + mov.l r0,@(wakeup_seq,r8) + mov.l r1,@(wakeup_seq+4,r8) + +#if cond_lock != 0 + DEC (@(cond_lock,r8), r2) +#else + DEC (@r8, r2) +#endif + tst r2, r2 + bt 2f + + mov r8, r4 +#if cond_lock != 0 + add #cond_lock, r4 +#endif + mov.l .Lmwake5, r1 + bsrf r1 + nop +.Lmwake5b: + +2: + /* Wake up all waiters to make sure no signal gets lost. */ + mov r8, r4 + add #wakeup_seq, r4 + mov #FUTEX_WAKE, r5 + mov #-1, r6 + shlr r6 /* r6 = 0x7fffffff */ + mov #0, r7 + mov #SYS_futex, r3 + extu.b r3, r3 + trapa #0x14 + SYSCALL_INST_PAD + + mov.l .Lmlocki5, r1 + bsrf r1 + mov r9, r4 +.Lmlocki5b: + +.LcallUR: + mov.l .Lresume, r1 +#ifdef PIC + add r12, r1 +#endif + jsr @r1 + mov r11, r4 + sleep + + .align 2 +.Lmwait5: + .long __lll_mutex_lock_wait-.Lmwait5b +.Lmwake5: + .long __lll_mutex_unlock_wake-.Lmwake5b +.Lmlocki5: + .long __pthread_mutex_cond_lock-.Lmlocki5b +.Lresume: +#ifdef PIC + .long _Unwind_Resume@GOTOFF +#else + .long _Unwind_Resume +#endif +.LENDCODE: + .size __condvar_tw_cleanup, .-__condvar_tw_cleanup + + + .section .gcc_except_table,"a",@progbits +.LexceptSTART: + .byte 0xff ! @LPStart format (omit) + .byte 0xff ! @TType format (omit) + .byte 0x0b ! call-site format + ! DW_EH_PE_sdata4 + .uleb128 .Lcstend-.Lcstbegin +.Lcstbegin: + .ualong .LcleanupSTART-.LSTARTCODE + .ualong .LcleanupEND-.LcleanupSTART + .ualong __condvar_tw_cleanup-.LSTARTCODE + .uleb128 0 + .ualong .LcallUR-.LSTARTCODE + .ualong .LENDCODE-.LcallUR + .ualong 0 + .uleb128 0 +.Lcstend: + + .section .eh_frame,"a",@progbits +.LSTARTFRAME: + .ualong .LENDCIE-.LSTARTCIE ! Length of the CIE. +.LSTARTCIE: + .ualong 0 ! CIE ID. + .byte 1 ! Version number. +#ifdef SHARED + .string "zPLR" ! NUL-terminated augmentation + ! string. +#else + .string "zPL" ! NUL-terminated augmentation + ! string. +#endif + .uleb128 1 ! Code alignment factor. + .sleb128 -4 ! Data alignment factor. + .byte 0x11 ! Return address register + ! column. +#ifdef SHARED + .uleb128 7 ! Augmentation value length. + .byte 0x9b ! Personality: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4 + ! + DW_EH_PE_indirect + .ualong DW.ref.__gcc_personality_v0-. + .byte 0x1b ! LSDA Encoding: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4. + .byte 0x1b ! FDE Encoding: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4. +#else + .uleb128 6 ! Augmentation value length. + .byte 0x0 ! Personality: absolute + .ualong __gcc_personality_v0 + .byte 0x0 ! LSDA Encoding: absolute +#endif + .byte 0x0c ! DW_CFA_def_cfa + .uleb128 0xf + .uleb128 0 + .align 2 +.LENDCIE: + + .ualong .LENDFDE-.LSTARTFDE ! Length of the FDE. |
