From 5feebab5abb6c83f095ac60f642f8722f4da904d Mon Sep 17 00:00:00 2001 From: Horst Schirmeier Date: Wed, 10 Apr 2013 11:54:41 +0200 Subject: [PATCH] bochs: fix parsing ips values > 2^31 Change-Id: If331ad7aeedf04c1a62a9bca4bbe74021b5fccd5 --- simulators/bochs/config.cc | 16 ++++++++++++---- simulators/bochs/iodev/virt_timer.cc | 4 +++- simulators/bochs/main.cc | 4 +++- simulators/bochs/pc_system.cc | 8 ++++++-- simulators/bochs/pc_system.h | 4 +++- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/simulators/bochs/config.cc b/simulators/bochs/config.cc index 30785efc..ca2e0f38 100755 --- a/simulators/bochs/config.cc +++ b/simulators/bochs/config.cc @@ -2558,7 +2558,9 @@ static int parse_line_formatted(const char *context, int num_params, char *param SIM->get_param_num(BXPN_CPU_NCORES)->set(cores); SIM->get_param_num(BXPN_CPU_NTHREADS)->set(threads); } else if (!strncmp(params[i], "ips=", 4)) { - SIM->get_param_num(BXPN_IPS)->set(atol(¶ms[i][4])); + // DanceOS + //SIM->get_param_num(BXPN_IPS)->set(atol(¶ms[i][4])); + SIM->get_param_num(BXPN_IPS)->set(atoll(¶ms[i][4])); #if BX_SUPPORT_SMP } else if (!strncmp(params[i], "quantum=", 8)) { SIM->get_param_num(BXPN_SMP_QUANTUM)->set(atol(¶ms[i][8])); @@ -3823,12 +3825,18 @@ int bx_write_configuration(const char *rc, int overwrite) fprintf(fp, "vga_update_interval: %u\n", SIM->get_param_num(BXPN_VGA_UPDATE_INTERVAL)->get()); fprintf(fp, "vga: extension=%s\n", SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr()); #if BX_SUPPORT_SMP - fprintf(fp, "cpu: count=%u:%u:%u, ips=%u, quantum=%d, ", + // DanceOS + //fprintf(fp, "cpu: count=%u:%u:%u, ips=%u, quantum=%d, ", + fprintf(fp, "cpu: count=%u:%u:%u, ips=%llu, quantum=%d, ", SIM->get_param_num(BXPN_CPU_NPROCESSORS)->get(), SIM->get_param_num(BXPN_CPU_NCORES)->get(), - SIM->get_param_num(BXPN_CPU_NTHREADS)->get(), SIM->get_param_num(BXPN_IPS)->get(), + // DanceOS + //SIM->get_param_num(BXPN_CPU_NTHREADS)->get(), SIM->get_param_num(BXPN_IPS)->get(), + SIM->get_param_num(BXPN_CPU_NTHREADS)->get(), SIM->get_param_num(BXPN_IPS)->get64(), SIM->get_param_num(BXPN_SMP_QUANTUM)->get()); #else - fprintf(fp, "cpu: count=1, ips=%u, ", SIM->get_param_num(BXPN_IPS)->get()); + // DanceOS + //fprintf(fp, "cpu: count=1, ips=%u, ", SIM->get_param_num(BXPN_IPS)->get()); + fprintf(fp, "cpu: count=1, ips=%u, ", SIM->get_param_num(BXPN_IPS)->get64()); #endif fprintf(fp, "reset_on_triple_fault=%d", SIM->get_param_bool(BXPN_RESET_ON_TRIPLE_FAULT)->get()); diff --git a/simulators/bochs/iodev/virt_timer.cc b/simulators/bochs/iodev/virt_timer.cc index 1eb83792..d46c2426 100644 --- a/simulators/bochs/iodev/virt_timer.cc +++ b/simulators/bochs/iodev/virt_timer.cc @@ -396,7 +396,9 @@ void bx_virt_timer_c::init(void) } // Local copy of IPS value to avoid reading it frequently in timer handler - ips = SIM->get_param_num(BXPN_IPS)->get(); + // DanceOS + //ips = SIM->get_param_num(BXPN_IPS)->get(); + ips = SIM->get_param_num(BXPN_IPS)->get64(); register_timer(this, nullTimer, (Bit32u)NullTimerInterval, 1, 1, "Null Timer"); diff --git a/simulators/bochs/main.cc b/simulators/bochs/main.cc index 7f5d5d04..2ec858cf 100644 --- a/simulators/bochs/main.cc +++ b/simulators/bochs/main.cc @@ -1054,7 +1054,9 @@ void bx_init_hardware() } - bx_pc_system.initialize(SIM->get_param_num(BXPN_IPS)->get()); + // DanceOS + //bx_pc_system.initialize(SIM->get_param_num(BXPN_IPS)->get()); + bx_pc_system.initialize(SIM->get_param_num(BXPN_IPS)->get64()); if (SIM->get_param_string(BXPN_LOG_FILENAME)->getptr()[0]!='-') { diff --git a/simulators/bochs/pc_system.cc b/simulators/bochs/pc_system.cc index 008d8681..3bb25955 100644 --- a/simulators/bochs/pc_system.cc +++ b/simulators/bochs/pc_system.cc @@ -64,7 +64,9 @@ bx_pc_system_c::bx_pc_system_c() numTimers = 1; // So far, only the nullTimer. } -void bx_pc_system_c::initialize(Bit32u ips) +// DanceOS +//void bx_pc_system_c::initialize(Bit32u ips) +void bx_pc_system_c::initialize(Bit64u ips) { ticksTotal = 0; timer[0].timeToFire = NullTimerInterval; @@ -79,7 +81,9 @@ void bx_pc_system_c::initialize(Bit32u ips) // parameter 'ips' is the processor speed in Instructions-Per-Second m_ips = double(ips) / 1000000.0L; - BX_DEBUG(("ips = %u", (unsigned) ips)); + // DanceOS + //BX_DEBUG(("ips = %u", (unsigned) ips)); + BX_DEBUG(("ips = %llu", (unsigned long long) ips)); } void bx_pc_system_c::set_HRQ(bx_bool val) diff --git a/simulators/bochs/pc_system.h b/simulators/bochs/pc_system.h index 45db9370..2c995a6d 100644 --- a/simulators/bochs/pc_system.h +++ b/simulators/bochs/pc_system.h @@ -87,7 +87,9 @@ public: // Timer oriented public features // ============================== - void initialize(Bit32u ips); + // DanceOS + //void initialize(Bit32u ips); + void initialize(Bit64u ips); int register_timer(void *this_ptr, bx_timer_handler_t, Bit32u useconds, bx_bool continuous, bx_bool active, const char *id); bx_bool unregisterTimer(unsigned timerID);