Skip to content

Commit

Permalink
Add initial support for analyzing AMDGPU binaries (#900)
Browse files Browse the repository at this point in the history
* remove unnecessary assertion for unknown phdr_type

* add initial stubs for amdgpu support

* add formatters for amdgpu

* add opcode table and register definition

* added support for register vector

* add untracked files

* commit stubs for xiaozhu to see

* initial cfg traversal done

* remove unused register-pair related files

* remove symbol patching since the 256 byte function header is no longer there

* Do not assert in getBaseRegister

* fix instruction length detection and decoding logic

* now decode will only decode operands for branch instructions

* added basic support for amdgpu in rose

* merged upstream

* fix a bug where we decode the vdst as ssrc

* improve the logic for computing len of instructions that might make use of literals, such that we no longer need to pass the buffer all over the place

* fix undefined behavior for std::transform

* Remove empty code blocks/Unreachable code/Unneeded
Comment out dead code
Restore sym_debug_parsing to default value 0

* Added meaningful name and comments to function prototype of getAMDGPURoseRegisters
Remove duplicate public modifiers in class declaration.

* remove unnecessary include of boost/format.hpp

* remove all amdgpu related stuff in dataflowAPI, and patched indirect analyzer so it skips for amdgpu

* renaming Arch_amdgpu to Arch_amdgpu_vega

* make changes to use namespace amdgpu_vega instead of amdgpu

* change the naming of c_NonReturnInsn to c_GPUKernelExitInsn as suggested

Co-authored-by: Xiaozhu Meng <mxz297@gmail.com>
  • Loading branch information
bbiiggppiigg and mxz297 committed Nov 24, 2020
1 parent 6266e1a commit 40f9295
Show file tree
Hide file tree
Showing 49 changed files with 8,351 additions and 2,056 deletions.
379 changes: 379 additions & 0 deletions common/h/amdgpu_op_table.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,379 @@
amdgpu_op_s_add_u32,
amdgpu_op_v_subrev_u16_e64,
amdgpu_op_v_ashrrev_i16,
amdgpu_op_v_subbrev_co_u32_e64,
amdgpu_op_v_subbrev_co_u32,
amdgpu_op_v_add_f16,
amdgpu_op_v_or_b32_e64,
amdgpu_op_s_max_i32,
amdgpu_op_s_fltbit_i32,
amdgpu_op_s_mulk_i32,
amdgpu_op_v_min_f32,
amdgpu_op_v_mac_f16,
amdgpu_op_v_ashrrev_i32,
amdgpu_op_v_max_f16,
amdgpu_op_s_bitset1_b32,
amdgpu_op_s_barrier,
amdgpu_op_v_cvt_i32_f32,
amdgpu_op_v_subrev_u16,
amdgpu_op_v_cndmask_b32,
amdgpu_op_v_cvt_f32_f16,
amdgpu_op_v_interp_mov_f32,
amdgpu_op_v_lshrrev_b16_e64,
amdgpu_op_s_xor_b32,
amdgpu_op_s_buffer_store_dwordx2,
amdgpu_op_s_nor_b64,
amdgpu_op_s_cmp_lt_u32,
amdgpu_op_v_ldexp_f16_e64,
amdgpu_op_v_max_f16_e64,
amdgpu_op_s_min_u32,
amdgpu_op_s_buffer_load_dwordx2,
amdgpu_op_v_mul_lo_u16_e64,
amdgpu_op_s_bfm_b64,
amdgpu_op_s_xnor_b32,
amdgpu_op_s_cmpk_eq_i32,
amdgpu_op_v_min_u32,
amdgpu_op_v_cmp_le_u64_e64,
amdgpu_op_s_cmp_ge_eq_u32,
amdgpu_op_v_min_i16,
amdgpu_op_v_add_co_u32_e64,
amdgpu_op_s_quadmask_b64,
amdgpu_op_v_readfirstlane_b32,
amdgpu_op_s_scratch_store_dwordx4,
amdgpu_op_s_ashr_i32,
amdgpu_op_s_movreld_b64,
amdgpu_op_s_cmpk_le_u32,
amdgpu_op_s_scratch_load_dwordx4,
amdgpu_op_v_lshlrev_b64,
amdgpu_op_s_waitcnt,
amdgpu_op_v_sub_u16,
amdgpu_op_v_madak_f32,
amdgpu_op_s_dcache_inv_vol,
amdgpu_op_v_mul_hi_i32_i24,
amdgpu_op_s_nop,
amdgpu_op_v_cvt_flr_i32_f32_e64,
amdgpu_op_s_addc_u32,
amdgpu_op_s_setreg_imm32_b32,
amdgpu_op_s_xnor_savexec_b64,
amdgpu_op_s_endpgm,
amdgpu_op_v_cvt_i32_f64_e64,
amdgpu_op_s_movrels_b64,
amdgpu_op_s_icache_inv,
amdgpu_op_v_cvt_f64_i32_e64,
amdgpu_op_flat_store_dword,
amdgpu_op_v_madak_f16,
amdgpu_op_s_set_gpr_idx_off,
amdgpu_op_s_ff1_i32_b32,
amdgpu_op_s_ff0_i32_b32,
amdgpu_op_s_lshl4_add_u32,
amdgpu_op_v_add_u32,
amdgpu_op_v_mul_i32_i24,
amdgpu_op_v_sub_u32_e64,
amdgpu_op_v_addc_co_u32,
amdgpu_op_v_cvt_f16_f32_e64,
amdgpu_op_v_cmp_class_f32_e64,
amdgpu_op_buffer_store_format_xy,
amdgpu_op_v_cmp_le_u64,
amdgpu_op_s_subb_u32,
amdgpu_op_buffer_store_format_x,
amdgpu_op_v_xor_b32_e64,
amdgpu_op_s_cbranch_scc0,
amdgpu_op_s_cbranch_vccnz,
amdgpu_op_s_xor_savexec_b64,
amdgpu_op_s_bitcmp0_b64,
amdgpu_op_s_bfe_u32,
amdgpu_op_s_cbranch_cdbguser,
amdgpu_op_s_quadmask_b32,
amdgpu_op_s_bcnt1_i32_b32,
amdgpu_op_s_rfe_restore_b64,
amdgpu_op_s_wakeup,
amdgpu_op_v_max_i32,
amdgpu_op_tbuffer_load_format_xy,
amdgpu_op_s_and_b64,
amdgpu_op_s_cmpk_gt_u32,
amdgpu_op_s_bfe_u64,
amdgpu_op_v_interp_p1_f32,
amdgpu_op_v_mul_hi_u32_u24,
amdgpu_op_v_madak_f16_e64,
amdgpu_op_s_cmp_ge_eq_i32,
amdgpu_op_s_cmpk_le_i32,
amdgpu_op_ds_add_u32,
amdgpu_op_s_setkill,
amdgpu_op_s_setprio,
amdgpu_op_s_addk_i32,
amdgpu_op_v_add_b32,
amdgpu_op_v_max_f32,
amdgpu_op_s_cbranch_cdbgsys,
amdgpu_op_s_cbranch_cdbgsys_and_user,
amdgpu_op_s_dcache_memrealtime,
amdgpu_op_v_mul_u32_u24,
amdgpu_op_s_set_gpr_idx_on,
amdgpu_op_s_cmov_b32,
amdgpu_op_s_load_dwordx8,
amdgpu_op_s_cmp_ge_i32,
amdgpu_op_v_cvt_f16_f32,
amdgpu_op_v_max_u32,
amdgpu_op_v_lshrrev_b32,
amdgpu_op_s_invalid_2,
amdgpu_op_s_min_i32,
amdgpu_op_v_max_i16_e64,
amdgpu_op_s_orn1_saveexec_b64,
amdgpu_op_v_cvt_flr_i32_f32,
amdgpu_op_v_sub_f16,
amdgpu_op_v_cvt_u32_f32_e64,
amdgpu_op_s_sub_u32,
amdgpu_op_s_absdiff_i32,
amdgpu_op_s_orn2_savexec_b64,
amdgpu_op_s_bcnt0_i32_b64,
amdgpu_op_v_ashrrev_i32_e64,
amdgpu_op_s_sext_i32_i8,
amdgpu_op_s_sendmsghalt,
amdgpu_op_s_lshsl2_add_u32,
amdgpu_op_v_subrev_u32,
amdgpu_op_v_sub_f16_e64,
amdgpu_op_v_subrev_co_u32,
amdgpu_op_s_bitset0_b32,
amdgpu_op_s_cmpk_lg_i32,
amdgpu_op_s_lshl1_add_u32,
amdgpu_op_s_bcnt1_i32_b64,
amdgpu_op_s_nand_b64,
amdgpu_op_v_lshlrev_b32,
amdgpu_op_v_min_f16,
amdgpu_op_v_interp_p2_f32,
amdgpu_op_v_subrev_f32_e64,
amdgpu_op_s_movreld_b32,
amdgpu_op_s_lshl_b64,
amdgpu_op_v_sub_u32,
amdgpu_op_s_sleep,
amdgpu_op_s_scratch_store_dwordx2,
amdgpu_op_s_set_gpr_idx_idx,
amdgpu_op_s_wqm_b64,
amdgpu_op_s_cmp_ge_u32,
amdgpu_op_s_pack_ll_b32_b16,
amdgpu_op_v_mul_f32_e64,
amdgpu_op_s_scratch_load_dwordx2,
amdgpu_op_v_mad_legacy_f32,
amdgpu_op_v_cvt_off_f32_i4,
amdgpu_op_s_andn2_b32,
amdgpu_op_v_mov_b32_e64,
amdgpu_op_s_set_gpr_idx_mode,
amdgpu_op_s_bfe_i64,
amdgpu_op_s_load_dwordx16,
amdgpu_op_v_cvt_f32_i32,
amdgpu_op_s_mov_b32,
amdgpu_op_s_lshr_b64,
amdgpu_op_buffer_load_format_xyzw,
amdgpu_op_s_not_b32,
amdgpu_op_s_cmov_b64,
amdgpu_op_s_or_savexec_b64,
amdgpu_op_v_xor_b32,
amdgpu_op_v_mul_lo_u16,
amdgpu_op_s_cmpk_gt_i32,
amdgpu_op_s_nand_b32,
amdgpu_op_v_madmk_f16_e64,
amdgpu_op_v_lshlrev_b32_e64,
amdgpu_op_v_pk_mad_i16,
amdgpu_op_s_endpgm_ordered_ps_done,
amdgpu_op_s_and_b32,
amdgpu_op_v_sub_f32_e64,
amdgpu_op_s_invalid_1,
amdgpu_op_s_load_dwordx2,
amdgpu_op_v_subrev_f16,
amdgpu_op_s_not_b64,
amdgpu_op_v_cvt_i32_f32_e64,
amdgpu_op_v_mul_f32,
amdgpu_op_v_min_u16,
amdgpu_op_v_madmk_f32,
amdgpu_op_tbuffer_store_format_xyz,
amdgpu_op_s_brev_b32,
amdgpu_op_v_subrev_co_u32_e64,
amdgpu_op_s_bitcmp0_b32,
amdgpu_op_v_cmp_class_f32,
amdgpu_op_s_scratch_store_dword,
amdgpu_op_v_mul_u32_u24_e64,
amdgpu_op_s_decperflevel,
amdgpu_op_s_or_b64,
amdgpu_op_tbuffer_load_format_x,
amdgpu_op_v_mac_b32_e64,
amdgpu_op_s_nand_savexec_b64,
amdgpu_op_v_sub_co_u32_e64,
amdgpu_op_s_setreg_b32,
amdgpu_op_s_mul_i32,
amdgpu_op_v_cvt_rpi_i32_f32,
amdgpu_op_v_mul_i32_i24_e64,
amdgpu_op_s_cbranch_scc1,
amdgpu_op_v_nop,
amdgpu_op_s_setpc_b64,
amdgpu_op_v_cvt_rpi_i32_f32_e64,
amdgpu_op_s_branch,
amdgpu_op_v_mul_hi_i32_i24_e64,
amdgpu_op_v_subrev_u32_e64,
amdgpu_op_v_min_u32_e64,
amdgpu_op_v_add_f32,
amdgpu_op_s_buffer_store_dwordx4,
amdgpu_op_s_lshr_b32,
amdgpu_op_s_buffer_load_dwordx16,
amdgpu_op_s_pack_lh_b32_b16,
amdgpu_op_v_cmp_gt_u64_e64,
amdgpu_op_v_max_i32_e64,
amdgpu_op_s_cbranch_vccz,
amdgpu_op_s_buffer_load_dwordx4,
amdgpu_op_v_max_f32_e64,
amdgpu_op_v_sub_f32,
amdgpu_op_buffer_load_format_xyz,
amdgpu_op_v_cvt_f32_i32_e64,
amdgpu_op_v_min_u16_e64,
amdgpu_op_s_cmp_gt_u32,
amdgpu_op_v_mov_b32,
amdgpu_op_s_cmp_lg_u64,
amdgpu_op_s_bitset1_b64,
amdgpu_op_s_buffer_store_dword,
amdgpu_op_s_wqm_b32,
amdgpu_op_s_lshl3_add_u32,
amdgpu_op_v_max_i16,
amdgpu_op_s_cmpk_ge_i32,
amdgpu_op_s_orn2_b64,
amdgpu_op_s_bitcmp1_b32,
amdgpu_op_s_buffer_load_dword,
amdgpu_op_s_bitcmp1_b64,
amdgpu_op_v_nop_e64,
amdgpu_op_s_bitreplicate_b64_b32,
amdgpu_op_tbuffer_load_format_xyz,
amdgpu_op_s_getreg_b32,
amdgpu_op_s_andn2_savexec_b64,
amdgpu_op_v_subrev_f16_e64,
amdgpu_op_s_cbranch_execz,
amdgpu_op_s_load_dwordx4,
amdgpu_op_s_andn1_saveexec_b64,
amdgpu_op_s_ashr_i64,
amdgpu_op_buffer_load_format_xy,
amdgpu_op_flat_load_dword,
amdgpu_op_s_brev_b64,
amdgpu_op_s_scratch_load_dword,
amdgpu_op_s_lshl_b32,
amdgpu_op_v_madmk_f16,
amdgpu_op_tbuffer_store_format_xyzw,
amdgpu_op_v_min_i32_e64,
amdgpu_op_s_cslect_b32,
amdgpu_op_v_lshrrev_b32_e64,
amdgpu_op_v_cvt_u32_f32,
amdgpu_op_v_readfirstlane_b32_e64,
amdgpu_op_v_min_f32_e64,
amdgpu_op_buffer_load_format_x,
amdgpu_op_v_mul_hi_u32_u24_e64,
amdgpu_op_s_sendmsg,
amdgpu_op_v_add_u16_e64,
amdgpu_op_s_endpgm_saved,
amdgpu_op_v_min_i16_e64,
amdgpu_op_s_flbit_i32_b64,
amdgpu_op_s_mul_hi_u32,
amdgpu_op_v_max_u32_e64,
amdgpu_op_v_add_u32_e64,
amdgpu_op_s_bfm_b32,
amdgpu_op_s_xnor_b64,
amdgpu_op_v_sub_u16_e64,
amdgpu_op_s_sext_i32_i16,
amdgpu_op_v_cvt_i32_f64,
amdgpu_op_s_setvkip,
amdgpu_op_s_dcache_wb,
amdgpu_op_v_min_f16_e64,
amdgpu_op_s_nor_b32,
amdgpu_op_s_getpc_b64,
amdgpu_op_v_cvt_off_f32_i4_e64,
amdgpu_op_s_sub_i32,
amdgpu_op_s_dcache_wb_vol,
amdgpu_op_s_xor_b64,
amdgpu_op_v_cvt_f32_u32_e64,
amdgpu_op_s_nor_savexec_b64,
amdgpu_op_v_add_u16,
amdgpu_op_s_mul_hi_i32,
amdgpu_op_v_mul_legacy_f32_e64,
amdgpu_op_v_or_b32,
amdgpu_op_s_cslect_b64,
amdgpu_op_v_mul_f16,
amdgpu_op_s_load_dword,
amdgpu_op_v_cvt_f32_f16_e64,
amdgpu_op_s_rfe_b64,
amdgpu_op_s_cmp_lt_i32,
amdgpu_op_s_cmp_le_i32,
amdgpu_op_s_cmp_eq_u64,
amdgpu_op_s_dcache_memtime,
amdgpu_op_v_lshlrev_b16_e64,
amdgpu_op_s_ff0_i32_b64,
amdgpu_op_s_cmp_lg_i32,
amdgpu_op_s_trap,
amdgpu_op_v_mad_f32,
amdgpu_op_s_store_dwordx2,
amdgpu_op_s_cmpk_ge_u32,
amdgpu_op_v_add_b32_e64,
amdgpu_op_v_sub_co_u32,
amdgpu_op_s_fltbit_i32_i64,
amdgpu_op_v_max_u16,
amdgpu_op_v_add_f16_e64,
amdgpu_op_s_flbit_i32_b32,
amdgpu_op_s_buffer_load_dwordx8,
amdgpu_op_s_cbranch_i_fork,
amdgpu_op_s_sethalt,
amdgpu_op_tbuffer_store_format_xy,
amdgpu_op_v_subrev_f32,
amdgpu_op_s_bcnt0_i32_b32,
amdgpu_op_s_pack_hh_b32_B16,
amdgpu_op_v_madmk_f32_e64,
amdgpu_op_s_ttracedata,
amdgpu_op_v_pack_b32_f16,
amdgpu_op_s_bitset0_b64,
amdgpu_op_s_store_dword,
amdgpu_op_s_abs_i32,
amdgpu_op_s_and_saveexec_b64,
amdgpu_op_buffer_store_format_xyz,
amdgpu_op_s_cmovk_i32,
amdgpu_op_v_mac_f16_e64,
amdgpu_op_s_cmp_le_u32,
amdgpu_op_v_add_co_u32,
amdgpu_op_s_incperflevel,
amdgpu_op_s_max_u32,
amdgpu_op_s_cbranch_g_fork,
amdgpu_op_s_cmpk_lt_i32,
amdgpu_op_v_subb_co_u32,
amdgpu_op_v_addc_co_u32_e64,
amdgpu_op_v_madak_f32_e64,
amdgpu_op_s_call_b64,
amdgpu_op_v_ldexp_f16,
amdgpu_op_v_lshlrev_b16,
amdgpu_op_v_mul_legacy_f32,
amdgpu_op_s_swappc_b64,
amdgpu_op_s_orn2_b32,
amdgpu_op_s_store_dwordx4,
amdgpu_op_s_mov_b64,
amdgpu_op_s_cmp_lg_u32,
amdgpu_op_v_lshrrev_b16,
amdgpu_op_s_movk_i32,
amdgpu_op_s_andn2_b64,
amdgpu_op_s_andn2_wrexec_b64,
amdgpu_op_v_cvt_f32_u32,
amdgpu_op_tbuffer_load_format_xyzw,
amdgpu_op_v_mac_b32,
amdgpu_op_s_cbranch_join,
amdgpu_op_tbuffer_store_format_x,
amdgpu_op_buffer_store_format_xyzw,
amdgpu_op_v_max_u16_e64,
amdgpu_op_s_dcache_inv,
amdgpu_op_s_cmpk_lg_u32,
amdgpu_op_v_min_i32,
amdgpu_op_v_cvt_f64_i32,
amdgpu_op_v_cndmask_b32_e64,
amdgpu_op_s_movrels_b32,
amdgpu_op_s_cmp_gt_i32,
amdgpu_op_s_add_i32,
amdgpu_op_s_andn1_wrexec_b64,
amdgpu_op_s_cmpk_lt_u32,
amdgpu_op_s_cmpk_eq_u32,
amdgpu_op_v_cmp_gt_u64,
amdgpu_op_s_ff1_i32_b64,
amdgpu_op_v_subb_co_u32_e64,
amdgpu_op_v_ashrrev_i16_e64,
amdgpu_op_v_add_f32_e64,
amdgpu_op_s_or_b32,
amdgpu_op_s_cbranch_execnz,
amdgpu_op_s_bfe_i32,
amdgpu_op_v_mul_f16_e64,

0 comments on commit 40f9295

Please sign in to comment.