c11tester.git
12 years agoaction: utilize release sequence(s) for synchronization
Brian Norris [Wed, 15 Aug 2012 00:37:32 +0000 (17:37 -0700)]
action: utilize release sequence(s) for synchronization

Instead of checking only the trivial release sequence (i.e., a read-acquire
reads directly from a write-release) for establishing synchronization, make use
of the ModelChecker's more complete 'get_release_seq_head()' functionality,
then loop through all release heads and synchronize with each. This is
necessary because a read-acquire may synchronize with more than one
store-release.

Note that this step only implements support based on present knowledge. The
incomplete knowledge of the modification order, as given in mo_graph, as well
as "reading from the future" may require lazy checking.

12 years agomodel: add release sequence support
Brian Norris [Wed, 15 Aug 2012 00:21:29 +0000 (17:21 -0700)]
model: add release sequence support

The ModelChecker now can find the head(s) of the release sequence(s) with which
a particular ModelAction (read-acquire) will synchronize.

The ModelChecker::release_seq_head function can locate a release sequence head
for a given ModelAction, based on information at a given moment. That is, it
knows happens-before and modification information for the present, but some
decisions may need to be made in the future as reads-from promises are
fulfilled or modification ordering is observed by future reads and writes.

Lazy checking for the latter cases has yet to be implemented.

12 years agomodel: change pointer spacing style
Brian Norris [Fri, 24 Aug 2012 00:52:46 +0000 (17:52 -0700)]
model: change pointer spacing style

12 years agoaction: (assertion) disallow out-of-order synchronization
Brian Norris [Thu, 23 Aug 2012 02:15:04 +0000 (19:15 -0700)]
action: (assertion) disallow out-of-order synchronization

We build our ModelChecker around the assumption that synchronization never
occurs counter to the execution order. This assertion lets us know if that
fails.

12 years agomodel: improve some promise-related comments
Brian Norris [Thu, 23 Aug 2012 02:08:50 +0000 (19:08 -0700)]
model: improve some promise-related comments

12 years agoaction: update 'reads_from' field before synchronization
Brian Norris [Mon, 20 Aug 2012 22:59:25 +0000 (15:59 -0700)]
action: update 'reads_from' field before synchronization

As the ModelChecker's release/acquire functionality gets more complex,
it makes more sense to assign the ModelAction::reads_from field before
checking synchronization. Currently, this makes no change in behavior.

12 years agonodestack: turn magic promise numbers into enum + typedef
Brian Norris [Wed, 22 Aug 2012 23:45:55 +0000 (16:45 -0700)]
nodestack: turn magic promise numbers into enum + typedef

Document the enum properly, since it's quite unclear what these flags really
mean.

12 years agonodestack, model: use uniform spacing, style
Brian Norris [Wed, 22 Aug 2012 23:02:48 +0000 (16:02 -0700)]
nodestack, model: use uniform spacing, style

12 years agonodestack: don't use uint32_t
Brian Norris [Wed, 22 Aug 2012 22:56:13 +0000 (15:56 -0700)]
nodestack: don't use uint32_t

uint32_t (and similar) should only be used when an exact field-size is needed
across platforms with different integer sizes. In this case, we only need an
unsigned type, so just use unsigned int.

12 years agonodestack: remove unnecessary typedefs
Brian Norris [Wed, 22 Aug 2012 22:51:43 +0000 (15:51 -0700)]
nodestack: remove unnecessary typedefs

These typedefs are used once or twice and don't add much meaning.

12 years agocyclegraph: add public CycleGraph::checkReachable()
Brian Norris [Fri, 17 Aug 2012 00:06:31 +0000 (17:06 -0700)]
cyclegraph: add public CycleGraph::checkReachable()

The private CycleGraph::checkReachable() function can be useful externally,
when provided with two ModelActions. This implements a small wrapper for public
usage.

12 years agomodel: correct mo_graph comment
Brian Norris [Tue, 21 Aug 2012 06:58:38 +0000 (23:58 -0700)]
model: correct mo_graph comment

My understanding of the mo_graph was incorrect, due to some confusion over the
CycleGraph interfaces. Correct this.

12 years agocyclegraph: straighten out header vs. implementation vs. usage
Brian Norris [Tue, 21 Aug 2012 06:56:10 +0000 (23:56 -0700)]
cyclegraph: straighten out header vs. implementation vs. usage

The CycleGraph::addEdge and CycleGraph::addRMWEdge functions were a little
confusing to use, since their implementation and header prototypes had
different parameter naming. This swapped the 'to' and 'from' naming, such that
it appeared as if the addEdge() users were adding edges in the reverse
direction. The functionality was not actually incorrect, but my understanding
was...

This corrects the naming and switches the order of the arguments.

12 years agopromise: rewrite into a simpler header file
Brian Norris [Mon, 20 Aug 2012 19:11:42 +0000 (12:11 -0700)]
promise: rewrite into a simpler header file

12 years agoMakefile: rewrite header dependencies
Brian Norris [Fri, 10 Aug 2012 18:52:36 +0000 (11:52 -0700)]
Makefile: rewrite header dependencies

We shouldn't need to add new files in 3 different places. Automatically
generate most of this using GCC's '-MM' option.

12 years agomodel: document ModelChecker::mo_graph
Brian Norris [Mon, 20 Aug 2012 18:22:32 +0000 (11:22 -0700)]
model: document ModelChecker::mo_graph

The modification order graph is a complex data structure, and there are a few
pieces of high-level information that should be noted. For example, the edges
are actually directed from most recent to oldest, which is somewhat in reverse
of the usage in the literature, where

  a --mo--> b

means that a comes *before* b in the modification order. This convention can be
changed in the future, but it should be documented here.

12 years agomodel: rename 'cyclegraph' to 'mo_graph'
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.

12 years agomodel: don't "leak" promises
Brian Norris [Mon, 20 Aug 2012 19:53:28 +0000 (12:53 -0700)]
model: don't "leak" promises

12 years agotest/Makefile: remove pointless variable
Brian Norris [Fri, 17 Aug 2012 00:40:40 +0000 (17:40 -0700)]
test/Makefile: remove pointless variable

12 years ago.gitignore: don't ignore /model anymore
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.

12 years agoMerge branch 'norris'
Brian Norris [Thu, 16 Aug 2012 17:40:59 +0000 (10:40 -0700)]
Merge branch 'norris'

12 years agoschedule: make print() const
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.

12 years agomodel: privatize check_current_action()
Brian Norris [Fri, 10 Aug 2012 22:27:38 +0000 (15:27 -0700)]
model: privatize check_current_action()

12 years agothreads: correct 'swap()' documentation
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.

12 years agomain, model: don't 'initialize' system_context
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()).

12 years agoaction: don't merge twice in read_from()
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.

12 years agoaction: rework/rename 'synchronized()' to 'synchronize_with()'
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.

12 years agomodel: remove useless return code from add_thread()
Brian Norris [Fri, 10 Aug 2012 21:51:27 +0000 (14:51 -0700)]
model: remove useless return code from add_thread()

12 years agoschedule, threads: update comments, const's
Brian Norris [Fri, 10 Aug 2012 21:43:19 +0000 (14:43 -0700)]
schedule, threads: update comments, const's

12 years agomodel: make scheduler private
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()'.

12 years agomain, model: move main execution loop into ModelChecker class
Brian Norris [Fri, 10 Aug 2012 21:23:29 +0000 (14:23 -0700)]
main, model: move main execution loop into ModelChecker class

12 years agocyclegraph: improve comments, use initializer list
Brian Norris [Tue, 14 Aug 2012 22:25:11 +0000 (15:25 -0700)]
cyclegraph: improve comments, use initializer list

12 years agohashtable: document get_safe_ptr()
Brian Norris [Sat, 11 Aug 2012 01:11:12 +0000 (18:11 -0700)]
hashtable: document get_safe_ptr()

12 years agohashtable: rename ensureptr() to 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.

12 years agohashtable: bugfix - increment size only when new bins are linked
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.

12 years agohashtable: some refactoring, signed-ness
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.

12 years agomodel: reformat/refactor some code
Brian Norris [Fri, 10 Aug 2012 19:21:12 +0000 (12:21 -0700)]
model: reformat/refactor some code

12 years agoimpatomic.h: fixup spacing
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.

12 years agothreads: trivial change
Brian Norris [Wed, 8 Aug 2012 23:36:10 +0000 (16:36 -0700)]
threads: trivial change

12 years agomodel: revert unnecessary parameter for print_summary()
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

12 years agoadd basic parameter handling
Brian Norris [Wed, 8 Aug 2012 22:22:25 +0000 (15:22 -0700)]
add basic parameter handling

12 years agocommon: add error_msg() function
Brian Norris [Wed, 8 Aug 2012 22:00:13 +0000 (15:00 -0700)]
common: add error_msg() function

12 years agorun.sh: pass command-line arguments through to test program
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.

12 years ago.gitignore: ignore other vim swap file type
Brian Norris [Wed, 8 Aug 2012 23:33:00 +0000 (16:33 -0700)]
.gitignore: ignore other vim swap file type

12 years agomodel: reformat some code
Brian Norris [Wed, 8 Aug 2012 15:59:52 +0000 (08:59 -0700)]
model: reformat some code

12 years agomain, threads: improve comments regarding thread stepping
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.

12 years agoadd a todo flag to a comment so it won't get lost... low priority item though
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

12 years agoMakefile: fix config.h dependencies
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.

12 years agoMerge branch 'brian'
Brian Norris [Thu, 2 Aug 2012 23:55:58 +0000 (16:55 -0700)]
Merge branch 'brian'

12 years agoDEBUGGINGNOTES: include gdb info for Linux
Brian Norris [Thu, 2 Aug 2012 23:51:45 +0000 (16:51 -0700)]
DEBUGGINGNOTES: include gdb info for Linux

12 years agobug fix
Brian Demsky [Thu, 2 Aug 2012 22:40:40 +0000 (15:40 -0700)]
bug fix

12 years agorun.sh: fixup run script
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.

12 years agoMakefile: wire up test/ directory for compilation
Brian Norris [Thu, 2 Aug 2012 23:36:29 +0000 (16:36 -0700)]
Makefile: wire up test/ directory for compilation

12 years agoMakefile: split part into a common makefile (common.mk)
Brian Norris [Thu, 2 Aug 2012 23:33:16 +0000 (16:33 -0700)]
Makefile: split part into a common makefile (common.mk)

12 years agouserprog: move to 'test/' directory
Brian Norris [Thu, 2 Aug 2012 23:27:02 +0000 (16:27 -0700)]
userprog: move to 'test/' directory

12 years agoMakefile: don't build userprog.c from top level
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)

12 years agoblank lines, spacing, etc.
Brian Norris [Thu, 2 Aug 2012 19:55:04 +0000 (12:55 -0700)]
blank lines, spacing, etc.

12 years agonodestack: remove completed @todo
Brian Norris [Thu, 2 Aug 2012 19:35:21 +0000 (12:35 -0700)]
nodestack: remove completed @todo

12 years agonodestack: clean up comments
Brian Norris [Thu, 2 Aug 2012 19:33:43 +0000 (12:33 -0700)]
nodestack: clean up comments

12 years agomodel: do not call isfinalfeasible() too many times
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.

12 years agohashtable: add some documentation
Brian Norris [Thu, 2 Aug 2012 17:59:16 +0000 (10:59 -0700)]
hashtable: add some documentation

12 years agomodel: delete Threads on destruction
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.

12 years agomore reformatting/indentation
Brian Norris [Thu, 2 Aug 2012 17:25:17 +0000 (10:25 -0700)]
more reformatting/indentation

12 years agoforgot about events that happen after an unresolved read... bug fix checked in
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

12 years agofixup whitespace
Brian Norris [Wed, 1 Aug 2012 03:13:17 +0000 (20:13 -0700)]
fixup whitespace

12 years agoaction: add memory_order printing
Brian Norris [Fri, 27 Jul 2012 21:50:15 +0000 (14:50 -0700)]
action: add memory_order printing

12 years agochange test case to match nice one from spec... it works. :)
Brian Demsky [Fri, 27 Jul 2012 09:06:29 +0000 (02:06 -0700)]
change test case to match nice one from spec...  it works.  :)

12 years agobugs...
Brian Demsky [Fri, 27 Jul 2012 08:59:52 +0000 (01:59 -0700)]
bugs...

12 years agoadd some comments
Brian Demsky [Fri, 27 Jul 2012 08:24:24 +0000 (01:24 -0700)]
add some comments

12 years agostandardize names a little
Brian Demsky [Fri, 27 Jul 2012 08:19:07 +0000 (01:19 -0700)]
standardize names a little

12 years agookay...known bugs for my trivial test are out of send future values backwards
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

12 years agofinish promise support
Brian Demsky [Fri, 27 Jul 2012 05:20:54 +0000 (22:20 -0700)]
finish promise support

12 years agomore changes towards keeping track of promises resolved by a given write statement
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

12 years agochanges
Brian Demsky [Thu, 26 Jul 2012 05:59:41 +0000 (22:59 -0700)]
changes

12 years agosome changes towards reading from future writes
Brian Demsky [Wed, 25 Jul 2012 23:11:51 +0000 (16:11 -0700)]
some changes towards reading from future writes

12 years agomove more configurables and add documentation
Brian Demsky [Sat, 21 Jul 2012 02:12:20 +0000 (19:12 -0700)]
move more configurables and add documentation

12 years agomore hashtable fixes
Brian Demsky [Sat, 21 Jul 2012 01:52:55 +0000 (18:52 -0700)]
more hashtable fixes

clean up memory allocation code a bit

12 years agofix some allocation/free bugs when we put non objects into table...
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...

12 years agofix my todo comments so they appear in documentation
Brian Demsky [Fri, 20 Jul 2012 21:45:03 +0000 (14:45 -0700)]
fix my todo comments so they appear in documentation

12 years agoswitch everything over to our own hashtable
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

12 years agohashtable: make more flexible
Brian Demsky [Fri, 20 Jul 2012 21:01:03 +0000 (14:01 -0700)]
hashtable: make more flexible

[Split by Brian Norris]

12 years agoAdd documentation
Brian Demsky [Fri, 20 Jul 2012 21:01:03 +0000 (14:01 -0700)]
Add documentation

[Split by Brian Norris]

12 years agoaction: fix ATOMIC_RMW comments
Brian Norris [Wed, 1 Aug 2012 02:45:49 +0000 (19:45 -0700)]
action: fix ATOMIC_RMW comments

12 years agormw example works
Brian Demsky [Fri, 20 Jul 2012 19:42:42 +0000 (12:42 -0700)]
rmw example works

12 years agotowards making rmw work...
Brian Demsky [Fri, 20 Jul 2012 19:32:42 +0000 (12:32 -0700)]
towards making rmw work...

[Split by Brian Norris]

12 years agoaction: add stub ATOMIC_RMWR and ATOMIC_RMWC
Brian Norris [Wed, 1 Aug 2012 02:25:52 +0000 (19:25 -0700)]
action: add stub ATOMIC_RMWR and ATOMIC_RMWC

12 years agotrivial - whitespace, debugging cleanup, etc.
Brian Norris [Wed, 1 Aug 2012 02:20:16 +0000 (19:20 -0700)]
trivial - whitespace, debugging cleanup, etc.

12 years agoremove libatomic
Brian Demsky [Fri, 20 Jul 2012 05:42:46 +0000 (22:42 -0700)]
remove libatomic

12 years agoaction: switch from "libatomic" to C++-spec "memory_order_*" macros
Brian Norris [Wed, 1 Aug 2012 02:14:16 +0000 (19:14 -0700)]
action: switch from "libatomic" to C++-spec "memory_order_*" macros

12 years agopull in most of atomic header file
Brian Norris [Wed, 1 Aug 2012 00:25:38 +0000 (17:25 -0700)]
pull in most of atomic header file

12 years agodon't forget this file
Brian Demsky [Fri, 20 Jul 2012 05:43:07 +0000 (22:43 -0700)]
don't forget this file

12 years agosplit these defs out of other stuff
Brian Demsky [Fri, 20 Jul 2012 00:53:45 +0000 (17:53 -0700)]
split these defs out of other stuff

12 years agoswitch rest over to model checker... might work now
Brian Demsky [Fri, 20 Jul 2012 00:15:12 +0000 (17:15 -0700)]
switch rest over to model checker...  might work now

12 years agofix missing atomic...
Brian Demsky [Fri, 20 Jul 2012 00:06:11 +0000 (17:06 -0700)]
fix missing atomic...

12 years agorewrite macros
Brian Demsky [Thu, 19 Jul 2012 23:55:52 +0000 (16:55 -0700)]
rewrite macros

12 years agoimport header file from specification
Brian Demsky [Thu, 19 Jul 2012 23:18:11 +0000 (16:18 -0700)]
import header file from specification

taken from n2427.html

12 years agoupdate TODO's
Brian Norris [Wed, 1 Aug 2012 00:13:30 +0000 (17:13 -0700)]
update TODO's

12 years agoAdd RMW support to core.
Brian Demsky [Thu, 19 Jul 2012 21:15:27 +0000 (14:15 -0700)]
Add RMW support to core.

Eliminate annoying warning.

12 years agomodel: add documentation
Brian Norris [Tue, 31 Jul 2012 23:58:00 +0000 (16:58 -0700)]
model: add documentation

[Split from Brian Demsky's work]

12 years agosmall changes (things still work) towards support RMW
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]