Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ auto GetPointerFromLocation(SharedMemoryLocation memory_location, ResourcePointe
// coverity[autosar_cpp14_m5_0_17_violation]
// coverity[autosar_cpp14_a5_2_4_violation]
// coverity[autosar_cpp14_m5_2_8_violation]
return reinterpret_cast<T*>(static_cast<std::uint8_t*>(resource_ptr->getBaseAddress()) + memory_location.offset_);// NOLINT(cppcoreguidelines-pro-type-reinterpret-cast, cppcoreguidelines-pro-bounds-pointer-arithmetic): Tolerated see above
return reinterpret_cast<T*>(const_cast<std::uint8_t*>(static_cast<const std::uint8_t*>(resource_ptr->getBaseAddress())) + memory_location.offset_); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast, cppcoreguidelines-pro-bounds-pointer-arithmetic): Tolerated see above
// clang-format on
}

Expand All @@ -84,7 +84,7 @@ score::Result<std::size_t> GetOffsetFromPointer(T* pointer, ResourcePointer memo
// coverity[autosar_cpp14_a5_2_4_violation]
// coverity[autosar_cpp14_m5_2_8_violation]
// coverity[autosar_cpp14_m5_0_9_violation]
return static_cast<std::size_t>(reinterpret_cast<std::uint8_t*>(pointer) - static_cast<std::uint8_t*>(memory_resource->getBaseAddress()));// NOLINT(cppcoreguidelines-pro-type-reinterpret-cast): Tolerated
return static_cast<std::size_t>(reinterpret_cast<const std::uint8_t*>(pointer) - static_cast<const std::uint8_t*>(memory_resource->getBaseAddress())); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast): Tolerated
// clang-format on
}

Expand Down
4 changes: 2 additions & 2 deletions score/memory/shared/fake/my_bounded_memory_resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ MyBoundedMemoryResource::~MyBoundedMemoryResource()
{
if (should_free_memory_on_destruction_)
{
std::free(baseAddress_);
std::free(const_cast<void*>(baseAddress_));
}
MemoryResourceRegistry::getInstance().remove_resource(memoryResourceId_);
}
Expand Down Expand Up @@ -118,7 +118,7 @@ void MyBoundedMemoryResource::do_deallocate(void* /*memory*/, const std::size_t
deallocatedMemory_ += bytes;
}

MemoryResourceProxy* MyBoundedMemoryResource::AllocateMemoryResourceProxy(const std::uint64_t memory_resource_id)
const MemoryResourceProxy* MyBoundedMemoryResource::AllocateMemoryResourceProxy(const std::uint64_t memory_resource_id)
{
// We allocate the MemoryResourceProxy using worst case alignment so that any further allocations will start at an
// aligned memory address. This is important so that GetUserAllocatedBytes() is never affected by the allocation of
Expand Down
12 changes: 6 additions & 6 deletions score/memory/shared/fake/my_bounded_memory_resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ class MyBoundedMemoryResource final : public ManagedMemoryResource
MyBoundedMemoryResource& operator=(const MyBoundedMemoryResource&) noexcept = default;
MyBoundedMemoryResource& operator=(MyBoundedMemoryResource&&) noexcept = default;

MemoryResourceProxy* getMemoryResourceProxy() noexcept override
const MemoryResourceProxy* getMemoryResourceProxy() noexcept override
{
return manager_;
}

void* getBaseAddress() const noexcept override
const void* getBaseAddress() const noexcept override
{
return baseAddress_;
}
Expand Down Expand Up @@ -105,18 +105,18 @@ class MyBoundedMemoryResource final : public ManagedMemoryResource
return false;
}

MemoryResourceProxy* AllocateMemoryResourceProxy(const std::uint64_t memory_resource_id);
const MemoryResourceProxy* AllocateMemoryResourceProxy(const std::uint64_t memory_resource_id);

static std::uint64_t instanceId;
static std::size_t memoryResourceProxyAllocationSize_;

void* baseAddress_;
void* endAddress_;
const void* baseAddress_;
const void* endAddress_;
std::size_t virtual_address_space_to_reserve_;
std::size_t already_allocated_bytes_;
std::size_t deallocatedMemory_;
std::uint64_t memoryResourceId_;
MemoryResourceProxy* manager_;
const MemoryResourceProxy* manager_;
bool should_free_memory_on_destruction_;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@ class MyBoundedSharedMemoryResource final : public ISharedMemoryResource
return false;
}

MemoryResourceProxy* getMemoryResourceProxy() noexcept override
const MemoryResourceProxy* getMemoryResourceProxy() noexcept override
{
return resource_.getMemoryResourceProxy();
}

void* getBaseAddress() const noexcept override
const void* getBaseAddress() const noexcept override
{
return resource_.getBaseAddress();
}
Expand Down
7 changes: 4 additions & 3 deletions score/memory/shared/fake/my_memory_resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,15 @@ class MyMemoryResource : public ManagedMemoryResource
{
}

MemoryResourceProxy* getMemoryResourceProxy() noexcept override
const MemoryResourceProxy* getMemoryResourceProxy() noexcept override
{
MemoryResourceRegistry::getInstance().clear();
score::cpp::ignore = MemoryResourceRegistry::getInstance().insert_resource({memoryResourceId_, this});
score::cpp::ignore = MemoryResourceRegistry::getInstance().insert_resource(
{memoryResourceId_, const_cast<MyMemoryResource*>(this)});
return &this->manager_;
}

void* getBaseAddress() const noexcept override
const void* getBaseAddress() const noexcept override
{
return baseAddress_;
}
Expand Down
7 changes: 6 additions & 1 deletion score/memory/shared/managed_memory_resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ class ManagedMemoryResource : public ::score::cpp::pmr::memory_resource
ManagedMemoryResource() noexcept = default;
~ManagedMemoryResource() noexcept override = default;

/**
* We need to return a raw pointer, since we need to convert this
* pointer into an OffsetPtr if it shall be stored in shared memory.
* @return MemoryResourceProxy* that identifies _this_ memory_resource.
*/
/**
* @brief Construct T allocating underlying MemoryResource
* @tparam T The type that shall be constructed
Expand Down Expand Up @@ -96,7 +101,7 @@ class ManagedMemoryResource : public ::score::cpp::pmr::memory_resource
* @brief Get the start address of the memory region that this memory resource is managing
* @return void* start address of memory resource (e.g. mmap result)
*/
virtual void* getBaseAddress() const noexcept = 0;
virtual const void* getBaseAddress() const noexcept = 0;

/**
* @brief Get the start address of the region available to a user of this memory resource.
Expand Down
2 changes: 1 addition & 1 deletion score/memory/shared/memory_resource_registry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ auto score::memory::shared::MemoryResourceRegistry::insert_resource(
// If we successfully inserted the ID into the registry, add the memory_range to known_regions.
if (!input.second->IsOffsetPtrBoundsCheckBypassingEnabled() && result.second)
{
void* const memory_range_start = resource->getBaseAddress();
const void* const memory_range_start = resource->getBaseAddress();
const void* const memory_range_end = resource->getEndAddress();

if ((memory_range_start == nullptr) || (memory_range_end == nullptr))
Expand Down
8 changes: 4 additions & 4 deletions score/memory/shared/memory_resource_registry_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ class BasicMemoryResource : public ManagedMemoryResource
end_address_{reinterpret_cast<void*>(memory_range.second)}
{
}
MemoryResourceProxy* getMemoryResourceProxy() noexcept override
const MemoryResourceProxy* getMemoryResourceProxy() noexcept override
{
return nullptr;
}
void* getBaseAddress() const noexcept override
const void* getBaseAddress() const noexcept override
{
return base_address_;
}
Expand Down Expand Up @@ -97,11 +97,11 @@ class BoundsCheckBypassingMemoryResource : public ManagedMemoryResource
end_address_{reinterpret_cast<void*>(memory_range.second)}
{
}
MemoryResourceProxy* getMemoryResourceProxy() noexcept override
const MemoryResourceProxy* getMemoryResourceProxy() noexcept override
{
return nullptr;
}
void* getBaseAddress() const noexcept override
const void* getBaseAddress() const noexcept override
{
return base_address_;
}
Expand Down
4 changes: 2 additions & 2 deletions score/memory/shared/new_delete_delegate_resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ NewDeleteDelegateMemoryResource::~NewDeleteDelegateMemoryResource()
}
}

void* NewDeleteDelegateMemoryResource::getBaseAddress() const noexcept
const void* NewDeleteDelegateMemoryResource::getBaseAddress() const noexcept
{
// Suppress "AUTOSAR C++14 A5-2-4" rule finding: "reinterpret_cast shall not be used.".
// This class holds no real memory, it only has a made-up buffer.
Expand All @@ -76,7 +76,7 @@ void* NewDeleteDelegateMemoryResource::getBaseAddress() const noexcept

void* NewDeleteDelegateMemoryResource::getUsableBaseAddress() const noexcept
{
return getBaseAddress();
return const_cast<void*>(getBaseAddress());
}

const void* NewDeleteDelegateMemoryResource::getEndAddress() const noexcept
Expand Down
2 changes: 1 addition & 1 deletion score/memory/shared/new_delete_delegate_resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class NewDeleteDelegateMemoryResource : public score::memory::shared::ManagedMem
~NewDeleteDelegateMemoryResource() override;

const MemoryResourceProxy* getMemoryResourceProxy() noexcept override;
void* getBaseAddress() const noexcept override;
const void* getBaseAddress() const noexcept override;
void* getUsableBaseAddress() const noexcept override;

std::size_t GetUserAllocatedBytes() const noexcept override;
Expand Down
2 changes: 1 addition & 1 deletion score/memory/shared/shared_memory_resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -731,7 +731,7 @@ auto SharedMemoryResource::do_allocate(const std::size_t bytes, const std::size_
return new_address_aligned;
}

auto SharedMemoryResource::getBaseAddress() const noexcept -> void*
auto SharedMemoryResource::getBaseAddress() const noexcept -> const void*
{
// Suppress "AUTOSAR C++14 A9-3-1" rule finding: "Member functions shall not return non-const “raw” pointers or
// references to private or protected data owned by the class.".
Expand Down
3 changes: 1 addition & 2 deletions score/memory/shared/shared_memory_resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,13 @@ class SharedMemoryResource : public ISharedMemoryResource, public std::enable_sh
SharedMemoryResource(SharedMemoryResource&& other) = delete;
SharedMemoryResource& operator=(SharedMemoryResource&&) = delete;

// coverity[autosar_cpp14_m7_3_1_violation] false-positive: class method (Ticket-234468)
const MemoryResourceProxy* getMemoryResourceProxy() noexcept override;

/**
* @brief Get the start address of the memory region that this memory resource is managing
* @return void* start address of memory resource (e.g. mmap result)
*/
void* getBaseAddress() const noexcept override;
const void* getBaseAddress() const noexcept override;

/**
* @brief Get the start address of the region available to a user of this SharedMemoryResource.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class SharedMemoryResourceHeapAllocatorMock : public ISharedMemoryResource
public:
explicit SharedMemoryResourceHeapAllocatorMock(const std::uint64_t mem_res_id) : resource_{mem_res_id} {}

MOCK_METHOD(void*, getBaseAddress, (), (const, noexcept, override));
MOCK_METHOD(const void*, getBaseAddress, (), (const, noexcept, override));

MOCK_METHOD(void*, getUsableBaseAddress, (), (const, noexcept, override));

Expand Down
4 changes: 2 additions & 2 deletions score/memory/shared/shared_memory_resource_mock.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ namespace score::memory::shared
class SharedMemoryResourceMock : public ISharedMemoryResource
{
public:
MOCK_METHOD(MemoryResourceProxy*, getMemoryResourceProxy, (), (noexcept, override));
MOCK_METHOD(const MemoryResourceProxy*, getMemoryResourceProxy, (), (noexcept, override));

MOCK_METHOD(void*, getBaseAddress, (), (const, noexcept, override));
MOCK_METHOD(const void*, getBaseAddress, (), (const, noexcept, override));

MOCK_METHOD(void*, getUsableBaseAddress, (), (const, noexcept, override));

Expand Down
Loading