From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x231.google.com (mail-lj1-x231.google.com [IPv6:2a00:1450:4864:20::231]) by sourceware.org (Postfix) with ESMTPS id 7766F3858439 for ; Wed, 20 Dec 2023 07:45:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7766F3858439 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7766F3858439 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::231 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703058357; cv=none; b=algeHdHRUHkg35BRa5Gizp7TW2+kKefIILD7zXqWJWtljhmIq40v0a0/YOc+2wh46LCTfq4d1e8jPIxMdbFangWnLqSDx5TjgpF9E9Vk4WWfBSUqvfQvyeUq10Svfc/Apcwvh3ExxjUnzGJxHfrGTQAZ+A/AxLTmVkEhhi2/HXk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703058357; c=relaxed/simple; bh=WHfB2XcfxNlAJwCa+NHtU46djBBn/FT7cllStiTOmUA=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=nN+mxKuk2NbysSxL8dI1oYtEMh4z9+n2KUZkVY0RjWaGiXmM3osMwxPsvKQQwp5EL7naUiuKfsQ+VtTLYmcfd29oDgpK9mCVp4fj+OcXmddEg2wOSbqwbh6FHRgc39oUhmxnY/XdZFI2cayw3ZkKJk6p1N2uG/SGDAbT3Yf5bdI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-2cc55698c81so60099301fa.0 for ; Tue, 19 Dec 2023 23:45:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1703058351; x=1703663151; darn=gcc.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=+Rcab3Yohj9/CNOcr5P8XMcPJ+W/8ceup03+3TCDiZc=; b=RmIBJKM9YKowun1dhc1/IVsP43TGkvlpzUdjEAbwZ9W5eOpTrm/4wPYFSxUgOM1UyL t4kcHSQivLhfA/dL4UGPs73m20SetfqLj9wmruofJcj6pFGKHYLyr+hLfyWFPu0FQs10 u6DS3h/lkZVGfOdq5xOE9NmrPuxiu+ejMq4fMawg5ibzxI9toABg2/ctWG4vbkW2jF+m 6C3Z9hTjmFT/W8WKfqEedoZc7skc8MIcFOx1bNo4kdBq5bPlZZju/kbFcHj18r/AYYqa MiPR8pYJ7K6ZaI99+FgsCKrGo4315aDzL6rgVxbZys9niSlMeAVbceDOCs7YjROForU7 eNSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703058351; x=1703663151; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+Rcab3Yohj9/CNOcr5P8XMcPJ+W/8ceup03+3TCDiZc=; b=wPaf3FHY7qg4sLYC9J4cMmVujuQjjYWU+MLCYsQvGZ9g2twGF28bP6cZQQBqwtn+QQ ICx3355qef+njNz43WpRMc2W1agREY7vZ+jyMr2fxE6O1pcoRWHkAJ3WAIDcpfkETo7S k3F0H4rqBL8XBLgKB1PZ8Y6gM9ATKFaonGUpc6ad6dWq9CHJh3zFlJj5W+EG9w1s7FFv ODscBFDpyJ5CX/a3pb6ZBR/E8dnoiUs1Y4e8V8OnVwDM8qm2NvppMci4dHHaVXxEecTH bOtoX6hWGNTaKCxjK0iLHE1OVbZ2wYmTiid1a4gZi1jYgAJi/EdLZKui5jttB6BlZNs6 m9SQ== X-Gm-Message-State: AOJu0YyXGKD/6xnx1fqv21Ka/iWAQRmcbo/JH9lo0g+MDbbdGrhbDrXX Kwp4M1a2N7aTX7E7ZS5F1jS7RcSvbKwAjyeJYgrOD6hb X-Google-Smtp-Source: AGHT+IFtrQvyYHbvb42ay6Jwo2hzzkTtnO5JlnjkusAlfUit49nGyQHoCWjxsEm0bOmLqYQlqOy+/rA22YgG+l/8RDA= X-Received: by 2002:a2e:3611:0:b0:2cc:843a:eca0 with SMTP id d17-20020a2e3611000000b002cc843aeca0mr1238947lja.104.1703058350394; Tue, 19 Dec 2023 23:45:50 -0800 (PST) MIME-Version: 1.0 References: <20231214012301.2193148-1-vladimir.mezentsev@oracle.com> In-Reply-To: <20231214012301.2193148-1-vladimir.mezentsev@oracle.com> From: Richard Biener Date: Wed, 20 Dec 2023 08:44:26 +0100 Message-ID: Subject: Re: [PATCH] gprofng: a new GNU profiler To: vladimir.mezentsev@oracle.com Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, Dec 14, 2023 at 2:23=E2=80=AFAM wro= te: > > From: Vladimir Mezentsev > > This is fixes for releases/gcc-13 for 31109 gprofng not built and install= ed in a combined binutils+gcc build > I only cherry-picked 24552056fd5fc677c0d032f54a5cad1c4303d312 and tested = my build. I don't think a combined build is "supported" for release branches but only for HEAD since the releases of binutils/gcc do not align. That means there's also no sanctioned binutils release version to go with a GCC release version. Richard. > ChangeLog: > > * Makefile.def: Add gprofng module. > * configure.ac: Add --enable-gprofng option. > * Makefile.in: Regenerate. > * configure: Regenerate. > > include/ChangeLog: > > * collectorAPI.h: New file. > * libcollector.h: New file. > * libfcollector.h: New file. > --- > Makefile.def | 11 + > Makefile.in | 497 ++++++++++++++++++++++++++++++++++++++++ > configure | 18 ++ > configure.ac | 14 ++ > include/collectorAPI.h | 73 ++++++ > include/libcollector.h | 89 +++++++ > include/libfcollector.h | 42 ++++ > 7 files changed, 744 insertions(+) > create mode 100644 include/collectorAPI.h > create mode 100644 include/libcollector.h > create mode 100644 include/libfcollector.h > > diff --git a/Makefile.def b/Makefile.def > index 35e994eb77e..9d43b78b51b 100644 > --- a/Makefile.def > +++ b/Makefile.def > @@ -72,6 +72,7 @@ host_modules=3D { module=3D isl; lib_path=3D.libs; boot= strap=3Dtrue; > no_install=3D true; }; > host_modules=3D { module=3D gold; bootstrap=3Dtrue; }; > host_modules=3D { module=3D gprof; }; > +host_modules=3D { module=3D gprofng; }; > // intl acts on 'host_shared' directly, and does not support --with-pic. > host_modules=3D { module=3D intl; bootstrap=3Dtrue; }; > host_modules=3D { module=3D tcl; > @@ -510,6 +511,16 @@ dependencies =3D { module=3Dall-gprof; on=3Dall-bfd;= }; > dependencies =3D { module=3Dall-gprof; on=3Dall-opcodes; }; > dependencies =3D { module=3Dall-gprof; on=3Dall-intl; }; > dependencies =3D { module=3Dall-gprof; on=3Dall-gas; }; > + > +dependencies =3D { module=3Dconfigure-gprofng; on=3Dconfigure-intl; }; > +dependencies =3D { module=3Dall-gprofng; on=3Dall-libiberty; }; > +dependencies =3D { module=3Dall-gprofng; on=3Dall-bfd; }; > +dependencies =3D { module=3Dall-gprofng; on=3Dall-opcodes; }; > +dependencies =3D { module=3Dall-gprofng; on=3Dall-intl; }; > +dependencies =3D { module=3Dall-gprofng; on=3Dall-gas; }; > +dependencies =3D { module=3Dinstall-gprofng; on=3Dinstall-opcodes; }; > +dependencies =3D { module=3Dinstall-gprofng; on=3Dinstall-bfd; }; > + > dependencies =3D { module=3Dconfigure-ld; on=3Dconfigure-intl; }; > dependencies =3D { module=3Dall-ld; on=3Dall-libiberty; }; > dependencies =3D { module=3Dall-ld; on=3Dall-bfd; }; > diff --git a/Makefile.in b/Makefile.in > index 06a9398e172..2ea8943dc3b 100644 > --- a/Makefile.in > +++ b/Makefile.in > @@ -1084,6 +1084,7 @@ configure-host: \ > maybe-configure-isl \ > maybe-configure-gold \ > maybe-configure-gprof \ > + maybe-configure-gprofng \ > maybe-configure-intl \ > maybe-configure-tcl \ > maybe-configure-itcl \ > @@ -1237,6 +1238,7 @@ all-host: maybe-all-isl > all-host: maybe-all-gold > @endif gold-no-bootstrap > all-host: maybe-all-gprof > +all-host: maybe-all-gprofng > @if intl-no-bootstrap > all-host: maybe-all-intl > @endif intl-no-bootstrap > @@ -1376,6 +1378,7 @@ info-host: maybe-info-mpc > info-host: maybe-info-isl > info-host: maybe-info-gold > info-host: maybe-info-gprof > +info-host: maybe-info-gprofng > info-host: maybe-info-intl > info-host: maybe-info-tcl > info-host: maybe-info-itcl > @@ -1466,6 +1469,7 @@ dvi-host: maybe-dvi-mpc > dvi-host: maybe-dvi-isl > dvi-host: maybe-dvi-gold > dvi-host: maybe-dvi-gprof > +dvi-host: maybe-dvi-gprofng > dvi-host: maybe-dvi-intl > dvi-host: maybe-dvi-tcl > dvi-host: maybe-dvi-itcl > @@ -1556,6 +1560,7 @@ pdf-host: maybe-pdf-mpc > pdf-host: maybe-pdf-isl > pdf-host: maybe-pdf-gold > pdf-host: maybe-pdf-gprof > +pdf-host: maybe-pdf-gprofng > pdf-host: maybe-pdf-intl > pdf-host: maybe-pdf-tcl > pdf-host: maybe-pdf-itcl > @@ -1646,6 +1651,7 @@ html-host: maybe-html-mpc > html-host: maybe-html-isl > html-host: maybe-html-gold > html-host: maybe-html-gprof > +html-host: maybe-html-gprofng > html-host: maybe-html-intl > html-host: maybe-html-tcl > html-host: maybe-html-itcl > @@ -1736,6 +1742,7 @@ TAGS-host: maybe-TAGS-mpc > TAGS-host: maybe-TAGS-isl > TAGS-host: maybe-TAGS-gold > TAGS-host: maybe-TAGS-gprof > +TAGS-host: maybe-TAGS-gprofng > TAGS-host: maybe-TAGS-intl > TAGS-host: maybe-TAGS-tcl > TAGS-host: maybe-TAGS-itcl > @@ -1826,6 +1833,7 @@ install-info-host: maybe-install-info-mpc > install-info-host: maybe-install-info-isl > install-info-host: maybe-install-info-gold > install-info-host: maybe-install-info-gprof > +install-info-host: maybe-install-info-gprofng > install-info-host: maybe-install-info-intl > install-info-host: maybe-install-info-tcl > install-info-host: maybe-install-info-itcl > @@ -1916,6 +1924,7 @@ install-dvi-host: maybe-install-dvi-mpc > install-dvi-host: maybe-install-dvi-isl > install-dvi-host: maybe-install-dvi-gold > install-dvi-host: maybe-install-dvi-gprof > +install-dvi-host: maybe-install-dvi-gprofng > install-dvi-host: maybe-install-dvi-intl > install-dvi-host: maybe-install-dvi-tcl > install-dvi-host: maybe-install-dvi-itcl > @@ -2006,6 +2015,7 @@ install-pdf-host: maybe-install-pdf-mpc > install-pdf-host: maybe-install-pdf-isl > install-pdf-host: maybe-install-pdf-gold > install-pdf-host: maybe-install-pdf-gprof > +install-pdf-host: maybe-install-pdf-gprofng > install-pdf-host: maybe-install-pdf-intl > install-pdf-host: maybe-install-pdf-tcl > install-pdf-host: maybe-install-pdf-itcl > @@ -2096,6 +2106,7 @@ install-html-host: maybe-install-html-mpc > install-html-host: maybe-install-html-isl > install-html-host: maybe-install-html-gold > install-html-host: maybe-install-html-gprof > +install-html-host: maybe-install-html-gprofng > install-html-host: maybe-install-html-intl > install-html-host: maybe-install-html-tcl > install-html-host: maybe-install-html-itcl > @@ -2186,6 +2197,7 @@ installcheck-host: maybe-installcheck-mpc > installcheck-host: maybe-installcheck-isl > installcheck-host: maybe-installcheck-gold > installcheck-host: maybe-installcheck-gprof > +installcheck-host: maybe-installcheck-gprofng > installcheck-host: maybe-installcheck-intl > installcheck-host: maybe-installcheck-tcl > installcheck-host: maybe-installcheck-itcl > @@ -2276,6 +2288,7 @@ mostlyclean-host: maybe-mostlyclean-mpc > mostlyclean-host: maybe-mostlyclean-isl > mostlyclean-host: maybe-mostlyclean-gold > mostlyclean-host: maybe-mostlyclean-gprof > +mostlyclean-host: maybe-mostlyclean-gprofng > mostlyclean-host: maybe-mostlyclean-intl > mostlyclean-host: maybe-mostlyclean-tcl > mostlyclean-host: maybe-mostlyclean-itcl > @@ -2366,6 +2379,7 @@ clean-host: maybe-clean-mpc > clean-host: maybe-clean-isl > clean-host: maybe-clean-gold > clean-host: maybe-clean-gprof > +clean-host: maybe-clean-gprofng > clean-host: maybe-clean-intl > clean-host: maybe-clean-tcl > clean-host: maybe-clean-itcl > @@ -2456,6 +2470,7 @@ distclean-host: maybe-distclean-mpc > distclean-host: maybe-distclean-isl > distclean-host: maybe-distclean-gold > distclean-host: maybe-distclean-gprof > +distclean-host: maybe-distclean-gprofng > distclean-host: maybe-distclean-intl > distclean-host: maybe-distclean-tcl > distclean-host: maybe-distclean-itcl > @@ -2546,6 +2561,7 @@ maintainer-clean-host: maybe-maintainer-clean-mpc > maintainer-clean-host: maybe-maintainer-clean-isl > maintainer-clean-host: maybe-maintainer-clean-gold > maintainer-clean-host: maybe-maintainer-clean-gprof > +maintainer-clean-host: maybe-maintainer-clean-gprofng > maintainer-clean-host: maybe-maintainer-clean-intl > maintainer-clean-host: maybe-maintainer-clean-tcl > maintainer-clean-host: maybe-maintainer-clean-itcl > @@ -2694,6 +2710,7 @@ check-host: \ > maybe-check-isl \ > maybe-check-gold \ > maybe-check-gprof \ > + maybe-check-gprofng \ > maybe-check-intl \ > maybe-check-tcl \ > maybe-check-itcl \ > @@ -2831,6 +2848,7 @@ install-host-nogcc: \ > maybe-install-isl \ > maybe-install-gold \ > maybe-install-gprof \ > + maybe-install-gprofng \ > maybe-install-intl \ > maybe-install-tcl \ > maybe-install-itcl \ > @@ -2886,6 +2904,7 @@ install-host: \ > maybe-install-isl \ > maybe-install-gold \ > maybe-install-gprof \ > + maybe-install-gprofng \ > maybe-install-intl \ > maybe-install-tcl \ > maybe-install-itcl \ > @@ -2996,6 +3015,7 @@ install-strip-host: \ > maybe-install-strip-isl \ > maybe-install-strip-gold \ > maybe-install-strip-gprof \ > + maybe-install-strip-gprofng \ > maybe-install-strip-intl \ > maybe-install-strip-tcl \ > maybe-install-strip-itcl \ > @@ -19287,6 +19307,474 @@ maintainer-clean-gprof: > > > > +.PHONY: configure-gprofng maybe-configure-gprofng > +maybe-configure-gprofng: > +@if gcc-bootstrap > +configure-gprofng: stage_current > +@endif gcc-bootstrap > +@if gprofng > +maybe-configure-gprofng: configure-gprofng > +configure-gprofng: > + @: $(MAKE); $(unstage) > + @r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + test ! -f $(HOST_SUBDIR)/gprofng/Makefile || exit 0; \ > + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gprofng; \ > + $(HOST_EXPORTS) \ > + echo Configuring in $(HOST_SUBDIR)/gprofng; \ > + cd "$(HOST_SUBDIR)/gprofng" || exit 1; \ > + case $(srcdir) in \ > + /* | [A-Za-z]:[\\/]*) topdir=3D$(srcdir) ;; \ > + *) topdir=3D`echo $(HOST_SUBDIR)/gprofng/ | \ > + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ > + esac; \ > + module_srcdir=3Dgprofng; \ > + $(SHELL) \ > + $$s/$$module_srcdir/configure \ > + --srcdir=3D$${topdir}/$$module_srcdir \ > + $(HOST_CONFIGARGS) --build=3D${build_alias} --host=3D${host_ali= as} \ > + --target=3D${target_alias} \ > + || exit 1 > +@endif gprofng > + > + > + > + > + > +.PHONY: all-gprofng maybe-all-gprofng > +maybe-all-gprofng: > +@if gcc-bootstrap > +all-gprofng: stage_current > +@endif gcc-bootstrap > +@if gprofng > +TARGET-gprofng=3Dall > +maybe-all-gprofng: all-gprofng > +all-gprofng: configure-gprofng > + @: $(MAKE); $(unstage) > + @r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAG= S_TO_PASS) \ > + $(TARGET-gprofng)) > +@endif gprofng > + > + > + > + > +.PHONY: check-gprofng maybe-check-gprofng > +maybe-check-gprofng: > +@if gprofng > +maybe-check-gprofng: check-gprofng > + > +check-gprofng: > + @: $(MAKE); $(unstage) > + @r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(FLAGS_TO_PASS) check) > + > +@endif gprofng > + > +.PHONY: install-gprofng maybe-install-gprofng > +maybe-install-gprofng: > +@if gprofng > +maybe-install-gprofng: install-gprofng > + > +install-gprofng: installdirs > + @: $(MAKE); $(unstage) > + @r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(FLAGS_TO_PASS) install) > + > +@endif gprofng > + > +.PHONY: install-strip-gprofng maybe-install-strip-gprofng > +maybe-install-strip-gprofng: > +@if gprofng > +maybe-install-strip-gprofng: install-strip-gprofng > + > +install-strip-gprofng: installdirs > + @: $(MAKE); $(unstage) > + @r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(FLAGS_TO_PASS) install-strip) > + > +@endif gprofng > + > +# Other targets (info, dvi, pdf, etc.) > + > +.PHONY: maybe-info-gprofng info-gprofng > +maybe-info-gprofng: > +@if gprofng > +maybe-info-gprofng: info-gprofng > + > +info-gprofng: \ > + configure-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing info in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + info) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-dvi-gprofng dvi-gprofng > +maybe-dvi-gprofng: > +@if gprofng > +maybe-dvi-gprofng: dvi-gprofng > + > +dvi-gprofng: \ > + configure-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing dvi in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + dvi) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-pdf-gprofng pdf-gprofng > +maybe-pdf-gprofng: > +@if gprofng > +maybe-pdf-gprofng: pdf-gprofng > + > +pdf-gprofng: \ > + configure-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing pdf in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + pdf) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-html-gprofng html-gprofng > +maybe-html-gprofng: > +@if gprofng > +maybe-html-gprofng: html-gprofng > + > +html-gprofng: \ > + configure-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing html in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + html) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-TAGS-gprofng TAGS-gprofng > +maybe-TAGS-gprofng: > +@if gprofng > +maybe-TAGS-gprofng: TAGS-gprofng > + > +TAGS-gprofng: \ > + configure-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing TAGS in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + TAGS) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-install-info-gprofng install-info-gprofng > +maybe-install-info-gprofng: > +@if gprofng > +maybe-install-info-gprofng: install-info-gprofng > + > +install-info-gprofng: \ > + configure-gprofng \ > + info-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing install-info in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + install-info) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-install-dvi-gprofng install-dvi-gprofng > +maybe-install-dvi-gprofng: > +@if gprofng > +maybe-install-dvi-gprofng: install-dvi-gprofng > + > +install-dvi-gprofng: \ > + configure-gprofng \ > + dvi-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing install-dvi in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + install-dvi) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-install-pdf-gprofng install-pdf-gprofng > +maybe-install-pdf-gprofng: > +@if gprofng > +maybe-install-pdf-gprofng: install-pdf-gprofng > + > +install-pdf-gprofng: \ > + configure-gprofng \ > + pdf-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing install-pdf in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + install-pdf) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-install-html-gprofng install-html-gprofng > +maybe-install-html-gprofng: > +@if gprofng > +maybe-install-html-gprofng: install-html-gprofng > + > +install-html-gprofng: \ > + configure-gprofng \ > + html-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing install-html in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + install-html) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-installcheck-gprofng installcheck-gprofng > +maybe-installcheck-gprofng: > +@if gprofng > +maybe-installcheck-gprofng: installcheck-gprofng > + > +installcheck-gprofng: \ > + configure-gprofng > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing installcheck in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + installcheck) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-mostlyclean-gprofng mostlyclean-gprofng > +maybe-mostlyclean-gprofng: > +@if gprofng > +maybe-mostlyclean-gprofng: mostlyclean-gprofng > + > +mostlyclean-gprofng: > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing mostlyclean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + mostlyclean) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-clean-gprofng clean-gprofng > +maybe-clean-gprofng: > +@if gprofng > +maybe-clean-gprofng: clean-gprofng > + > +clean-gprofng: > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing clean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + clean) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-distclean-gprofng distclean-gprofng > +maybe-distclean-gprofng: > +@if gprofng > +maybe-distclean-gprofng: distclean-gprofng > + > +distclean-gprofng: > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing distclean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + distclean) \ > + || exit 1 > + > +@endif gprofng > + > +.PHONY: maybe-maintainer-clean-gprofng maintainer-clean-gprofng > +maybe-maintainer-clean-gprofng: > +@if gprofng > +maybe-maintainer-clean-gprofng: maintainer-clean-gprofng > + > +maintainer-clean-gprofng: > + @: $(MAKE); $(unstage) > + @[ -f ./gprofng/Makefile ] || exit 0; \ > + r=3D`${PWD_COMMAND}`; export r; \ > + s=3D`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=3D]*\)=3D\(.*\)|\1=3D'\2'= ; export \1|"`; \ > + done; \ > + echo "Doing maintainer-clean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=3D$${AR}" "AS=3D$${AS}" \ > + "CC=3D$${CC}" "CXX=3D$${CXX}" "LD=3D$${LD}" "NM=3D$${NM= }" \ > + "RANLIB=3D$${RANLIB}" \ > + "DLLTOOL=3D$${DLLTOOL}" "WINDRES=3D$${WINDRES}" "WINDMC= =3D$${WINDMC}" \ > + maintainer-clean) \ > + || exit 1 > + > +@endif gprofng > + > + > + > .PHONY: configure-intl maybe-configure-intl > maybe-configure-intl: > @if gcc-bootstrap > @@ -66049,6 +66537,8 @@ all-stagetrain-gas: maybe-all-stagetrain-intl > all-stagefeedback-gas: maybe-all-stagefeedback-intl > all-stageautoprofile-gas: maybe-all-stageautoprofile-intl > all-stageautofeedback-gas: maybe-all-stageautofeedback-intl > +install-gprofng: maybe-install-opcodes > +install-gprofng: maybe-install-bfd > configure-ld: maybe-configure-intl > configure-stage1-ld: maybe-configure-stage1-intl > configure-stage2-ld: maybe-configure-stage2-intl > @@ -66489,6 +66979,7 @@ configure-gdb: stage_last > configure-gdbserver: stage_last > configure-gdbsupport: stage_last > configure-gprof: stage_last > +configure-gprofng: stage_last > configure-sid: stage_last > configure-sim: stage_last > configure-fastjar: stage_last > @@ -66523,6 +67014,12 @@ all-gprof: maybe-all-bfd > all-gprof: maybe-all-opcodes > all-gprof: maybe-all-intl > all-gprof: maybe-all-gas > +configure-gprofng: maybe-configure-intl > +all-gprofng: maybe-all-libiberty > +all-gprofng: maybe-all-bfd > +all-gprofng: maybe-all-opcodes > +all-gprofng: maybe-all-intl > +all-gprofng: maybe-all-gas > all-sid: maybe-all-libiberty > all-sid: maybe-all-bfd > all-sid: maybe-all-opcodes > diff --git a/configure b/configure > index 117a7ef23f2..b564accf3e1 100755 > --- a/configure > +++ b/configure > @@ -800,6 +800,7 @@ enable_offload_targets > enable_offload_defaulted > enable_gold > enable_ld > +enable_gprofng > enable_compressed_debug_sections > enable_libquadmath > enable_libquadmath_support > @@ -1536,6 +1537,7 @@ Optional Features: > > --enable-gold[=3DARG] build gold [ARG=3D{default,yes,no}] > --enable-ld[=3DARG] build ld [ARG=3D{default,yes,no}] > + --enable-gprofng[=3DARG] build gprofng [ARG=3D{yes,no}] > --enable-compressed-debug-sections=3D{all,gas,gold,ld,none} > Enable compressed debug sections for gas, gold= or ld > by default > @@ -3110,6 +3112,22 @@ $as_echo "$as_me: WARNING: neither ld nor gold are= enabled" >&2;} > ;; > esac > > +# Check whether --enable-gprofng was given. > +if test "${enable_gprofng+set}" =3D set; then : > + enableval=3D$enable_gprofng; enable_gprofng=3D$enableval > +else > + enable_gprofng=3Dyes > +fi > + > +if test "$enable_gprofng" =3D "yes"; then > + case "${target}" in > + x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*) > + configdirs=3D"$configdirs gprofng" > + ;; > + esac > +fi > + > + > # PR gas/19109 > # Decide the default method for compressing debug sections. > # Provide a configure time option to override our default. > diff --git a/configure.ac b/configure.ac > index b3e9bbd2aa5..f1c280680fc 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -401,6 +401,20 @@ case "${ENABLE_LD}" in > ;; > esac > > +AC_ARG_ENABLE(gprofng, > +[AS_HELP_STRING([[--enable-gprofng[=3DARG]]], > + [build gprofng @<:@ARG=3D{yes,no}@:>@])], > +enable_gprofng=3D$enableval, > +enable_gprofng=3Dyes) > +if test "$enable_gprofng" =3D "yes"; then > + case "${target}" in > + x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*) > + configdirs=3D"$configdirs gprofng" > + ;; > + esac > +fi > + > + > # PR gas/19109 > # Decide the default method for compressing debug sections. > # Provide a configure time option to override our default. > diff --git a/include/collectorAPI.h b/include/collectorAPI.h > new file mode 100644 > index 00000000000..010074a271f > --- /dev/null > +++ b/include/collectorAPI.h > @@ -0,0 +1,73 @@ > +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. > + Contributed by Oracle. > + > + This file is part of GNU Binutils. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3, or (at your option) > + any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program; if not, write to the Free Software > + Foundation, 51 Franklin Street - Fifth Floor, Boston, > + MA 02110-1301, USA. */ > + > +#ifndef _COLLECTORAPI_H > +#define _COLLECTORAPI_H > + > +/* This file contains function prototypes for the user-callable API > + routines in libcollector. */ > + > +#include > + > +#ifdef __cplusplus > +extern "C" > +{ > +#endif > + /* Routine to record a sample in the experiment. */ > + extern void collector_sample (const char *name); > + > + /* Routine to suspend data collection during an experiment. */ > + extern void collector_pause (void); > + > + /* Routine to resume data collection during an experiment. */ > + extern void collector_resume (void); > + > + /* Routine to suspend per-thread data collection during an experiment.= */ > + extern void collector_thread_pause (pthread_t tid); > + > + /* Routine to resume per-thread data collection during an experiment. = */ > + extern void collector_thread_resume (pthread_t tid); > + > + /* Routine to close the experiment, and stop all data collection. */ > + extern void collector_terminate_expt (void); > + > + typedef struct > + { > + unsigned int offset; > + unsigned int lineno; > + } Lineno; > + > + /* Routines to let libcollector know about dynamically loaded function= s. */ > + extern void collector_func_load (const char *name, const char *alias, > + const char *sourcename, void *vaddr, > + int size, int lntsize, Lineno *lntable= ); > + > + extern void collector_func_unload (void *vaddr); > + > +#ifdef NEED_COLLECTOR_MODULE > + extern void collector_module_load (const char *modulename, void *vaddr= ); > + extern void collector_module_unload (void *vaddr); > +#endif > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* _COLLECTORAPI_H */ > diff --git a/include/libcollector.h b/include/libcollector.h > new file mode 100644 > index 00000000000..e1c2a440b2a > --- /dev/null > +++ b/include/libcollector.h > @@ -0,0 +1,89 @@ > +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. > + Contributed by Oracle. > + > + This file is part of GNU Binutils. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3, or (at your option) > + any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program; if not, write to the Free Software > + Foundation, 51 Franklin Street - Fifth Floor, Boston, > + MA 02110-1301, USA. */ > + > +#ifndef _LIBCOLLECTOR_H > +#define _LIBCOLLECTOR_H > + > +typedef struct > +{ > + unsigned int offset; > + unsigned int lineno; > +} Lineno; > + > +#ifdef __cplusplus > +extern "C" > +{ > +#endif > + > + /* This file contains function prototypes for the user-callable API > + routines in libcollector for C and C++ codes. */ > + > + /* Routine to record a sample in the experiment. */ > + void collector_sample (char *name); > + > + /* Routine to suspend data collection during an experiment. */ > + void collector_pause (void); > + > + /* Routine to resume data collection during an experiment. */ > + void collector_resume (void); > + > + /* Routine to suspend per-thread data collection during an experiment.= */ > + void collector_thread_pause (unsigned int tid); > + > + /* Routine to resume per-thread data collection during an experiment. = */ > + void collector_thread_resume (unsigned int tid); > + > + /* Routine to close the experiment, and stop all data collection. */ > + void collector_terminate_expt (void); > + > + /* Routines to let libcollector know about a dynamically loaded functi= on. */ > + void collector_func_load (char *name, char *alias, char *sourcename, > + void *vaddr, int size, int lntsize, Lineno *lnt= able); > + void collector_func_unload (void *vaddr); > + > + /* Define the weak symbols for the API. */ > + void collector_sample () __attribute__ ((weak)); > + void collector_pause () __attribute__ ((weak)); > + void collector_resume () __attribute__ ((weak)); > + void collector_thread_pause () __attribute__ ((weak)); > + void collector_thread_resume () __attribute__ ((weak)); > + void collector_terminate_expt () __attribute__ ((weak)); > + void collector_func_load () __attribute__ ((weak)); > + void collector_func_unload () __attribute__ ((weak)); > + > +#ifdef __cplusplus > +} > +#endif > + > +/* Define the macros that actually get inserted in the caller's code. *= / > +#define collector_sample(x) (collector_sample ? collector_sample(x), = 0 : 0) > +#define collector_pause() (collector_pause ? collector_pause(), 0 := 0) > +#define collector_resume() (collector_resume ? collector_resume(),0 = : 0 > +#define collector_thread_pause(tid) \ > + (collector_thread_pause ? collector_thread_pause(tid), 0 : 0) > +#define collector_thread_resume(tid) \ > + (collector_thread_resume ? collector_thread_resume(tid), 0 : 0) > +#define collector_terminate_expt() \ > + (collector_terminate_expt ? collector_terminate_expt(), 0 : 0) > +#define collector_func_load(x0,x1,x2,x3,x4,x5,x6) \ > + collector_func_load ? collector_func_load(x0,x1,x2,x3,x4,x5,x6), = 0 : 0) > +#define collector_func_unload(x) \ > + (collector_func_unload ? collector_func_unload(x), 0 : 0) > +#endif /* _LIBCOLLECTOR_H */ > diff --git a/include/libfcollector.h b/include/libfcollector.h > new file mode 100644 > index 00000000000..1dc6b144e6c > --- /dev/null > +++ b/include/libfcollector.h > @@ -0,0 +1,42 @@ > +! Copyright (C) 2021-2023 Free Software Foundation, Inc. > +! Contributed by Oracle. > +! > +! This file is part of GNU Binutils. > +! > +! This program is free software; you can redistribute it and/or modify > +! it under the terms of the GNU General Public License as published by > +! the Free Software Foundation; either version 3, or (at your option) > +! any later version. > +! > +! This program is distributed in the hope that it will be useful, > +! but WITHOUT ANY WARRANTY; without even the implied warranty of > +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +! GNU General Public License for more details. > +! > +! You should have received a copy of the GNU General Public License > +! along with this program; if not, write to the Free Software > +! Foundation, 51 Franklin Street - Fifth Floor, Boston, > +! MA 02110-1301, USA. > +! > +! Developer Sampling Collector interface include file > + > + interface > + > + ! Routine to record a sample in the experiment. > + subroutine collector_sample(name) > + character(len=3D*), intent(in) :: name > + end subroutine > + > + ! Routine to suspend data collection during an experiment. > + subroutine collector_pause() > + end subroutine > + > + ! Routine to resume data collection during an experiment. > + subroutine collector_resume() > + end subroutine > + > + ! Routine to stop all data collection and close the experiment. > + subroutine collector_terminate_expt() > + end subroutine > + > + end interface > -- > 2.31.1 >