FreeBSD Bugzilla – Attachment 174440 Details for
Bug 212431
www/firefox: Fix build with libc++ 3.9.0
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for mozilla bug 1269171
patch-bug1269171 (text/plain), 9.45 KB, created by
Dimitry Andric
on 2016-09-06 20:51:48 UTC
(
hide
)
Description:
Patch for mozilla bug 1269171
Filename:
MIME Type:
Creator:
Dimitry Andric
Created:
2016-09-06 20:51:48 UTC
Size:
9.45 KB
patch
obsolete
> ># HG changeset patch ># User Mike Hommey <mh+mozilla@glandium.org> ># Date 1463557039 -32400 ># Node ID 68da139d0866977c0ada86319fa94388f2255446 ># Parent a640e6fa8ab9977fb6c5bcf63dc4daca6699477b >Bug 1269171 - Change how mozalloc.h is hooked in STL wrappers. r=froydnj > >Since the introduction of the STL wrappers, they have included >mozalloc.h, and multiple times, we've hit header reentrancy problems, >and worked around them as best as we could. > >Taking a step back, all mozalloc.h does is: >- declare moz_* allocator functions. >- define inline implementations of various operator new/delete variants. > >The first only requires the functions to be declared before they are used, >so mozalloc.h only needs to be included before anything that would use >those functions. > >The second doesn't actually require a specific order, as long as the >declaration for those functions comes before their use, and they are >either declared in <new> or implicitly by the C++ compiler. > >So all in all, it doesn't matter that mozalloc.h is included before the >wrapped STL headers. What matters is that it's included when STL headers >are included. So arrange things such that mozalloc.h is included after >the first wrapped STL header is fully preprocessed (and all its includes >have been included). > > >diff --git config/gcc-stl-wrapper.template.h config/gcc-stl-wrapper.template.h >--- config/gcc-stl-wrapper.template.h >+++ config/gcc-stl-wrapper.template.h >@@ -12,56 +12,54 @@ > // compiling ObjC. > #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS) > # error "STL code can only be used with -fno-exceptions" > #endif > > // Silence "warning: #include_next is a GCC extension" > #pragma GCC system_header > >-// Don't include mozalloc for cstdlib. See bug 1245076. >-#ifndef moz_dont_include_mozalloc_for_cstdlib >-# define moz_dont_include_mozalloc_for_cstdlib >-#endif >-#ifndef moz_dont_include_mozalloc_for_${HEADER} >-// mozalloc.h wants <new>; break the cycle by always explicitly >-// including <new> here. NB: this is a tad sneaky. Sez the gcc docs: >-// >-// `#include_next' does not distinguish between <file> and "file" >-// inclusion, nor does it check that the file you specify has the >-// same name as the current file. It simply looks for the file >-// named, starting with the directory in the search path after the >-// one where the current file was found. >-# include_next <new> >- >-// See if we're in code that can use mozalloc. NB: this duplicates >-// code in nscore.h because nscore.h pulls in prtypes.h, and chromium >-// can't build with that being included before base/basictypes.h. >-# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) >-# include "mozilla/mozalloc.h" >-# else >-# error "STL code can only be used with infallible ::operator new()" >-# endif >- >-#endif >- > #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG) > // Enable checked iterators and other goodies > // > // FIXME/bug 551254: gcc's debug STL implementation requires -frtti. > // Figure out how to resolve this with -fno-rtti. Maybe build with > // -frtti in DEBUG builds? > // > // # define _GLIBCXX_DEBUG 1 > #endif > >+// Don't include mozalloc for cstdlib. See bug 1245076. >+#ifndef moz_dont_include_mozalloc_for_cstdlib >+# define moz_dont_include_mozalloc_for_cstdlib >+#endif >+ >+// Include mozalloc after the STL header and all other headers it includes >+// have been preprocessed. >+#if !defined(MOZ_INCLUDE_MOZALLOC_H) && \ >+ !defined(moz_dont_include_mozalloc_for_${HEADER}) >+# define MOZ_INCLUDE_MOZALLOC_H >+# define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} >+#endif >+ > #pragma GCC visibility push(default) > #include_next <${HEADER}> > #pragma GCC visibility pop > >+#ifdef MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} >+// See if we're in code that can use mozalloc. NB: this duplicates >+// code in nscore.h because nscore.h pulls in prtypes.h, and chromium >+// can't build with that being included before base/basictypes.h. >+# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) >+# include "mozilla/mozalloc.h" >+# else >+# error "STL code can only be used with infallible ::operator new()" >+# endif >+#endif >+ > // gcc calls a __throw_*() function from bits/functexcept.h when it > // wants to "throw an exception". functexcept exists nominally to > // support -fno-exceptions, but since we'll always use the system > // libstdc++, and it's compiled with exceptions, then in practice > // these __throw_*() functions will always throw exceptions (shades of > // -fshort-wchar). We don't want that and so define our own inlined > // __throw_*(). > #ifndef mozilla_throw_gcc_h >diff --git config/make-stl-wrappers.py config/make-stl-wrappers.py >--- config/make-stl-wrappers.py >+++ config/make-stl-wrappers.py >@@ -25,28 +25,26 @@ def header_path(header, compiler): > def is_comment(line): > return re.match(r'\s*#.*', line) > > def main(outdir, compiler, template_file, header_list_file): > if not os.path.isdir(outdir): > os.mkdir(outdir) > > template = open(template_file, 'r').read() >- path_to_new = header_path('new', compiler) > > for header in open(header_list_file, 'r'): > header = header.rstrip() > if 0 == len(header) or is_comment(header): > continue > > path = header_path(header, compiler) > with FileAvoidWrite(os.path.join(outdir, header)) as f: > f.write(string.Template(template).substitute(HEADER=header, >- HEADER_PATH=path, >- NEW_HEADER_PATH=path_to_new)) >+ HEADER_PATH=path)) > > > if __name__ == '__main__': > if 5 != len(sys.argv): > print("""Usage: > python {0} OUT_DIR ('msvc'|'gcc') TEMPLATE_FILE HEADER_LIST_FILE > """.format(sys.argv[0]), file=sys.stderr) > sys.exit(1) >diff --git config/msvc-stl-wrapper.template.h config/msvc-stl-wrapper.template.h >--- config/msvc-stl-wrapper.template.h >+++ config/msvc-stl-wrapper.template.h >@@ -3,45 +3,33 @@ > */ > /* This Source Code Form is subject to the terms of the Mozilla Public > * License, v. 2.0. If a copy of the MPL was not distributed with this > * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ > > #ifndef mozilla_${HEADER}_h > #define mozilla_${HEADER}_h > >-#ifndef MOZ_HAVE_INCLUDED_ALLOC >-#define MOZ_HAVE_INCLUDED_ALLOC >- > #if _HAS_EXCEPTIONS > # error "STL code can only be used with -fno-exceptions" > #endif > >+// Include mozalloc after the STL header and all other headers it includes >+// have been preprocessed. >+#if !defined(MOZ_INCLUDE_MOZALLOC_H) >+# define MOZ_INCLUDE_MOZALLOC_H >+# define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} >+#endif >+ > // Code built with !_HAS_EXCEPTIONS calls std::_Throw(), but the win2k > // CRT doesn't export std::_Throw(). So we define it. > #ifndef mozilla_Throw_h > # include "mozilla/throw_msvc.h" > #endif > >-// Code might include <new> before other wrapped headers, but <new> >-// includes <exception> and so we want to wrap it. But mozalloc.h >-// wants <new> also, so we break the cycle by always explicitly >-// including <new> here. >-#include <${NEW_HEADER_PATH}> >- >-// See if we're in code that can use mozalloc. NB: this duplicates >-// code in nscore.h because nscore.h pulls in prtypes.h, and chromium >-// can't build with that being included before base/basictypes.h. >-#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) >-# include "mozilla/mozalloc.h" >-#else >-# error "STL code can only be used with infallible ::operator new()" >-#endif >-#endif /* MOZ_HAVE_INCLUDED_ALLOC */ >- > #ifdef _DEBUG > // From > // http://msdn.microsoft.com/en-us/library/aa985982%28VS.80%29.aspx > // and > // http://msdn.microsoft.com/en-us/library/aa985965%28VS.80%29.aspx > // there appear to be two types of STL container checking. The > // former is enabled by -D_DEBUG (which is implied by -MDd or -MTd), and > // looks to be full generation/mutation checked iterators as done by >@@ -70,9 +58,20 @@ > // but that's OK because we're not throwing them. > #pragma warning( push ) > #pragma warning( disable : 4275 4530 ) > > #include <${HEADER_PATH}> > > #pragma warning( pop ) > >+#ifdef MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} >+// See if we're in code that can use mozalloc. NB: this duplicates >+// code in nscore.h because nscore.h pulls in prtypes.h, and chromium >+// can't build with that being included before base/basictypes.h. >+# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) >+# include "mozilla/mozalloc.h" >+# else >+# error "STL code can only be used with infallible ::operator new()" >+# endif >+#endif >+ > #endif // if mozilla_${HEADER}_h >diff --git memory/mozalloc/mozalloc.h memory/mozalloc/mozalloc.h >--- memory/mozalloc/mozalloc.h >+++ memory/mozalloc/mozalloc.h >@@ -7,20 +7,27 @@ > > #ifndef mozilla_mozalloc_h > #define mozilla_mozalloc_h > > /* > * https://bugzilla.mozilla.org/show_bug.cgi?id=427099 > */ > >-#include <stdlib.h> >-#include <string.h> > #if defined(__cplusplus) > # include <new> >+// Since libstdc++ 6, including the C headers (e.g. stdlib.h) instead of the >+// corresponding C++ header (e.g. cstdlib) can cause confusion in C++ code >+// using things defined there. Specifically, with stdlib.h, the use of abs() >+// in gfx/graphite2/src/inc/UtfCodec.h somehow ends up picking the wrong abs() >+# include <cstdlib> >+# include <cstring> >+#else >+# include <stdlib.h> >+# include <string.h> > #endif > > #if defined(__cplusplus) > #include "mozilla/fallible.h" > #include "mozilla/TemplateLib.h" > #endif > #include "mozilla/Attributes.h" > #include "mozilla/Types.h"
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
jbeich
:
maintainer-approval+
Actions:
View
|
Diff
Attachments on
bug 212431
:
174439
| 174440 |
174469