1 1.25 skrll /* $NetBSD: profile.h,v 1.25 2021/02/18 20:37:02 skrll Exp $ */ 2 1.4 cgd 3 1.1 deraadt /* 4 1.2 glass * Copyright (c) 1992, 1993 5 1.2 glass * The Regents of the University of California. All rights reserved. 6 1.1 deraadt * 7 1.1 deraadt * This code is derived from software contributed to Berkeley by 8 1.1 deraadt * Ralph Campbell. 9 1.1 deraadt * 10 1.1 deraadt * Redistribution and use in source and binary forms, with or without 11 1.1 deraadt * modification, are permitted provided that the following conditions 12 1.1 deraadt * are met: 13 1.1 deraadt * 1. Redistributions of source code must retain the above copyright 14 1.1 deraadt * notice, this list of conditions and the following disclaimer. 15 1.1 deraadt * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 deraadt * notice, this list of conditions and the following disclaimer in the 17 1.1 deraadt * documentation and/or other materials provided with the distribution. 18 1.18 agc * 3. Neither the name of the University nor the names of its contributors 19 1.1 deraadt * may be used to endorse or promote products derived from this software 20 1.1 deraadt * without specific prior written permission. 21 1.1 deraadt * 22 1.1 deraadt * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23 1.1 deraadt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 1.1 deraadt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 1.1 deraadt * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26 1.1 deraadt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 1.1 deraadt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 1.1 deraadt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 1.1 deraadt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 1.1 deraadt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 1.1 deraadt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 1.1 deraadt * SUCH DAMAGE. 33 1.1 deraadt * 34 1.4 cgd * @(#)profile.h 8.1 (Berkeley) 6/10/93 35 1.1 deraadt */ 36 1.1 deraadt 37 1.8 jonathan #ifndef _MIPS_PROFILE_H_ 38 1.22 simonb #define _MIPS_PROFILE_H_ 39 1.8 jonathan 40 1.23 simonb #if defined(_KERNEL_OPT) 41 1.23 simonb #include "opt_gprof.h" 42 1.23 simonb #endif 43 1.23 simonb 44 1.8 jonathan #ifdef _KERNEL 45 1.15 jeffs /* 46 1.15 jeffs * Declare non-profiled _splhigh() /_splx() entrypoints for _mcount. 47 1.15 jeffs * see MCOUNT_ENTER and MCOUNT_EXIT. 48 1.15 jeffs */ 49 1.17 simonb #define _KERNEL_MCOUNT_DECL \ 50 1.21 matt int splhigh_noprof(void); \ 51 1.21 matt void splx_noprof(int); 52 1.15 jeffs #else /* !_KERNEL */ 53 1.15 jeffs /* Make __mcount static. */ 54 1.15 jeffs #define _KERNEL_MCOUNT_DECL static 55 1.15 jeffs #endif /* !_KERNEL */ 56 1.15 jeffs 57 1.15 jeffs #ifdef _KERNEL 58 1.12 jonathan # define _PROF_CPLOAD "" 59 1.12 jonathan #else 60 1.25 skrll # define _PROF_CPLOAD ".cpload $25;" 61 1.12 jonathan #endif 62 1.12 jonathan 63 1.15 jeffs 64 1.8 jonathan #define _MCOUNT_DECL \ 65 1.15 jeffs _KERNEL_MCOUNT_DECL \ 66 1.15 jeffs void __attribute__((unused)) __mcount 67 1.1 deraadt 68 1.23 simonb #ifdef __mips_o32 /* 32-bit version */ 69 1.23 simonb #define MCOUNT \ 70 1.23 simonb __asm(".globl _mcount;" \ 71 1.23 simonb ".type _mcount,@function;" \ 72 1.23 simonb "_mcount:;" \ 73 1.23 simonb ".set noreorder;" \ 74 1.23 simonb ".set noat;" \ 75 1.23 simonb _PROF_CPLOAD \ 76 1.23 simonb "addu $29,$29,-16;" \ 77 1.23 simonb "sw $4,8($29);" \ 78 1.23 simonb "sw $5,12($29);" \ 79 1.23 simonb "sw $6,16($29);" \ 80 1.23 simonb "sw $7,20($29);" \ 81 1.23 simonb "sw $1,0($29);" \ 82 1.23 simonb "sw $31,4($29);" \ 83 1.23 simonb "move $5,$31;" \ 84 1.23 simonb "move $4,$1;" \ 85 1.23 simonb "jal __mcount;" \ 86 1.23 simonb " nop;" \ 87 1.23 simonb "lw $4,8($29);" \ 88 1.23 simonb "lw $5,12($29);" \ 89 1.23 simonb "lw $6,16($29);" \ 90 1.23 simonb "lw $7,20($29);" \ 91 1.23 simonb "lw $31,4($29);" \ 92 1.23 simonb "lw $1,0($29);" \ 93 1.23 simonb "addu $29,$29,24;" \ 94 1.23 simonb "j $31;" \ 95 1.23 simonb " move $31,$1;" \ 96 1.23 simonb ".set reorder;" \ 97 1.23 simonb ".set at"); 98 1.23 simonb #else /* 64-bit */ 99 1.23 simonb #ifdef __mips_o64 100 1.23 simonb # error yeahnah 101 1.23 simonb #endif 102 1.1 deraadt #define MCOUNT \ 103 1.20 perry __asm(".globl _mcount;" \ 104 1.23 simonb ".type _mcount,@function;" \ 105 1.23 simonb "_mcount:;" \ 106 1.23 simonb ".set noreorder;" \ 107 1.23 simonb ".set noat;" \ 108 1.23 simonb _PROF_CPLOAD \ 109 1.23 simonb "daddu $29,$29,-80;"\ 110 1.23 simonb "sd $4,16($29);" \ 111 1.23 simonb "sd $5,24($29);" \ 112 1.23 simonb "sd $6,32($29);" \ 113 1.23 simonb "sd $7,40($29);" \ 114 1.23 simonb "sd $8,48($29);" \ 115 1.23 simonb "sd $9,56($29);" \ 116 1.23 simonb "sd $10,64($29);" \ 117 1.23 simonb "sd $11,72($29);" \ 118 1.23 simonb "sd $1,0($29);" \ 119 1.23 simonb "sd $31,8($29);" \ 120 1.23 simonb "move $5,$31;" \ 121 1.23 simonb "move $4,$1;" \ 122 1.23 simonb "jal __mcount;" \ 123 1.23 simonb " nop;" \ 124 1.23 simonb "ld $4,16($29);" \ 125 1.23 simonb "ld $5,24($29);" \ 126 1.23 simonb "ld $6,32($29);" \ 127 1.23 simonb "ld $7,40($29);" \ 128 1.23 simonb "ld $8,48($29);" \ 129 1.23 simonb "ld $9,56($29);" \ 130 1.23 simonb "ld $10,64($29);" \ 131 1.23 simonb "ld $11,72($29);" \ 132 1.23 simonb "ld $31,8($29);" \ 133 1.23 simonb "ld $1,0($29);" \ 134 1.23 simonb "daddu $29,$29,80;" \ 135 1.23 simonb "j $31;" \ 136 1.23 simonb " move $31,$1;" \ 137 1.23 simonb ".set reorder;" \ 138 1.23 simonb ".set at"); 139 1.23 simonb #endif /* 64-bit */ 140 1.1 deraadt 141 1.5 jtc #ifdef _KERNEL 142 1.1 deraadt /* 143 1.15 jeffs * The following two macros do splhigh and splx respectively. 144 1.15 jeffs * We use versions of _splraise() and _splset that don't 145 1.15 jeffs * including profiling support. 146 1.1 deraadt */ 147 1.1 deraadt 148 1.21 matt #define MCOUNT_ENTER s = splhigh_noprof() 149 1.14 simonb 150 1.21 matt #define MCOUNT_EXIT splx_noprof(s) 151 1.5 jtc #endif /* _KERNEL */ 152 1.15 jeffs 153 1.8 jonathan #endif /* _MIPS_PROFILE_H_ */ 154