summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/gcc/config/m68k/aux-mcount.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin/gcc/config/m68k/aux-mcount.c')
-rw-r--r--gnu/usr.bin/gcc/config/m68k/aux-mcount.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/gnu/usr.bin/gcc/config/m68k/aux-mcount.c b/gnu/usr.bin/gcc/config/m68k/aux-mcount.c
new file mode 100644
index 00000000000..1001c84762b
--- /dev/null
+++ b/gnu/usr.bin/gcc/config/m68k/aux-mcount.c
@@ -0,0 +1,69 @@
+/* Profiling support code for A/UX
+ Copyright (C) 1996 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file with other programs, and to distribute
+those programs without any restriction coming from the use of this
+file. (The General Public License restrictions do apply in other
+respects; for example, they cover modification of the file, and
+distribution when not linked into another program.)
+
+This file 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
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you link this library with files
+ compiled with GCC to produce an executable, this does not cause
+ the resulting executable to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+/* This routine is called at the beginning of functions compiled with -p
+ or -pg. The A/UX libraries call mcount%, but gas cannot generate
+ symbols with embedded percent signs. Previous ports of GCC to A/UX
+ have done things like (1) assemble a stub routine with the native
+ assembler, or (2) assemble a stub routine with gas and edit the object
+ file. This solution has the advantage that it can interoperate with
+ the A/UX version and can be used in an eventual port of glibc to A/UX. */
+
+#ifndef __GNUC__
+#error This file uses GNU C extensions
+#endif
+
+#include <mon.h>
+
+#ifdef IN_GCC
+#include "tm.h"
+#endif
+
+struct cnt *_countbase;
+
+#ifdef FUNCTION_PROFILER_SYMBOL
+void __mcount() __asm__(FUNCTION_PROFILER_SYMBOL);
+#endif
+
+void __mcount()
+{
+ register long **pfncnt __asm__("%a0");
+ register long *fncnt = *pfncnt;
+
+ if (!fncnt)
+ {
+ struct cnt *newcnt = _countbase++;
+ newcnt->fnpc = (char *)__builtin_return_address(0);
+ *pfncnt = fncnt = &newcnt->mcnt;
+ }
+ *fncnt += 1;
+}