Diff for /qemu/exec.c between versions 1.1.1.3 and 1.1.1.4

version 1.1.1.3, 2018/04/24 16:40:47 version 1.1.1.4, 2018/04/24 16:42:48
Line 1488  int tlb_set_page_exec(CPUState *env, tar Line 1488  int tlb_set_page_exec(CPUState *env, tar
     if (is_softmmu)       if (is_softmmu) 
 #endif  #endif
     {      {
         if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM) {          if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
             /* IO memory case */              /* IO memory case */
             address = vaddr | pd;              address = vaddr | pd;
             addend = paddr;              addend = paddr;
Line 1513  int tlb_set_page_exec(CPUState *env, tar Line 1513  int tlb_set_page_exec(CPUState *env, tar
             te->addr_code = -1;              te->addr_code = -1;
         }          }
         if (prot & PAGE_WRITE) {          if (prot & PAGE_WRITE) {
             if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_ROM) {              if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_ROM || 
                 /* ROM: access is ignored (same as unassigned) */                  (pd & IO_MEM_ROMD)) {
                 te->addr_write = vaddr | IO_MEM_ROM;                  /* write access calls the I/O callback */
                   te->addr_write = vaddr | 
                       (pd & ~(TARGET_PAGE_MASK | IO_MEM_ROMD));
             } else if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_RAM &&               } else if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_RAM && 
                        !cpu_physical_memory_is_dirty(pd)) {                         !cpu_physical_memory_is_dirty(pd)) {
                 te->addr_write = vaddr | IO_MEM_NOTDIRTY;                  te->addr_write = vaddr | IO_MEM_NOTDIRTY;
Line 1779  void cpu_register_physical_memory(target Line 1781  void cpu_register_physical_memory(target
 {  {
     target_phys_addr_t addr, end_addr;      target_phys_addr_t addr, end_addr;
     PhysPageDesc *p;      PhysPageDesc *p;
       CPUState *env;
   
     size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK;      size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK;
     end_addr = start_addr + size;      end_addr = start_addr + size;
     for(addr = start_addr; addr != end_addr; addr += TARGET_PAGE_SIZE) {      for(addr = start_addr; addr != end_addr; addr += TARGET_PAGE_SIZE) {
         p = phys_page_find_alloc(addr >> TARGET_PAGE_BITS, 1);          p = phys_page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
         p->phys_offset = phys_offset;          p->phys_offset = phys_offset;
         if ((phys_offset & ~TARGET_PAGE_MASK) <= IO_MEM_ROM)          if ((phys_offset & ~TARGET_PAGE_MASK) <= IO_MEM_ROM ||
               (phys_offset & IO_MEM_ROMD))
             phys_offset += TARGET_PAGE_SIZE;              phys_offset += TARGET_PAGE_SIZE;
     }      }
       
       /* since each CPU stores ram addresses in its TLB cache, we must
          reset the modified entries */
       /* XXX: slow ! */
       for(env = first_cpu; env != NULL; env = env->next_cpu) {
           tlb_flush(env, 1);
       }
 }  }
   
 static uint32_t unassigned_mem_readb(void *opaque, target_phys_addr_t addr)  static uint32_t unassigned_mem_readb(void *opaque, target_phys_addr_t addr)
Line 2048  void cpu_physical_memory_rw(target_phys_ Line 2059  void cpu_physical_memory_rw(target_phys_
                 }                  }
             }              }
         } else {          } else {
             if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM) {              if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && 
                   !(pd & IO_MEM_ROMD)) {
                 /* I/O case */                  /* I/O case */
                 io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);                  io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
                 if (l >= 4 && ((addr & 3) == 0)) {                  if (l >= 4 && ((addr & 3) == 0)) {
Line 2103  void cpu_physical_memory_write_rom(targe Line 2115  void cpu_physical_memory_write_rom(targe
         }          }
                   
         if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM &&          if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM &&
             (pd & ~TARGET_PAGE_MASK) != IO_MEM_ROM) {              (pd & ~TARGET_PAGE_MASK) != IO_MEM_ROM &&
               !(pd & IO_MEM_ROMD)) {
             /* do nothing */              /* do nothing */
         } else {          } else {
             unsigned long addr1;              unsigned long addr1;
Line 2135  uint32_t ldl_phys(target_phys_addr_t add Line 2148  uint32_t ldl_phys(target_phys_addr_t add
         pd = p->phys_offset;          pd = p->phys_offset;
     }      }
                   
     if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM) {      if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && 
           !(pd & IO_MEM_ROMD)) {
         /* I/O case */          /* I/O case */
         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);          io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
         val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);          val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);
Line 2164  uint64_t ldq_phys(target_phys_addr_t add Line 2178  uint64_t ldq_phys(target_phys_addr_t add
         pd = p->phys_offset;          pd = p->phys_offset;
     }      }
                   
     if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM) {      if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&
           !(pd & IO_MEM_ROMD)) {
         /* I/O case */          /* I/O case */
         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);          io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
 #ifdef TARGET_WORDS_BIGENDIAN  #ifdef TARGET_WORDS_BIGENDIAN

Removed from v.1.1.1.3  
changed lines
  Added in v.1.1.1.4


unix.superglobalmegacorp.com