Page MenuHomeFreeBSD

Enable WITHOUT_PROFILE by default
ClosedPublic

Authored by emaste on Jun 20 2021, 7:13 PM.

Details

Summary

Hardware based profiling (e.g. hwpmc) is much better / more usable.
Today the profiling lib archives (_p.a) serve no real purpose other than
increasing the library build time by 50%.

https://lists.freebsd.org/pipermail/freebsd-hackers/2020-January/055551.html

Deprecation notice would be committed first, followed by changing the default.

Diff Detail

Repository
R10 FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

This revision is now accepted and ready to land.Jun 20 2021, 7:34 PM

Thanks! I explicitly pass -DWITHOUT_PROFILE in cheribuild, looking forward to getting our build flags closer to the upstream defaults.

Cirrus-CI runs
main: https://cirrus-ci.com/task/4988055556718592
28:46 build time
11886 du -m -s /usr/obj

w/ this change: https://cirrus-ci.com/task/6464673903017984
24:48 build time
10644 du -m -s /usr/obj

I still think we should switch the profiled libraries to support gcov instead of statistical profiling, but I'm fine with not building them by default.

I tried a quick sanity check of -pg on my ~ FreeBSD 13.0 amd64 laptop, without success:

% cc -pg -O0 -g profil.c
% ./a.out
Segmentation fault (core dumped)

I wanted to determine if this is a local problem, but was unable to test on the FreeBSD ref machines because they do not install the profiling libs (PR256749)

ref13-amd64% cc -pg -O0 profil.c
/usr/local/bin/x86_64-unknown-freebsd13.0-ld: cannot find -lgcc_p
/usr/local/bin/x86_64-unknown-freebsd13.0-ld: cannot find -lgcc_eh_p
/usr/local/bin/x86_64-unknown-freebsd13.0-ld: cannot find -lc_p
/usr/local/bin/x86_64-unknown-freebsd13.0-ld: cannot find -lgcc_p
/usr/local/bin/x86_64-unknown-freebsd13.0-ld: cannot find -lgcc_eh_p
cc: error: linker command failed with exit code 1 (use -v to see invocation)

You'd be better off testing on i386 than amd64 I imagine. You could try that with '-m32' on your local machine perhaps?

I tried a quick sanity check of -pg on my ~ FreeBSD 13.0 amd64 laptop, without success:

% cc -pg -O0 -g profil.c
% ./a.out
Segmentation fault (core dumped)

I believe this is a known issue in lld, which cannot make his own decision whether the resulting binary static or not. Better try with gcc.

You'd be better off testing on i386 than amd64 I imagine.

Indeed, that ran and did not segfault, but I do not have an i386 gprof to parse the data (and native gprof produces a SIGBUS).

In D30833#694029, @kib wrote:

I tried a quick sanity check of -pg on my ~ FreeBSD 13.0 amd64 laptop, without success:

% cc -pg -O0 -g profil.c
% ./a.out
Segmentation fault (core dumped)

I believe this is a known issue in lld, which cannot make his own decision whether the resulting binary static or not. Better try with gcc.

Indeed, cc -fuse-ld=bfd -pg -O0 -g profil.c works.

Created D30861 to have Clang stop linking against _p libraries with -pg for FreeBSD 14 and up. We'll need a similar change for GCC.

exp-run requested for good measure: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=256873
will commit after that's finished

This revision was automatically updated to reflect the committed changes.