bochs: fix parsing ips values > 2^31

Change-Id: If331ad7aeedf04c1a62a9bca4bbe74021b5fccd5
This commit is contained in:
Horst Schirmeier
2013-04-10 11:54:41 +02:00
parent 56bfa6c693
commit 5feebab5ab
5 changed files with 27 additions and 9 deletions

View File

@ -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_NCORES)->set(cores);
SIM->get_param_num(BXPN_CPU_NTHREADS)->set(threads); SIM->get_param_num(BXPN_CPU_NTHREADS)->set(threads);
} else if (!strncmp(params[i], "ips=", 4)) { } else if (!strncmp(params[i], "ips=", 4)) {
SIM->get_param_num(BXPN_IPS)->set(atol(&params[i][4])); // DanceOS
//SIM->get_param_num(BXPN_IPS)->set(atol(&params[i][4]));
SIM->get_param_num(BXPN_IPS)->set(atoll(&params[i][4]));
#if BX_SUPPORT_SMP #if BX_SUPPORT_SMP
} else if (!strncmp(params[i], "quantum=", 8)) { } else if (!strncmp(params[i], "quantum=", 8)) {
SIM->get_param_num(BXPN_SMP_QUANTUM)->set(atol(&params[i][8])); SIM->get_param_num(BXPN_SMP_QUANTUM)->set(atol(&params[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_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()); fprintf(fp, "vga: extension=%s\n", SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr());
#if BX_SUPPORT_SMP #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_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()); SIM->get_param_num(BXPN_SMP_QUANTUM)->get());
#else #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 #endif
fprintf(fp, "reset_on_triple_fault=%d", fprintf(fp, "reset_on_triple_fault=%d",
SIM->get_param_bool(BXPN_RESET_ON_TRIPLE_FAULT)->get()); SIM->get_param_bool(BXPN_RESET_ON_TRIPLE_FAULT)->get());

View File

@ -396,7 +396,9 @@ void bx_virt_timer_c::init(void)
} }
// Local copy of IPS value to avoid reading it frequently in timer handler // 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"); register_timer(this, nullTimer, (Bit32u)NullTimerInterval, 1, 1, "Null Timer");

View File

@ -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]!='-') { if (SIM->get_param_string(BXPN_LOG_FILENAME)->getptr()[0]!='-') {

View File

@ -64,7 +64,9 @@ bx_pc_system_c::bx_pc_system_c()
numTimers = 1; // So far, only the nullTimer. 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; ticksTotal = 0;
timer[0].timeToFire = NullTimerInterval; 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 // parameter 'ips' is the processor speed in Instructions-Per-Second
m_ips = double(ips) / 1000000.0L; 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) void bx_pc_system_c::set_HRQ(bx_bool val)

View File

@ -87,7 +87,9 @@ public:
// Timer oriented public features // 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, int register_timer(void *this_ptr, bx_timer_handler_t, Bit32u useconds,
bx_bool continuous, bx_bool active, const char *id); bx_bool continuous, bx_bool active, const char *id);
bx_bool unregisterTimer(unsigned timerID); bx_bool unregisterTimer(unsigned timerID);