| 201 | alignas(ams::os::MemoryPageSize) constinit u8 g_LibnxHeap[LibnxHeapSize]; |
| 202 | |
| 203 | void DebugLogApplicationParameters() { |
| 204 | ul::ScopedLock lock(g_CurrentRecordsLock); |
| 205 | |
| 206 | std::vector<u64> app_ids; |
| 207 | for(auto &rec: g_CurrentRecords) { |
| 208 | app_ids.push_back(rec.id); |
| 209 | } |
| 210 | |
| 211 | auto app_views = new NsApplicationView[app_ids.size()]; |
| 212 | UL_ON_SCOPE_EXIT({ delete[] app_views; }); |
| 213 | UL_RC_ASSERT(nsGetApplicationView(app_views, app_ids.data(), app_ids.size())); |
| 214 | |
| 215 | for(u32 i = 0; i < app_ids.size(); i++) { |
| 216 | auto &view = app_views[i]; |
| 217 | auto &rec = g_CurrentRecords[i]; |
| 218 | |
| 219 | // Test: qlaunch checks these flags on apps |
| 220 | uintptr_t a1 = (uintptr_t)std::addressof(view); |
| 221 | u8 flags1[12] = {}; |
| 222 | flags1[0] = *(u32*)(a1 + 12) & 1; |
| 223 | flags1[1] = (*(u8 *)(a1 + 12) >> 1) & 1; |
| 224 | flags1[2] = (*(u8 *)(a1 + 12) >> 4) & 1; |
| 225 | flags1[3] = (*(u8 *)(a1 + 12) >> 5) & 1; |
| 226 | flags1[4] = (*(u8 *)(a1 + 12) >> 6) & 1; |
| 227 | flags1[5] = *(u8 *)(a1 + 12) >> 7; |
| 228 | flags1[6] = *(u8 *)(a1 + 13) & 1; |
| 229 | flags1[7] = (*(u8 *)(a1 + 13) >> 1) & 1; |
| 230 | flags1[8] = (*(u8 *)(a1 + 13) >> 2) & 1; |
| 231 | flags1[9] = (*(u8 *)(a1 + 13) >> 5) & 1; |
| 232 | flags1[10] = (*(u32 *)(a1 + 12) & 0x4C000) != 0; |
| 233 | flags1[11] = *(u8 *)(a1 + 13) >> 7; |
| 234 | u8 flags2[6] = {}; |
| 235 | flags2[0] = *(u8 *)(a1 + 14) >> 7; |
| 236 | flags2[1] = *(u8 *)(a1 + 14) & 1; |
| 237 | flags2[2] = (*(u8 *)(a1 + 14) >> 1) & 1; |
| 238 | flags2[3] = ((*(u32 *)(a1 + 12) & 0x4C000) != 0) && (*(u8 *)(a1 + 36) == 5); // is waiting commit + other fn |
| 239 | flags2[4] = (*(u8 *)(a1 + 14) >> 5) & 1; |
| 240 | flags2[5] = (*(u8 *)(a1 + 14) >> 6) & 1; |
| 241 | u8 flags3[5] = {}; |
| 242 | flags3[0] = (u8)(*(NsApplicationView*)a1).unk_x24; |
| 243 | flags3[1] = (u8)((*(NsApplicationView*)a1).unk_x24 >> 8); |
| 244 | flags3[2] = (*(NsApplicationView*)a1).unk_x26[0]; |
| 245 | flags3[3] = (*(NsApplicationView*)a1).unk_x45[0]; |
| 246 | flags3[4] = (*(NsApplicationView*)a1).unk_x44; |
| 247 | |
| 248 | std::string flagbits; |
| 249 | for(u32 i = 0; i < 12; i++) { |
| 250 | if(flags1[i] != 0) { |
| 251 | flagbits += "1"; |
| 252 | } |
| 253 | else { |
| 254 | flagbits += "0"; |
| 255 | } |
| 256 | } |
| 257 | |
| 258 | flagbits += "-"; |
| 259 | for(u32 i = 0; i < 6; i++) { |
| 260 | if(flags2[i] != 0) { |
no test coverage detected