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] [subrepo]
remote = https://github.com/Atmosphere-NX/Atmosphere-libs remote = https://github.com/Atmosphere-NX/Atmosphere-libs
branch = master branch = master
commit = d7a02b6ca1c6c2f00f25c44a8f6585a79f95f515 commit = bfc55834869fe24f8d94550bc6909a65ae7d35c2
parent = 46a43578829163cd08b9ddcaaacc6febd1e71e0e parent = 742fd16080bce8cd664d6244304a771f82e8aa04
method = merge method = merge
cmdver = 0.4.1 cmdver = 0.4.1

View File

@ -62,7 +62,7 @@ namespace ams::sf::cmif {
} }
constexpr size_t GetImplOutDataTotalSize() const { constexpr size_t GetImplOutDataTotalSize() const {
return m_impl_metadata.GetOutDataSize() + m_impl_metadata.GetOutHeadersSize(); return m_impl_metadata.GetUnalignedOutDataSize() + m_impl_metadata.GetOutHeadersSize();
} }
public: public:
/* Used to enabled templated message processors. */ /* Used to enabled templated message processors. */
@ -80,12 +80,12 @@ namespace ams::sf::cmif {
const auto runtime_metadata = m_impl_processor->GetRuntimeMetadata(); const auto runtime_metadata = m_impl_processor->GetRuntimeMetadata();
return ServerMessageRuntimeMetadata { return ServerMessageRuntimeMetadata {
.in_data_size = static_cast<u16>(runtime_metadata.GetInDataSize() + runtime_metadata.GetInObjectCount() * sizeof(DomainObjectId)), .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)), .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)), .in_headers_size = static_cast<u8>(runtime_metadata.GetInHeadersSize() + sizeof(CmifDomainInHeader)),
.out_headers_size = static_cast<u8>(runtime_metadata.GetOutHeadersSize() + sizeof(CmifDomainOutHeader)), .out_headers_size = static_cast<u8>(runtime_metadata.GetOutHeadersSize() + sizeof(CmifDomainOutHeader)),
.in_object_count = 0, .in_object_count = 0,
.out_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. */ /* This is needed for non-templated domain message processing. */
struct ServerMessageRuntimeMetadata { struct ServerMessageRuntimeMetadata {
u16 in_data_size; u16 in_data_size;
u16 out_data_size; u16 unaligned_out_data_size;
u8 in_headers_size; u8 in_headers_size;
u8 out_headers_size; u8 out_headers_size;
u8 in_object_count; u8 in_object_count;
@ -39,7 +39,11 @@ namespace ams::sf::cmif {
} }
constexpr size_t GetOutDataSize() const { 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 { 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 size_t InDataSize = util::AlignUp(InDataOffsets[NumInDatas], alignof(u16));
static constexpr std::array<size_t, NumOutDatas+1> OutDataOffsets = RawDataOffsetCalculator<OutDatas>::Offsets; 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 OutDataSize = util::AlignUp(OutDataOffsets[NumOutDatas], alignof(u32));
static constexpr size_t OutDataAlign = [] { static constexpr size_t OutDataAlign = [] {
if constexpr (std::tuple_size<OutDatas>::value) { if constexpr (std::tuple_size<OutDatas>::value) {
@ -492,12 +493,12 @@ namespace ams::sf::impl {
/* Used by server message processor at runtime. */ /* Used by server message processor at runtime. */
static constexpr inline const cmif::ServerMessageRuntimeMetadata RuntimeMetadata = cmif::ServerMessageRuntimeMetadata{ static constexpr inline const cmif::ServerMessageRuntimeMetadata RuntimeMetadata = cmif::ServerMessageRuntimeMetadata{
.in_data_size = InDataSize, .in_data_size = InDataSize,
.out_data_size = OutDataSize, .unaligned_out_data_size = UnalignedOutDataSize,
.in_headers_size = sizeof(CmifInHeader), .in_headers_size = sizeof(CmifInHeader),
.out_headers_size = sizeof(CmifOutHeader), .out_headers_size = sizeof(CmifOutHeader),
.in_object_count = NumInObjects, .in_object_count = NumInObjects,
.out_object_count = NumOutObjects, .out_object_count = NumOutObjects,
}; };
/* Construction of argument serialization structs. */ /* Construction of argument serialization structs. */