summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/profiling/__mcount.c
blob: b1955f3705d92f0adf941c4b749b386233c4c66f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <unistd.h>
#include <sys/gmon.h>

extern struct monparam mparam;

void __mcount (unsigned long, unsigned long) PROF_SECTION;

void
__mcount (unsigned long frompc, unsigned long selfpc)
{
	struct rawarc *arc = mparam.arcs, thisarc;
	unsigned long num;
	/* If arc already exists, increment count */
	for (num = 0; num < mparam.arcnum; num++)
		if (arc[num].raw_frompc == frompc && arc[num].raw_selfpc == selfpc) {
			arc[num].raw_count++;
			return;
		}
	if (selfpc < mparam.lowpc || selfpc > mparam.highpc) return;
	thisarc.raw_frompc = frompc;
	thisarc.raw_selfpc = selfpc;
	thisarc.raw_count  = 1;
	arc[mparam.arcnum++] = thisarc;
}