45 Commits

Author SHA1 Message Date
Moonchild 6f707bde95 Issue #1751 -- Remove XP_MACOSX conditionals from the rest of the tree.
This also removes some PP abuse and takes file entries out of PP when no longer
needed without XP_MACOSX conditionals.
2021-05-06 09:24:03 +00:00
Moonchild 3d671e4275 Issue #1751 -- Remove XP_DARWIN 2021-05-02 07:10:18 +00:00
Moonchild cc8a7e3f7b Issue #1053 - Remove MOZ_WIDGET_ANDROID and IDB_MOBILE 2021-03-11 06:43:10 +00:00
Olivier Certner 9f2085b5e9 Issue #1699 - Follow-up: mozjemalloc: Fix build by excluding some irrelevant init_lock code
This had been initially dealt with in issue #1699's commits, but one of them
was in the end reverted, which caused this problem (this change should have
been done there).
2021-02-05 18:22:59 +01:00
Olivier Certner 5f29c78f7c Issue #1730 - Part 1: Interpose malloc even on RTLD_DEEPBIND presence
New FreeBSD versions have introduced RTLD_DEEPBIND (see dlopen(3)), which
triggers a provoked build error to be on the "safe" side.

Indeed, improper use of RTLD_DEEPBIND could cause malloc interposing not to
work on specific libraries. This would happen for libraries that provide their
own malloc/free and exchange pointers with other libraries or the main program,
one allocating an area and another one deallocating it.

It seems it happened for glibc, which is not a concern on FreeBSD, and for the
Flash Player (not a concern either, there is no native Flash Player). Moreover,
there is only a single reference to RTLD_DEEPBIND in the whole platform
currently, namely in the WebRTC code, but the corresponding code chunk is
compiled-in only on Linux (and this library doesn't seem to redefine malloc
functions anyway). So I don't see how a problem could happen. Additionally,
Pale Moon, which is my focus, doesn't use WebRTC.

Corresponding Mozilla bug: https://bugzilla.mozilla.org/show_bug.cgi?id=493541
2021-02-05 18:22:46 +01:00
Olivier Certner 5d95844f49 Revert "Issue #1699 - Part 3a: mozjemalloc: Memory barriers on 'malloc_initialized'"
This reverts commit f76695c1ce.

SUSv4 specifies that 'pthread_create' acts as a (full) memory barrier, so
barriers here are not necessary.
2021-01-07 20:28:40 +01:00
Olivier Certner 91f7c9d30e Issue #1699 - Part 3b: mozjemalloc: Bootstrap allocator, early diversion for FreeBSD
Coded a simple memory allocator meant to be used during jemalloc bootstrap
(malloc_init_hard()). Although protected by "#ifdef __FreeBSD__", it is not
FreeBSD-specific: Any POSIX platform could use it.

Hook it so that it is used in place of jemalloc's own routines while
malloc_init_hard() is executing or memory for mutexes is being
allocated. Currently, 'malloc', 'calloc', '*memalign' and 'free' are diverted
during init or lock initializations.

Details are quite complex, see the big comment block starting with "There are
several problematic interactions between FreeBSD's libthr and this jemalloc."
for more explanations.

Also replaced ad-hoc BSD code to determine the number of CPUs with 'sysconf',
which is POSIX-compliant (and supported on modern BSDs).
2021-01-07 17:49:14 +01:00
Olivier Certner f76695c1ce Issue #1699 - Part 3a: mozjemalloc: Memory barriers on 'malloc_initialized'
The barriers are here to make sure that setting 'malloc_initialized' at end of
init must be noticed later by any thread running on a different core. They are
in theory necessary in the absence of an explicit pthread lock.

What could happen is that the thread doing the initialization later spawns
other threads that could not have the updated 'malloc_initialized' value,
leading to a second initialization. This is dependent on whether OSes force a
full memory barrier before the new thread is run, which I don't know, and don't
want to bother.

This was done for FreeBSD only, for the sake of robustness. In theory, this
would be needed on Windows too.
2021-01-07 17:34:03 +01:00
Brian Smith b6d909ad17 Issue #1667 - Part 1: Define _pthread_self if it is not already defined in jemalloc 2020-11-16 07:15:29 -06:00
Moonchild d5a2c45aad Issue #1656 - Part 6: Clean up the build files 2020-09-23 15:52:00 +00:00
Moonchild a680bdc637 Issue #1656 - Part 1: Nuke most vim config lines in the tree.
Since these are just interpreted comments, there's 0 impact on actual code.
This removes all lines that match /* vim: set(.*)tw=80: */ with S&R -- there are
a few others scattered around which will be removed manually in a second part.
2020-09-23 13:55:00 +00:00
athenian200 967ee4fbc7 Issue #1571 - Remove JEMALLOC_USES_MAP_ALIGN and fix 48-bit addressing on SunOS AMD64.
The JEMALLOC_USES_MAP_ALIGN code has turned out to be worse than useless, and in fact it breaks 64-bit SunOS. It's very old and turned out not to be needed anymore because the way the memory allocator works has changed since it was implemented. It prevented a fix I tried for 48-bit addressing from working properly. However, without either this code or the 48-bit addressing fix, the 64-bit version won't even start, which is why I thought the code was still needed.

https://bugzilla.mozilla.org/show_bug.cgi?id=457189

https://hg.mozilla.org/mozilla-central/rev/a26c500b98ab

The 48-bit addressing fix is based on code found here:

https://github.com/OpenIndiana/oi-userland/blob/oi/hipster/components/web/firefox/patches/patch-js_src_gc_Memory.cpp.patch

I already applied these changes to js/src/gc/Memory.cpp, but as I was looking through jemalloc.c I saw that there were very similar ifdefs for Linux on SPARC as the ones I'd had to enaable in Memory.cpp, but for whatever reason the patches I found didn't touch them. So I tried doing for jemalloc.c what was already done for Memory.cpp, and it worked (but only after I removed the map align code).
2020-05-31 11:48:49 -05:00
JMadgwick f7c9359b2a Issue #1471 - Fix building on sparc64 Linux
Correct various pre-processor defines for sparc64 and in mozjemalloc use the JS arm64 allocator on Linux/sparc64.
This corrects build problems opn Linux sparc64 and is in line with bugzilla bug #1275204.
2020-03-09 20:55:13 +00:00
Matt A. Tobin e9360fae13 Issue #1053 - Remove android support from memory 2020-02-23 00:26:22 -05:00
wolfbeast fcc84d7b9b Issue #1307 - Part 8: Remove deprecated sysctl.h inclusion. 2019-12-02 09:54:40 +01:00
wolfbeast 75c7e4749f Issue #1307 - Part 7: Add missing MALLOC_STATS 2019-11-30 18:37:15 +01:00
wolfbeast 3b361d8309 Issue #1307 - Part 6: Remove dead code behind PTHREAD_MMAP_UNALIGNED_TSD 2019-11-30 18:36:15 +01:00
wolfbeast 90508a4648 Issue #1307 - Part 5: Remove allocation tracing.
Pointless for debugging and a major performance sink.
2019-11-30 17:32:36 +01:00
wolfbeast b4b589a118 Issue #1307 - Part 4: Stop using variable-length arrays.
"USING VLA'S IS ACTIVELY STUPID! It generates much more code, and much
slower code (and more fragile code), than just using a fixed key size
would have done." -- Linus Torvalds
2019-11-30 15:42:59 +01:00
wolfbeast a954e19ea2 Issue #1307 - Part 3: Assume MOZ_MEMORY is always enabled.
We never use jemalloc without MOZ_MEMORY surrounding code (mostly a
FreeBSD concession which doesn't work anyway). This allows us to get rid
of the "poor man's mutex" (CPU-based spinlock) in mozjemalloc.
2019-11-30 15:30:32 +01:00
wolfbeast 388073a039 Issue #1307 - Part 2: Remove disabled code blocks 2019-11-30 15:05:28 +01:00
wolfbeast a7878bacfd Issue #1307 - Part 1: Remove MALLOC_VALIDATE
This basic validation is hard-set to always-on, so no point in keeping
it conditional since we basically always want this rudimentary pointer
validation to be done.
2019-11-30 14:57:44 +01:00
athenian200 5c28f10c14 MoonchildProductions#1251 - Part 13: Redefining abort in C++ requires extern "C"
https://bugzilla.mozilla.org/show_bug.cgi?id=1375467

I would ifdef this, but it's been in Firefox since version of 56, and Petr Sumbara's explanation as to why it's wrong in the first place is so detailed that it's pretty obvious the code wasn't technically doing things properly to begin with.

Basically, they tried to redefine a system function after including the header file that declares it, and it caused problems on Solaris because libc functions are imported into the C++ std namespace in a different way that also complies with standards. So the existing implementation is technically bad code on all platforms, the Solaris implementation just uncovered the lack of standards compliance in the Mozilla code.
2019-10-21 04:53:41 -05:00
athenian200 3647f42c27 MoonchildProductions#1251 - Part 7: All the posix_m* memory-related stuff, gathered together.
https://bugzilla.mozilla.org/show_bug.cgi?id=1158445
https://bugzilla.mozilla.org/show_bug.cgi?id=963983
https://bugzilla.mozilla.org/show_bug.cgi?id=1542758

Solaris madvise and malign don't perfectly map to their POSIX counterparts, and some Linux versions (especially Android) don't define the POSIX counterparts at all, so options are limited. Ideally posix_madvise and posix_malign should be the safer and more portable options for all platforms.
2019-10-21 04:53:40 -05:00
athenian200 afc187cc3f MoonchildProductions#1251 - Part 1: Restore initial Solaris support, fixed up.
Compared with what Pale Moon had for Solaris originally, this is mostly the same zero point I started patching from, but I've made the following changes here after reviewing all this initial code I never looked at closely before.

1. In package-manifest.in for both Basilisk and Pale Moon, I've made the SPARC code for libfreebl not interefere with the x86 code, use the proper build flags, and also updated it to allow a SPARC64 build which is more likely to be used than the 32-bit SPARC code we had there.

2. See Mozilla bug #832272 and the old rules.mk patch from around Firefox 30 in oracle/solaris-userland. I believe they screwed up NSINSTALL on Solaris when they were trying to streamline the NSS buildsystem, because they started having unexplained issues with it around that time after Firefox 22 that they never properly resolved until Mozilla began building NSS with gyp files. I'm actually not even sure how relevant the thing they broke actually is to Solaris at this point, bug 665509 is so old it predates Firefox itself and goes back to the Mozilla suite days. I believe $(INSTALL) -t was wrong, and they meant $(NSINSTALL) -t because that makes more sense and is closer to what was there originally. It's what they have for WINNT, and it's possible a fix more like that could serve for Solaris as well. Alternatively, we could get rid of all these half-broken Makefiles and start building NSS with gyp files like Mozilla did.

3. I've completely cut out support for the Sun compiler and taken into account the reality that everyone builds Firefox (and therefore its forks) with GCC now on Solaris. This alone helped clean up a lot of the uglier parts of the code.

4. I've updated all remaining SOLARIS build flags to the newer XP_SOLARIS, because the SOLARIS flag is no longer set when building Solaris.

5. I've confirmed the workaround in gtxFontconfigFonts.cpp is no longer necessary. The Solaris people got impatient about implementing a half-baked patch for a fontconfig feature that wasn't ready yet back in 2009, and somehow convinced Mozilla to patch their software to work around it when really they should have just fixed or removed their broken fontconfig patch. The feature they wanted has since been implemented properly, and no version of Solaris still uses the broken patch that required this fix. If anyone had ever properly audited this code, it would have been removed a long time ago.
2019-10-21 04:53:39 -05:00
wolfbeast 6b968b13d9 Issue #187: Remove solaris 1st party code OS checks. 2019-03-30 20:03:33 +01:00
wolfbeast 25779d371c Issue #187: Remove solaris conditional code. 2019-03-30 19:10:17 +01:00
trav90 41b6745059 Silence the -Wuninitialized warning in mozjemalloc
GCC 7+ warns about too many false positives.
2018-09-08 10:00:10 -05:00
wolfbeast 69627ad410 Revert "Switch to using a single memory allocation arena"
This reverts commit 4ceb21241e.
2018-09-01 19:06:20 +02:00
wolfbeast 4ceb21241e Switch to using a single memory allocation arena 2018-08-25 22:32:22 +02:00
wolfbeast fcd7ee3c88 Remove the Dark Matter Detector (DMD) Memeory debugger component.
This resolves #376.
2018-05-23 16:31:42 +02:00
wolfbeast e16bcd08aa Remove MOZ_WIDGET_GONK [2/2]
Tag #288
2018-05-13 00:08:52 +02:00
wolfbeast f7b98c15a1 Use slim reader/writer locks instead of critical sections. 2018-04-28 14:21:19 +02:00
wolfbeast e56cebf8da Remove the unused and rudimentary arena load balancer.
Lock contention is not something we'd easily have to deal with in our application.
This simplifies our code.
2018-04-28 13:17:57 +02:00
wolfbeast 08e66d3512 Make our allocator use multiple arenas based on number of CPU cores. 2018-04-28 08:59:44 +02:00
wolfbeast 90920ec0ba Remove single-threaded considerations.
We assume our applications are always going to have multithreaded access to the malloc.
2018-04-27 22:56:03 +02:00
wolfbeast a7ec27a9cc Update credits in BSD-licensed files. 2018-04-27 22:49:31 +02:00
wolfbeast c6177a81ee Remove jemalloc 4 leftover conditional. 2018-04-27 22:48:34 +02:00
wolfbeast 9c07867573 Remove MOZ_REPLACE_JEMALLOC
This was only defined when building jemalloc4 as a replace-malloc library.
2018-04-27 20:23:28 +02:00
wolfbeast 43034a36e1 Remove jemalloc 4 from our tree. 2018-04-27 19:16:45 +02:00
wolfbeast 077c630844 Remove support for making jemalloc4 the default memory allocator. 2018-04-27 13:56:47 +02:00
wolfbeast be1786f7b0 Remove support for system jemalloc. 2018-04-26 17:59:36 +02:00
Mike Hommey f56791f643 Bug 1424709 - Force disable the OSX system "nano allocator". r=spohl, a=RyanVM
We're not actually using it, and it messes up with the zone allocator in
mozjemalloc after fork(). See the lengthy analysis in
https://bugzilla.mozilla.org/show_bug.cgi?id=1424709#c34 and following.

--HG--
extra : rebase_source : b191048290a907cc7668ad7ab6369ef8661f31dc
extra : intermediate-source : 45c5d467a46077dcc3ccd59feafd0c2784432fef
extra : source : bf1efa161edb20a83fe8db2f96c51f4e66880153
2018-03-14 10:56:20 +01:00
trav90 4537850611 Use |noexcept| instead of an exception-specification in mozalloc.h
We are using |throw(std::bad_alloc)|, but dynamic exception specifications have been deprecated in C++11. The C++11 equivalent is |noexcept(false)|. This causes build warning spam when using newer compilers such as GCC 7.x.
2018-03-04 15:12:03 -06:00
Matt A. Tobin 5f8de423f1 Add m-esr52 at 52.6.0 2018-02-02 04:16:08 -05:00