tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pure_virtual.c (1201B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include <mozilla/Assertions.h>
      6 
      7 // This function is used in vtables to point at pure virtual methods.
      8 // The implementation in the standard library usually aborts, but
      9 // the function is normally never called (a call would be a bug).
     10 // Each of these entries in vtables, however, require an unnecessary
     11 // dynamic relocation. Defining our own function makes the linker
     12 // point the vtables here instead of the standard library, replacing
     13 // the dynamic relocations with relative relocations.
     14 //
     15 // On Windows, it doesn't really make a difference, but on macOS it
     16 // can be packed better, saving about 10KB in libxul, and on 64-bits
     17 // ELF systems, with packed relative relocations, it saves 140KB.
     18 //
     19 // Another advantage of having our own is that we can use MOZ_CRASH
     20 // instead of the system's abort.
     21 #ifdef _MSC_VER
     22 int __cdecl _purecall() { MOZ_CRASH("pure virtual call"); }
     23 #else
     24 __attribute__((visibility("hidden"))) void __cxa_pure_virtual() {
     25  MOZ_CRASH("pure virtual call");
     26 }
     27 #endif