| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | /* Machine-dependent definitions for profiling support.  SH version. * * Copyright (C) 2003 Stefan Allius <allius@atecom.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA */#define mcount_internal __mcount_internal#define _MCOUNT_DECL(frompc, selfpc) \static void __attribute__((unused)) mcount_internal (u_long frompc, u_long selfpc)/* * This mcount implementation expect the 'frompc' return address on * the stack and the 'selfpc' return address in register pr. * * Your compiler should include some stuff like this at each function * entry: * *	mov.l	1f,r1 *	sts.l	pr,@-r15 *	mova	2f,r0 *	jmp	@r1 *	 lds	r0,pr *	.align	2 * 1:	.long	mcount * 2:	lds.l	@r15+,pr * * or for PIC: * *	mov.l	3f,r1 *	mova	3f,r0 *	add	r1,r0 *	mov.l	1f,r1 *	mov.l	@(r0,r1),r1 *	sts.l	pr,@-r15 *	mova	2f,r0 *	jmp	@r1 *	 lds	r0,pr *	.align	2 * 1:	.long	mcount@GOT * 3:	.long	_GLOBAL_OFFSET_TABLE_ * 2:	lds.l	@r15+,pr * * * This ABI will be supported by GCC version 3.3 or newer! */#define MCOUNT asm(\	".align 4\n\t" \	".globl _mcount\n\t" \	".type _mcount,@function\n" \        "_mcount:\n\t" \	"mov.l r4,  @-r15\n\t" \	"mov.l r5,  @-r15\n\t" \	"mov.l r6,  @-r15\n\t" \	"mov.l r7,  @-r15\n\t" \	"sts.l pr,  @-r15\n\t" \	"sts   pr, r5\n\t" \	"bsr __mcount_internal\n\t" \	" mov.l @(5*4,r15), r4\n\t" \	"lds.l @r15+, pr\n\t" \	"mov.l @r15+, r7\n\t" \	"mov.l @r15+, r6\n\t" \	"mov.l @r15+, r5\n\t" \	"rts\n\t" \	" mov.l @r15+, r4\n\t" \	".size _mcount,.-_mcount;\n\t" \	".weak mcount;\n\t" \	" mcount = _mcount;");
 |