[AMDGPU] Improve disassembler error handling
Summary:
llvm-objdump now disassembles unrecognised opcodes as data, using
the .long directive. We treat unrecognised opcodes as being 32 bit
values, so move along 4 bytes rather than the single byte which
previously resulted in a cascade of bogus disassembly following an
unrecognised opcode.
While no solution can always disassemble code that contains
embedded data correctly this provides a significant improvement.
The disassembler will now cope with an arbitrary length section
as it no longer truncates it to a multiple of 4 bytes, and will
use the .byte directive for trailing bytes.
Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, llvm-commits
Differential Revision: https://reviews.llvm.org/D44685
llvm-svn: 328553
2018-03-27 01:06:33 +08:00
|
|
|
// We check that unrecognized opcodes are disassembled by llvm-objdump as data using the .long directive
|
|
|
|
// and any trailing bytes are disassembled using the .byte directive
|
|
|
|
// RUN: llvm-mc -filetype=obj -triple=amdgcn--amdpal -mcpu=gfx900 -show-encoding %s | llvm-objdump -disassemble -mcpu=gfx900 - | FileCheck %s
|
|
|
|
|
|
|
|
.text
|
|
|
|
v_mov_b32 v7, s24
|
2018-04-07 02:24:49 +08:00
|
|
|
v_mov_b32 v8, s25
|
|
|
|
.long 0xabadc0de
|
|
|
|
s_nop 0
|
|
|
|
s_endpgm
|
|
|
|
.long 0xabadc0d1, 0xabadc0d2, 0xabadc0d3, 0xabadc0d4
|
|
|
|
.byte 0x0a, 0x0b
|
|
|
|
.byte 0x0c
|
[AMDGPU] Improve disassembler error handling
Summary:
llvm-objdump now disassembles unrecognised opcodes as data, using
the .long directive. We treat unrecognised opcodes as being 32 bit
values, so move along 4 bytes rather than the single byte which
previously resulted in a cascade of bogus disassembly following an
unrecognised opcode.
While no solution can always disassemble code that contains
embedded data correctly this provides a significant improvement.
The disassembler will now cope with an arbitrary length section
as it no longer truncates it to a multiple of 4 bytes, and will
use the .byte directive for trailing bytes.
Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, llvm-commits
Differential Revision: https://reviews.llvm.org/D44685
llvm-svn: 328553
2018-03-27 01:06:33 +08:00
|
|
|
|
|
|
|
// CHECK: .text
|
|
|
|
// CHECK: v_mov_b32
|
|
|
|
// CHECK: v_mov_b32
|
|
|
|
// CHECK: .long 0xabadc0de
|
|
|
|
// CHECK_SAME: : ABADC0DE
|
|
|
|
// CHECK: s_endpgm
|
2018-04-07 02:24:49 +08:00
|
|
|
// CHECK: .long 0xabadc0d1
|
|
|
|
// CHECK: .long 0xabadc0d2
|
|
|
|
// CHECK: .long 0xabadc0d3
|
|
|
|
// CHECK: .long 0xabadc0d4
|
[AMDGPU] Improve disassembler error handling
Summary:
llvm-objdump now disassembles unrecognised opcodes as data, using
the .long directive. We treat unrecognised opcodes as being 32 bit
values, so move along 4 bytes rather than the single byte which
previously resulted in a cascade of bogus disassembly following an
unrecognised opcode.
While no solution can always disassemble code that contains
embedded data correctly this provides a significant improvement.
The disassembler will now cope with an arbitrary length section
as it no longer truncates it to a multiple of 4 bytes, and will
use the .byte directive for trailing bytes.
Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, llvm-commits
Differential Revision: https://reviews.llvm.org/D44685
llvm-svn: 328553
2018-03-27 01:06:33 +08:00
|
|
|
// CHECK: .byte 0x0a, 0x0b, 0x0c
|
|
|
|
// CHECK-SAME: : 0A 0B 0C
|
|
|
|
// CHECK-NOT: .long
|