[Mesa-dev] [PATCH 11/18] intel/tools/disasm: make sure that entire range is disassembled
kevin.rogovin at intel.com
kevin.rogovin at intel.com
Mon Nov 13 13:17:59 UTC 2017
From: Kevin Rogovin <kevin.rogovin at intel.com>
Without this patch, if a shader has errors, the disassembly of the
shader often stops after the first opcode that has errors.
Signed-off-by: Kevin Rogovin <kevin.rogovin at intel.com>
---
src/intel/tools/disasm.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/src/intel/tools/disasm.c b/src/intel/tools/disasm.c
index 6109727d56..aaad8a4dfa 100644
--- a/src/intel/tools/disasm.c
+++ b/src/intel/tools/disasm.c
@@ -74,7 +74,7 @@ gen_disasm_disassemble(struct gen_disasm *disasm, const void *assembly,
int start, FILE *out)
{
struct gen_device_info *devinfo = &disasm->devinfo;
- int end = gen_disasm_find_end(disasm, assembly, start);
+ int i, offset, end = gen_disasm_find_end(disasm, assembly, start);
/* Make a dummy annotation structure that brw_validate_instructions
* can work from.
@@ -92,15 +92,20 @@ gen_disasm_disassemble(struct gen_disasm *disasm, const void *assembly,
brw_validate_instructions(devinfo, assembly, start, end, &annotation_info);
struct annotation *annotation = annotation_info.ann;
- for (int i = 0; i < annotation_info.ann_count; i++) {
- int start_offset = annotation[i].offset;
+ for (i = 0, offset = start; i < annotation_info.ann_count; i++) {
int end_offset = annotation[i + 1].offset;
- brw_disassemble(devinfo, assembly, start_offset, end_offset, out);
+ brw_disassemble(devinfo, assembly, offset, end_offset, out);
if (annotation[i].error) {
fputs(annotation[i].error, out);
}
+
+ offset = end_offset;
+ }
+
+ if (offset < end) {
+ brw_disassemble(devinfo, assembly, offset, end, out);
}
ralloc_free(annotation_info.mem_ctx);
--
2.14.2
More information about the mesa-dev
mailing list