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 /nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | |
parent | 3abb1ff7d1c7a2941df3c6234ec71b40a3879baa (diff) | |
download | glibc-07bd2a3fda47e7cfa83e808eb99a0da9d1184a30.tar glibc-07bd2a3fda47e7cfa83e808eb99a0da9d1184a30.tar.gz glibc-07bd2a3fda47e7cfa83e808eb99a0da9d1184a30.tar.bz2 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.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 102 |
1 files changed, 100 insertions, 2 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h index ba2efbcba9..581046c007 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.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 @@ -31,6 +31,7 @@ # define PSEUDO(name, syscall_name, args) \ .text; \ ENTRY (name); \ + .Lpseudo_start: \ SINGLE_THREAD_P; \ bf .Lpseudo_cancel; \ .type __##syscall_name##_nocancel,@function; \ @@ -48,19 +49,27 @@ .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ .Lpseudo_cancel: \ sts.l pr,@-r15; \ + .LCFI0: \ add _IMM16,r15; \ SAVE_ARGS_##args; \ + .LCFI1: \ CENABLE; \ LOAD_ARGS_##args; \ add _IMP16,r15; \ + .LCFI2: \ lds.l @r15+,pr; \ + .LCFI3: \ DO_CALL(syscall_name, args); \ SYSCALL_INST_PAD; \ sts.l pr,@-r15; \ + .LCFI4: \ mov.l r0,@-r15; \ + .LCFI5: \ CDISABLE; \ mov.l @r15+,r0; \ + .LCFI6: \ lds.l @r15+,pr; \ + .LCFI7: \ mov r0,r1; \ mov _IMM12,r2; \ shad r2,r1; \ @@ -69,7 +78,96 @@ bf .Lpseudo_end; \ .Lsyscall_error: \ SYSCALL_ERROR_HANDLER; \ - .Lpseudo_end: + .Lpseudo_end: \ + /* Create unwinding information for the syscall wrapper. */ \ + .section .eh_frame,"a",@progbits; \ + .Lframe1: \ + .ualong .LECIE1-.LSCIE1; \ + .LSCIE1: \ + .ualong 0x0; \ + .byte 0x1; \ + AUGMENTATION_STRING; \ + .uleb128 0x1; \ + .sleb128 -4; \ + .byte 0x11; \ + AUGMENTATION_PARAM; \ + .byte 0xc; \ + .uleb128 0xf; \ + .uleb128 0x0; \ + .align 2; \ + .LECIE1: \ + .LSFDE1: \ + .ualong .LEFDE1-.LASFDE1; \ + .LASFDE1: \ + .ualong .LASFDE1-.Lframe1; \ + START_SYMBOL_REF; \ + .ualong .Lpseudo_end - .Lpseudo_start; \ + AUGMENTATION_PARAM_FDE; \ + .byte 0x4; \ + .ualong .LCFI0-.Lpseudo_start; \ + .byte 0xe; \ + .uleb128 0x4; \ + .byte 0x91; \ + .uleb128 0x1; \ + .byte 0x4; \ + .ualong .LCFI1-.LCFI0; \ + .byte 0xe; \ + .uleb128 0x14; \ + FRAME_REG_##args; \ + .byte 0x4; \ + .ualong .LCFI2-.LCFI1; \ + .byte 0xe; \ + .uleb128 0x4; \ + .byte 0x4; \ + .ualong .LCFI3-.LCFI2; \ + .byte 0xe; \ + .uleb128 0x0; \ + .byte 0xd1; \ + .byte 0x4; \ + .ualong .LCFI4-.LCFI3; \ + .byte 0xe; \ + .uleb128 0x4; \ + .byte 0x91; \ + .uleb128 0x1; \ + .byte 0x4; \ + .ualong .LCFI5-.LCFI4; \ + .byte 0xe; \ + .uleb128 0x8; \ + .byte 0x80; \ + .uleb128 0x2; \ + .byte 0x4; \ + .ualong .LCFI6-.LCFI5; \ + .byte 0xe; \ + .uleb128 0x4; \ + .byte 0xc0; \ + .byte 0x4; \ + .ualong .LCFI7-.LCFI6; \ + .byte 0xe; \ + .uleb128 0x0; \ + .byte 0xd1; \ + .align 2; \ + .LEFDE1: \ + .previous + +# ifdef SHARED +# define AUGMENTATION_STRING .string "zR" +# define AUGMENTATION_PARAM .uleb128 1; .byte 0x1b +# define AUGMENTATION_PARAM_FDE .uleb128 0 +# define START_SYMBOL_REF .long .Lpseudo_start-. +# else +# define AUGMENTATION_STRING .ascii "\0" +# define AUGMENTATION_PARAM +# define AUGMENTATION_PARAM_FDE +# define START_SYMBOL_REF .long .Lpseudo_start +# endif + +# define FRAME_REG_0 /* Nothing. */ +# define FRAME_REG_1 FRAME_REG_0; .byte 0x84; .uleb128 5 +# define FRAME_REG_2 FRAME_REG_1; .byte 0x85; .uleb128 4 +# define FRAME_REG_3 FRAME_REG_2; .byte 0x86; .uleb128 3 +# define FRAME_REG_4 FRAME_REG_3; .byte 0x87; .uleb128 2 +# define FRAME_REG_5 FRAME_REG_4 +# define FRAME_REG_6 FRAME_REG_5 # undef PSEUDO_END # define PSEUDO_END(sym) \ |