Compare commits

..

2 Commits

Author SHA1 Message Date
Michael Scire
db3dc4ebd2 git subrepo push libraries
subrepo:
  subdir:   "libraries"
  merged:   "bfc558348"
upstream:
  origin:   "https://github.com/Atmosphere-NX/Atmosphere-libs"
  branch:   "master"
  commit:   "bfc558348"
git-subrepo:
  version:  "0.4.1"
  origin:   "???"
  commit:   "???"
2023-11-28 13:02:32 -07:00
Michael Scire
742fd16080 sf: fix ipc serialization bug (out object id offsets) 2023-11-28 12:54:00 -07:00
4 changed files with 22 additions and 17 deletions

View File

@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/Atmosphere-NX/Atmosphere-libs
branch = master
commit = d7a02b6ca1c6c2f00f25c44a8f6585a79f95f515
parent = 46a43578829163cd08b9ddcaaacc6febd1e71e0e
commit = bfc55834869fe24f8d94550bc6909a65ae7d35c2
parent = 742fd16080bce8cd664d6244304a771f82e8aa04
method = merge
cmdver = 0.4.1

View File

@ -62,7 +62,7 @@ namespace ams::sf::cmif {
}
constexpr size_t GetImplOutDataTotalSize() const {
return m_impl_metadata.GetOutDataSize() + m_impl_metadata.GetOutHeadersSize();
return m_impl_metadata.GetUnalignedOutDataSize() + m_impl_metadata.GetOutHeadersSize();
}
public:
/* Used to enabled templated message processors. */
@ -80,12 +80,12 @@ namespace ams::sf::cmif {
const auto runtime_metadata = m_impl_processor->GetRuntimeMetadata();
return ServerMessageRuntimeMetadata {
.in_data_size = static_cast<u16>(runtime_metadata.GetInDataSize() + runtime_metadata.GetInObjectCount() * sizeof(DomainObjectId)),
.out_data_size = static_cast<u16>(runtime_metadata.GetOutDataSize() + runtime_metadata.GetOutObjectCount() * sizeof(DomainObjectId)),
.in_headers_size = static_cast<u8>(runtime_metadata.GetInHeadersSize() + sizeof(CmifDomainInHeader)),
.out_headers_size = static_cast<u8>(runtime_metadata.GetOutHeadersSize() + sizeof(CmifDomainOutHeader)),
.in_object_count = 0,
.out_object_count = 0,
.in_data_size = static_cast<u16>(runtime_metadata.GetInDataSize() + runtime_metadata.GetInObjectCount() * sizeof(DomainObjectId)),
.unaligned_out_data_size = static_cast<u16>(runtime_metadata.GetOutDataSize() + runtime_metadata.GetOutObjectCount() * sizeof(DomainObjectId)),
.in_headers_size = static_cast<u8>(runtime_metadata.GetInHeadersSize() + sizeof(CmifDomainInHeader)),
.out_headers_size = static_cast<u8>(runtime_metadata.GetOutHeadersSize() + sizeof(CmifDomainOutHeader)),
.in_object_count = 0,
.out_object_count = 0,
};
}

View File

@ -28,7 +28,7 @@ namespace ams::sf::cmif {
/* This is needed for non-templated domain message processing. */
struct ServerMessageRuntimeMetadata {
u16 in_data_size;
u16 out_data_size;
u16 unaligned_out_data_size;
u8 in_headers_size;
u8 out_headers_size;
u8 in_object_count;
@ -39,7 +39,11 @@ namespace ams::sf::cmif {
}
constexpr size_t GetOutDataSize() const {
return static_cast<size_t>(this->out_data_size);
return static_cast<size_t>(util::AlignUp(this->unaligned_out_data_size, sizeof(u32)));
}
constexpr size_t GetUnalignedOutDataSize() const {
return static_cast<size_t>(this->unaligned_out_data_size);
}
constexpr size_t GetInHeadersSize() const {

View File

@ -472,6 +472,7 @@ namespace ams::sf::impl {
static constexpr size_t InDataSize = util::AlignUp(InDataOffsets[NumInDatas], alignof(u16));
static constexpr std::array<size_t, NumOutDatas+1> OutDataOffsets = RawDataOffsetCalculator<OutDatas>::Offsets;
static constexpr size_t UnalignedOutDataSize = OutDataOffsets[NumOutDatas];
static constexpr size_t OutDataSize = util::AlignUp(OutDataOffsets[NumOutDatas], alignof(u32));
static constexpr size_t OutDataAlign = [] {
if constexpr (std::tuple_size<OutDatas>::value) {
@ -492,12 +493,12 @@ namespace ams::sf::impl {
/* Used by server message processor at runtime. */
static constexpr inline const cmif::ServerMessageRuntimeMetadata RuntimeMetadata = cmif::ServerMessageRuntimeMetadata{
.in_data_size = InDataSize,
.out_data_size = OutDataSize,
.in_headers_size = sizeof(CmifInHeader),
.out_headers_size = sizeof(CmifOutHeader),
.in_object_count = NumInObjects,
.out_object_count = NumOutObjects,
.in_data_size = InDataSize,
.unaligned_out_data_size = UnalignedOutDataSize,
.in_headers_size = sizeof(CmifInHeader),
.out_headers_size = sizeof(CmifOutHeader),
.in_object_count = NumInObjects,
.out_object_count = NumOutObjects,
};
/* Construction of argument serialization structs. */