From 3ddf7149f0acbffc3a24858faac04f29f57bd415 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 30 Dec 2005 22:17:53 +0000 Subject: * sysdeps/sh/sysdep.h: Add cfi instrumentation to asm fragments. * sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise. * sysdeps/sh/_mcount.S: Add cfi instrumentation. * sysdeps/unix/sh/sysdep.S: Likewise. * sysdeps/unix/sysv/linux/sh/makecontext.S: Adjust cfi_startproc. * sysdeps/unix/sysv/linux/sh/sh4/getcontext.S: Remove now duplicate cfi_startproc and cfi_endproc. * sysdeps/unix/sysv/linux/sh/sh4/setcontext.S: Likewise. * sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S: Likewise. * sysdeps/unix/sysv/linux/sh/sh3/getcontext.S: Likewise. * sysdeps/unix/sysv/linux/sh/sh3/setcontext.S: Likewise. * sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S: Likewise. * sysdeps/unix/sysv/linux/sh/socket.S: Likewise. * sysdeps/unix/sysv/linux/sh/sysdep.S: Add cfi_endproc. --- sysdeps/sh/sysdep.h | 11 +++++++++-- sysdeps/unix/sysv/linux/sh/makecontext.S | 2 +- sysdeps/unix/sysv/linux/sh/sh3/getcontext.S | 2 -- sysdeps/unix/sysv/linux/sh/sh3/setcontext.S | 2 -- sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S | 2 -- sysdeps/unix/sysv/linux/sh/sh4/getcontext.S | 2 -- sysdeps/unix/sysv/linux/sh/sh4/setcontext.S | 2 -- sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S | 2 -- sysdeps/unix/sysv/linux/sh/socket.S | 2 -- sysdeps/unix/sysv/linux/sh/sysdep.S | 4 +++- sysdeps/unix/sysv/linux/sh/sysdep.h | 9 +++++++++ 11 files changed, 22 insertions(+), 18 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/sh/sysdep.h b/sysdeps/sh/sysdep.h index 202c701a10..743631ad71 100644 --- a/sysdeps/sh/sysdep.h +++ b/sysdeps/sh/sysdep.h @@ -1,5 +1,5 @@ /* Assembler macros for SH. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2005 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 @@ -52,10 +52,12 @@ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function) \ .align ALIGNARG(5); \ C_LABEL(name) \ + cfi_startproc; \ CALL_MCOUNT #undef END #define END(name) \ + cfi_endproc; \ ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name)) /* If compiled for profiling, call `mcount' at the start of each function. */ @@ -63,12 +65,17 @@ #define CALL_MCOUNT \ mov.l 1f,r1; \ sts.l pr,@-r15; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (pr, 0); \ mova 2f,r0; \ jmp @r1; \ lds r0,pr; \ .align 2; \ 1: .long mcount; \ -2: lds.l @r15+,pr +2: lds.l @r15+,pr; \ + cfi_adjust_cfa_offset (-4); \ + cfi_restore (pr) + #else #define CALL_MCOUNT /* Do nothing. */ #endif diff --git a/sysdeps/unix/sysv/linux/sh/makecontext.S b/sysdeps/unix/sysv/linux/sh/makecontext.S index deb6181750..877d78d396 100644 --- a/sysdeps/unix/sysv/linux/sh/makecontext.S +++ b/sysdeps/unix/sysv/linux/sh/makecontext.S @@ -32,7 +32,6 @@ .text .align 5 - cfi_startproc ENTRY(__makecontext) mov #4, r3 mov.l @(oSS_SP,r4), r1 @@ -140,6 +139,7 @@ ENTRY(__makecontext) .L4: .long HIDDEN_JUMPTARGET(exit) #endif + cfi_startproc PSEUDO_END(__makecontext) weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S index 3ea47d4a5c..66b3daaa3b 100644 --- a/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S +++ b/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S @@ -25,7 +25,6 @@ .text .align 5 - cfi_startproc ENTRY(__getcontext) /* Return value of getcontext. R0 is the only register whose @@ -84,7 +83,6 @@ ENTRY(__getcontext) rts nop - cfi_endproc PSEUDO_END(__getcontext) weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S index 30fbf7dec3..3136267aca 100644 --- a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S +++ b/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S @@ -25,7 +25,6 @@ .text .align 5 - cfi_startproc ENTRY(__setcontext) mov r4, r8 @@ -95,7 +94,6 @@ ENTRY(__setcontext) jmp @r0 mov.l @r15+, r0 - cfi_endproc PSEUDO_END(__setcontext) weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S index aa0129e9ac..64035e5545 100644 --- a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S +++ b/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S @@ -25,7 +25,6 @@ .text .align 5 - cfi_startproc ENTRY(__swapcontext) /* Return value of getcontext. R0 is the only register whose @@ -128,7 +127,6 @@ ENTRY(__swapcontext) jmp @r0 mov.l @r15+, r0 - cfi_endproc PSEUDO_END(__swapcontext) weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S index 380c4591dd..68bc235bcf 100644 --- a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S +++ b/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S @@ -25,7 +25,6 @@ .text .align 5 - cfi_startproc ENTRY(__getcontext) /* Return value of getcontext. R0 is the only register whose @@ -127,7 +126,6 @@ ENTRY(__getcontext) rts nop - cfi_endproc PSEUDO_END(__getcontext) weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S index 9e98910b4b..2bc546d1a1 100644 --- a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S +++ b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S @@ -25,7 +25,6 @@ .text .align 5 - cfi_startproc ENTRY(__setcontext) mov r4, r8 @@ -135,7 +134,6 @@ ENTRY(__setcontext) jmp @r0 mov.l @r15+, r0 - cfi_endproc PSEUDO_END(__setcontext) weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S index 1d58a40e70..1aeca1b1a7 100644 --- a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S +++ b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S @@ -25,7 +25,6 @@ .text .align 5 - cfi_startproc ENTRY(__swapcontext) /* Return value of getcontext. R0 is the only register whose @@ -210,7 +209,6 @@ ENTRY(__swapcontext) jmp @r0 mov.l @r15+, r0 - cfi_endproc PSEUDO_END(__swapcontext) weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/sh/socket.S b/sysdeps/unix/sysv/linux/sh/socket.S index eb1761b94b..c83b0f2601 100644 --- a/sysdeps/unix/sysv/linux/sh/socket.S +++ b/sysdeps/unix/sysv/linux/sh/socket.S @@ -88,7 +88,6 @@ #endif .globl __socket - cfi_startproc ENTRY (__socket) /* This will not work in the case of a socket call being interrupted by a signal. If the signal handler uses any stack the arguments @@ -169,7 +168,6 @@ ENTRY (__socket) bra .Lsyscall_error nop #endif - cfi_endproc .align 2 .L1: diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S index 33fdc748b5..176d99aab7 100644 --- a/sysdeps/unix/sysv/linux/sh/sysdep.S +++ b/sysdeps/unix/sysv/linux/sh/sysdep.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2005 + 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 @@ -27,6 +28,7 @@ ENTRY (__syscall_error) neg r4, r0 + cfi_endproc #define __syscall_error __syscall_error_1 #include diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.h b/sysdeps/unix/sysv/linux/sh/sysdep.h index 1a412e53db..b41236299d 100644 --- a/sysdeps/unix/sysv/linux/sh/sysdep.h +++ b/sysdeps/unix/sysv/linux/sh/sysdep.h @@ -141,13 +141,22 @@ # define SYSCALL_ERROR_HANDLER \ neg r0,r1; \ mov.l r14,@-r15; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (r14, 0); \ mov.l r12,@-r15; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (r12, 0); \ mov.l r1,@-r15; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (r1, 0); \ mov.l 0f,r12; \ mova 0f,r0; \ add r0,r12; \ sts.l pr,@-r15; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (pr, 0); \ mov r15,r14; \ + cfi_def_cfa_register (r14); \ mov.l 1f,r1; \ bsrf r1; \ nop; \ -- cgit 1.4.1