@@ -3192,17 +3192,26 @@ class CompartmentReportWriter {
31923192 static constexpr uint32_t ImportPermitsLoadStoreCapabilities =
31933193 (1UL << 29 );
31943194 static constexpr uint32_t ImportPermitsLoadMutable = (1UL << 28 );
3195+ static constexpr uint32_t ImportPermitsLoadGlobal = (1UL << 27 );
31953196
31963197 imports.push_back (json::Object{
31973198 {" kind" , " MMIO" },
31983199 {" start" , entry.start },
3199- {" length" , entry.length & 0xfffffff },
3200+ /*
3201+ * Length and permissions are bit-stuffed into the same 32-bit
3202+ * word, with the top 8 bits reserved for permission flags and
3203+ * the bottom 24 for length. See CHERIoT-RTOS's
3204+ * sdk/core/loader/types.h ReservedPermissionsMask
3205+ */
3206+ {" length" , entry.length & 0x00ffffff },
32003207 {" permits_load" , (entry.length & ImportPermitsLoad) != 0 },
32013208 {" permits_store" , (entry.length & ImportPermitsStore) != 0 },
32023209 {" permits_load_store_capabilities" ,
32033210 (entry.length & ImportPermitsLoadStoreCapabilities) != 0 },
32043211 {" permits_load_mutable" ,
3205- (entry.length & ImportPermitsLoadMutable) != 0 }});
3212+ (entry.length & ImportPermitsLoadMutable) != 0 },
3213+ {" permits_load_global" ,
3214+ (entry.length & ImportPermitsLoadGlobal) != 0 }});
32063215 }
32073216 continue ;
32083217 }
0 commit comments