Commit 8979596d1785fd52badbdb177a5ef09d4f182f40

Authored by blueswir1
1 parent 3ccacc4a

Fix Sparc64 double float gdb protocol (initial version by Paul Brook)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2666 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 8 additions and 5 deletions
gdbstub.c
@@ -377,9 +377,9 @@ static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) @@ -377,9 +377,9 @@ static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
377 for (i = 0; i < 64; i += 2) { 377 for (i = 0; i < 64; i += 2) {
378 uint64_t tmp; 378 uint64_t tmp;
379 379
380 - tmp = (uint64_t)tswap32(*((uint32_t *)&env->fpr[i])) << 32;  
381 - tmp |= tswap32(*((uint32_t *)&env->fpr[i + 1]));  
382 - registers[i/2 + 32] = tmp; 380 + tmp = ((uint64_t)*(uint32_t *)&env->fpr[i]) << 32;
  381 + tmp |= *(uint32_t *)&env->fpr[i + 1];
  382 + registers[i / 2 + 32] = tswap64(tmp);
383 } 383 }
384 registers[64] = tswapl(env->pc); 384 registers[64] = tswapl(env->pc);
385 registers[65] = tswapl(env->npc); 385 registers[65] = tswapl(env->npc);
@@ -419,8 +419,11 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) @@ -419,8 +419,11 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
419 env->fsr = tswapl(registers[70]); 419 env->fsr = tswapl(registers[70]);
420 #else 420 #else
421 for (i = 0; i < 64; i += 2) { 421 for (i = 0; i < 64; i += 2) {
422 - *((uint32_t *)&env->fpr[i]) = tswap32(registers[i/2 + 32] >> 32);  
423 - *((uint32_t *)&env->fpr[i + 1]) = tswap32(registers[i/2 + 32] & 0xffffffff); 422 + uint64_t tmp;
  423 +
  424 + tmp = tswap64(registers[i / 2 + 32]);
  425 + *((uint32_t *)&env->fpr[i]) = tmp >> 32;
  426 + *((uint32_t *)&env->fpr[i + 1]) = tmp & 0xffffffff;
424 } 427 }
425 env->pc = tswapl(registers[64]); 428 env->pc = tswapl(registers[64]);
426 env->npc = tswapl(registers[65]); 429 env->npc = tswapl(registers[65]);