Commit dc887a4dae9bb118c6f29db5006ac7c1d58fdeb1

Authored by bellard
1 parent b9f19507

make the bios be a ROM memory - glibc hacks for setvbuf and signals - correct ce…

…ntury storage in CMOS emulation


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@526 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 15 additions and 2 deletions
@@ -458,6 +458,7 @@ void hw_error(const char *fmt, ...) @@ -458,6 +458,7 @@ void hw_error(const char *fmt, ...)
458 458
459 /* PC cmos mappings */ 459 /* PC cmos mappings */
460 #define REG_EQUIPMENT_BYTE 0x14 460 #define REG_EQUIPMENT_BYTE 0x14
  461 +#define REG_IBM_CENTURY_BYTE 0x32
461 462
462 uint8_t cmos_data[128]; 463 uint8_t cmos_data[128];
463 uint8_t cmos_index; 464 uint8_t cmos_index;
@@ -557,6 +558,7 @@ void cmos_init(void) @@ -557,6 +558,7 @@ void cmos_init(void)
557 cmos_data[RTC_REG_D] = 0x80; 558 cmos_data[RTC_REG_D] = 0x80;
558 559
559 /* various important CMOS locations needed by PC/Bochs bios */ 560 /* various important CMOS locations needed by PC/Bochs bios */
  561 + cmos_data[REG_IBM_CENTURY_BYTE] = to_bcd((tm->tm_year / 100) + 19);
560 562
561 cmos_data[REG_EQUIPMENT_BYTE] = 0x02; /* FPU is there */ 563 cmos_data[REG_EQUIPMENT_BYTE] = 0x02; /* FPU is there */
562 cmos_data[REG_EQUIPMENT_BYTE] |= 0x04; /* PS/2 mouse installed */ 564 cmos_data[REG_EQUIPMENT_BYTE] |= 0x04; /* PS/2 mouse installed */
@@ -2961,7 +2963,7 @@ struct option long_options[] = { @@ -2961,7 +2963,7 @@ struct option long_options[] = {
2961 #ifdef CONFIG_SDL 2963 #ifdef CONFIG_SDL
2962 /* SDL use the pthreads and they modify sigaction. We don't 2964 /* SDL use the pthreads and they modify sigaction. We don't
2963 want that. */ 2965 want that. */
2964 -#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) 2966 +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
2965 extern void __libc_sigaction(); 2967 extern void __libc_sigaction();
2966 #define sigaction(sig, act, oact) __libc_sigaction(sig, act, oact) 2968 #define sigaction(sig, act, oact) __libc_sigaction(sig, act, oact)
2967 #else 2969 #else
@@ -3111,8 +3113,15 @@ int main(int argc, char **argv) @@ -3111,8 +3113,15 @@ int main(int argc, char **argv)
3111 if (hd_filename[0] == '\0' && boot_device == 'c') 3113 if (hd_filename[0] == '\0' && boot_device == 'c')
3112 boot_device = 'd'; 3114 boot_device = 'd';
3113 3115
3114 - /* init debug */ 3116 +#if !defined(CONFIG_SOFTMMU)
  3117 + /* must avoid mmap() usage of glibc by setting a buffer "by hand" */
  3118 + {
  3119 + static uint8_t stdout_buf[4096];
  3120 + setvbuf(stdout, stdout_buf, _IOLBF, sizeof(stdout_buf));
  3121 + }
  3122 +#else
3115 setvbuf(stdout, NULL, _IOLBF, 0); 3123 setvbuf(stdout, NULL, _IOLBF, 0);
  3124 +#endif
3116 3125
3117 /* init network tun interface */ 3126 /* init network tun interface */
3118 if (net_fd < 0) 3127 if (net_fd < 0)
@@ -3221,6 +3230,7 @@ int main(int argc, char **argv) @@ -3221,6 +3230,7 @@ int main(int argc, char **argv)
3221 3230
3222 /* setup basic memory access */ 3231 /* setup basic memory access */
3223 env->cr[0] = 0x00000033; 3232 env->cr[0] = 0x00000033;
  3233 + env->hflags |= HF_PE_MASK;
3224 cpu_x86_init_mmu(env); 3234 cpu_x86_init_mmu(env);
3225 3235
3226 memset(params->idt_table, 0, sizeof(params->idt_table)); 3236 memset(params->idt_table, 0, sizeof(params->idt_table));
@@ -3268,6 +3278,9 @@ int main(int argc, char **argv) @@ -3268,6 +3278,9 @@ int main(int argc, char **argv)
3268 env->cr[0] = 0x60000010; 3278 env->cr[0] = 0x60000010;
3269 cpu_x86_init_mmu(env); 3279 cpu_x86_init_mmu(env);
3270 3280
  3281 + cpu_register_physical_memory(0xc0000, 0x10000, 0xc0000 | IO_MEM_ROM);
  3282 + cpu_register_physical_memory(0xf0000, 0x10000, 0xf0000 | IO_MEM_ROM);
  3283 +
3271 env->idt.limit = 0xffff; 3284 env->idt.limit = 0xffff;
3272 env->gdt.limit = 0xffff; 3285 env->gdt.limit = 0xffff;
3273 env->ldt.limit = 0xffff; 3286 env->ldt.limit = 0xffff;