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