disas: cris: QOMify target specific disas setup
Move the target_disas() cris specifics to the QOM disas_set_info() hook and delete the cris specific code in disas.c. This also now adds support for monitor_disas() to cris. E.g. (qemu) xp 0x40004000 0000000040004000: 0x1e6f25f0 And before this patch: (qemu) xp/i 0x40004000 0x40004000: Asm output not supported on this arch After: (qemu) xp/i 0x40004000 0x40004000: di (qemu) xp/i 0x40004002 0x40004002: move.d 0xb003c004,$r1 Note: second example is 6-byte misaligned instruction! Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
		
							parent
							
								
									51d373cf5f
								
							
						
					
					
						commit
						6b625fde5e
					
				
							
								
								
									
										8
									
								
								disas.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								disas.c
									
									
									
									
									
								
							| @ -257,14 +257,6 @@ void target_disas(FILE *out, CPUState *cpu, target_ulong code, | ||||
| #elif defined(TARGET_ALPHA) | ||||
|     s.info.mach = bfd_mach_alpha_ev6; | ||||
|     s.info.print_insn = print_insn_alpha; | ||||
| #elif defined(TARGET_CRIS) | ||||
|     if (flags != 32) { | ||||
|         s.info.mach = bfd_mach_cris_v0_v10; | ||||
|         s.info.print_insn = print_insn_crisv10; | ||||
|     } else { | ||||
|         s.info.mach = bfd_mach_cris_v32; | ||||
|         s.info.print_insn = print_insn_crisv32; | ||||
|     } | ||||
| #elif defined(TARGET_S390X) | ||||
|     s.info.mach = bfd_mach_s390_64; | ||||
|     s.info.print_insn = print_insn_s390; | ||||
|  | ||||
| @ -161,6 +161,20 @@ static void cris_cpu_set_irq(void *opaque, int irq, int level) | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| static void cris_disas_set_info(CPUState *cpu, disassemble_info *info) | ||||
| { | ||||
|     CRISCPU *cc = CRIS_CPU(cpu); | ||||
|     CPUCRISState *env = &cc->env; | ||||
| 
 | ||||
|     if (env->pregs[PR_VR] != 32) { | ||||
|         info->mach = bfd_mach_cris_v0_v10; | ||||
|         info->print_insn = print_insn_crisv10; | ||||
|     } else { | ||||
|         info->mach = bfd_mach_cris_v32; | ||||
|         info->print_insn = print_insn_crisv32; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static void cris_cpu_initfn(Object *obj) | ||||
| { | ||||
|     CPUState *cs = CPU(obj); | ||||
| @ -292,6 +306,8 @@ static void cris_cpu_class_init(ObjectClass *oc, void *data) | ||||
| 
 | ||||
|     cc->gdb_num_core_regs = 49; | ||||
|     cc->gdb_stop_before_watchpoint = true; | ||||
| 
 | ||||
|     cc->disas_set_info = cris_disas_set_info; | ||||
| } | ||||
| 
 | ||||
| static const TypeInfo cris_cpu_type_info = { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Crosthwaite
						Peter Crosthwaite