This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed] sim/avr: allow byte access to program space


Hi,

although the flash is word based, gdb tries to read bytes while disassembling. So byte access need to be
implemented for the flash (program space).


Approved by Joel.

Tristan.

sim/
2009-11-12  Tristan Gingold  <gingold@adacore.com>

	* avr/interp.c (sim_write): Allow byte access.
	(sim_read): Ditto.

diff -c -r1.4 interp.c
*** sim/avr/interp.c	12 Nov 2009 15:17:42 -0000	1.4
--- sim/avr/interp.c	12 Nov 2009 15:20:29 -0000
***************
*** 1628,1643 ****

    if (addr >= 0 && addr < SRAM_VADDR)
      {
!       if (addr & 1)
! 	return 0;
!       addr /= 2;
!       while (size > 1 && addr < MAX_AVR_FLASH)
  	{
! 	  flash[addr].op = buffer[0] | (buffer[1] << 8);
! 	  flash[addr].code = OP_unknown;
  	  addr++;
! 	  buffer += 2;
! 	  size -= 2;
  	}
        return osize - size;
      }
--- 1628,1647 ----

    if (addr >= 0 && addr < SRAM_VADDR)
      {
!       while (size > 0 && addr < (MAX_AVR_FLASH << 1))
  	{
!           word val = flash[addr >> 1].op;
!
!           if (addr & 1)
!             val = (val & 0xff) | (buffer[0] << 8);
!           else
!             val = (val & 0xff00) | buffer[0];
!
! 	  flash[addr >> 1].op = val;
! 	  flash[addr >> 1].code = OP_unknown;
  	  addr++;
! 	  buffer++;
! 	  size--;
  	}
        return osize - size;
      }
***************
*** 1660,1675 ****

    if (addr >= 0 && addr < SRAM_VADDR)
      {
!       if (addr & 1)
! 	return 0;
!       addr /= 2;
!       while (size > 1 && addr < MAX_AVR_FLASH)
  	{
! 	  buffer[0] = flash[addr].op;
! 	  buffer[1] = flash[addr].op >> 8;
  	  addr++;
! 	  buffer += 2;
! 	  size -= 2;
  	}
        return osize - size;
      }
--- 1664,1679 ----

    if (addr >= 0 && addr < SRAM_VADDR)
      {
!       while (size > 0 && addr < (MAX_AVR_FLASH << 1))
  	{
!           word val = flash[addr >> 1].op;
!
!           if (addr & 1)
!             val >>= 8;
!
!           *buffer++ = val;
  	  addr++;
! 	  size--;
  	}
        return osize - size;
      }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]