head 1.1; access; symbols pkgsrc-2026Q1:1.1.0.94 pkgsrc-2026Q1-base:1.1 pkgsrc-2025Q4:1.1.0.92 pkgsrc-2025Q4-base:1.1 pkgsrc-2025Q3:1.1.0.90 pkgsrc-2025Q3-base:1.1 pkgsrc-2025Q2:1.1.0.88 pkgsrc-2025Q2-base:1.1 pkgsrc-2025Q1:1.1.0.86 pkgsrc-2025Q1-base:1.1 pkgsrc-2024Q4:1.1.0.84 pkgsrc-2024Q4-base:1.1 pkgsrc-2024Q3:1.1.0.82 pkgsrc-2024Q3-base:1.1 pkgsrc-2024Q2:1.1.0.80 pkgsrc-2024Q2-base:1.1 pkgsrc-2024Q1:1.1.0.78 pkgsrc-2024Q1-base:1.1 pkgsrc-2023Q4:1.1.0.76 pkgsrc-2023Q4-base:1.1 pkgsrc-2023Q3:1.1.0.74 pkgsrc-2023Q3-base:1.1 pkgsrc-2023Q2:1.1.0.72 pkgsrc-2023Q2-base:1.1 pkgsrc-2023Q1:1.1.0.70 pkgsrc-2023Q1-base:1.1 pkgsrc-2022Q4:1.1.0.68 pkgsrc-2022Q4-base:1.1 pkgsrc-2022Q3:1.1.0.66 pkgsrc-2022Q3-base:1.1 pkgsrc-2022Q2:1.1.0.64 pkgsrc-2022Q2-base:1.1 pkgsrc-2022Q1:1.1.0.62 pkgsrc-2022Q1-base:1.1 pkgsrc-2021Q4:1.1.0.60 pkgsrc-2021Q4-base:1.1 pkgsrc-2021Q3:1.1.0.58 pkgsrc-2021Q3-base:1.1 pkgsrc-2021Q2:1.1.0.56 pkgsrc-2021Q2-base:1.1 pkgsrc-2021Q1:1.1.0.54 pkgsrc-2021Q1-base:1.1 pkgsrc-2020Q4:1.1.0.52 pkgsrc-2020Q4-base:1.1 pkgsrc-2020Q3:1.1.0.50 pkgsrc-2020Q3-base:1.1 pkgsrc-2020Q2:1.1.0.46 pkgsrc-2020Q2-base:1.1 pkgsrc-2020Q1:1.1.0.26 pkgsrc-2020Q1-base:1.1 pkgsrc-2019Q4:1.1.0.48 pkgsrc-2019Q4-base:1.1 pkgsrc-2019Q3:1.1.0.44 pkgsrc-2019Q3-base:1.1 pkgsrc-2019Q2:1.1.0.42 pkgsrc-2019Q2-base:1.1 pkgsrc-2019Q1:1.1.0.40 pkgsrc-2019Q1-base:1.1 pkgsrc-2018Q4:1.1.0.38 pkgsrc-2018Q4-base:1.1 pkgsrc-2018Q3:1.1.0.36 pkgsrc-2018Q3-base:1.1 pkgsrc-2018Q2:1.1.0.34 pkgsrc-2018Q2-base:1.1 pkgsrc-2018Q1:1.1.0.32 pkgsrc-2018Q1-base:1.1 pkgsrc-2017Q4:1.1.0.30 pkgsrc-2017Q4-base:1.1 pkgsrc-2017Q3:1.1.0.28 pkgsrc-2017Q3-base:1.1 pkgsrc-2017Q2:1.1.0.24 pkgsrc-2017Q2-base:1.1 pkgsrc-2017Q1:1.1.0.22 pkgsrc-2017Q1-base:1.1 pkgsrc-2016Q4:1.1.0.20 pkgsrc-2016Q4-base:1.1 pkgsrc-2016Q3:1.1.0.18 pkgsrc-2016Q3-base:1.1 pkgsrc-2016Q2:1.1.0.16 pkgsrc-2016Q2-base:1.1 pkgsrc-2016Q1:1.1.0.14 pkgsrc-2016Q1-base:1.1 pkgsrc-2015Q4:1.1.0.12 pkgsrc-2015Q4-base:1.1 pkgsrc-2015Q3:1.1.0.10 pkgsrc-2015Q3-base:1.1 pkgsrc-2015Q2:1.1.0.8 pkgsrc-2015Q2-base:1.1 pkgsrc-2015Q1:1.1.0.6 pkgsrc-2015Q1-base:1.1 pkgsrc-2014Q4:1.1.0.4 pkgsrc-2014Q4-base:1.1 pkgsrc-2014Q3:1.1.0.2 pkgsrc-2014Q3-base:1.1; locks; strict; comment @# @; 1.1 date 2014.08.29.04.40.06; author mef; state Exp; branches; next ; commitid aGTdUgd0sDGFfdOx; desc @@ 1.1 log @(pkgsrc) simulavr asks for libiberty.a. With avr-gcc 4.5.3 and avr-binutils-2.23.2, binutils is installing libiberty.a But with new binutils-2.24, it won't install libiberty. Instead, avr-gcc-4.8.3 will provied libiberty. Makefile (of simulavr) now has pointer to PATH of libiberty now as: CONFIGURE_ARGS+= --with-libiberty=${PREFIX}/lib/gcc/avr (Add patches) patch-src_systemclock_cpp (rename from patch-src_systemclock.cpp) patch-src_systemclock_h patch-src_traceval_cpp patch-src_traceval_h clang flags as resize unresolved reference, backport from git repository (as of 2013-09-15). patch-examples_atmel_key_StdDefs_c Status: Locally Added passing argument 1 of 'strlen' differ in signedness [-Wpointer-sign] @ text @$NetBSD$ clang flags as resize unresolved reference, backport from git repository (as of 2013-09-15). --- simulavr-1.0.0/src/systemclock.cpp 2012-02-13 00:26:38.000000000 +0900 +++ src/systemclock.cpp 2013-09-13 09:41:15.000000000 +0900 @@@@ -2,7 +2,7 @@@@ **************************************************************************** * * simulavr - A simulator for the Atmel AVR family of microcontrollers. - * Copyright (C) 2001, 2002, 2003 Klaus Rudolph + * Copyright (C) 2001, 2002, 2003 Klaus Rudolph * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@@@ -28,6 +28,7 @@@@ #include "simulationmember.h" #include "helper.h" #include "application.h" +#include "avrdevice.h" #include "avrerror.h" #include "signal.h" @@@@ -35,83 +36,78 @@@@ using namespace std; - template MinHeap::MinHeap() { - this->reserve(10); // vector would free&malloc when we keep inserting and removing only 1 element. + this->reserve(10); // vector would free&malloc when we keep inserting and removing only 1 element. } template void MinHeap::RemoveMinimum() { - assert(!this->empty()); - Key k = this->back().first; - Value v = this->back().second; - RemoveMinimumAndInsert(k, v); - this->pop_back(); + assert(!this->empty()); + Key k = this->back().first; + Value v = this->back().second; + RemoveMinimumAndInsert(k, v); + this->pop_back(); } template bool MinHeap::ContainsValue(Value v) const { - for(unsigned i = 0; i < this->size(); i++) - { - std::pair item = (*this)[i]; - if(item.second == v) - return true; - } - return false; + for(unsigned i = 0; i < this->size(); i++) + { + std::pair item = (*this)[i]; + if(item.second == v) + return true; + } + return false; } template -void MinHeap::Insert(Key k, Value v) +void MinHeap::InsertInternal(Key k, Value v, unsigned pos) { - resize(this->size()+1); - for(unsigned i = this->size();;) { - unsigned parent = i/2; - if(parent == 0 || (*this)[parent-1].first < k) { - (*this)[i-1].first = k; - (*this)[i-1].second = v; - return; - } - Key k_temp = (*this)[parent-1].first; - Value v_temp = (*this)[parent-1].second; - (*this)[i-1].first = k_temp; - (*this)[i-1].second = v_temp; - i = parent; - } + for(unsigned i = pos;;) { + unsigned parent = i/2; + if(parent == 0 || (*this)[parent-1].first <= k) { + (*this)[i-1].first = k; + (*this)[i-1].second = v; + return; + } + Key k_temp = (*this)[parent-1].first; + Value v_temp = (*this)[parent-1].second; + (*this)[i-1].first = k_temp; + (*this)[i-1].second = v_temp; + i = parent; + } } template -void MinHeap::RemoveMinimumAndInsert(Key k, Value v) +void MinHeap::RemoveAtPositionAndInsertInternal(Key k, Value v, unsigned pos) { - assert(!this->empty()); - unsigned i = 1; - for(;;) { - unsigned left = 2*i; - unsigned right = 2*i + 1; - unsigned smallest = i; - if(left-1 < this->size() && (*this)[left-1].first < k) - smallest = left; - if(right-1 < this->size() && (*this)[right-1].first < k) - smallest = right; - if(smallest == i) { - (*this)[smallest-1].first = k; - (*this)[smallest-1].second = v; - return; - } - Key k_temp = (*this)[smallest-1].first; - Value v_temp = (*this)[smallest-1].second; - (*this)[smallest-1].first = k; - (*this)[smallest-1].second = v; - k = k_temp; - v = v_temp; - i = smallest; - } + assert(pos < this->size()); + unsigned i = pos + 1; + for(;;) { + unsigned left = 2*i; + unsigned right = 2*i + 1; + unsigned smallest = i; + if(left-1 < this->size() && (*this)[left-1].first < k) + smallest = left; + if(right-1 < this->size() && (*this)[right-1].first < k && (*this)[right-1].first < (*this)[left-1].first) + smallest = right; + if(smallest == i) { + (*this)[smallest-1].first = k; + (*this)[smallest-1].second = v; + return; + } + Key k_temp = (*this)[smallest-1].first; + Value v_temp = (*this)[smallest-1].second; + (*this)[i-1].first = k_temp; + (*this)[i-1].second = v_temp; + i = smallest; + } } - SystemClock::SystemClock() { static int no = 0; currentTime = 0; @@@@ -130,7 +126,6 @@@@ } } - void SystemClock::Add(SimulationMember *dev) { syncMembers.Insert(currentTime, dev); } @@@@ -153,6 +148,8 @@@@ currentTime = syncMembers.begin()->first; SystemClockOffset nextStepIn_ns = -1; + syncMembers.RemoveMinimum(); + // do a step on simulation member res = core->Step(untilCoreStepFinished, &nextStepIn_ns); @@@@ -164,9 +161,7 @@@@ // be called anymore! if(nextStepIn_ns > 0) - syncMembers.RemoveMinimumAndInsert(nextStepIn_ns, core); - else - syncMembers.RemoveMinimum(); + syncMembers.Insert(nextStepIn_ns, core); // handle async simulation members amiEnd = asyncMembers.end(); @@@@ -180,12 +175,11 @@@@ } void SystemClock::Rescedule(SimulationMember *sm, SystemClockOffset newTime) { - MinHeap::iterator ii; - for(ii=syncMembers.begin(); ii != syncMembers.end(); ii++) { - if(ii->second == sm) { - syncMembers.erase(ii); - break; + for(unsigned i = 0; i < syncMembers.size(); i++) { + if(syncMembers[i].second == sm) { + syncMembers.RemoveAtPositionAndInsert(newTime+currentTime+1, sm, i); + return; } } @@@@ -211,6 +205,7 @@@@ } void SystemClock::Endless() { + breakMessage = false; // if we run a second loop, clear break before entering loop int steps = 0; signal(SIGINT, OnBreak); @@@@ -227,7 +222,6 @@@@ Application::GetInstance()->PrintResults(); } - void SystemClock::Run(SystemClockOffset maxRunTime) { int steps = 0; @@@@ -269,4 +263,3 @@@@ static SystemClock obj; return obj; } - @