From 97fb80aee5829f40905cf9cf137fa497b9885bbe Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 20:05:45 +0000 Subject: [PATCH 1/4] Initial plan From 3c646f2e2746aa5c194ce077662548a8f694dc53 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 20:10:54 +0000 Subject: [PATCH 2/4] Fix arm32 dump/disasm to handle null jdsc for async resume info Co-authored-by: jakobbotsch <7887810+jakobbotsch@users.noreply.github.com> --- src/coreclr/jit/emitarm.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/coreclr/jit/emitarm.cpp b/src/coreclr/jit/emitarm.cpp index e40e11d3b41b6b..a9c5e4c678e42d 100644 --- a/src/coreclr/jit/emitarm.cpp +++ b/src/coreclr/jit/emitarm.cpp @@ -7305,8 +7305,6 @@ void emitter::emitDispInsHelp( offs += size; } - assert(jdsc != NULL); - if (id->idIsDspReloc()) { printf("reloc "); @@ -7314,8 +7312,8 @@ void emitter::emitDispInsHelp( printf("%s ADDRESS J_M%03u_DS%02u", (id->idIns() == INS_movw) ? "LOW" : "HIGH", emitComp->compMethodID, imm); - // After the MOVT, dump the table - if (id->idIns() == INS_movt) + // After the MOVT, dump the table if jdsc is not null (i.e., this is a block address table) + if (jdsc != NULL && id->idIns() == INS_movt) { unsigned cnt = jdsc->dsSize / TARGET_POINTER_SIZE; BasicBlock** bbp = (BasicBlock**)jdsc->dsCont; From 387431229ae360b3800587ed1d5e8eb1ec5e5384 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 20:12:11 +0000 Subject: [PATCH 3/4] Improve comment to clarify when jdsc is null Co-authored-by: jakobbotsch <7887810+jakobbotsch@users.noreply.github.com> --- src/coreclr/jit/emitarm.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/coreclr/jit/emitarm.cpp b/src/coreclr/jit/emitarm.cpp index a9c5e4c678e42d..78b5ec0d80dc67 100644 --- a/src/coreclr/jit/emitarm.cpp +++ b/src/coreclr/jit/emitarm.cpp @@ -7312,7 +7312,8 @@ void emitter::emitDispInsHelp( printf("%s ADDRESS J_M%03u_DS%02u", (id->idIns() == INS_movw) ? "LOW" : "HIGH", emitComp->compMethodID, imm); - // After the MOVT, dump the table if jdsc is not null (i.e., this is a block address table) + // After the MOVT, dump the table if jdsc is not null. jdsc is null for async resume info + // and non-null for block address tables. if (jdsc != NULL && id->idIns() == INS_movt) { unsigned cnt = jdsc->dsSize / TARGET_POINTER_SIZE; From b307df752ca27534f7dbeb0ffaa61a362d225e70 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 20:19:46 +0000 Subject: [PATCH 4/4] Use nullptr instead of NULL and print RWD format for non-block-address-table data Co-authored-by: jakobbotsch <7887810+jakobbotsch@users.noreply.github.com> --- src/coreclr/jit/emitarm.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/coreclr/jit/emitarm.cpp b/src/coreclr/jit/emitarm.cpp index 78b5ec0d80dc67..92a3093b7c2b27 100644 --- a/src/coreclr/jit/emitarm.cpp +++ b/src/coreclr/jit/emitarm.cpp @@ -7285,7 +7285,7 @@ void emitter::emitDispInsHelp( emitDispReg(id->idReg1(), attr, true); imm = emitGetInsSC(id); { - dataSection* jdsc = 0; + dataSection* jdsc = nullptr; NATIVE_OFFSET offs = 0; /* Find the appropriate entry in the data section list */ @@ -7309,17 +7309,25 @@ void emitter::emitDispInsHelp( { printf("reloc "); } - printf("%s ADDRESS J_M%03u_DS%02u", (id->idIns() == INS_movw) ? "LOW" : "HIGH", emitComp->compMethodID, - imm); + + if (jdsc != nullptr) + { + printf("%s ADDRESS J_M%03u_DS%02u", (id->idIns() == INS_movw) ? "LOW" : "HIGH", + emitComp->compMethodID, imm); + } + else + { + printf("%s ADDRESS RWD%02zu", (id->idIns() == INS_movw) ? "LOW" : "HIGH", (size_t)imm); + } // After the MOVT, dump the table if jdsc is not null. jdsc is null for async resume info // and non-null for block address tables. - if (jdsc != NULL && id->idIns() == INS_movt) + if (jdsc != nullptr && id->idIns() == INS_movt) { unsigned cnt = jdsc->dsSize / TARGET_POINTER_SIZE; BasicBlock** bbp = (BasicBlock**)jdsc->dsCont; - bool isBound = (emitCodeGetCookie(*bbp) != NULL); + bool isBound = (emitCodeGetCookie(*bbp) != nullptr); if (isBound) {