In some arch, _mcount() would be called recursively when built with COPTS=-O0.
Normally, functions called from mcount.c are expected to be expanded inline, so _mcount() will never be called recursively. But when build with COPTS=-O0, `static inline' functions aren't inlined, and _mcount() will be called recursively. Even if _mcount() has `__attribute__((__no_ instrument_function__))', it has no effect on the calling external (no-inlined) function. To avoid this, PROF.<fn> is added can be set the profiling flag of any file. "PROF.mcount.c" is set to blank by default, mcount.c itself is compiled without -pg.
This commit is contained in:
parent
ea678cb005
commit
843ce00650
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: bsd.README,v 1.419 2021/10/14 11:45:46 nia Exp $
|
||||
# $NetBSD: bsd.README,v 1.420 2021/10/25 07:54:44 ryo Exp $
|
||||
# @(#)bsd.README 8.2 (Berkeley) 4/2/94
|
||||
|
||||
This is the README file for the make "include" files for the NetBSD
|
||||
|
@ -1630,6 +1630,10 @@ OBJCOPTS.<fn> Additional flags to the compiler when creating the
|
|||
ObjC objects for <fn>.
|
||||
For <fn>.[ly], "<fn>.c" must be used.
|
||||
|
||||
PROF.<fn> Alternative flag instead of "-pg" to pass to the compiler
|
||||
when profiling <fn>. For <fn>.[ly], "<fn>.c" must be used.
|
||||
Usually used to exclude a particular file from profiling.
|
||||
|
||||
SYMLINKS See <bsd.links.mk>
|
||||
|
||||
MAN Manual pages (should end in .1 - .9). If no MAN variable is
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: bsd.lib.mk,v 1.385 2021/08/21 11:55:24 andvar Exp $
|
||||
# $NetBSD: bsd.lib.mk,v 1.386 2021/10/25 07:54:44 ryo Exp $
|
||||
# @(#)bsd.lib.mk 8.3 (Berkeley) 4/22/94
|
||||
|
||||
.include <bsd.init.mk>
|
||||
|
@ -51,7 +51,8 @@ CFLAGS+= ${PIE_CFLAGS}
|
|||
AFLAGS+= ${PIE_AFLAGS}
|
||||
.endif
|
||||
|
||||
PGFLAGS+= -pg
|
||||
PROF?= -pg
|
||||
PGFLAGS+= ${PROF.${.IMPSRC:T}:U${PROF}}
|
||||
.if ${MKPIC} != "no"
|
||||
PGFLAGS+= -fPIC
|
||||
.endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile.kern.inc,v 1.282 2021/09/11 20:28:05 andvar Exp $
|
||||
# $NetBSD: Makefile.kern.inc,v 1.283 2021/10/25 07:54:44 ryo Exp $
|
||||
#
|
||||
# This file contains common `MI' targets and definitions and it is included
|
||||
# at the bottom of each `MD' ${MACHINE}/conf/Makefile.${MACHINE}.
|
||||
|
@ -150,8 +150,8 @@ KLINK.o= ${LD} -r ${LINKFORMAT} -Map=${.TARGET}.map -o ${.TARGET} ${.ALLSRC}
|
|||
# compile rules: rules are named ${TYPE}_${SUFFIX} where TYPE is NORMAL or
|
||||
# NOPROF and SUFFIX is the file suffix, capitalized (e.g. C for a .c file).
|
||||
NORMAL_C?= @${_MKSHMSG} "compile ${.CURDIR:T}/${.TARGET}" && \
|
||||
${_MKSHECHO} ${KCOMPILE.c} ${PROF} && \
|
||||
${KCOMPILE.c} ${PROF} && \
|
||||
${_MKSHECHO} ${KCOMPILE.c} ${PROF.${.IMPSRC:T}:U${PROF}} && \
|
||||
${KCOMPILE.c} ${PROF.${.IMPSRC:T}:U${PROF}} && \
|
||||
${COMPILE_CTFCONVERT}
|
||||
NOPROF_C?= @${_MKSHMSG} "compile ${.CURDIR:T}/${.TARGET}" && \
|
||||
${_MKSHECHO} ${KCOMPILE.c} && \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile.libkern,v 1.51 2021/05/17 08:50:36 mrg Exp $
|
||||
# $NetBSD: Makefile.libkern,v 1.52 2021/10/25 07:54:44 ryo Exp $
|
||||
|
||||
#
|
||||
# Variable definitions for libkern.
|
||||
|
@ -55,7 +55,7 @@ SRCS+= cpuset.c inet_addr.c intoa.c
|
|||
SRCS+= bswap64.c
|
||||
.endif
|
||||
SRCS+= md4c.c md5c.c rmd160.c sha1.c sha2.c sha3.c keccak.c murmurhash.c
|
||||
SRCS+= pmatch.c mcount.c crc32.c
|
||||
SRCS+= pmatch.c crc32.c
|
||||
SRCS+= strlist.c
|
||||
|
||||
SRCS+= ppath_kmem_alloc.c
|
||||
|
@ -102,6 +102,10 @@ SRCS+= entpool.c
|
|||
SRCS+= dkcksum.c
|
||||
SRCS+= disklabel_swap.c
|
||||
|
||||
# for profiling
|
||||
SRCS+= mcount.c
|
||||
PROF.mcount.c= # mcount.c itself is never a profiling target
|
||||
|
||||
.PATH: ${NETBSDSRCDIR}/common/lib/libc/cdb
|
||||
SRCS+= cdbr.c
|
||||
SRCS+= mi_vector_hash.c
|
||||
|
|
Loading…
Reference in New Issue