* sysdeps/powerpc/powerpc32/sysdep.h (ENTRY, EALIGN): Add cfi_startproc

directive to ENTRY macros.
	(END): Add cfi_endproc directive to END macro.
	* sysdeps/powerpc/powerpc64/sysdep.h (ENTRY, EALIGN): Add cfi_startproc
	directive to ENTRY macros.
	(END, END_GEN_TB): Add cfi_endproc directive to END macros.
	* sysdeps/powerpc/powerpc32/dl-start.S: Remove ENTRY()s for
	_dl_start_user and _dl_main_dispatch.
	* sysdeps/powerpc/powerpc32/fpu/fprrest.S: Use END macro.
	* sysdeps/powerpc/powerpc32/fpu/fprsave.S: Use Likewise.
	* sysdeps/powerpc/powerpc32/gprrest0.S: Likewise.
	* sysdeps/powerpc/powerpc32/gprrest1.S: Likewise.
	* sysdeps/powerpc/powerpc32/gprsave0.S: Likewise.
	* sysdeps/powerpc/powerpc32/gprsave1.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S: Remove redundant
	cfi_startproc and cfi_endproc.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S: Likewise.

2006-01-04  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/pthread/aio_misc.h (struct waitlist): Add result member.
	* sysdeps/pthread/aio_notify.c (__aio_notify): For synchronous waiters,
	failed I/O, and a result pointer, set value to -1.
	* sysdeps/pthread/aio_suspend.c: Initialize result pointer to NULL.
	* sysdeps/pthread/lio_listio.c: For LIO_WAIT, point result pointer in
	wait list to local variable result.  If nonzero afterwards, set errno
	to EIO.  For LIO_NOWAIT set result to NULL.
	* rt/Makefile (tests): Add tst-aio8.
	* rt/tst-aio8.c: New file.
This commit is contained in:
Ulrich Drepper 2006-01-04 20:05:05 +00:00
parent 4da28a490b
commit 9759bbf188
20 changed files with 124 additions and 66 deletions

View File

@ -1,3 +1,35 @@
2006-01-03 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/powerpc32/sysdep.h (ENTRY, EALIGN): Add cfi_startproc
directive to ENTRY macros.
(END): Add cfi_endproc directive to END macro.
* sysdeps/powerpc/powerpc64/sysdep.h (ENTRY, EALIGN): Add cfi_startproc
directive to ENTRY macros.
(END, END_GEN_TB): Add cfi_endproc directive to END macros.
* sysdeps/powerpc/powerpc32/dl-start.S: Remove ENTRY()s for
_dl_start_user and _dl_main_dispatch.
* sysdeps/powerpc/powerpc32/fpu/fprrest.S: Use END macro.
* sysdeps/powerpc/powerpc32/fpu/fprsave.S: Use Likewise.
* sysdeps/powerpc/powerpc32/gprrest0.S: Likewise.
* sysdeps/powerpc/powerpc32/gprrest1.S: Likewise.
* sysdeps/powerpc/powerpc32/gprsave0.S: Likewise.
* sysdeps/powerpc/powerpc32/gprsave1.S: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S: Remove redundant
cfi_startproc and cfi_endproc.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S: Likewise.
2006-01-04 Ulrich Drepper <drepper@redhat.com>
* sysdeps/pthread/aio_misc.h (struct waitlist): Add result member.
* sysdeps/pthread/aio_notify.c (__aio_notify): For synchronous waiters,
failed I/O, and a result pointer, set value to -1.
* sysdeps/pthread/aio_suspend.c: Initialize result pointer to NULL.
* sysdeps/pthread/lio_listio.c: For LIO_WAIT, point result pointer in
wait list to local variable result. If nonzero afterwards, set errno
to EIO. For LIO_NOWAIT set result to NULL.
* rt/Makefile (tests): Add tst-aio8.
* rt/tst-aio8.c: New file.
2005-12-25 Kristian Van Der Vliet <vanders@liqwyd.com> 2005-12-25 Kristian Van Der Vliet <vanders@liqwyd.com>
* abi-tags (*-.*-syllable.*): New match, with ABI value 5. * abi-tags (*-.*-syllable.*): New match, with ABI value 5.

View File

@ -1,3 +1,9 @@
2006-01-03 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
(PSEUDO): Remove redundant cfi_startproc and cfi_endproc directives.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
2006-01-04 Ulrich Drepper <drepper@redhat.com> 2006-01-04 Ulrich Drepper <drepper@redhat.com>
* tst-cancel24.cc: Use C headers instead of C++ headers. * tst-cancel24.cc: Use C headers instead of C++ headers.

View File

@ -1,5 +1,5 @@
/* Cancellable system call stubs. Linux/PowerPC version. /* Cancellable system call stubs. Linux/PowerPC version.
Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003. Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
@ -15,8 +15,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
#include <sysdep.h> #include <sysdep.h>
#include <tls.h> #include <tls.h>
@ -30,7 +30,6 @@
# define PSEUDO(name, syscall_name, args) \ # define PSEUDO(name, syscall_name, args) \
.section ".text"; \ .section ".text"; \
ENTRY (name) \ ENTRY (name) \
cfi_startproc; \
SINGLE_THREAD_P; \ SINGLE_THREAD_P; \
bne- .Lpseudo_cancel; \ bne- .Lpseudo_cancel; \
.type __##syscall_name##_nocancel,@function; \ .type __##syscall_name##_nocancel,@function; \
@ -62,8 +61,7 @@
CGOTRESTORE; \ CGOTRESTORE; \
mtlr 4; \ mtlr 4; \
mtcr 0; \ mtcr 0; \
addi 1,1,48; \ addi 1,1,48;
cfi_endproc;
# define DOCARGS_0 # define DOCARGS_0
# define UNDOCARGS_0 # define UNDOCARGS_0

View File

@ -1,5 +1,5 @@
/* Cancellable system call stubs. Linux/PowerPC64 version. /* Cancellable system call stubs. Linux/PowerPC64 version.
Copyright (C) 2003, 2004 Free Software Foundation, Inc. Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003. Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
@ -15,8 +15,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
#include <sysdep.h> #include <sysdep.h>
#include <tls.h> #include <tls.h>
@ -36,7 +36,6 @@
# define PSEUDO(name, syscall_name, args) \ # define PSEUDO(name, syscall_name, args) \
.section ".text"; \ .section ".text"; \
ENTRY (name) \ ENTRY (name) \
cfi_startproc; \
SINGLE_THREAD_P; \ SINGLE_THREAD_P; \
bne- .Lpseudo_cancel; \ bne- .Lpseudo_cancel; \
.type DASHDASHPFX(syscall_name##_nocancel),@function; \ .type DASHDASHPFX(syscall_name##_nocancel),@function; \
@ -66,8 +65,7 @@
ld 3,64(1); \ ld 3,64(1); \
mtlr 9; \ mtlr 9; \
mtcr 0; \ mtcr 0; \
addi 1,1,128; \ addi 1,1,128;
cfi_endproc;
# define DOCARGS_0 # define DOCARGS_0
# define UNDOCARGS_0 # define UNDOCARGS_0

View File

@ -1,4 +1,4 @@
# Copyright (C) 1997-2001, 2002, 2003, 2004 Free Software Foundation, Inc. # Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
# This file is part of the GNU C Library. # This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or # The GNU C Library is free software; you can redistribute it and/or
@ -43,7 +43,7 @@ librt-routines = $(aio-routines) \
tests := tst-shm tst-clock tst-clock_nanosleep tst-timer tst-timer2 \ tests := tst-shm tst-clock tst-clock_nanosleep tst-timer tst-timer2 \
tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \ tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \
tst-aio7 tst-mqueue1 tst-mqueue2 tst-mqueue3 tst-mqueue4 \ tst-aio7 tst-aio8 tst-mqueue1 tst-mqueue2 tst-mqueue3 tst-mqueue4 \
tst-mqueue5 tst-mqueue6 tst-mqueue7 tst-mqueue8 tst-mqueue9 \ tst-mqueue5 tst-mqueue6 tst-mqueue7 tst-mqueue8 tst-mqueue9 \
tst-timer3 tst-timer4 tst-timer5 \ tst-timer3 tst-timer4 tst-timer5 \
tst-cpuclock1 tst-cpuclock2 \ tst-cpuclock1 tst-cpuclock2 \

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF startup code. PowerPC version. /* Machine-dependent ELF startup code. PowerPC version.
Copyright (C) 1995-2000, 2002, 2004, 2005 Free Software Foundation, Inc. Copyright (C) 1995-2000, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -14,8 +14,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
#include <sysdep.h> #include <sysdep.h>
@ -39,7 +39,7 @@ ENTRY(_start)
bl _dl_start@local bl _dl_start@local
/* FALLTHRU */ /* FALLTHRU */
ENTRY(_dl_start_user) _dl_start_user:
/* Now, we do our main work of calling initialisation procedures. /* Now, we do our main work of calling initialisation procedures.
The ELF ABI doesn't say anything about parameters for these, The ELF ABI doesn't say anything about parameters for these,
so we just pass argc, argv, and the environment. so we just pass argc, argv, and the environment.
@ -98,7 +98,7 @@ ENTRY(_dl_start_user)
Take the opportunity to clear LR, so anyone who accidentally returns Take the opportunity to clear LR, so anyone who accidentally returns
from _start gets SEGV. Also clear the next few words of the stack. */ from _start gets SEGV. Also clear the next few words of the stack. */
ENTRY(_dl_main_dispatch) _dl_main_dispatch:
li r31,0 li r31,0
stw r31,0(r1) stw r31,0(r1)
mtlr r31 mtlr r31

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
/* /*
Floating Point Registers (FPRs) restore routine Floating Point Registers (FPRs) restore routine
@ -92,3 +92,4 @@ C_TEXT(_restfpr_29): lwz r0,8(r1) #get return address from frame
lfd fp30,-16(r1) #restore f30 lfd fp30,-16(r1) #restore f30
lfd fp31,-8(r1) #restore f31 lfd fp31,-8(r1) #restore f31
blr #return blr #return
END (_restfpr_all)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
/* /*
Floating Point Registers (FPRs) save routine Floating Point Registers (FPRs) save routine
@ -91,3 +91,4 @@ C_TEXT(_savefpr_29): stfd fp29,-24(r1) #save f29
stfd fp31,-8(r1) #save f31 stfd fp31,-8(r1) #save f31
stw r0,8(r1) #save LR in callers frame stw r0,8(r1) #save LR in callers frame
blr #return blr #return
END (_savefpr_all)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
/* /*
General Purpose Register (GPR) restore routine General Purpose Register (GPR) restore routine
@ -67,3 +67,4 @@ C_TEXT(_restgpr0_29): lwz r0,8(r1) #get return address from frame
lwz r30,-8(r1) #restore r30 lwz r30,-8(r1) #restore r30
lwz r31,-4(r1) #restore r31 lwz r31,-4(r1) #restore r31
blr #return blr #return
END (_restgpr0_all)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
/* /*
General Purpose Register (GPR) restore routine General Purpose Register (GPR) restore routine
@ -61,3 +61,4 @@ C_TEXT(_restgpr1_29): lwz r29,-12(r12) #restore r29
lwz r30,-8(r12) #restore r30 lwz r30,-8(r12) #restore r30
lwz r31,-4(r12) #restore r31 lwz r31,-4(r12) #restore r31
blr #return blr #return
END (_restgpr1_all)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
/* /*
General Purpose Register (GPR) save routine General Purpose Register (GPR) save routine
@ -66,3 +66,4 @@ C_TEXT(_savegpr0_29): stw r29,-12(r1) #save r29
stw r31,-4(r1) #save r31 stw r31,-4(r1) #save r31
stw r0,8(r1) #save LR in callers frame stw r0,8(r1) #save LR in callers frame
blr #return blr #return
END (_savegpr0_all)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
/* /*
General Purpose Register (GPR) save routine General Purpose Register (GPR) save routine
@ -61,3 +61,4 @@ C_TEXT(_savegpr1_29): stw r29,-12(r12) #save r29
stw r30,-8(r12) #save r30 stw r30,-8(r12) #save r30
stw r31,-4(r12) #save r31 stw r31,-4(r12) #save r31
blr #return blr #return
END (_savegpr1_all)

View File

@ -1,5 +1,5 @@
/* Assembly macros for 32-bit PowerPC. /* Assembly macros for 32-bit PowerPC.
Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc. Copyright (C) 1999, 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -14,8 +14,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
#include <sysdeps/powerpc/sysdep.h> #include <sysdeps/powerpc/sysdep.h>
@ -31,7 +31,8 @@
for its benefit. */ for its benefit. */
# define CALL_MCOUNT \ # define CALL_MCOUNT \
mflr r0; \ mflr r0; \
stw r0,4(r1); \ stw r0,4(r1); \
cfi_offset (lr, 4); \
bl JUMPTARGET(_mcount); bl JUMPTARGET(_mcount);
#else /* PROF */ #else /* PROF */
# define CALL_MCOUNT /* Do nothing. */ # define CALL_MCOUNT /* Do nothing. */
@ -42,6 +43,7 @@
ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
.align ALIGNARG(2); \ .align ALIGNARG(2); \
C_LABEL(name) \ C_LABEL(name) \
cfi_startproc; \
CALL_MCOUNT CALL_MCOUNT
#define EALIGN_W_0 /* No words to insert. */ #define EALIGN_W_0 /* No words to insert. */
@ -61,6 +63,7 @@
ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
.align ALIGNARG(2); \ .align ALIGNARG(2); \
C_LABEL(name) \ C_LABEL(name) \
cfi_startproc; \
CALL_MCOUNT \ CALL_MCOUNT \
b 0f; \ b 0f; \
.align ALIGNARG(alignt); \ .align ALIGNARG(alignt); \
@ -72,11 +75,13 @@
ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
.align ALIGNARG(alignt); \ .align ALIGNARG(alignt); \
EALIGN_W_##words; \ EALIGN_W_##words; \
C_LABEL(name) C_LABEL(name) \
cfi_startproc;
#endif #endif
#undef END #undef END
#define END(name) \ #define END(name) \
cfi_endproc; \
ASM_SIZE_DIRECTIVE(name) ASM_SIZE_DIRECTIVE(name)
#define DO_CALL(syscall) \ #define DO_CALL(syscall) \

View File

@ -1,5 +1,5 @@
/* Assembly macros for 64-bit PowerPC. /* Assembly macros for 64-bit PowerPC.
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -14,8 +14,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
#include <sysdeps/powerpc/sysdep.h> #include <sysdeps/powerpc/sysdep.h>
@ -92,7 +92,8 @@ name##: OPD_ENT (name); \
#define ENTRY(name) \ #define ENTRY(name) \
ENTRY_2(name) \ ENTRY_2(name) \
.align ALIGNARG(2); \ .align ALIGNARG(2); \
BODY_LABEL(name): BODY_LABEL(name): \
cfi_startproc;
#define EALIGN_W_0 /* No words to insert. */ #define EALIGN_W_0 /* No words to insert. */
#define EALIGN_W_1 nop #define EALIGN_W_1 nop
@ -109,7 +110,8 @@ BODY_LABEL(name):
ENTRY_2(name) \ ENTRY_2(name) \
.align ALIGNARG(alignt); \ .align ALIGNARG(alignt); \
EALIGN_W_##words; \ EALIGN_W_##words; \
BODY_LABEL(name): BODY_LABEL(name): \
cfi_startproc;
/* Local labels stripped out by the linker. */ /* Local labels stripped out by the linker. */
#undef L #undef L
@ -173,11 +175,13 @@ LT_LABELSUFFIX(name,_name_end): ; \
/* END generates Traceback tables */ /* END generates Traceback tables */
#undef END #undef END
#define END(name) \ #define END(name) \
cfi_endproc; \
TRACEBACK(name) \ TRACEBACK(name) \
END_2(name) END_2(name)
/* This form supports more informative traceback tables */ /* This form supports more informative traceback tables */
#define END_GEN_TB(name,mask) \ #define END_GEN_TB(name,mask) \
cfi_endproc; \
TRACEBACK_MASK(name,mask) \ TRACEBACK_MASK(name,mask) \
END_2(name) END_2(name)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. /* Copyright (C) 1997,1999,2000,2001,2003,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -46,7 +46,10 @@ struct waitlist
{ {
struct waitlist *next; struct waitlist *next;
/* The next two fields is used in synchronous `lio_listio' operations. */
pthread_cond_t *cond; pthread_cond_t *cond;
int *result;
volatile int *counterp; volatile int *counterp;
/* The next field is used in asynchronous `lio_listio' operations. */ /* The next field is used in asynchronous `lio_listio' operations. */
struct sigevent *sigevp; struct sigevent *sigevp;

View File

@ -1,6 +1,5 @@
/* Notify initiator of AIO request. /* Notify initiator of AIO request.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004 Copyright (C) 1997-2001, 2003, 2004, 2006 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -148,7 +147,12 @@ __aio_notify (struct requestlist *req)
--*waitlist->counterp; --*waitlist->counterp;
if (waitlist->sigevp == NULL) if (waitlist->sigevp == NULL)
pthread_cond_signal (waitlist->cond); {
if (waitlist->result != NULL && aiocbp->__return_value == -1)
*waitlist->result = -1;
pthread_cond_signal (waitlist->cond);
}
else else
/* This is part of a asynchronous `lio_listio' operation. If /* This is part of a asynchronous `lio_listio' operation. If
this request is the last one, send the signal. */ this request is the last one, send the signal. */

View File

@ -1,6 +1,5 @@
/* Suspend until termination of a requests. /* Suspend until termination of a requests.
Copyright (C) 1997,1998,1999,2000,2002,2003,2005 Copyright (C) 1997-2000,2002,2003,2005,2006 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -113,6 +112,7 @@ aio_suspend (list, nent, timeout)
if (requestlist[cnt] != NULL) if (requestlist[cnt] != NULL)
{ {
waitlist[cnt].cond = &cond; waitlist[cnt].cond = &cond;
waitlist[cnt].result = NULL;
waitlist[cnt].next = requestlist[cnt]->waiting; waitlist[cnt].next = requestlist[cnt]->waiting;
waitlist[cnt].counterp = &dummy; waitlist[cnt].counterp = &dummy;
waitlist[cnt].sigevp = NULL; waitlist[cnt].sigevp = NULL;

View File

@ -134,6 +134,7 @@ lio_listio_internal (int mode, struct aiocb *const list[], int nent,
if (requests[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP) if (requests[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP)
{ {
waitlist[cnt].cond = &cond; waitlist[cnt].cond = &cond;
waitlist[cnt].result = &result;
waitlist[cnt].next = requests[cnt]->waiting; waitlist[cnt].next = requests[cnt]->waiting;
waitlist[cnt].counterp = &total; waitlist[cnt].counterp = &total;
waitlist[cnt].sigevp = NULL; waitlist[cnt].sigevp = NULL;
@ -145,21 +146,25 @@ lio_listio_internal (int mode, struct aiocb *const list[], int nent,
} }
} }
/* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancelation /* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancellation
points we must be careful. We added entries to the waiting lists points we must be careful. We added entries to the waiting lists
which we must remove. So defer cancelation for now. */ which we must remove. So defer cancellation for now. */
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate); pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate);
while (total > 0) while (total > 0)
pthread_cond_wait (&cond, &__aio_requests_mutex); pthread_cond_wait (&cond, &__aio_requests_mutex);
/* Now it's time to restore the cancelation state. */ /* Now it's time to restore the cancellation state. */
pthread_setcancelstate (oldstate, NULL); pthread_setcancelstate (oldstate, NULL);
/* Release the conditional variable. */ /* Release the conditional variable. */
if (pthread_cond_destroy (&cond) != 0) if (pthread_cond_destroy (&cond) != 0)
/* This must never happen. */ /* This must never happen. */
abort (); abort ();
/* If any of the I/O requests failed, return -1 and set errno. */
if (result != 0)
__set_errno (EIO);
} }
else else
{ {
@ -189,6 +194,7 @@ lio_listio_internal (int mode, struct aiocb *const list[], int nent,
&& list[cnt]->aio_lio_opcode != LIO_NOP) && list[cnt]->aio_lio_opcode != LIO_NOP)
{ {
waitlist->list[cnt].cond = NULL; waitlist->list[cnt].cond = NULL;
waitlist->list[cnt].result = NULL;
waitlist->list[cnt].next = requests[cnt]->waiting; waitlist->list[cnt].next = requests[cnt]->waiting;
waitlist->list[cnt].counterp = &waitlist->counter; waitlist->list[cnt].counterp = &waitlist->counter;
waitlist->list[cnt].sigevp = &waitlist->sigev; waitlist->list[cnt].sigevp = &waitlist->sigev;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996, 1997, 1999, 2003 Free Software Foundation, Inc. /* Copyright (C) 1995,96,97,99, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Lesser General Public 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 License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
02111-1307 USA. */ 02110-1301 USA. */
#include <sysdep-cancel.h> #include <sysdep-cancel.h>
#include <socketcall.h> #include <socketcall.h>
@ -53,7 +53,6 @@
.text .text
ENTRY(__socket) ENTRY(__socket)
cfi_startproc
stwu r1,-48(r1) stwu r1,-48(r1)
cfi_adjust_cfa_offset(48) cfi_adjust_cfa_offset(48)
#if NARGS >= 1 #if NARGS >= 1
@ -114,7 +113,6 @@ ENTRY(__socket)
addi r1,r1,48 addi r1,r1,48
PSEUDO_RET PSEUDO_RET
#endif #endif
cfi_endproc
PSEUDO_END (__socket) PSEUDO_END (__socket)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996, 1997, 1999, 2003 Free Software Foundation, Inc. /* Copyright (C) 1995,96,97,99, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -13,8 +13,8 @@
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not, License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, write to the Free Software Foundation, Inc., 51 Franklin Street,
Boston, MA 02111-1307, USA. */ Fifth Floor, Boston MA 02110-1301, USA. */
#include <sysdep-cancel.h> #include <sysdep-cancel.h>
#include <socketcall.h> #include <socketcall.h>
@ -52,7 +52,6 @@
.text .text
ENTRY(__socket) ENTRY(__socket)
CALL_MCOUNT NARGS CALL_MCOUNT NARGS
cfi_startproc
stdu r1,-144(r1) stdu r1,-144(r1)
cfi_adjust_cfa_offset(144) cfi_adjust_cfa_offset(144)
#if NARGS >= 1 #if NARGS >= 1
@ -117,7 +116,6 @@ ENTRY(__socket)
addi r1,r1,144 addi r1,r1,144
PSEUDO_RET PSEUDO_RET
#endif #endif
cfi_endproc
PSEUDO_END (__socket) PSEUDO_END (__socket)
#ifndef NO_WEAK_ALIAS #ifndef NO_WEAK_ALIAS