Commit 96d19126227eb6010336f38ce4c09966964bb1f4

Authored by blueswir1
1 parent c588979b

Fix Sparc32plus GDBstub support

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4689 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 39 additions and 25 deletions
gdbstub.c
@@ -469,40 +469,49 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) @@ -469,40 +469,49 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
469 ppc_store_xer(env, tswapl(registers[101])); 469 ppc_store_xer(env, tswapl(registers[101]));
470 } 470 }
471 #elif defined (TARGET_SPARC) 471 #elif defined (TARGET_SPARC)
  472 +#ifdef TARGET_ABI32
  473 +#define tswap_abi(val) tswap32(val &0xffffffff)
  474 +#else
  475 +#define tswap_abi(val) tswapl(val)
  476 +#endif
472 static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) 477 static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
473 { 478 {
  479 +#ifdef TARGET_ABI32
  480 + abi_ulong *registers = (abi_ulong *)mem_buf;
  481 +#else
474 target_ulong *registers = (target_ulong *)mem_buf; 482 target_ulong *registers = (target_ulong *)mem_buf;
  483 +#endif
475 int i; 484 int i;
476 485
477 /* fill in g0..g7 */ 486 /* fill in g0..g7 */
478 for(i = 0; i < 8; i++) { 487 for(i = 0; i < 8; i++) {
479 - registers[i] = tswapl(env->gregs[i]); 488 + registers[i] = tswap_abi(env->gregs[i]);
480 } 489 }
481 /* fill in register window */ 490 /* fill in register window */
482 for(i = 0; i < 24; i++) { 491 for(i = 0; i < 24; i++) {
483 - registers[i + 8] = tswapl(env->regwptr[i]); 492 + registers[i + 8] = tswap_abi(env->regwptr[i]);
484 } 493 }
485 -#ifndef TARGET_SPARC64 494 +#if !defined(TARGET_SPARC64) || defined(TARGET_ABI32)
486 /* fill in fprs */ 495 /* fill in fprs */
487 for (i = 0; i < 32; i++) { 496 for (i = 0; i < 32; i++) {
488 - registers[i + 32] = tswapl(*((uint32_t *)&env->fpr[i])); 497 + registers[i + 32] = tswap_abi(*((uint32_t *)&env->fpr[i]));
489 } 498 }
490 /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ 499 /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
491 - registers[64] = tswapl(env->y); 500 + registers[64] = tswap_abi(env->y);
492 { 501 {
493 - target_ulong tmp; 502 + uint32_t tmp;
494 503
495 - tmp = GET_PSR(env);  
496 - registers[65] = tswapl(tmp); 504 + tmp = GET_PSR(env);
  505 + registers[65] = tswap32(tmp);
497 } 506 }
498 - registers[66] = tswapl(env->wim);  
499 - registers[67] = tswapl(env->tbr);  
500 - registers[68] = tswapl(env->pc);  
501 - registers[69] = tswapl(env->npc);  
502 - registers[70] = tswapl(env->fsr); 507 + registers[66] = tswap_abi(env->wim);
  508 + registers[67] = tswap_abi(env->tbr);
  509 + registers[68] = tswap_abi(env->pc);
  510 + registers[69] = tswap_abi(env->npc);
  511 + registers[70] = tswap_abi(env->fsr);
503 registers[71] = 0; /* csr */ 512 registers[71] = 0; /* csr */
504 registers[72] = 0; 513 registers[72] = 0;
505 - return 73 * sizeof(target_ulong); 514 + return 73 * sizeof(uint32_t);
506 #else 515 #else
507 /* fill in fprs */ 516 /* fill in fprs */
508 for (i = 0; i < 64; i += 2) { 517 for (i = 0; i < 64; i += 2) {
@@ -527,30 +536,34 @@ static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) @@ -527,30 +536,34 @@ static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
527 536
528 static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) 537 static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
529 { 538 {
  539 +#ifdef TARGET_ABI32
  540 + abi_ulong *registers = (abi_ulong *)mem_buf;
  541 +#else
530 target_ulong *registers = (target_ulong *)mem_buf; 542 target_ulong *registers = (target_ulong *)mem_buf;
  543 +#endif
531 int i; 544 int i;
532 545
533 /* fill in g0..g7 */ 546 /* fill in g0..g7 */
534 for(i = 0; i < 7; i++) { 547 for(i = 0; i < 7; i++) {
535 - env->gregs[i] = tswapl(registers[i]); 548 + env->gregs[i] = tswap_abi(registers[i]);
536 } 549 }
537 /* fill in register window */ 550 /* fill in register window */
538 for(i = 0; i < 24; i++) { 551 for(i = 0; i < 24; i++) {
539 - env->regwptr[i] = tswapl(registers[i + 8]); 552 + env->regwptr[i] = tswap_abi(registers[i + 8]);
540 } 553 }
541 -#ifndef TARGET_SPARC64 554 +#if !defined(TARGET_SPARC64) || defined(TARGET_ABI32)
542 /* fill in fprs */ 555 /* fill in fprs */
543 for (i = 0; i < 32; i++) { 556 for (i = 0; i < 32; i++) {
544 - *((uint32_t *)&env->fpr[i]) = tswapl(registers[i + 32]); 557 + *((uint32_t *)&env->fpr[i]) = tswap_abi(registers[i + 32]);
545 } 558 }
546 /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ 559 /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
547 - env->y = tswapl(registers[64]);  
548 - PUT_PSR(env, tswapl(registers[65]));  
549 - env->wim = tswapl(registers[66]);  
550 - env->tbr = tswapl(registers[67]);  
551 - env->pc = tswapl(registers[68]);  
552 - env->npc = tswapl(registers[69]);  
553 - env->fsr = tswapl(registers[70]); 560 + env->y = tswap_abi(registers[64]);
  561 + PUT_PSR(env, tswap_abi(registers[65]));
  562 + env->wim = tswap_abi(registers[66]);
  563 + env->tbr = tswap_abi(registers[67]);
  564 + env->pc = tswap_abi(registers[68]);
  565 + env->npc = tswap_abi(registers[69]);
  566 + env->fsr = tswap_abi(registers[70]);
554 #else 567 #else
555 for (i = 0; i < 64; i += 2) { 568 for (i = 0; i < 64; i += 2) {
556 uint64_t tmp; 569 uint64_t tmp;
@@ -574,6 +587,7 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size) @@ -574,6 +587,7 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
574 env->y = tswapl(registers[69]); 587 env->y = tswapl(registers[69]);
575 #endif 588 #endif
576 } 589 }
  590 +#undef tswap_abi
577 #elif defined (TARGET_ARM) 591 #elif defined (TARGET_ARM)
578 static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf) 592 static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
579 { 593 {