git: aa3ea612be36 - main - x86: remove gcov kernel support
Konstantin Belousov
kib at FreeBSD.org
Fri Apr 2 12:49:50 UTC 2021
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=aa3ea612be3659881392251e91912682b038ce78
commit aa3ea612be3659881392251e91912682b038ce78
Author: Konstantin Belousov <kib at FreeBSD.org>
AuthorDate: 2021-03-31 21:04:55 +0000
Commit: Konstantin Belousov <kib at FreeBSD.org>
CommitDate: 2021-04-02 12:41:51 +0000
x86: remove gcov kernel support
Reviewed by: jhb
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D29529
---
sys/amd64/amd64/apic_vector.S | 14 --
sys/amd64/amd64/atpic_vector.S | 2 -
sys/amd64/amd64/exception.S | 25 +-
sys/amd64/amd64/locore.S | 10 +-
sys/amd64/amd64/prof_machdep.c | 323 ------------------------
sys/amd64/amd64/sigtramp.S | 2 +-
sys/amd64/amd64/support.S | 1 -
sys/amd64/amd64/xen-locore.S | 6 +-
sys/amd64/conf/NOTES | 4 -
sys/amd64/ia32/ia32_exception.S | 2 -
sys/amd64/include/asmacros.h | 82 +-----
sys/amd64/include/profile.h | 81 +-----
sys/amd64/linux/linux_locore.asm | 10 +-
sys/amd64/linux32/linux32_locore.asm | 6 +-
sys/cddl/dev/dtrace/amd64/dtrace_asm.S | 3 +-
sys/conf/Makefile.arm | 2 +-
sys/conf/files | 27 +-
sys/conf/files.amd64 | 1 -
sys/conf/files.arm | 2 +-
sys/conf/files.arm64 | 18 +-
sys/conf/files.i386 | 1 -
sys/conf/files.x86 | 10 +-
sys/conf/kern.post.mk | 3 -
sys/conf/kern.pre.mk | 42 +---
sys/conf/options.i386 | 1 -
sys/dev/hyperv/vmbus/amd64/vmbus_vector.S | 2 -
sys/dev/hyperv/vmbus/i386/vmbus_vector.S | 2 -
sys/i386/conf/NOTES | 5 -
sys/i386/i386/apic_vector.s | 14 --
sys/i386/i386/atpic_vector.s | 2 -
sys/i386/i386/exception.s | 30 +--
sys/i386/i386/locore.s | 4 +-
sys/i386/i386/mpboot.s | 4 +-
sys/i386/i386/prof_machdep.c | 404 ------------------------------
sys/i386/i386/sigtramp.s | 2 +-
sys/i386/i386/support.s | 2 -
sys/i386/i386/vm86bios.s | 1 -
sys/i386/include/asmacros.h | 82 +-----
sys/i386/include/profile.h | 94 +------
sys/i386/linux/linux_locore.asm | 6 +-
sys/kern/subr_prof.c | 345 -------------------------
sys/libkern/mcount.c | 316 -----------------------
42 files changed, 79 insertions(+), 1914 deletions(-)
diff --git a/sys/amd64/amd64/apic_vector.S b/sys/amd64/amd64/apic_vector.S
index 4de39283f92f..21696a93fc5f 100644
--- a/sys/amd64/amd64/apic_vector.S
+++ b/sys/amd64/amd64/apic_vector.S
@@ -81,7 +81,6 @@ as_lapic_eoi:
*/
.macro ISR_VEC index, vec_name
INTR_HANDLER \vec_name
- FAKE_MCOUNT(TF_RIP(%rsp))
cmpl $0,x2apic_mode
je 1f
movl $(MSR_APIC_ISR0 + \index),%ecx
@@ -98,7 +97,6 @@ as_lapic_eoi:
movl %eax, %edi /* pass the IRQ */
call lapic_handle_intr
3:
- MEXITCOUNT
jmp doreti
.endm
@@ -127,28 +125,22 @@ IDTVEC(spuriousint)
* Local APIC periodic timer handler.
*/
INTR_HANDLER timerint
- FAKE_MCOUNT(TF_RIP(%rsp))
movq %rsp, %rdi
call lapic_handle_timer
- MEXITCOUNT
jmp doreti
/*
* Local APIC CMCI handler.
*/
INTR_HANDLER cmcint
- FAKE_MCOUNT(TF_RIP(%rsp))
call lapic_handle_cmc
- MEXITCOUNT
jmp doreti
/*
* Local APIC error interrupt handler.
*/
INTR_HANDLER errorint
- FAKE_MCOUNT(TF_RIP(%rsp))
call lapic_handle_error
- MEXITCOUNT
jmp doreti
#ifdef XENHVM
@@ -157,10 +149,8 @@ IDTVEC(spuriousint)
* Only used when the hypervisor supports direct vector callbacks.
*/
INTR_HANDLER xen_intr_upcall
- FAKE_MCOUNT(TF_RIP(%rsp))
movq %rsp, %rdi
call xen_intr_handle_upcall
- MEXITCOUNT
jmp doreti
#endif
@@ -184,9 +174,7 @@ IDTVEC(spuriousint)
*/
INTR_HANDLER ipi_intr_bitmap_handler
call as_lapic_eoi
- FAKE_MCOUNT(TF_RIP(%rsp))
call ipi_bitmap_handler
- MEXITCOUNT
jmp doreti
/*
@@ -210,9 +198,7 @@ IDTVEC(spuriousint)
*/
INTR_HANDLER ipi_swi
call as_lapic_eoi
- FAKE_MCOUNT(TF_RIP(%rsp))
call ipi_swi_handler
- MEXITCOUNT
jmp doreti
/*
diff --git a/sys/amd64/amd64/atpic_vector.S b/sys/amd64/amd64/atpic_vector.S
index d82ffd30e1c9..d76331a887ad 100644
--- a/sys/amd64/amd64/atpic_vector.S
+++ b/sys/amd64/amd64/atpic_vector.S
@@ -44,11 +44,9 @@
*/
.macro INTR irq_num, vec_name
INTR_HANDLER \vec_name
- FAKE_MCOUNT(TF_RIP(%rsp))
movq %rsp, %rsi
movl $\irq_num, %edi /* pass the IRQ */
call atpic_handle_intr
- MEXITCOUNT
jmp doreti
.endm
diff --git a/sys/amd64/amd64/exception.S b/sys/amd64/amd64/exception.S
index 3fb518179406..4716ca8cd7c2 100644
--- a/sys/amd64/amd64/exception.S
+++ b/sys/amd64/amd64/exception.S
@@ -101,9 +101,6 @@ dtrace_invop_calltrap_addr:
* registers are reloaded on return to the usermode.
*/
-MCOUNT_LABEL(user)
-MCOUNT_LABEL(btrap)
-
/* Traps that we leave interrupts disabled for. */
.macro TRAP_NOEN l, trapno
PTI_ENTRY \l,\l\()_pti_k,\l\()_pti_u
@@ -257,7 +254,6 @@ alltraps_pushregs_no_rax:
pushfq
andq $~(PSL_D | PSL_AC),(%rsp)
popfq
- FAKE_MCOUNT(TF_RIP(%rsp))
#ifdef KDTRACE_HOOKS
/*
* DTrace Function Boundary Trace (fbt) probes are triggered
@@ -288,7 +284,6 @@ alltraps_pushregs_no_rax:
calltrap:
movq %rsp,%rdi
call trap_check
- MEXITCOUNT
jmp doreti /* Handle any pending ASTs */
/*
@@ -576,7 +571,6 @@ fast_syscall_common:
movq %r14,TF_R14(%rsp) /* C preserved */
movq %r15,TF_R15(%rsp) /* C preserved */
movl $TF_HASSEGS,TF_FLAGS(%rsp)
- FAKE_MCOUNT(TF_RIP(%rsp))
movq PCPU(CURTHREAD),%rdi
movq %rsp,TD_FRAME(%rdi)
movl TF_RFLAGS(%rsp),%esi
@@ -594,7 +588,6 @@ fast_syscall_common:
call handle_ibrs_exit
callq *mds_handler
/* Restore preserved registers. */
- MEXITCOUNT
movq TF_RDI(%rsp),%rdi /* bonus; preserve arg 1 */
movq TF_RSI(%rsp),%rsi /* bonus: preserve arg 2 */
movq TF_RDX(%rsp),%rdx /* return value 2 */
@@ -621,7 +614,6 @@ fast_syscall_common:
jmp 1b
4: /* Requested full context restore, use doreti for that. */
- MEXITCOUNT
jmp doreti
/*
@@ -692,10 +684,8 @@ IDTVEC(dbg)
rdmsr
movl %eax,%r14d
call handle_ibrs_entry
-2: FAKE_MCOUNT(TF_RIP(%rsp))
- movq %rsp,%rdi
+2: movq %rsp,%rdi
call trap
- MEXITCOUNT
testl $CPUID_STDEXT3_IBPB,cpu_stdext_feature3(%rip)
je 3f
movl %r14d,%eax
@@ -866,10 +856,8 @@ nmi_fromuserspace:
3:
/* Note: this label is also used by ddb and gdb: */
nmi_calltrap:
- FAKE_MCOUNT(TF_RIP(%rsp))
movq %rsp,%rdi
call trap
- MEXITCOUNT
#ifdef HWPMC_HOOKS
/*
* Capture a userspace callchain if needed.
@@ -1055,10 +1043,8 @@ mchk_fromuserspace:
1: call handle_ibrs_entry
/* Note: this label is also used by ddb and gdb: */
mchk_calltrap:
- FAKE_MCOUNT(TF_RIP(%rsp))
movq %rsp,%rdi
call mca_intr
- MEXITCOUNT
testl %ebx,%ebx /* %ebx != 0 => return to userland */
jnz doreti_exit
/*
@@ -1089,7 +1075,6 @@ ENTRY(fork_trampoline)
movq %rbx,%rsi /* arg1 */
movq %rsp,%rdx /* trapframe pointer */
call fork_exit
- MEXITCOUNT
jmp doreti /* Handle any ASTs */
/*
@@ -1115,8 +1100,6 @@ ENTRY(fork_trampoline)
.p2align 4
.text
SUPERALIGN_TEXT
-MCOUNT_LABEL(bintr)
-
#include <amd64/amd64/apic_vector.S>
#ifdef DEV_ATPIC
@@ -1128,9 +1111,6 @@ MCOUNT_LABEL(bintr)
#include <amd64/amd64/atpic_vector.S>
#endif
- .text
-MCOUNT_LABEL(eintr)
-
/*
* void doreti(struct trapframe)
*
@@ -1141,7 +1121,6 @@ MCOUNT_LABEL(eintr)
.type doreti, at function
.globl doreti
doreti:
- FAKE_MCOUNT($bintr) /* init "from" bintr -> doreti */
/*
* Check if ASTs can be handled now.
*/
@@ -1171,7 +1150,6 @@ doreti_ast:
* registers. The fault is handled in trap.c.
*/
doreti_exit:
- MEXITCOUNT
movq PCPU(CURPCB),%r8
/*
@@ -1332,7 +1310,6 @@ doreti_iret_fault:
movl $T_PROTFLT,TF_TRAPNO(%rsp)
movq $0,TF_ERR(%rsp) /* XXX should be the error code */
movq $0,TF_ADDR(%rsp)
- FAKE_MCOUNT(TF_RIP(%rsp))
jmp calltrap
ALIGN_TEXT
diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S
index 3addc3fb10cd..4f6283b88bd2 100644
--- a/sys/amd64/amd64/locore.S
+++ b/sys/amd64/amd64/locore.S
@@ -54,7 +54,7 @@
*
* We are already in long mode, on a 64 bit %cs and running at KERNBASE.
*/
-NON_GPROF_ENTRY(btext)
+ENTRY(btext)
/* Tell the bios to warmboot next time */
movw $0x1234,0x472
@@ -79,7 +79,7 @@ NON_GPROF_ENTRY(btext)
jmp 0b
/* la57_trampoline(%rdi pml5) */
-NON_GPROF_ENTRY(la57_trampoline)
+ENTRY(la57_trampoline)
movq %rsp,%r11
movq %rbx,%r10
leaq la57_trampoline_end(%rip),%rsp
@@ -118,11 +118,11 @@ l2: movq %r11,%rsp
movq %r10,%rbx
retq
.p2align 4,0
-NON_GPROF_ENTRY(la57_trampoline_gdt_desc)
+ENTRY(la57_trampoline_gdt_desc)
.word la57_trampoline_end - la57_trampoline_gdt
.long 0 /* filled by pmap_bootstrap_la57 */
.p2align 4,0
-NON_GPROF_ENTRY(la57_trampoline_gdt)
+ENTRY(la57_trampoline_gdt)
.long 0x00000000 /* null desc */
.long 0x00000000
.long 0x00000000 /* 64bit code */
@@ -132,7 +132,7 @@ NON_GPROF_ENTRY(la57_trampoline_gdt)
.long 0x0000ffff /* universal data */
.long 0x00cf9300
.dcb.l 16,0
-NON_GPROF_ENTRY(la57_trampoline_end)
+ENTRY(la57_trampoline_end)
.bss
ALIGN_DATA /* just to be sure */
diff --git a/sys/amd64/amd64/prof_machdep.c b/sys/amd64/amd64/prof_machdep.c
deleted file mode 100644
index 72b18faef028..000000000000
--- a/sys/amd64/amd64/prof_machdep.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1996 Bruce D. Evans.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#ifdef GUPROF
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/cpu.h>
-#include <sys/eventhandler.h>
-#include <sys/gmon.h>
-#include <sys/kernel.h>
-#include <sys/smp.h>
-#include <sys/sysctl.h>
-
-#include <machine/clock.h>
-#include <machine/timerreg.h>
-
-#define CPUTIME_CLOCK_UNINITIALIZED 0
-#define CPUTIME_CLOCK_I8254 1
-#define CPUTIME_CLOCK_TSC 2
-#define CPUTIME_CLOCK_I8254_SHIFT 7
-
-int cputime_bias = 1; /* initialize for locality of reference */
-
-static int cputime_clock = CPUTIME_CLOCK_UNINITIALIZED;
-static int cputime_prof_active;
-#endif /* GUPROF */
-
-#ifdef __GNUCLIKE_ASM
-#if defined(SMP) && defined(GUPROF)
-#define MPLOCK " \n\
- movl $1,%edx \n\
-9: \n\
- xorl %eax,%eax \n\
- lock \n\
- cmpxchgl %edx,mcount_lock \n\
- jne 9b \n"
-#define MPUNLOCK "movl $0,mcount_lock \n"
-#else /* !(SMP && GUPROF) */
-#define MPLOCK
-#define MPUNLOCK
-#endif /* SMP && GUPROF */
-
-__asm(" \n\
-GM_STATE = 0 \n\
-GMON_PROF_OFF = 3 \n\
- \n\
- .text \n\
- .p2align 4,0x90 \n\
- .globl __mcount \n\
- .type __mcount, at function \n\
-__mcount: \n\
- # \n\
- # Check that we are profiling. Do it early for speed. \n\
- # \n\
- cmpl $GMON_PROF_OFF,_gmonparam+GM_STATE \n\
- je .mcount_exit \n\
- # \n\
- # __mcount is the same as [.]mcount except the caller \n\
- # hasn't changed the stack except to call here, so the \n\
- # caller's raddr is above our raddr. \n\
- # \n\
- pushq %rax \n\
- pushq %rdx \n\
- pushq %rcx \n\
- pushq %rsi \n\
- pushq %rdi \n\
- pushq %r8 \n\
- pushq %r9 \n\
- movq 7*8+8(%rsp),%rdi \n\
- jmp .got_frompc \n\
- \n\
- .p2align 4,0x90 \n\
- .globl .mcount \n\
-.mcount: \n\
- cmpl $GMON_PROF_OFF,_gmonparam+GM_STATE \n\
- je .mcount_exit \n\
- # \n\
- # The caller's stack frame has already been built, so \n\
- # %rbp is the caller's frame pointer. The caller's \n\
- # raddr is in the caller's frame following the caller's \n\
- # caller's frame pointer. \n\
- # \n\
- pushq %rax \n\
- pushq %rdx \n\
- pushq %rcx \n\
- pushq %rsi \n\
- pushq %rdi \n\
- pushq %r8 \n\
- pushq %r9 \n\
- movq 8(%rbp),%rdi \n\
-.got_frompc: \n\
- # \n\
- # Our raddr is the caller's pc. \n\
- # \n\
- movq 7*8(%rsp),%rsi \n\
- \n\
- pushfq \n\
- cli \n"
- MPLOCK " \n\
- call mcount \n"
- MPUNLOCK " \n\
- popfq \n\
- popq %r9 \n\
- popq %r8 \n\
- popq %rdi \n\
- popq %rsi \n\
- popq %rcx \n\
- popq %rdx \n\
- popq %rax \n\
-.mcount_exit: \n\
- ret $0 \n\
-");
-#else /* !__GNUCLIKE_ASM */
-#error "this file needs to be ported to your compiler"
-#endif /* __GNUCLIKE_ASM */
-
-#ifdef GUPROF
-/*
- * [.]mexitcount saves the return register(s), loads selfpc and calls
- * mexitcount(selfpc) to do the work. Someday it should be in a machine
- * dependent file together with cputime(), __mcount and [.]mcount. cputime()
- * can't just be put in machdep.c because it has to be compiled without -pg.
- */
-#ifdef __GNUCLIKE_ASM
-__asm(" \n\
- .text \n\
-# \n\
-# Dummy label to be seen when gprof -u hides [.]mexitcount. \n\
-# \n\
- .p2align 4,0x90 \n\
- .globl __mexitcount \n\
- .type __mexitcount, at function \n\
-__mexitcount: \n\
- nop \n\
- \n\
-GMON_PROF_HIRES = 4 \n\
- \n\
- .p2align 4,0x90 \n\
- .globl .mexitcount \n\
-.mexitcount: \n\
- cmpl $GMON_PROF_HIRES,_gmonparam+GM_STATE \n\
- jne .mexitcount_exit \n\
- pushq %rax \n\
- pushq %rdx \n\
- pushq %rcx \n\
- pushq %rsi \n\
- pushq %rdi \n\
- pushq %r8 \n\
- pushq %r9 \n\
- movq 7*8(%rsp),%rdi \n\
- pushfq \n\
- cli \n"
- MPLOCK " \n\
- call mexitcount \n"
- MPUNLOCK " \n\
- popfq \n\
- popq %r9 \n\
- popq %r8 \n\
- popq %rdi \n\
- popq %rsi \n\
- popq %rcx \n\
- popq %rdx \n\
- popq %rax \n\
-.mexitcount_exit: \n\
- ret $0 \n\
-");
-#endif /* __GNUCLIKE_ASM */
-
-/*
- * Return the time elapsed since the last call. The units are machine-
- * dependent.
- */
-int
-cputime()
-{
- u_int count;
- int delta;
- u_char high, low;
- static u_int prev_count;
-
- if (cputime_clock == CPUTIME_CLOCK_TSC) {
- /*
- * Scale the TSC a little to make cputime()'s frequency
- * fit in an int, assuming that the TSC frequency fits
- * in a u_int. Use a fixed scale since dynamic scaling
- * would be slower and we can't really use the low bit
- * of precision.
- */
- count = (u_int)rdtsc() & ~1u;
- delta = (int)(count - prev_count) >> 1;
- prev_count = count;
- return (delta);
- }
-
- /*
- * Read the current value of the 8254 timer counter 0.
- */
- outb(TIMER_MODE, TIMER_SEL0 | TIMER_LATCH);
- low = inb(TIMER_CNTR0);
- high = inb(TIMER_CNTR0);
- count = ((high << 8) | low) << CPUTIME_CLOCK_I8254_SHIFT;
-
- /*
- * The timer counts down from TIMER_CNTR0_MAX to 0 and then resets.
- * While profiling is enabled, this routine is called at least twice
- * per timer reset (for mcounting and mexitcounting hardclock()),
- * so at most one reset has occurred since the last call, and one
- * has occurred iff the current count is larger than the previous
- * count. This allows counter underflow to be detected faster
- * than in microtime().
- */
- delta = prev_count - count;
- prev_count = count;
- if ((int) delta <= 0)
- return (delta + (i8254_max_count << CPUTIME_CLOCK_I8254_SHIFT));
- return (delta);
-}
-
-static int
-sysctl_machdep_cputime_clock(SYSCTL_HANDLER_ARGS)
-{
- int clock;
- int error;
-
- clock = cputime_clock;
- error = sysctl_handle_opaque(oidp, &clock, sizeof clock, req);
- if (error == 0 && req->newptr != NULL) {
- if (clock < 0 || clock > CPUTIME_CLOCK_TSC)
- return (EINVAL);
- cputime_clock = clock;
- }
- return (error);
-}
-
-SYSCTL_PROC(_machdep, OID_AUTO, cputime_clock,
- CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, 0, sizeof(u_int),
- sysctl_machdep_cputime_clock, "I",
- "");
-
-/*
- * The start and stop routines need not be here since we turn off profiling
- * before calling them. They are here for convenience.
- */
-
-void
-startguprof(gp)
- struct gmonparam *gp;
-{
- uint64_t freq;
-
- freq = atomic_load_acq_64(&tsc_freq);
- if (cputime_clock == CPUTIME_CLOCK_UNINITIALIZED) {
- if (freq != 0 && mp_ncpus == 1)
- cputime_clock = CPUTIME_CLOCK_TSC;
- else
- cputime_clock = CPUTIME_CLOCK_I8254;
- }
- if (cputime_clock == CPUTIME_CLOCK_TSC) {
- gp->profrate = freq >> 1;
- cputime_prof_active = 1;
- } else
- gp->profrate = i8254_freq << CPUTIME_CLOCK_I8254_SHIFT;
- cputime_bias = 0;
- cputime();
-}
-
-void
-stopguprof(gp)
- struct gmonparam *gp;
-{
- if (cputime_clock == CPUTIME_CLOCK_TSC)
- cputime_prof_active = 0;
-}
-
-/* If the cpu frequency changed while profiling, report a warning. */
-static void
-tsc_freq_changed(void *arg, const struct cf_level *level, int status)
-{
-
- /*
- * If there was an error during the transition or
- * TSC is P-state invariant, don't do anything.
- */
- if (status != 0 || tsc_is_invariant)
- return;
- if (cputime_prof_active && cputime_clock == CPUTIME_CLOCK_TSC)
- printf("warning: cpu freq changed while profiling active\n");
-}
-
-EVENTHANDLER_DEFINE(cpufreq_post_change, tsc_freq_changed, NULL,
- EVENTHANDLER_PRI_ANY);
-
-#endif /* GUPROF */
diff --git a/sys/amd64/amd64/sigtramp.S b/sys/amd64/amd64/sigtramp.S
index a249a1a646f2..9983edf229a3 100644
--- a/sys/amd64/amd64/sigtramp.S
+++ b/sys/amd64/amd64/sigtramp.S
@@ -38,7 +38,7 @@
* Signal trampoline, copied to top of user stack
*
*/
-NON_GPROF_ENTRY(sigcode)
+ENTRY(sigcode)
call *SIGF_HANDLER(%rsp) /* call signal handler */
lea SIGF_UC(%rsp),%rdi /* get ucontext_t */
pushq $0 /* junk to fake return addr. */
diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S
index 4c0f7da87ef8..0db6f2f04099 100644
--- a/sys/amd64/amd64/support.S
+++ b/sys/amd64/amd64/support.S
@@ -1490,7 +1490,6 @@ ENTRY(lgdt)
popq %rax
pushq $KCSEL
pushq %rax
- MEXITCOUNT
lretq
END(lgdt)
diff --git a/sys/amd64/amd64/xen-locore.S b/sys/amd64/amd64/xen-locore.S
index 7c7707a3864e..97d81711a051 100644
--- a/sys/amd64/amd64/xen-locore.S
+++ b/sys/amd64/amd64/xen-locore.S
@@ -69,11 +69,11 @@
.text
.p2align PAGE_SHIFT, 0x90 /* Hypercall_page needs to be PAGE aligned */
-NON_GPROF_ENTRY(hypercall_page)
+ENTRY(hypercall_page)
.skip 0x1000, 0x90 /* Fill with "nop"s */
/* Legacy PVH entry point, to be removed. */
-NON_GPROF_ENTRY(xen_start)
+ENTRY(xen_start)
/* Don't trust what the loader gives for rflags. */
pushq $PSL_KERNEL
popfq
@@ -97,7 +97,7 @@ NON_GPROF_ENTRY(xen_start)
/* PVH entry point. */
.code32
-NON_GPROF_ENTRY(xen_start32)
+ENTRY(xen_start32)
/* Load flat GDT */
movl $VTOP(gdtdesc32), %eax
diff --git a/sys/amd64/conf/NOTES b/sys/amd64/conf/NOTES
index 60d171721cf1..5627ce5377d3 100644
--- a/sys/amd64/conf/NOTES
+++ b/sys/amd64/conf/NOTES
@@ -7,10 +7,6 @@
# $FreeBSD$
#
-#
-# We want LINT to cover profiling as well.
-profile 2
-
#
# Enable the kernel DTrace hooks which are required to load the DTrace
# kernel modules.
diff --git a/sys/amd64/ia32/ia32_exception.S b/sys/amd64/ia32/ia32_exception.S
index c7bfb02f0281..a1c40ced168f 100644
--- a/sys/amd64/ia32/ia32_exception.S
+++ b/sys/amd64/ia32/ia32_exception.S
@@ -73,8 +73,6 @@ int0x80_syscall_common:
pushfq
andq $~(PSL_D | PSL_AC),(%rsp)
popfq
- FAKE_MCOUNT(TF_RIP(%rsp))
movq %rsp, %rdi
call ia32_syscall
- MEXITCOUNT
jmp doreti
diff --git a/sys/amd64/include/asmacros.h b/sys/amd64/include/asmacros.h
index b8541bed310c..438f4ec26f61 100644
--- a/sys/amd64/include/asmacros.h
+++ b/sys/amd64/include/asmacros.h
@@ -55,92 +55,14 @@
#define CNAME(csym) csym
#define ALIGN_DATA .p2align 3 /* 8 byte alignment, zero filled */
-#ifdef GPROF
#define ALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
-#else
-#define ALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
-#endif
#define SUPERALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
#define GEN_ENTRY(name) ALIGN_TEXT; .globl CNAME(name); \
.type CNAME(name), at function; CNAME(name):
-#define NON_GPROF_ENTRY(name) GEN_ENTRY(name)
-#define NON_GPROF_RET .byte 0xc3 /* opcode for `ret' */
-
-#define END(name) .size name, . - name
-
-#ifdef GPROF
-/*
- * __mcount is like [.]mcount except that doesn't require its caller to set
- * up a frame pointer. It must be called before pushing anything onto the
- * stack. gcc should eventually generate code to call __mcount in most
- * cases. This would make -pg in combination with -fomit-frame-pointer
- * useful. gcc has a configuration variable PROFILE_BEFORE_PROLOGUE to
- * allow profiling before setting up the frame pointer, but this is
- * inadequate for good handling of special cases, e.g., -fpic works best
- * with profiling after the prologue.
- *
- * [.]mexitcount is a new function to support non-statistical profiling if an
- * accurate clock is available. For C sources, calls to it are generated
- * by the FreeBSD extension `-mprofiler-epilogue' to gcc. It is best to
- * call [.]mexitcount at the end of a function like the MEXITCOUNT macro does,
- * but gcc currently generates calls to it at the start of the epilogue to
- * avoid problems with -fpic.
- *
- * [.]mcount and __mcount may clobber the call-used registers and %ef.
- * [.]mexitcount may clobber %ecx and %ef.
- *
- * Cross-jumping makes non-statistical profiling timing more complicated.
- * It is handled in many cases by calling [.]mexitcount before jumping. It
- * is handled for conditional jumps using CROSSJUMP() and CROSSJUMP_LABEL().
- * It is handled for some fault-handling jumps by not sharing the exit
- * routine.
- *
- * ALTENTRY() must be before a corresponding ENTRY() so that it can jump to
- * the main entry point. Note that alt entries are counted twice. They
- * have to be counted as ordinary entries for gprof to get the call times
- * right for the ordinary entries.
- *
- * High local labels are used in macros to avoid clashes with local labels
- * in functions.
- *
- * Ordinary `ret' is used instead of a macro `RET' because there are a lot
- * of `ret's. 0xc3 is the opcode for `ret' (`#define ret ... ret' can't
- * be used because this file is sometimes preprocessed in traditional mode).
- * `ret' clobbers eflags but this doesn't matter.
- */
-#define ALTENTRY(name) GEN_ENTRY(name) ; MCOUNT ; MEXITCOUNT ; jmp 9f
-#define CROSSJUMP(jtrue, label, jfalse) \
- jfalse 8f; MEXITCOUNT; jmp __CONCAT(to,label); 8:
-#define CROSSJUMPTARGET(label) \
- ALIGN_TEXT; __CONCAT(to,label): ; MCOUNT; jmp label
-#define ENTRY(name) GEN_ENTRY(name) ; 9: ; MCOUNT
-#define FAKE_MCOUNT(caller) pushq caller ; call __mcount ; popq %rcx
-#define MCOUNT call __mcount
-#define MCOUNT_LABEL(name) GEN_ENTRY(name) ; nop ; ALIGN_TEXT
-#ifdef GUPROF
-#define MEXITCOUNT call .mexitcount
-#define ret MEXITCOUNT ; NON_GPROF_RET
-#else
-#define MEXITCOUNT
-#endif
-
-#else /* !GPROF */
-/*
- * ALTENTRY() has to align because it is before a corresponding ENTRY().
- * ENTRY() has to align to because there may be no ALTENTRY() before it.
- * If there is a previous ALTENTRY() then the alignment code for ENTRY()
- * is empty.
- */
-#define ALTENTRY(name) GEN_ENTRY(name)
-#define CROSSJUMP(jtrue, label, jfalse) jtrue label
-#define CROSSJUMPTARGET(label)
#define ENTRY(name) GEN_ENTRY(name)
-#define FAKE_MCOUNT(caller)
-#define MCOUNT
-#define MCOUNT_LABEL(name)
-#define MEXITCOUNT
-#endif /* GPROF */
+#define ALTENTRY(name) GEN_ENTRY(name)
+#define END(name) .size name, . - name
/*
* Convenience for adding frame pointers to hand-coded ASM. Useful for
diff --git a/sys/amd64/include/profile.h b/sys/amd64/include/profile.h
index 2e19918cfb76..b0fb469f5354 100644
--- a/sys/amd64/include/profile.h
+++ b/sys/amd64/include/profile.h
@@ -35,74 +35,9 @@
#ifndef _MACHINE_PROFILE_H_
#define _MACHINE_PROFILE_H_
-#ifndef _SYS_CDEFS_H_
-#error this file needs sys/cdefs.h as a prerequisite
-#endif
-
-#ifdef _KERNEL
-
-/*
- * Config generates something to tell the compiler to align functions on 16
- * byte boundaries. A strict alignment is good for keeping the tables small.
- */
-#define FUNCTION_ALIGNMENT 16
-
-/*
- * The kernel uses assembler stubs instead of unportable inlines.
- * This is mainly to save a little time when profiling is not enabled,
- * which is the usual case for the kernel.
- */
-#define _MCOUNT_DECL void mcount
-#define MCOUNT
-
-#ifdef GUPROF
-#define MCOUNT_DECL(s)
-#define MCOUNT_ENTER(s)
-#define MCOUNT_EXIT(s)
-#ifdef __GNUCLIKE_ASM
-#define MCOUNT_OVERHEAD(label) \
- __asm __volatile("pushq %0; call __mcount; popq %%rcx" \
- : \
- : "i" (label) \
- : "cx", "r10", "r11", "memory")
-#define MEXITCOUNT_OVERHEAD() \
- __asm __volatile("call .mexitcount; 1:" \
- : : \
- : "r10", "r11", "memory")
-#define MEXITCOUNT_OVERHEAD_GETLABEL(labelp) \
- __asm __volatile("movq $1b,%0" : "=rm" (labelp))
-#else
-#error this file needs to be ported to your compiler
-#endif /* !__GNUCLIKE_ASM */
-#else /* !GUPROF */
-#define MCOUNT_DECL(s) register_t s;
-#ifdef SMP
-extern int mcount_lock;
-#define MCOUNT_ENTER(s) { s = intr_disable(); \
- while (!atomic_cmpset_acq_int(&mcount_lock, 0, 1)) \
- /* nothing */ ; }
-#define MCOUNT_EXIT(s) { atomic_store_rel_int(&mcount_lock, 0); \
- intr_restore(s); }
-#else
-#define MCOUNT_ENTER(s) { s = intr_disable(); }
-#define MCOUNT_EXIT(s) (intr_restore(s))
-#endif
-#endif /* GUPROF */
-
-void bintr(void);
-void btrap(void);
-void eintr(void);
-void user(void);
-
-#define MCOUNT_FROMPC_USER(pc) \
- ((pc < (uintfptr_t)VM_MAXUSER_ADDRESS) ? (uintfptr_t)user : pc)
+#ifndef _KERNEL
-#define MCOUNT_FROMPC_INTR(pc) \
- ((pc >= (uintfptr_t)btrap && pc < (uintfptr_t)eintr) ? \
- ((pc >= (uintfptr_t)bintr) ? (uintfptr_t)bintr : \
- (uintfptr_t)btrap) : ~0UL)
-
-#else /* !_KERNEL */
+#include <sys/cdefs.h>
#define FUNCTION_ALIGNMENT 4
@@ -172,28 +107,18 @@ mcount() \
typedef u_long uintfptr_t;
-#endif /* _KERNEL */
-
/*
* An unsigned integral type that can hold non-negative difference between
* function pointers.
*/
typedef u_long fptrdiff_t;
-#ifdef _KERNEL
-
-void mcount(uintfptr_t frompc, uintfptr_t selfpc);
-
-#else /* !_KERNEL */
-
-#include <sys/cdefs.h>
-
__BEGIN_DECLS
#ifdef __GNUCLIKE_ASM
void mcount(void) __asm(".mcount");
#endif
__END_DECLS
-#endif /* _KERNEL */
+#endif /* !_KERNEL */
#endif /* !_MACHINE_PROFILE_H_ */
diff --git a/sys/amd64/linux/linux_locore.asm b/sys/amd64/linux/linux_locore.asm
index 1bcf05bc57dd..4e358f583a45 100644
--- a/sys/amd64/linux/linux_locore.asm
+++ b/sys/amd64/linux/linux_locore.asm
@@ -17,7 +17,7 @@ linux_platform:
* To avoid excess stack frame the signal trampoline code emulates
* the 'call' instruction.
*/
-NON_GPROF_ENTRY(linux_rt_sigcode)
+ENTRY(linux_rt_sigcode)
movq %rsp, %rbx /* preserve sigframe */
call .getip
.getip:
@@ -32,28 +32,28 @@ NON_GPROF_ENTRY(linux_rt_sigcode)
.endrtsigcode:
0: jmp 0b
-NON_GPROF_ENTRY(__vdso_clock_gettime)
+ENTRY(__vdso_clock_gettime)
movq $LINUX_SYS_linux_clock_gettime,%rax
syscall
ret
.weak clock_gettime
.set clock_gettime, __vdso_clock_gettime
-NON_GPROF_ENTRY(__vdso_time)
+ENTRY(__vdso_time)
movq $LINUX_SYS_linux_time,%rax
*** 2138 LINES SKIPPED ***
More information about the dev-commits-src-all
mailing list