Hash :
f4e901b4
Author :
Date :
2023-08-07T10:52:09
Validate program binaries are the same CPU bit-ness. ANGLE's program binary serialize/deserialize logic uses size_t and other non-fixed sized integer types. This can cause crashes if the CPU architecture changes between saving and loading of binaries. Bug: chromium:1470074 Bug: angleproject:8223 Change-Id: Ib2529e0e6e66e28a184aa1ec94075e343e1f1d5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4752265 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
//
// Copyright 2023 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// platform_helpers.h: common platform detection helper functions
#ifndef COMMON_PLATFORM_HELPERS_H_
#define COMMON_PLATFORM_HELPERS_H_
#include "common/platform.h"
namespace angle
{
inline constexpr bool IsAndroid()
{
#if defined(ANGLE_PLATFORM_ANDROID)
return true;
#else
return false;
#endif
}
inline constexpr bool IsApple()
{
// This means any Apple-vended OS (including iOS, macOS, etc)
#if defined(ANGLE_PLATFORM_APPLE)
return true;
#else
return false;
#endif
}
inline constexpr bool IsChromeOS()
{
#if defined(ANGLE_PLATFORM_CHROMEOS)
return true;
#else
return false;
#endif
}
inline constexpr bool IsFuchsia()
{
#if defined(ANGLE_PLATFORM_FUCHSIA)
return true;
#else
return false;
#endif
}
inline constexpr bool IsIOS()
{
#if ANGLE_PLATFORM_IOS_FAMILY
return true;
#else
return false;
#endif
}
inline constexpr bool IsLinux()
{
#if defined(ANGLE_PLATFORM_LINUX)
return true;
#else
return false;
#endif
}
inline constexpr bool IsMac()
{
#if defined(ANGLE_PLATFORM_MACOS)
return true;
#else
return false;
#endif
}
inline constexpr bool IsWindows()
{
#if defined(ANGLE_PLATFORM_WINDOWS)
return true;
#else
return false;
#endif
}
// Helper for version number comparisons
struct VersionTriple
{
constexpr VersionTriple() {}
constexpr VersionTriple(int major, int minor, int patch)
: majorVersion(major), minorVersion(minor), patchVersion(patch)
{}
int majorVersion = 0;
int minorVersion = 0;
int patchVersion = 0;
};
bool operator==(const VersionTriple &a, const VersionTriple &b);
bool operator!=(const VersionTriple &a, const VersionTriple &b);
bool operator<(const VersionTriple &a, const VersionTriple &b);
bool operator>=(const VersionTriple &a, const VersionTriple &b);
//
// Windows version check helpers
//
// Exact version checks
bool IsWindowsXP();
bool IsWindowsVista();
bool IsWindows7();
bool IsWindows8();
bool IsWindows10();
bool IsWindows11();
// Windows version or later helpers
bool IsWindowsXPOrLater();
bool IsWindowsVistaOrLater();
bool IsWindows7OrLater();
bool IsWindows8OrLater();
bool IsWindows10OrLater();
bool IsWindows11OrLater();
bool Is64Bit();
} // namespace angle
#endif // COMMON_PLATFORM_HELPERS_H_