PERFORCE change 140746 for review
Marcel Moolenaar
marcel at FreeBSD.org
Sun Apr 27 18:42:49 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=140746
Change 140746 by marcel at marcel_xcllnt on 2008/04/27 18:42:28
Improve profiling support.
Obtained from: Juniper.
Affected files ...
.. //depot/projects/e500/sys/powerpc/include/cpu.h#3 edit
.. //depot/projects/e500/sys/powerpc/include/profile.h#2 edit
Differences ...
==== //depot/projects/e500/sys/powerpc/include/cpu.h#3 (text+ko) ====
@@ -69,6 +69,9 @@
#define cpu_getstack(td) ((td)->td_frame->fixreg[1])
#define cpu_spinwait() /* nothing */
+extern char btext[];
+extern char etext[];
+
void cpu_halt(void);
void cpu_reset(void);
void fork_trampoline(void);
==== //depot/projects/e500/sys/powerpc/include/profile.h#2 (text+ko) ====
@@ -81,61 +81,67 @@
#define _PLT
#endif
-#define MCOUNT \
-__asm(" .globl _mcount \n" \
-" .type _mcount, at function \n" \
-"_mcount: \n" \
-" stwu %r1,-64(%r1) /* alloca for reg save space */ \n" \
-" stw %r3,16(%r1) /* save parameter registers, */ \n" \
-" stw %r4,20(%r1) /* r3-10 */ \n" \
-" stw %r5,24(%r1) \n" \
-" stw %r6,28(%r1) \n" \
-" stw %r7,32(%r1) \n" \
-" stw %r8,36(%r1) \n" \
-" stw %r9,40(%r1) \n" \
-" stw %r10,44(%r1) \n" \
-" \n" \
-" mflr %r4 /* link register is 'selfpc' */ \n" \
-" stw %r4,48(%r1) /* save since bl will scrub */ \n" \
-" lwz %r3,68(%r1) /* get 'frompc' from LR-save */ \n" \
-" bl __mcount" _PLT " /* __mcount(frompc, selfpc)*/ \n" \
-" lwz %r3,68(%r1) \n" \
-" mtlr %r3 /* restore caller's lr */ \n" \
-" lwz %r4,48(%r1) \n" \
-" mtctr %r4 /* set up ctr for call back */ \n" \
-" /* note that blr is not used!*/ \n" \
-" lwz %r3,16(%r1) /* restore r3-10 parameters */ \n" \
-" lwz %r4,20(%r1) \n" \
-" lwz %r5,24(%r1) \n" \
-" lwz %r6,28(%r1) \n" \
-" lwz %r7,32(%r1) \n" \
-" lwz %r8,36(%r1) \n" \
-" lwz %r9,40(%r1) \n" \
-" lwz %r10,44(%r1) \n" \
-" addi %r1,%r1,64 /* blow away alloca save area */ \n" \
-" bctr /* return with indirect call */ \n" \
-"_mcount_end: \n" \
-" .size _mcount,_mcount_end-_mcount");
+#define MCOUNT \
+__asm( " .globl _mcount \n" \
+ " .type _mcount, at function \n" \
+ " .align 4 \n" \
+ "_mcount: \n" \
+ " stwu %r1,-64(%r1) \n" \
+ " stw %r3,16(%r1) \n" \
+ " stw %r4,20(%r1) \n" \
+ " stw %r5,24(%r1) \n" \
+ " stw %r6,28(%r1) \n" \
+ " stw %r7,32(%r1) \n" \
+ " stw %r8,36(%r1) \n" \
+ " stw %r9,40(%r1) \n" \
+ " stw %r10,44(%r1) \n" \
+ " mflr %r4 \n" \
+ " stw %r4,48(%r1) \n" \
+ " lwz %r3,68(%r1) \n" \
+ " bl __mcount" _PLT " \n" \
+ " lwz %r3,68(%r1) \n" \
+ " mtlr %r3 \n" \
+ " lwz %r4,48(%r1) \n" \
+ " mtctr %r4 \n" \
+ " lwz %r3,16(%r1) \n" \
+ " lwz %r4,20(%r1) \n" \
+ " lwz %r5,24(%r1) \n" \
+ " lwz %r6,28(%r1) \n" \
+ " lwz %r7,32(%r1) \n" \
+ " lwz %r8,36(%r1) \n" \
+ " lwz %r9,40(%r1) \n" \
+ " lwz %r10,44(%r1) \n" \
+ " addi %r1,%r1,64 \n" \
+ " bctr \n" \
+ "_mcount_end: \n" \
+ " .size _mcount,_mcount_end-_mcount");
+#ifdef _KERNEL
+#define MCOUNT_ENTER(s) s = intr_disable()
+#define MCOUNT_EXIT(s) intr_restore(s)
+#define MCOUNT_DECL(s) register_t s;
-#ifdef _KERNEL
-#define MCOUNT_ENTER(s) s = intr_disable();
-#define MCOUNT_EXIT(s) intr_restore(s);
-#define MCOUNT_DECL(s) register_t s
+extern char interrupt_vector_base[];
+extern char interrupt_vector_top[];
-void bintr(void);
-void btrap(void);
-void eintr(void);
-void user(void);
+static __inline void
+profile_sentinel_interrupt(void)
+{
+}
-#define MCOUNT_FROMPC_USER(pc) \
- ((pc < (uintfptr_t)VM_MAXUSER_ADDRESS) ? (uintfptr_t)user : pc)
+static __inline void
+profile_sentinel_userspace(void)
+{
+}
-#define MCOUNT_FROMPC_INTR(pc) \
- ((pc >= (uintfptr_t)btrap && pc < (uintfptr_t)eintr) ? \
- ((pc >= (uintfptr_t)bintr) ? (uintfptr_t)bintr : \
- (uintfptr_t)btrap) : ~0U)
+#define MCOUNT_FROMPC_USER(pc) \
+ ((pc < (uintfptr_t)VM_MAXUSER_ADDRESS) ? \
+ (uintfptr_t)profile_sentinel_userspace : pc)
+#define MCOUNT_FROMPC_INTR(pc) \
+ ((pc >= (uintfptr_t)interrupt_vector_base && \
+ pc < (uintfptr_t)interrupt_vector_top) ? \
+ (uintfptr_t)profile_sentinel_interrupt : ~0U)
#else /* !_KERNEL */
More information about the p4-projects
mailing list