Revision f1ccf904 gdbstub.c

b/gdbstub.c
728 728
  for (i = 0; i < 8; i++) LOAD(env->gregs[i]);
729 729
  for (i = 0; i < 8; i++) LOAD(env->gregs[i + 16]);
730 730
}
731
#elif defined (TARGET_CRIS)
732

  
733
static int cris_save_32 (unsigned char *d, uint32_t value)
734
{
735
	*d++ = (value);
736
	*d++ = (value >>= 8);
737
	*d++ = (value >>= 8);
738
	*d++ = (value >>= 8);
739
	return 4;
740
}
741
static int cris_save_16 (unsigned char *d, uint32_t value)
742
{
743
	*d++ = (value);
744
	*d++ = (value >>= 8);
745
	return 2;
746
}
747
static int cris_save_8 (unsigned char *d, uint32_t value)
748
{
749
	*d++ = (value);
750
	return 1;
751
}
752

  
753
/* FIXME: this will bug on archs not supporting unaligned word accesses.  */
754
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
755
{
756
  uint8_t *ptr = mem_buf;
757
  uint8_t srs;
758
  int i;
759

  
760
  for (i = 0; i < 16; i++)
761
	  ptr += cris_save_32 (ptr, env->regs[i]);
762

  
763
  srs = env->pregs[SR_SRS];
764

  
765
  ptr += cris_save_8 (ptr, env->pregs[0]);
766
  ptr += cris_save_8 (ptr, env->pregs[1]);
767
  ptr += cris_save_32 (ptr, env->pregs[2]);
768
  ptr += cris_save_8 (ptr, srs);
769
  ptr += cris_save_16 (ptr, env->pregs[4]);
770

  
771
  for (i = 5; i < 16; i++)
772
	  ptr += cris_save_32 (ptr, env->pregs[i]);
773

  
774
  ptr += cris_save_32 (ptr, env->pc);
775

  
776
  for (i = 0; i < 16; i++)
777
	  ptr += cris_save_32 (ptr, env->sregs[srs][i]);
778

  
779
  return ((uint8_t *)ptr - mem_buf);
780
}
781

  
782
static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
783
{
784
  uint32_t *ptr = (uint32_t *)mem_buf;
785
  int i;
786

  
787
#define LOAD(x) (x)=*ptr++;
788
  for (i = 0; i < 16; i++) LOAD(env->regs[i]);
789
  LOAD (env->pc);
790
}
731 791
#else
732 792
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
733 793
{
......
745 805
    const char *p;
746 806
    int ch, reg_size, type;
747 807
    char buf[4096];
748
    uint8_t mem_buf[2000];
808
    uint8_t mem_buf[4096];
749 809
    uint32_t *registers;
750 810
    target_ulong addr, len;
751 811

  
......
776 836
            env->pc = addr;
777 837
#elif defined (TARGET_MIPS)
778 838
            env->PC[env->current_tc] = addr;
839
#elif defined (TARGET_CRIS)
840
            env->pc = addr;
779 841
#endif
780 842
        }
781 843
#ifdef CONFIG_USER_ONLY
......
800 862
            env->pc = addr;
801 863
#elif defined (TARGET_MIPS)
802 864
            env->PC[env->current_tc] = addr;
865
#elif defined (TARGET_CRIS)
866
            env->pc = addr;
803 867
#endif
804 868
        }
805 869
        cpu_single_step(env, 1);

Also available in: Unified diff