Brian Norris [Mon, 20 Aug 2012 18:03:36 +0000 (11:03 -0700)]
model: rename 'cyclegraph' to 'mo_graph'
This is not just an arbitrary graph with cycle-detection; it is specifically a
representation of the modification order of various atomic objects.
Brian Norris [Mon, 20 Aug 2012 19:53:28 +0000 (12:53 -0700)]
model: don't "leak" promises
Brian Norris [Fri, 17 Aug 2012 00:40:40 +0000 (17:40 -0700)]
test/Makefile: remove pointless variable
Brian Norris [Fri, 17 Aug 2012 00:11:27 +0000 (17:11 -0700)]
.gitignore: don't ignore /model anymore
We don't produce an executable named 'model' anymore.
Brian Norris [Thu, 16 Aug 2012 17:40:59 +0000 (10:40 -0700)]
Merge branch 'norris'
Brian Norris [Fri, 10 Aug 2012 23:20:15 +0000 (16:20 -0700)]
schedule: make print() const
Switch to using a "const_iterator" so that the whole function becomes const.
Brian Norris [Fri, 10 Aug 2012 22:27:38 +0000 (15:27 -0700)]
model: privatize check_current_action()
Brian Norris [Fri, 10 Aug 2012 22:22:33 +0000 (15:22 -0700)]
threads: correct 'swap()' documentation
Some of the swap() documentation was duplicated incorrectly. While I'm at it,
make the descriptions more clear and precise.
Brian Norris [Fri, 10 Aug 2012 22:15:24 +0000 (15:15 -0700)]
main, model: don't 'initialize' system_context
I was unnecessarily giving main.cc control of the system_context variable,
since I thought I needed to use getcontext() before entering the model checker.
However, the structure of the runtime scheduling is such that this
"initialization" would be obliterated by the first swapcontext() call
(switching form system-context to user-context).
So, the point is that the model-checker can just declare its own
("uninitialized") context that will be initialized as soon as the model-checker
makes a thread swap. Thus, I remove the external interface for initializing the
context (set_system_context()).
Brian Norris [Fri, 10 Aug 2012 21:59:20 +0000 (14:59 -0700)]
action: don't merge twice in read_from()
synchronize_with() already takes care of the clock vector merging, so don't
merge a second time.
Brian Norris [Fri, 10 Aug 2012 21:57:20 +0000 (14:57 -0700)]
action: rework/rename 'synchronized()' to 'synchronize_with()'
Fix some comments, names, etc.
Privatize synchronized()/synchronize_with(), since it's only intended for
within other wrapper actions performed on ModelAction.
Brian Norris [Fri, 10 Aug 2012 21:51:27 +0000 (14:51 -0700)]
model: remove useless return code from add_thread()
Brian Norris [Fri, 10 Aug 2012 21:43:19 +0000 (14:43 -0700)]
schedule, threads: update comments, const's
Brian Norris [Fri, 10 Aug 2012 21:29:06 +0000 (14:29 -0700)]
model: make scheduler private
To accomplish this, I needed to add one accessor method for
'get_current_thread()'.
Brian Norris [Fri, 10 Aug 2012 21:23:29 +0000 (14:23 -0700)]
main, model: move main execution loop into ModelChecker class
Brian Norris [Tue, 14 Aug 2012 22:25:11 +0000 (15:25 -0700)]
cyclegraph: improve comments, use initializer list
Brian Norris [Sat, 11 Aug 2012 01:11:12 +0000 (18:11 -0700)]
hashtable: document get_safe_ptr()
Brian Norris [Sat, 11 Aug 2012 01:10:20 +0000 (18:10 -0700)]
hashtable: rename ensureptr() to get_safe_ptr()
ensureptr() is kind of vague. This rename -- along with some better description
-- will help clarify what this function does.
Brian Norris [Sat, 11 Aug 2012 00:44:36 +0000 (17:44 -0700)]
hashtable: bugfix - increment size only when new bins are linked
In both put() and ensureptr(), the 'size' counter should not be incremented
until we decide if we're adding a new bin or not. When incremented improperly,
'size' ended up out of sync with the hash table; it reported a size much larger
than the actual table.
Brian Norris [Sat, 11 Aug 2012 00:42:40 +0000 (17:42 -0700)]
hashtable: some refactoring, signed-ness
Since 'capacity' is unsigned, so should the index that compares with it.
The (duplicated) compare/resize code can be a bit shorter and (IMO) easier to
read.
Brian Norris [Fri, 10 Aug 2012 19:21:12 +0000 (12:21 -0700)]
model: reformat/refactor some code
Brian Norris [Fri, 10 Aug 2012 18:44:00 +0000 (11:44 -0700)]
impatomic.h: fixup spacing
Tabs vs. spaces for indentation screws up this indentation, making it even
harder to read than it should be. Switch this all to spaces (for uniformity
across all editor configurations) and align things properly.
Brian Norris [Wed, 8 Aug 2012 23:36:10 +0000 (16:36 -0700)]
threads: trivial change
Brian Norris [Wed, 8 Aug 2012 23:27:07 +0000 (16:27 -0700)]
model: revert unnecessary parameter for print_summary()
CycleGraph::checkForCycles() is a cheap function; it only checks a flag status.
So we don't need to make code more complicated just to avoid calling this
function.
Effectively a revert of:
commit
7cee72d776ddfbf585038f3cad3df799e353cc11
Brian Norris [Wed, 8 Aug 2012 22:22:25 +0000 (15:22 -0700)]
add basic parameter handling
Brian Norris [Wed, 8 Aug 2012 22:00:13 +0000 (15:00 -0700)]
common: add error_msg() function
Brian Norris [Wed, 8 Aug 2012 19:41:02 +0000 (12:41 -0700)]
run.sh: pass command-line arguments through to test program
Once the model-checker begins handling arguments, we should pass through
arguments to the program.
Brian Norris [Wed, 8 Aug 2012 23:33:00 +0000 (16:33 -0700)]
.gitignore: ignore other vim swap file type
Brian Norris [Wed, 8 Aug 2012 15:59:52 +0000 (08:59 -0700)]
model: reformat some code
Brian Norris [Wed, 8 Aug 2012 00:59:44 +0000 (17:59 -0700)]
main, threads: improve comments regarding thread stepping
The comment in thread_system_next was incorrect:
"Returns the 1 if there is another step and 0 otherwise."
Add a few comments throughout to help clarify this behavior.
Brian Demsky [Sat, 4 Aug 2012 07:21:05 +0000 (02:21 -0500)]
add a todo flag to a comment so it won't get lost... low priority item though
Brian Norris [Fri, 3 Aug 2012 04:00:22 +0000 (21:00 -0700)]
Makefile: fix config.h dependencies
The snapshotting code needs to be rebuilt when config.h is modified.
Brian Norris [Thu, 2 Aug 2012 23:55:58 +0000 (16:55 -0700)]
Merge branch 'brian'
Brian Norris [Thu, 2 Aug 2012 23:51:45 +0000 (16:51 -0700)]
DEBUGGINGNOTES: include gdb info for Linux
Brian Demsky [Thu, 2 Aug 2012 22:40:40 +0000 (15:40 -0700)]
bug fix
Brian Norris [Thu, 2 Aug 2012 23:37:03 +0000 (16:37 -0700)]
run.sh: fixup run script
run.sh will, by default, run ./test/userprog.o now. This can be modified later
to provide several regression tests in-tree, with scripted execution of the
tests.
Brian Norris [Thu, 2 Aug 2012 23:36:29 +0000 (16:36 -0700)]
Makefile: wire up test/ directory for compilation
Brian Norris [Thu, 2 Aug 2012 23:33:16 +0000 (16:33 -0700)]
Makefile: split part into a common makefile (common.mk)
Brian Norris [Thu, 2 Aug 2012 23:27:02 +0000 (16:27 -0700)]
userprog: move to 'test/' directory
Brian Norris [Thu, 2 Aug 2012 23:25:44 +0000 (16:25 -0700)]
Makefile: don't build userprog.c from top level
(Temporarily disables userprog compilation; will restore soon)
Brian Norris [Thu, 2 Aug 2012 19:55:04 +0000 (12:55 -0700)]
blank lines, spacing, etc.
Brian Norris [Thu, 2 Aug 2012 19:35:21 +0000 (12:35 -0700)]
nodestack: remove completed @todo
Brian Norris [Thu, 2 Aug 2012 19:33:43 +0000 (12:33 -0700)]
nodestack: clean up comments
Brian Norris [Thu, 2 Aug 2012 18:13:46 +0000 (11:13 -0700)]
model: do not call isfinalfeasible() too many times
This function call incurs graph exploration, so when performing some
end-of-trace bookkeeping, we should only call it once and cache the result.
Brian Norris [Thu, 2 Aug 2012 17:59:16 +0000 (10:59 -0700)]
hashtable: add some documentation
Brian Norris [Thu, 2 Aug 2012 17:25:31 +0000 (10:25 -0700)]
model: delete Threads on destruction
When switching from STL map to hashtable, the Thread destruction was just
commented out instead of reimplemented. This is a good enough version, I think.
Brian Norris [Thu, 2 Aug 2012 17:25:17 +0000 (10:25 -0700)]
more reformatting/indentation
Brian Demsky [Sat, 28 Jul 2012 17:45:48 +0000 (10:45 -0700)]
forgot about events that happen after an unresolved read... bug fix checked in
Brian Norris [Wed, 1 Aug 2012 03:13:17 +0000 (20:13 -0700)]
fixup whitespace
Brian Norris [Fri, 27 Jul 2012 21:50:15 +0000 (14:50 -0700)]
action: add memory_order printing
Brian Demsky [Fri, 27 Jul 2012 09:06:29 +0000 (02:06 -0700)]
change test case to match nice one from spec... it works. :)
Brian Demsky [Fri, 27 Jul 2012 08:59:52 +0000 (01:59 -0700)]
bugs...
Brian Demsky [Fri, 27 Jul 2012 08:24:24 +0000 (01:24 -0700)]
add some comments
Brian Demsky [Fri, 27 Jul 2012 08:19:07 +0000 (01:19 -0700)]
standardize names a little
Brian Demsky [Fri, 27 Jul 2012 07:25:19 +0000 (00:25 -0700)]
okay...known bugs for my trivial test are out of send future values backwards
Brian Demsky [Fri, 27 Jul 2012 05:20:54 +0000 (22:20 -0700)]
finish promise support
Brian Demsky [Thu, 26 Jul 2012 23:20:02 +0000 (16:20 -0700)]
more changes towards keeping track of promises resolved by a given write statement
Brian Demsky [Thu, 26 Jul 2012 05:59:41 +0000 (22:59 -0700)]
changes
Brian Demsky [Wed, 25 Jul 2012 23:11:51 +0000 (16:11 -0700)]
some changes towards reading from future writes
Brian Demsky [Sat, 21 Jul 2012 02:12:20 +0000 (19:12 -0700)]
move more configurables and add documentation
Brian Demsky [Sat, 21 Jul 2012 01:52:55 +0000 (18:52 -0700)]
more hashtable fixes
clean up memory allocation code a bit
Brian Demsky [Fri, 20 Jul 2012 21:48:01 +0000 (14:48 -0700)]
fix some allocation/free bugs when we put non objects into table...
Brian Demsky [Fri, 20 Jul 2012 21:45:03 +0000 (14:45 -0700)]
fix my todo comments so they appear in documentation
Brian Demsky [Fri, 20 Jul 2012 21:39:23 +0000 (14:39 -0700)]
switch everything over to our own hashtable
give us a calloc to use from our code
Brian Demsky [Fri, 20 Jul 2012 21:01:03 +0000 (14:01 -0700)]
hashtable: make more flexible
[Split by Brian Norris]
Brian Demsky [Fri, 20 Jul 2012 21:01:03 +0000 (14:01 -0700)]
Add documentation
[Split by Brian Norris]
Brian Norris [Wed, 1 Aug 2012 02:45:49 +0000 (19:45 -0700)]
action: fix ATOMIC_RMW comments
Brian Demsky [Fri, 20 Jul 2012 19:42:42 +0000 (12:42 -0700)]
rmw example works
Brian Demsky [Fri, 20 Jul 2012 19:32:42 +0000 (12:32 -0700)]
towards making rmw work...
[Split by Brian Norris]
Brian Norris [Wed, 1 Aug 2012 02:25:52 +0000 (19:25 -0700)]
action: add stub ATOMIC_RMWR and ATOMIC_RMWC
Brian Norris [Wed, 1 Aug 2012 02:20:16 +0000 (19:20 -0700)]
trivial - whitespace, debugging cleanup, etc.
Brian Demsky [Fri, 20 Jul 2012 05:42:46 +0000 (22:42 -0700)]
remove libatomic
Brian Norris [Wed, 1 Aug 2012 02:14:16 +0000 (19:14 -0700)]
action: switch from "libatomic" to C++-spec "memory_order_*" macros
Brian Norris [Wed, 1 Aug 2012 00:25:38 +0000 (17:25 -0700)]
pull in most of atomic header file
Brian Demsky [Fri, 20 Jul 2012 05:43:07 +0000 (22:43 -0700)]
don't forget this file
Brian Demsky [Fri, 20 Jul 2012 00:53:45 +0000 (17:53 -0700)]
split these defs out of other stuff
Brian Demsky [Fri, 20 Jul 2012 00:15:12 +0000 (17:15 -0700)]
switch rest over to model checker... might work now
Brian Demsky [Fri, 20 Jul 2012 00:06:11 +0000 (17:06 -0700)]
fix missing atomic...
Brian Demsky [Thu, 19 Jul 2012 23:55:52 +0000 (16:55 -0700)]
rewrite macros
Brian Demsky [Thu, 19 Jul 2012 23:18:11 +0000 (16:18 -0700)]
import header file from specification
taken from n2427.html
Brian Norris [Wed, 1 Aug 2012 00:13:30 +0000 (17:13 -0700)]
update TODO's
Brian Demsky [Thu, 19 Jul 2012 21:15:27 +0000 (14:15 -0700)]
Add RMW support to core.
Eliminate annoying warning.
Brian Norris [Tue, 31 Jul 2012 23:58:00 +0000 (16:58 -0700)]
model: add documentation
[Split from Brian Demsky's work]
Brian Demsky [Thu, 19 Jul 2012 19:18:25 +0000 (12:18 -0700)]
small changes (things still work) towards support RMW
Reserve value field only for writes. Using it for reads will only make thinks
weird for RMW operations.
[Amended by Brian Norris]
Brian Demsky [Wed, 18 Jul 2012 22:55:22 +0000 (15:55 -0700)]
trying to get fork based snapshotting to work
[Amended by Brian Norris,
includes some later clean up]
Brian Demsky [Wed, 18 Jul 2012 18:08:10 +0000 (11:08 -0700)]
toss a place for useful information
Brian Norris [Tue, 31 Jul 2012 23:32:59 +0000 (16:32 -0700)]
model: refactor "infeasible" printing
Brian Demsky [Wed, 18 Jul 2012 05:28:20 +0000 (22:28 -0700)]
print less stuff
Brian Demsky [Wed, 18 Jul 2012 05:03:01 +0000 (22:03 -0700)]
model: add support for modification orders
This update adds support for modification orders and kills the bogus executions
seen before...
[Updated, split by Brian Norris]
Brian Norris [Tue, 31 Jul 2012 22:59:56 +0000 (15:59 -0700)]
cyclegraph: bugfix - graph reachability was reversed
[Split from Brian Demsky's commit]
Brian Norris [Tue, 31 Jul 2012 22:50:07 +0000 (15:50 -0700)]
cyclegraph: add destructor, use 'const' appropriately
[Split from Brian Demsky's larger commit]
Brian Norris [Tue, 31 Jul 2012 22:41:35 +0000 (15:41 -0700)]
nodestack: document pop_restofstack()
Brian Demsky [Wed, 18 Jul 2012 03:36:07 +0000 (20:36 -0700)]
Add basic reads from support
Now we need to use the cyclegraph to eliminate bad executions...
Brian Demsky [Tue, 17 Jul 2012 23:02:27 +0000 (16:02 -0700)]
Make stack popping explicit.
The current check will break in subtle ways as soon as we start to
add reads_from support as the thread selection is no longer the
only backtracking choice.
Brian Norris [Tue, 17 Jul 2012 05:44:40 +0000 (22:44 -0700)]
nodestack: re-insert falsely-declared "dead code"
"remove dead code... loop entrance condition is i<backtrack.size(). Therefore,
this branch can never be taken."
False.
While the entrance condition prevents 'i == backtrack.size()', the loop may
exit with 'i == backtrack.size()', since i++ is executed after the last
iteration. Since we do not expect or want this condition to occur, though, I
transform this to a documented ASSERT().
Brian Norris [Tue, 17 Jul 2012 05:26:25 +0000 (22:26 -0700)]
config: automatically determine BIT48
GCC says we can use _LP64, and LLVM (clang) imitates, so this can be
automatically redefined for 32-bit/64-bit architectures.
Also, add config.h to Makefile so it triggers a rebuild. This is still a blunt
mechanism, but it's fine for now.
Brian Demsky [Tue, 17 Jul 2012 05:28:01 +0000 (22:28 -0700)]
Merge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/model-checker
Brian Demsky [Tue, 17 Jul 2012 05:26:54 +0000 (22:26 -0700)]
remove dead code... loop entrance condition is i<backtrack.size(). Therefore,
this branch can never be taken. remove it as it is confusing.
Brian Norris [Tue, 17 Jul 2012 05:07:26 +0000 (22:07 -0700)]
action: fix uint64_t printf warning
Brian Demsky [Mon, 16 Jul 2012 23:24:53 +0000 (16:24 -0700)]
no need to store into the object field... this will probably just lead to weird bugs in the future where
people wrongly assume reasonable values in the field...