turn on debug mode for clang libc++ headers
Categories
(Firefox Build System :: General, task)
Tracking
(firefox49 fixed)
Tracking | Status | |
---|---|---|
firefox49 | --- | fixed |
People
(Reporter: froydnj, Assigned: jewilde)
Details
Attachments
(2 files)
(deleted),
patch
|
glandium
:
review+
|
Details | Diff | Splinter Review |
(deleted),
text/x-phabricator-request
|
Details |
Reporter | ||
Comment 1•9 years ago
|
||
Comment 2•9 years ago
|
||
Reporter | ||
Comment 3•9 years ago
|
||
Updated•9 years ago
|
Updated•9 years ago
|
Reporter | ||
Comment 7•9 years ago
|
||
Comment 8•9 years ago
|
||
bugherder |
Comment 9•8 years ago
|
||
Updated•7 years ago
|
Reporter | ||
Comment 10•6 years ago
|
||
Updated•5 years ago
|
Comment 11•3 years ago
|
||
The bug assignee didn't login in Bugzilla in the last 7 months, so the assignee is being reset.
Updated•2 years ago
|
Comment 12•2 years ago
|
||
This was talked about recently in the Google-organized Memory Saftey Summit. They enabled these on Chromium and saw over 800 unique issues in 3 months so it definitely seems worth running down.
Comment 13•2 years ago
|
||
For easier reading, here is the backout reason from comment 9:
It turns out that, since we're including <new> before setting
_GLIBCXX_DEBUG, the debug parts of c++config.h are not activated, and
that has an impact of how much of the debug features of the STL are
activated.
In contrast, the upcoming changes to the STL wrappers are avoiding the
include of <new> before _GLIBCXX_DEBUG is set, which in turn breaks the
build because, as we link things that use STL wrappers with things that
don't, they end up with a different state of STL debugging, and have
mismatching symbols.
Mike, do you know if this is still an issue? Are there any other blockers for pursuing this?
Comment 14•2 years ago
|
||
I think it still is, short of building some things twice (e.g. some parts of the updater). Best way to tell for sure would be to do a try push.
Comment 15•2 years ago
|
||
Is this something we could enable per header file (directory, translation unit, ...) in order to enforce it step by step?
Comment 16•1 year ago
|
||
June, you said you tried turning this from error to warning recently and came up with a list of issues. Can you share that list?
Assignee | ||
Comment 17•1 year ago
|
||
As an update we're somewhat shifting this bug to be solely about clang's libc++ debug mode checks since we primarily build with clang now and gcc's libstdc++ counterpart already has Bug 556708 filed.
I'm having some trouble reproducing that list both locally and in try, but I'm attaching the patch I wrote to generate it here. It attempts to set LIBCXX_ENABLE_DEBUG_MODE
before any part of Firefox is compiled and forces the copy of clang that we build in automation to be built with LIBCXX_ENABLE_DEBUG_MODE
set and a custom version of _LIBCPP_VERBOSE_ABORT
to log the error, but not abort from the build.
To be able to utilize the stl debug mode we'll need to build llvm/clang with LIBCXX_ENABLE_DEBUG_MODE
set to true and then also use that build of clang to build debug Firefox with LIBCXX_ENABLE_DEBUG_MODE
set to true. I'm not sure if we would be able to use the same copy of clang to make other builds, however. As far as I can tell the ABI changes persist even if we don't set the debug mode flag when building Firefox.
As for whether or not we can do this by header file/translation unit/component/etc we'll have to enforce it all at once due to how the build flag works and we'll also need to make sure that any third party libraries we're building also have the flag enabled. We could however do it in two stages of
- enabling the flag and surfacing the errors as warnings
- fixing everything found in tree and restoring the default functionality of calling
std::abort
on error
Assignee | ||
Comment 18•1 year ago
|
||
Comment 19•1 year ago
|
||
since we primarily build with clang now
That's not actually related to whether or not we're using libc++, which we're actually not, on most platforms. We're only using libc++ on mac, and we're using the system one, at that.
(Also clang 17 removed LIBCXX_ENABLE_DEBUG_MODE, it now has different knobs)
Description
•