diff options
author | bde <bde@FreeBSD.org> | 2004-05-24 12:08:56 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 2004-05-24 12:08:56 +0000 |
commit | 5e80bb386e1f3e56b71b623679f23756fa18d524 (patch) | |
tree | b4fbb14aa6de21bf8d3bf90c0fee6fe20d088dcb /sys | |
parent | 04f0693a84eeb160251cb8679567ce771c7cf4af (diff) | |
download | FreeBSD-src-5e80bb386e1f3e56b71b623679f23756fa18d524.zip FreeBSD-src-5e80bb386e1f3e56b71b623679f23756fa18d524.tar.gz |
Fixed profiling of trap, syscall and interrupt handlers and some
ordinary functions, essentially by backing out half of rev.1.115 of
amd64/exception.S. The handlers must be between certain labels for
the purposes of profiling, and this was broken by scattering them in
separately compiled .S files, especially for ordinary functions that
ended up between the labels. Merge the files by #including them as
before, except with different pathnames and better comments and
organization. Changes to the scattered files are minimal -- just
move the labels to the file that does the #includes.
This also partly fixes profiling of IPIs -- all IPI handlers are now
correctly classified as interrupt handlers, but many are still missing
mcount calls.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/amd64/amd64/apic_vector.S | 2 | ||||
-rw-r--r-- | sys/amd64/amd64/exception.S | 42 | ||||
-rw-r--r-- | sys/amd64/isa/atpic_vector.S | 2 | ||||
-rw-r--r-- | sys/conf/files.amd64 | 6 |
4 files changed, 43 insertions, 9 deletions
diff --git a/sys/amd64/amd64/apic_vector.S b/sys/amd64/amd64/apic_vector.S index 3adb3cc..75d2372 100644 --- a/sys/amd64/amd64/apic_vector.S +++ b/sys/amd64/amd64/apic_vector.S @@ -129,7 +129,6 @@ IDTVEC(spuriousint) iretq -MCOUNT_LABEL(bintr2) ISR_VEC(1, apic_isr1) ISR_VEC(2, apic_isr2) ISR_VEC(3, apic_isr3) @@ -137,7 +136,6 @@ MCOUNT_LABEL(bintr2) ISR_VEC(5, apic_isr5) ISR_VEC(6, apic_isr6) ISR_VEC(7, apic_isr7) -MCOUNT_LABEL(eintr2) #ifdef SMP /* diff --git a/sys/amd64/amd64/exception.S b/sys/amd64/amd64/exception.S index d541152..c93b449 100644 --- a/sys/amd64/amd64/exception.S +++ b/sys/amd64/amd64/exception.S @@ -30,6 +30,9 @@ * $FreeBSD$ */ +#include "opt_atpic.h" +#include "opt_ia32.h" + #include <machine/asmacros.h> #include <machine/psl.h> #include <machine/trap.h> @@ -294,8 +297,44 @@ ENTRY(fork_trampoline) MEXITCOUNT jmp doreti /* Handle any ASTs */ +/* + * To efficiently implement classification of trap and interrupt handlers + * for profiling, there must be only trap handlers between the labels btrap + * and bintr, and only interrupt handlers between the labels bintr and + * eintr. This is implemented (partly) by including files that contain + * some of the handlers. Before including the files, set up a normal asm + * environment so that the included files doen't need to know that they are + * included. + */ + +#ifdef IA32 + .data + .align 4 + .text + SUPERALIGN_TEXT + +#include <amd64/ia32/ia32_exception.S> +#endif + .data - ALIGN_DATA + .align 4 + .text + SUPERALIGN_TEXT +MCOUNT_LABEL(bintr) + +#include <amd64/amd64/apic_vector.S> + +#ifdef DEV_ATPIC + .data + .align 4 + .text + SUPERALIGN_TEXT + +#include <amd64/isa/atpic_vector.S> +#endif + + .text +MCOUNT_LABEL(eintr) /* * void doreti(struct trapframe) @@ -304,7 +343,6 @@ ENTRY(fork_trampoline) */ .text SUPERALIGN_TEXT - .globl doreti .type doreti,@function doreti: FAKE_MCOUNT($bintr) /* init "from" bintr -> doreti */ diff --git a/sys/amd64/isa/atpic_vector.S b/sys/amd64/isa/atpic_vector.S index 045b864..37390a0 100644 --- a/sys/amd64/isa/atpic_vector.S +++ b/sys/amd64/isa/atpic_vector.S @@ -72,7 +72,6 @@ IDTVEC(vec_name) ; \ MEXITCOUNT ; \ jmp doreti -MCOUNT_LABEL(bintr) INTR(0, atpic_intr0) INTR(1, atpic_intr1) INTR(2, atpic_intr2) @@ -89,4 +88,3 @@ MCOUNT_LABEL(bintr) INTR(13, atpic_intr13) INTR(14, atpic_intr14) INTR(15, atpic_intr15) -MCOUNT_LABEL(eintr) diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64 index 5acb530..401b0a7 100644 --- a/sys/conf/files.amd64 +++ b/sys/conf/files.amd64 @@ -41,7 +41,7 @@ amd64/acpica/acpi_wakeup.c optional acpi amd64/acpica/madt.c optional acpi amd64/amd64/amd64-gdbstub.c optional ddb amd64/amd64/amd64_mem.c standard -amd64/amd64/apic_vector.S standard +#amd64/amd64/apic_vector.S standard amd64/amd64/atomic.c standard amd64/amd64/autoconf.c standard amd64/amd64/busdma_machdep.c standard @@ -80,7 +80,7 @@ amd64/amd64/uio_machdep.c standard amd64/amd64/uma_machdep.c standard amd64/amd64/vm_machdep.c standard amd64/isa/atpic.c optional atpic isa -amd64/isa/atpic_vector.S optional atpic isa +#amd64/isa/atpic_vector.S optional atpic isa amd64/isa/clock.c standard amd64/isa/elcr.c standard amd64/isa/isa.c standard @@ -140,7 +140,7 @@ pci/agp_via.c optional agp # # IA32 binary support # -amd64/ia32/ia32_exception.S optional ia32 +#amd64/ia32/ia32_exception.S optional ia32 amd64/ia32/ia32_signal.c optional ia32 amd64/ia32/ia32_sigtramp.S optional ia32 amd64/ia32/ia32_syscall.c optional ia32 |