mirror of
https://github.com/chromium/crashpad.git
synced 2025-03-09 14:06:33 +00:00
Add generic VMAddress-related types
This will allow sharing code that is currently hard-coded to use (e.g.) LinuxVMAddress or mach_vm_size_t. Change-Id: I7bf20600c73d4ec7d2a029754f9043a236a38e5a Reviewed-on: https://chromium-review.googlesource.com/677142 Reviewed-by: Mark Mentovai <mark@chromium.org> Commit-Queue: Dave Bort <dbort@google.com>
This commit is contained in:
parent
a04edfad5c
commit
45de8bf76e
69
util/misc/address_types.h
Normal file
69
util/misc/address_types.h
Normal file
@ -0,0 +1,69 @@
|
||||
// Copyright 2017 The Crashpad Authors. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef CRASHPAD_UTIL_MISC_ADDRESS_TYPES_H_
|
||||
#define CRASHPAD_UTIL_MISC_ADDRESS_TYPES_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
#include "build/build_config.h"
|
||||
|
||||
#if defined(OS_MACOSX)
|
||||
#include <mach/mach_types.h>
|
||||
#elif defined(OS_WIN)
|
||||
#include "util/win/address_types.h"
|
||||
#elif defined(OS_LINUX)
|
||||
#include "util/linux/address_types.h"
|
||||
#else
|
||||
#error "Unhandled OS type"
|
||||
#endif
|
||||
|
||||
namespace crashpad {
|
||||
|
||||
#if DOXYGEN
|
||||
|
||||
//! \brief Type used to represent an address in a process, potentially across
|
||||
//! bitness.
|
||||
using VMAddress = uint64_t;
|
||||
|
||||
//! \brief Type used to represent the size of a memory range (with a
|
||||
//! VMAddress), potentially across bitness.
|
||||
using VMSize = uint64_t;
|
||||
|
||||
#elif defined(OS_MACOSX)
|
||||
|
||||
using VMAddress = mach_vm_address_t;
|
||||
using VMSize = mach_vm_size_t;
|
||||
|
||||
#elif defined(OS_WIN)
|
||||
|
||||
using VMAddress = WinVMAddress;
|
||||
using VMSize = WinVMSize;
|
||||
|
||||
#elif defined(OS_LINUX)
|
||||
|
||||
using VMAddress = LinuxVMAddress;
|
||||
using VMSize = LinuxVMSize;
|
||||
|
||||
#endif
|
||||
|
||||
//! \brief Type used to represent an offset from a VMAddress, potentially
|
||||
//! across bitness.
|
||||
using VMOffset = std::make_signed<VMSize>::type;
|
||||
|
||||
} // namespace crashpad
|
||||
|
||||
#endif // CRASHPAD_UTIL_MISC_ADDRESS_TYPES_H_
|
36
util/numeric/checked_vm_address_range.h
Normal file
36
util/numeric/checked_vm_address_range.h
Normal file
@ -0,0 +1,36 @@
|
||||
// Copyright 2017 The Crashpad Authors. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef CRASHPAD_UTIL_NUMERIC_CHECKED_VM_ADDRESS_RANGE_H_
|
||||
#define CRASHPAD_UTIL_NUMERIC_CHECKED_VM_ADDRESS_RANGE_H_
|
||||
|
||||
#include "util/misc/address_types.h"
|
||||
#include "util/numeric/checked_address_range.h"
|
||||
|
||||
namespace crashpad {
|
||||
|
||||
//! \brief Ensures that a range, composed of a base and a size, does not
|
||||
//! overflow the pointer type of the process it describes a range in.
|
||||
//!
|
||||
//! This class checks bases of type #VMAddress and sizes of type #VMSize against
|
||||
//! a process whose pointer type is either 32 or 64 bits wide.
|
||||
//!
|
||||
//! Aside from varying the overall range on the basis of a process’ pointer type
|
||||
//! width, this class functions very similarly to CheckedRange.
|
||||
using CheckedVMAddressRange =
|
||||
internal::CheckedAddressRangeGeneric<VMAddress, VMSize>;
|
||||
|
||||
} // namespace crashpad
|
||||
|
||||
#endif // CRASHPAD_UTIL_NUMERIC_CHECKED_VM_ADDRESS_RANGE_H_
|
@ -110,6 +110,7 @@
|
||||
'mach/task_memory.cc',
|
||||
'mach/task_memory.h',
|
||||
'misc/address_sanitizer.h',
|
||||
'misc/address_types.h',
|
||||
'misc/arraysize_unsafe.h',
|
||||
'misc/clock.h',
|
||||
'misc/clock_mac.cc',
|
||||
@ -157,6 +158,7 @@
|
||||
'numeric/checked_address_range.cc',
|
||||
'numeric/checked_address_range.h',
|
||||
'numeric/checked_range.h',
|
||||
'numeric/checked_vm_address_range.h',
|
||||
'numeric/in_range_cast.h',
|
||||
'numeric/int128.h',
|
||||
'numeric/safe_assignment.h',
|
||||
|
Loading…
x
Reference in New Issue
Block a user