On Thu, Dec 14, 2023 at 2:23 AM <vladimir.mezent...@oracle.com> wrote: > > From: Vladimir Mezentsev <vladimir.mezent...@oracle.com> > > This is fixes for releases/gcc-13 for 31109 gprofng not built and installed > 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= { module= isl; lib_path=.libs; bootstrap=true; > no_install= true; }; > host_modules= { module= gold; bootstrap=true; }; > host_modules= { module= gprof; }; > +host_modules= { module= gprofng; }; > // intl acts on 'host_shared' directly, and does not support --with-pic. > host_modules= { module= intl; bootstrap=true; }; > host_modules= { module= tcl; > @@ -510,6 +511,16 @@ dependencies = { module=all-gprof; on=all-bfd; }; > dependencies = { module=all-gprof; on=all-opcodes; }; > dependencies = { module=all-gprof; on=all-intl; }; > dependencies = { module=all-gprof; on=all-gas; }; > + > +dependencies = { module=configure-gprofng; on=configure-intl; }; > +dependencies = { module=all-gprofng; on=all-libiberty; }; > +dependencies = { module=all-gprofng; on=all-bfd; }; > +dependencies = { module=all-gprofng; on=all-opcodes; }; > +dependencies = { module=all-gprofng; on=all-intl; }; > +dependencies = { module=all-gprofng; on=all-gas; }; > +dependencies = { module=install-gprofng; on=install-opcodes; }; > +dependencies = { module=install-gprofng; on=install-bfd; }; > + > dependencies = { module=configure-ld; on=configure-intl; }; > dependencies = { module=all-ld; on=all-libiberty; }; > dependencies = { module=all-ld; on=all-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=`${PWD_COMMAND}`; export r; \ > + s=`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=$(srcdir) ;; \ > + *) topdir=`echo $(HOST_SUBDIR)/gprofng/ | \ > + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ > + esac; \ > + module_srcdir=gprofng; \ > + $(SHELL) \ > + $$s/$$module_srcdir/configure \ > + --srcdir=$${topdir}/$$module_srcdir \ > + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ > + --target=${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=all > +maybe-all-gprofng: all-gprofng > +all-gprofng: configure-gprofng > + @: $(MAKE); $(unstage) > + @r=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) > $(STAGE1_FLAGS_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=`${PWD_COMMAND}`; export r; \ > + s=`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=`${PWD_COMMAND}`; export r; \ > + s=`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=`${PWD_COMMAND}`; export r; \ > + s=`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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing info in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing dvi in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing pdf in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing html in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing TAGS in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing install-info in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing install-dvi in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing install-pdf in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing install-html in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing installcheck in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing mostlyclean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing clean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing distclean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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=`${PWD_COMMAND}`; export r; \ > + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ > + $(HOST_EXPORTS) \ > + for flag in $(EXTRA_HOST_FLAGS) ; do \ > + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export > \1|"`; \ > + done; \ > + echo "Doing maintainer-clean in gprofng"; \ > + (cd $(HOST_SUBDIR)/gprofng && \ > + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ > + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ > + "RANLIB=$${RANLIB}" \ > + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" > "WINDMC=$${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[=ARG] build gold [ARG={default,yes,no}] > --enable-ld[=ARG] build ld [ARG={default,yes,no}] > + --enable-gprofng[=ARG] build gprofng [ARG={yes,no}] > --enable-compressed-debug-sections={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}" = set; then : > + enableval=$enable_gprofng; enable_gprofng=$enableval > +else > + enable_gprofng=yes > +fi > + > +if test "$enable_gprofng" = "yes"; then > + case "${target}" in > + x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*) > + configdirs="$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[=ARG]]], > + [build gprofng @<:@ARG={yes,no}@:>@])], > +enable_gprofng=$enableval, > +enable_gprofng=yes) > +if test "$enable_gprofng" = "yes"; then > + case "${target}" in > + x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*) > + configdirs="$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 <pthread.h> > + > +#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 functions. > */ > + 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 function. > */ > + void collector_func_load (char *name, char *alias, char *sourcename, > + void *vaddr, int size, int lntsize, Lineno > *lntable); > + 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=*), 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 >