Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src In some arch, _mcount() would be called recursively when bui...
details: https://anonhg.NetBSD.org/src/rev/d55a39782568
branches: trunk
changeset: 990063:d55a39782568
user: ryo <ryo%NetBSD.org@localhost>
date: Mon Oct 25 07:54:44 2021 +0000
description:
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.
diffstat:
share/mk/bsd.README | 6 +++++-
share/mk/bsd.lib.mk | 5 +++--
sys/conf/Makefile.kern.inc | 6 +++---
sys/lib/libkern/Makefile.libkern | 8 ++++++--
4 files changed, 17 insertions(+), 8 deletions(-)
diffs (88 lines):
diff -r f568f22a497e -r d55a39782568 share/mk/bsd.README
--- a/share/mk/bsd.README Mon Oct 25 07:45:01 2021 +0000
+++ b/share/mk/bsd.README Mon Oct 25 07:54:44 2021 +0000
@@ -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 @@
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
diff -r f568f22a497e -r d55a39782568 share/mk/bsd.lib.mk
--- a/share/mk/bsd.lib.mk Mon Oct 25 07:45:01 2021 +0000
+++ b/share/mk/bsd.lib.mk Mon Oct 25 07:54:44 2021 +0000
@@ -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 @@
AFLAGS+= ${PIE_AFLAGS}
.endif
-PGFLAGS+= -pg
+PROF?= -pg
+PGFLAGS+= ${PROF.${.IMPSRC:T}:U${PROF}}
.if ${MKPIC} != "no"
PGFLAGS+= -fPIC
.endif
diff -r f568f22a497e -r d55a39782568 sys/conf/Makefile.kern.inc
--- a/sys/conf/Makefile.kern.inc Mon Oct 25 07:45:01 2021 +0000
+++ b/sys/conf/Makefile.kern.inc Mon Oct 25 07:54:44 2021 +0000
@@ -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 @@
# 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} && \
diff -r f568f22a497e -r d55a39782568 sys/lib/libkern/Makefile.libkern
--- a/sys/lib/libkern/Makefile.libkern Mon Oct 25 07:45:01 2021 +0000
+++ b/sys/lib/libkern/Makefile.libkern Mon Oct 25 07:54:44 2021 +0000
@@ -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+= 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+= 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
Home |
Main Index |
Thread Index |
Old Index