summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/ldr/ldr.cpp39
1 files changed, 13 insertions, 26 deletions
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp
index 6daea3408..ca53a9923 100644
--- a/src/core/hle/service/ldr/ldr.cpp
+++ b/src/core/hle/service/ldr/ldr.cpp
@@ -615,36 +615,23 @@ private:
615 } 615 }
616 616
617 static bool IsValidNRO(const NROHeader& header, u64 nro_size, u64 bss_size) { 617 static bool IsValidNRO(const NROHeader& header, u64 nro_size, u64 bss_size) {
618 return header.magic == Common::MakeMagic('N', 'R', 'O', '0') &&
619 header.nro_size == nro_size && header.bss_size == bss_size &&
618 620
619 const bool valid_magic = header.magic == Common::MakeMagic('N', 'R', 'O', '0'); 621 header.segment_headers[RO_INDEX].memory_offset ==
622 header.segment_headers[TEXT_INDEX].memory_offset +
623 header.segment_headers[TEXT_INDEX].memory_size &&
620 624
621 const bool valid_nro_size = header.nro_size == nro_size; 625 header.segment_headers[DATA_INDEX].memory_offset ==
626 header.segment_headers[RO_INDEX].memory_offset +
627 header.segment_headers[RO_INDEX].memory_size &&
622 628
623 const bool valid_bss_size = header.bss_size == bss_size; 629 nro_size == header.segment_headers[DATA_INDEX].memory_offset +
630 header.segment_headers[DATA_INDEX].memory_size &&
624 631
625 const bool valid_ro_offset = header.segment_headers[RO_INDEX].memory_offset == 632 Common::Is4KBAligned(header.segment_headers[TEXT_INDEX].memory_size) &&
626 header.segment_headers[TEXT_INDEX].memory_offset + 633 Common::Is4KBAligned(header.segment_headers[RO_INDEX].memory_size) &&
627 header.segment_headers[TEXT_INDEX].memory_size; 634 Common::Is4KBAligned(header.segment_headers[DATA_INDEX].memory_size);
628
629 const bool valid_data_offset = header.segment_headers[DATA_INDEX].memory_offset ==
630 header.segment_headers[RO_INDEX].memory_offset +
631 header.segment_headers[RO_INDEX].memory_size;
632
633 const bool valid_nro_calculated_size =
634 nro_size == header.segment_headers[DATA_INDEX].memory_offset +
635 header.segment_headers[DATA_INDEX].memory_size;
636
637 const bool text_aligned =
638 Common::Is4KBAligned(header.segment_headers[TEXT_INDEX].memory_size);
639
640 const bool ro_aligned = Common::Is4KBAligned(header.segment_headers[RO_INDEX].memory_size);
641
642 const bool data_aligned =
643 Common::Is4KBAligned(header.segment_headers[DATA_INDEX].memory_size);
644
645 return valid_magic && valid_nro_size && valid_bss_size && valid_ro_offset &&
646 valid_data_offset && valid_nro_calculated_size && text_aligned && ro_aligned &&
647 data_aligned;
648 } 635 }
649 Core::System& system; 636 Core::System& system;
650}; 637};