haikuwebkit/Source/WTF/wtf/PlatformOS.h

160 lines
4.8 KiB
C
Raw Permalink Normal View History

/*
Define MacroAssemblerARM64E::numberOfPACBits based on OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH). https://bugs.webkit.org/show_bug.cgi?id=227147 rdar://78785309 Reviewed by Saam Barati. Source/bmalloc: For OS(DARWIN), define BOS_EFFECTIVE_ADDRESS_WIDTH in terms of MACH_VM_MAX_ADDRESS, which is provided by the SDK. This ensures that it is correct for each target OS(DARWIN) platform. * bmalloc/Algorithm.h: (bmalloc::clzConstexpr): (bmalloc::getMSBSetConstexpr): * bmalloc/BPlatform.h: * bmalloc/Gigacage.h: * bmalloc/ObjectTypeTable.h: * bmalloc/Packed.h: Source/JavaScriptCore: * assembler/MacroAssemblerARM64E.h: * bytecode/CodeOrigin.h: * runtime/JSString.h: * runtime/OptionsList.h: Source/WTF: For OS(DARWIN), define OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) in terms of MACH_VM_MAX_ADDRESS, which is provided by the SDK. This ensures that it is correct for each target OS(DARWIN) platform. Also update an assertion in WTFAssertions.cpp to verify that address bits are less than 48. The purpose of this assertion is to ensure that our 64-bit NaN boxing encoding for JSValues will work. Hence, we should use the encoding limit for pointers of 48 bits. It no longer makes sense to assert based on OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH), because OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) is defined in terms of MACH_VM_MAX_ADDRESS. * wtf/CagedPtr.h: * wtf/CompactPointerTuple.h: * wtf/PlatformOS.h: * wtf/WTFAssertions.cpp: * wtf/threads/Signals.cpp: Tools: * TestWebKitAPI/Tests/WTF/Packed.cpp: Canonical link: https://commits.webkit.org/238948@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@279028 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-18 01:44:42 +00:00
* Copyright (C) 2006-2021 Apple Inc. All rights reserved.
* Copyright (C) 2007-2009 Torch Mobile, Inc.
* Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#ifndef WTF_PLATFORM_GUARD_AGAINST_INDIRECT_INCLUSION
#error "Please #include <wtf/Platform.h> instead of this file directly."
#endif
#if defined(__APPLE__)
#include <Availability.h>
#include <AvailabilityMacros.h>
#include <TargetConditionals.h>
#endif
/* OS() - underlying operating system; only to be used for mandated low-level services like
virtual memory, not to choose a GUI toolkit */
Platform.h is out of control Part 8: Macros are used inconsistently https://bugs.webkit.org/show_bug.cgi?id=206425 Reviewed by Darin Adler. Source/bmalloc: * bmalloc/BPlatform.h: Update OS_EFFECTIVE_ADDRESS_WIDTH to match WTF definition, add needed OS macros. Source/JavaScriptCore: * assembler/ARM64Assembler.h: (JSC::ARM64Assembler::cacheFlush): (JSC::ARM64Assembler::xOrSp): (JSC::ARM64Assembler::xOrZr): * assembler/ARM64Registers.h: * assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::cacheFlush): * assembler/ARMv7Registers.h: * assembler/AssemblerCommon.h: (JSC::isDarwin): * b3/air/AirCCallingConvention.cpp: * jit/ExecutableAllocator.h: * jit/ThunkGenerators.cpp: * jsc.cpp: * runtime/MathCommon.cpp: Use OS(DARWIN) more consistently for darwin level functionality. * bytecode/CodeOrigin.h: * runtime/JSString.h: Update to use OS_CONSTANT. * disassembler/ARM64/A64DOpcode.cpp: * disassembler/ARM64Disassembler.cpp: * disassembler/UDis86Disassembler.cpp: * disassembler/UDis86Disassembler.h: * disassembler/X86Disassembler.cpp: * disassembler/udis86/udis86.c: * disassembler/udis86/udis86_decode.c: * disassembler/udis86/udis86_itab_holder.c: * disassembler/udis86/udis86_syn-att.c: * disassembler/udis86/udis86_syn-intel.c: * disassembler/udis86/udis86_syn.c: * interpreter/Interpreter.cpp: * interpreter/Interpreter.h: * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * llint/LowLevelInterpreter.cpp: * tools/SigillCrashAnalyzer.cpp: Switch to using ENABLE rather than USE for features internal to WebKit Source/WTF: Start addressing FIXMEs added to Platform.h (and helper files) during previous cleanup work. - Renames WTF_CPU_EFFECTIVE_ADDRESS_WIDTH to WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH, making it available via new macro OS_CONSTANT(...), and syncs bmalloc redefinition. - Renames: USE_LLINT_EMBEDDED_OPCODE_ID to ENABLE_LLINT_EMBEDDED_OPCODE_ID USE_UDIS86 to ENABLE_UDIS86 USE_ARM64_DISASSEMBLER to ENABLE_ARM64_DISASSEMBLER Enable is more appropriate here as these enable functionality within webkit. - Removes undefs that are no longer needed due to only defining the macro once now. - Removes dead defined(__LP64__) check after PLATFORM(MAC) macOS is always 64-bit these days. * wtf/Packed.h: (WTF::alignof): * wtf/Platform.h: * wtf/PlatformEnable.h: * wtf/PlatformOS.h: * wtf/WTFAssertions.cpp: * wtf/text/StringCommon.h: Tools: * TestWebKitAPI/Tests/WTF/Packed.cpp: (TestWebKitAPI::TEST): Update to use OS_CONSTANT. Canonical link: https://commits.webkit.org/219580@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@254843 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-01-21 04:01:50 +00:00
#define OS(WTF_FEATURE) (defined WTF_OS_##WTF_FEATURE && WTF_OS_##WTF_FEATURE)
#define OS_CONSTANT(WTF_FEATURE) (WTF_OS_CONSTANT_##WTF_FEATURE)
/* ==== OS() - underlying operating system; only to be used for mandated low-level services like
virtual memory, not to choose a GUI toolkit ==== */
/* OS(AIX) - AIX */
#if defined(_AIX)
#define WTF_OS_AIX 1
#endif
/* OS(DARWIN) - Any Darwin-based OS, including macOS, iOS, macCatalyst, tvOS, and watchOS */
#if defined(__APPLE__)
#define WTF_OS_DARWIN 1
#endif
/* OS(IOS_FAMILY) - iOS family, including iOS, iPadOS, macCatalyst, tvOS, watchOS */
#if OS(DARWIN) && TARGET_OS_IPHONE
#define WTF_OS_IOS_FAMILY 1
#endif
/* OS(IOS) - iOS and iPadOS only (iPhone and iPad), not including macCatalyst, not including watchOS, not including tvOS */
#if OS(DARWIN) && (TARGET_OS_IOS && !(defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST))
#define WTF_OS_IOS 1
#endif
/* OS(TVOS) - tvOS */
#if OS(DARWIN) && TARGET_OS_TV
#define WTF_OS_TVOS 1
#endif
/* OS(WATCHOS) - watchOS */
#if OS(DARWIN) && TARGET_OS_WATCH
#define WTF_OS_WATCHOS 1
#endif
/* FIXME: Rename this to drop the X, as that is no longer the name of the operating system. */
/* OS(MAC_OS_X) - macOS (not including iOS family) */
#if OS(DARWIN) && TARGET_OS_OSX
#define WTF_OS_MAC_OS_X 1
#endif
/* OS(FREEBSD) - FreeBSD */
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
#define WTF_OS_FREEBSD 1
#endif
/* OS(FUCHSIA) - Fuchsia */
#if defined(__Fuchsia__)
#define WTF_OS_FUCHSIA 1
#endif
/* OS(HAIKU) - Haiku */
#if defined(__HAIKU__)
#define WTF_OS_HAIKU 1
#endif
/* OS(HURD) - GNU/Hurd */
#if defined(__GNU__)
#define WTF_OS_HURD 1
#endif
/* OS(LINUX) - Linux */
#if defined(__linux__)
#define WTF_OS_LINUX 1
#endif
/* OS(NETBSD) - NetBSD */
#if defined(__NetBSD__)
#define WTF_OS_NETBSD 1
#endif
/* OS(OPENBSD) - OpenBSD */
#if defined(__OpenBSD__)
#define WTF_OS_OPENBSD 1
#endif
/* OS(WINDOWS) - Any version of Windows */
#if defined(WIN32) || defined(_WIN32)
#define WTF_OS_WINDOWS 1
#endif
/* OS(UNIX) - Any Unix-like system */
#if OS(AIX) \
|| OS(DARWIN) \
|| OS(FREEBSD) \
|| OS(FUCHSIA) \
|| OS(HAIKU) \
|| OS(HURD) \
|| OS(LINUX) \
|| OS(NETBSD) \
|| OS(OPENBSD) \
|| defined(unix) \
|| defined(__unix) \
|| defined(__unix__)
#define WTF_OS_UNIX 1
#endif
Platform.h is out of control Part 8: Macros are used inconsistently https://bugs.webkit.org/show_bug.cgi?id=206425 Reviewed by Darin Adler. Source/bmalloc: * bmalloc/BPlatform.h: Update OS_EFFECTIVE_ADDRESS_WIDTH to match WTF definition, add needed OS macros. Source/JavaScriptCore: * assembler/ARM64Assembler.h: (JSC::ARM64Assembler::cacheFlush): (JSC::ARM64Assembler::xOrSp): (JSC::ARM64Assembler::xOrZr): * assembler/ARM64Registers.h: * assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::cacheFlush): * assembler/ARMv7Registers.h: * assembler/AssemblerCommon.h: (JSC::isDarwin): * b3/air/AirCCallingConvention.cpp: * jit/ExecutableAllocator.h: * jit/ThunkGenerators.cpp: * jsc.cpp: * runtime/MathCommon.cpp: Use OS(DARWIN) more consistently for darwin level functionality. * bytecode/CodeOrigin.h: * runtime/JSString.h: Update to use OS_CONSTANT. * disassembler/ARM64/A64DOpcode.cpp: * disassembler/ARM64Disassembler.cpp: * disassembler/UDis86Disassembler.cpp: * disassembler/UDis86Disassembler.h: * disassembler/X86Disassembler.cpp: * disassembler/udis86/udis86.c: * disassembler/udis86/udis86_decode.c: * disassembler/udis86/udis86_itab_holder.c: * disassembler/udis86/udis86_syn-att.c: * disassembler/udis86/udis86_syn-intel.c: * disassembler/udis86/udis86_syn.c: * interpreter/Interpreter.cpp: * interpreter/Interpreter.h: * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * llint/LowLevelInterpreter.cpp: * tools/SigillCrashAnalyzer.cpp: Switch to using ENABLE rather than USE for features internal to WebKit Source/WTF: Start addressing FIXMEs added to Platform.h (and helper files) during previous cleanup work. - Renames WTF_CPU_EFFECTIVE_ADDRESS_WIDTH to WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH, making it available via new macro OS_CONSTANT(...), and syncs bmalloc redefinition. - Renames: USE_LLINT_EMBEDDED_OPCODE_ID to ENABLE_LLINT_EMBEDDED_OPCODE_ID USE_UDIS86 to ENABLE_UDIS86 USE_ARM64_DISASSEMBLER to ENABLE_ARM64_DISASSEMBLER Enable is more appropriate here as these enable functionality within webkit. - Removes undefs that are no longer needed due to only defining the macro once now. - Removes dead defined(__LP64__) check after PLATFORM(MAC) macOS is always 64-bit these days. * wtf/Packed.h: (WTF::alignof): * wtf/Platform.h: * wtf/PlatformEnable.h: * wtf/PlatformOS.h: * wtf/WTFAssertions.cpp: * wtf/text/StringCommon.h: Tools: * TestWebKitAPI/Tests/WTF/Packed.cpp: (TestWebKitAPI::TEST): Update to use OS_CONSTANT. Canonical link: https://commits.webkit.org/219580@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@254843 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-01-21 04:01:50 +00:00
#if CPU(ADDRESS64)
Define MacroAssemblerARM64E::numberOfPACBits based on OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH). https://bugs.webkit.org/show_bug.cgi?id=227147 rdar://78785309 Reviewed by Saam Barati. Source/bmalloc: For OS(DARWIN), define BOS_EFFECTIVE_ADDRESS_WIDTH in terms of MACH_VM_MAX_ADDRESS, which is provided by the SDK. This ensures that it is correct for each target OS(DARWIN) platform. * bmalloc/Algorithm.h: (bmalloc::clzConstexpr): (bmalloc::getMSBSetConstexpr): * bmalloc/BPlatform.h: * bmalloc/Gigacage.h: * bmalloc/ObjectTypeTable.h: * bmalloc/Packed.h: Source/JavaScriptCore: * assembler/MacroAssemblerARM64E.h: * bytecode/CodeOrigin.h: * runtime/JSString.h: * runtime/OptionsList.h: Source/WTF: For OS(DARWIN), define OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) in terms of MACH_VM_MAX_ADDRESS, which is provided by the SDK. This ensures that it is correct for each target OS(DARWIN) platform. Also update an assertion in WTFAssertions.cpp to verify that address bits are less than 48. The purpose of this assertion is to ensure that our 64-bit NaN boxing encoding for JSValues will work. Hence, we should use the encoding limit for pointers of 48 bits. It no longer makes sense to assert based on OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH), because OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) is defined in terms of MACH_VM_MAX_ADDRESS. * wtf/CagedPtr.h: * wtf/CompactPointerTuple.h: * wtf/PlatformOS.h: * wtf/WTFAssertions.cpp: * wtf/threads/Signals.cpp: Tools: * TestWebKitAPI/Tests/WTF/Packed.cpp: Canonical link: https://commits.webkit.org/238948@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@279028 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-18 01:44:42 +00:00
#if OS(DARWIN)
#define WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH (WTF::getMSBSetConstexpr(MACH_VM_MAX_ADDRESS) + 1)
Platform.h is out of control Part 8: Macros are used inconsistently https://bugs.webkit.org/show_bug.cgi?id=206425 Reviewed by Darin Adler. Source/bmalloc: * bmalloc/BPlatform.h: Update OS_EFFECTIVE_ADDRESS_WIDTH to match WTF definition, add needed OS macros. Source/JavaScriptCore: * assembler/ARM64Assembler.h: (JSC::ARM64Assembler::cacheFlush): (JSC::ARM64Assembler::xOrSp): (JSC::ARM64Assembler::xOrZr): * assembler/ARM64Registers.h: * assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::cacheFlush): * assembler/ARMv7Registers.h: * assembler/AssemblerCommon.h: (JSC::isDarwin): * b3/air/AirCCallingConvention.cpp: * jit/ExecutableAllocator.h: * jit/ThunkGenerators.cpp: * jsc.cpp: * runtime/MathCommon.cpp: Use OS(DARWIN) more consistently for darwin level functionality. * bytecode/CodeOrigin.h: * runtime/JSString.h: Update to use OS_CONSTANT. * disassembler/ARM64/A64DOpcode.cpp: * disassembler/ARM64Disassembler.cpp: * disassembler/UDis86Disassembler.cpp: * disassembler/UDis86Disassembler.h: * disassembler/X86Disassembler.cpp: * disassembler/udis86/udis86.c: * disassembler/udis86/udis86_decode.c: * disassembler/udis86/udis86_itab_holder.c: * disassembler/udis86/udis86_syn-att.c: * disassembler/udis86/udis86_syn-intel.c: * disassembler/udis86/udis86_syn.c: * interpreter/Interpreter.cpp: * interpreter/Interpreter.h: * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * llint/LowLevelInterpreter.cpp: * tools/SigillCrashAnalyzer.cpp: Switch to using ENABLE rather than USE for features internal to WebKit Source/WTF: Start addressing FIXMEs added to Platform.h (and helper files) during previous cleanup work. - Renames WTF_CPU_EFFECTIVE_ADDRESS_WIDTH to WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH, making it available via new macro OS_CONSTANT(...), and syncs bmalloc redefinition. - Renames: USE_LLINT_EMBEDDED_OPCODE_ID to ENABLE_LLINT_EMBEDDED_OPCODE_ID USE_UDIS86 to ENABLE_UDIS86 USE_ARM64_DISASSEMBLER to ENABLE_ARM64_DISASSEMBLER Enable is more appropriate here as these enable functionality within webkit. - Removes undefs that are no longer needed due to only defining the macro once now. - Removes dead defined(__LP64__) check after PLATFORM(MAC) macOS is always 64-bit these days. * wtf/Packed.h: (WTF::alignof): * wtf/Platform.h: * wtf/PlatformEnable.h: * wtf/PlatformOS.h: * wtf/WTFAssertions.cpp: * wtf/text/StringCommon.h: Tools: * TestWebKitAPI/Tests/WTF/Packed.cpp: (TestWebKitAPI::TEST): Update to use OS_CONSTANT. Canonical link: https://commits.webkit.org/219580@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@254843 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-01-21 04:01:50 +00:00
#else
/* We strongly assume that effective address width is <= 48 in 64bit architectures (e.g. NaN boxing). */
#define WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH 48
#endif
#else
#define WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH 32
#endif
/* Asserts, invariants for macro definitions */
#define WTF_OS_WIN ERROR "USE WINDOWS WITH OS NOT WIN"
#define WTF_OS_MAC ERROR "USE MAC_OS_X WITH OS NOT MAC"