blob: 49525ed403dd4d76592fbbce2e26fc5c8dd7efd0 [file] [log] [blame]
// Copyright 2022 the V8 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.
#ifndef V8_SANDBOX_BOUNDED_SIZE_INL_H_
#define V8_SANDBOX_BOUNDED_SIZE_INL_H_
#include "include/v8-internal.h"
#include "src/common/ptr-compr-inl.h"
#include "src/sandbox/sandbox.h"
#include "src/sandbox/sandboxed-pointer.h"
namespace v8::internal {
V8_INLINE size_t ReadBoundedSizeField(Address field_address) {
#ifdef V8_ENABLE_SANDBOX
size_t raw_value = base::ReadUnalignedValue<size_t>(field_address);
return raw_value >> kBoundedSizeShift;
#else
return ReadMaybeUnalignedValue<size_t>(field_address);
#endif
}
V8_INLINE void WriteBoundedSizeField(Address field_address, size_t value) {
#ifdef V8_ENABLE_SANDBOX
DCHECK_LE(value, kMaxSafeBufferSizeForSandbox);
size_t raw_value = value << kBoundedSizeShift;
base::WriteUnalignedValue<size_t>(field_address, raw_value);
#else
WriteMaybeUnalignedValue<size_t>(field_address, value);
#endif
}
} // namespace v8::internal
#endif // V8_SANDBOX_BOUNDED_SIZE_INL_H_