summaryrefslogtreecommitdiff
path: root/ports/sysdeps/microblaze/_mcount.S
diff options
context:
space:
mode:
Diffstat (limited to 'ports/sysdeps/microblaze/_mcount.S')
-rw-r--r--ports/sysdeps/microblaze/_mcount.S91
1 files changed, 91 insertions, 0 deletions
diff --git a/ports/sysdeps/microblaze/_mcount.S b/ports/sysdeps/microblaze/_mcount.S
new file mode 100644
index 0000000000..7d4f40aece
--- /dev/null
+++ b/ports/sysdeps/microblaze/_mcount.S
@@ -0,0 +1,91 @@
+/* Copyright (C) 1997-2013 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
+ modify it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .global _mcount
+ .type _mcount, @function
+_mcount:
+ # Save regs.
+ addik r1, r1,-4 * 24
+ swi r31, r1, 4 * 23
+ swi r30, r1, 4 * 22
+ swi r29, r1, 4 * 21
+ swi r28, r1, 4 * 20
+ swi r27, r1, 4 * 19
+ swi r26, r1, 4 * 18
+ swi r25, r1, 4 * 17
+ swi r24, r1, 4 * 16
+ swi r23, r1, 4 * 15
+ swi r22, r1, 4 * 14
+ swi r21, r1, 4 * 13
+ swi r20, r1, 4 * 12
+ swi r19, r1, 4 * 11
+ swi r15, r1, 4 * 10
+ swi r12, r1, 4 * 9
+ swi r11, r1, 4 * 8
+ swi r10, r1, 4 * 7
+ swi r8, r1, 4 * 6
+ swi r7, r1, 4 * 5
+ swi r6, r1, 4 * 4
+ swi r5, r1, 4 * 3
+ swi r4, r1, 4 * 2
+ swi r3, r1, 4 * 1
+ swi r2, r1, 4 * 0
+
+#ifdef SHARED
+ mfs r20,rpc
+ addik r20,r20,_GLOBAL_OFFSET_TABLE_+8
+ addk r6, r0, r15 # callee is in r15.
+ brlid r15, __mcount_internal@PLT
+ lwi r5, r1, 4 * 24 # caller is on the stack.
+#else
+ # Pass from/to in r5 and r6.
+ addk r6, r0, r15 # callee is in r15.
+ bralid r15, __mcount_internal
+ lwi r5, r1, 4 * 24 # caller is on the stack.
+#endif
+
+ # Reload regs
+ lwi r31, r1, 4 * 23
+ lwi r30, r1, 4 * 22
+ lwi r29, r1, 4 * 21
+ lwi r28, r1, 4 * 20
+ lwi r27, r1, 4 * 19
+ lwi r26, r1, 4 * 18
+ lwi r25, r1, 4 * 17
+ lwi r24, r1, 4 * 16
+ lwi r23, r1, 4 * 15
+ lwi r22, r1, 4 * 14
+ lwi r21, r1, 4 * 13
+ lwi r20, r1, 4 * 12
+ lwi r19, r1, 4 * 11
+ lwi r15, r1, 4 * 10
+ lwi r12, r1, 4 * 9
+ lwi r11, r1, 4 * 8
+ lwi r10, r1, 4 * 7
+ lwi r8, r1, 4 * 6
+ lwi r7, r1, 4 * 5
+ lwi r6, r1, 4 * 4
+ lwi r5, r1, 4 * 3
+ lwi r4, r1, 4 * 2
+ lwi r3, r1, 4 * 1
+ lwi r2, r1, 4 * 0
+
+ rtsd r15, 8
+ addik r1, r1, 4 * 24
+
+ .size _mcount, . - _mcount