Brian Norris [Thu, 14 Jun 2012 06:28:10 +0000 (23:28 -0700)]
snapshot: remove 'extern "C"' block
We do not need to wrap this function in 'extern "C"' for two reasons:
1) It's not actually exported and used in C code
2) You only need this sort of declaration in the header file that may be
included in both C++ and C compilation. But snapshot.cc should only be
compiled by the C++ compiler, and snapshot.h is not included in any C
compilation.
Brian Norris [Thu, 14 Jun 2012 06:20:43 +0000 (23:20 -0700)]
snapshot-interface: don't export SnapshotGlobalSegments()
SnapshotGlobalSegments() is only used within snapshot-interface.cc, so declare
it static and remove it from the header.
Brian Norris [Thu, 14 Jun 2012 06:13:29 +0000 (23:13 -0700)]
snapshot: replace DumpIntoLog() with lighter-weight debugging
This file I/O "debug" messaging gets in the way. Make the debugging code simple
and succinct, or don't put it in at all. Now, you can enabled SnapShot
debugging by adding this near the top of snapshot.cc:
#define CONFIG_DEBUG
Brian Norris [Thu, 14 Jun 2012 05:08:57 +0000 (22:08 -0700)]
snapshot: move comments to the right place
Subramanian Ganapathy [Wed, 13 Jun 2012 20:07:22 +0000 (13:07 -0700)]
Removing comment asking to fix fork(), has been fixed now
Subramanian Ganapathy [Wed, 13 Jun 2012 19:58:54 +0000 (12:58 -0700)]
fixing calloc(), fix Makefile
Adding sbrk() calls and hooked into free also to avoid freeing sbrked memory...
checked both fork and paged implementation. seems to work Also everytime we
switch between fork and paged impl, we need to rebuild so adding snapshot.h as
dependency to mymemory.cc in makefile
Brian Norris [Thu, 7 Jun 2012 00:34:47 +0000 (17:34 -0700)]
libatomic: perform write before context switch
Atomic actions block a thread at the "switch_to_master" function call, so under
the current structure (which isn't quite fit for relaxed modeling yet...) we
should perform the memory write before calling "switch_to_master".
If not, we can observe sequences like the following, where x is an atomic
variable. All actions are seq_cst:
Initially, x = 0
Thread Action
------ ------
1 r1 = x; // r1 = 0
1 x = r1 + 1; // x = 1, not stored yet?
2 r2 = x; // r2 = 0
2 x = r2 // x = 1, not stored yet?
Then, depending on scheduling, Thread 1 or Thread 2 might complete first, with
its write being performed *after* it receives control again.
Brian Norris [Wed, 6 Jun 2012 19:22:07 +0000 (12:22 -0700)]
.gitignore: ignore docs directory
Brian Norris [Wed, 6 Jun 2012 16:48:54 +0000 (09:48 -0700)]
action: fix some comments
Brian Norris [Wed, 6 Jun 2012 16:46:44 +0000 (09:46 -0700)]
Makefile: have `mrclean' depend on `clean'
Brian Demsky [Wed, 6 Jun 2012 09:16:04 +0000 (02:16 -0700)]
more comments
Brian Demsky [Wed, 6 Jun 2012 09:01:38 +0000 (02:01 -0700)]
more doc changes
Brian Demsky [Wed, 6 Jun 2012 08:53:30 +0000 (01:53 -0700)]
more documentation
Brian Demsky [Wed, 6 Jun 2012 08:46:49 +0000 (01:46 -0700)]
1) Add more comments.
2) Change is_dependent to is_synchronizing and make it capture actual synchronizing behavior...
3) Add more support for RMW operations.
Brian Demsky [Wed, 6 Jun 2012 07:45:15 +0000 (00:45 -0700)]
more documentation
Brian Demsky [Wed, 6 Jun 2012 07:13:23 +0000 (00:13 -0700)]
more docs
Brian Demsky [Wed, 6 Jun 2012 06:51:02 +0000 (23:51 -0700)]
add support for docs
Brian Norris [Tue, 5 Jun 2012 19:54:52 +0000 (12:54 -0700)]
snapshot: zero out entire siginfo_t
We should initialize this variable to all zeros, just to be safe.
Brian Demsky [Mon, 4 Jun 2012 05:35:41 +0000 (22:35 -0700)]
Changes needed to run on OS X... Example runs on my laptop now. No need to push code back and forth to test...
Out of time for fun hack, have to get back to real work now. :(
Brian Demsky [Mon, 4 Jun 2012 01:05:39 +0000 (18:05 -0700)]
hack some stuff towards running on mac... unrelated bugs still..
Brian Norris [Thu, 31 May 2012 18:40:25 +0000 (11:40 -0700)]
snapshot: remove duplicate definition of finalize()
finalize() was moved to snapshot-interface.h but wasn't removed from snapshot.h
Brian Norris [Thu, 31 May 2012 02:49:03 +0000 (19:49 -0700)]
use EXIT_SUCCESS and EXIT_FAILURE
We were wildly inconsistent with our exit status. We might as well follow the
C standard.
Brian Norris [Thu, 31 May 2012 02:42:07 +0000 (19:42 -0700)]
userprog: use atomics allocated on "heap"
Just for kicks, since snapshotting is working properly. We might as well test
this.
Subramanian Ganapathy [Wed, 30 May 2012 23:52:38 +0000 (16:52 -0700)]
Adding fixes for the fork based implementation, also removed some redundant code pointed to by Prof. Demsky
Brian Demsky [Wed, 30 May 2012 07:23:38 +0000 (00:23 -0700)]
check in message
Brian Norris [Tue, 29 May 2012 20:37:33 +0000 (13:37 -0700)]
snapshot-interface: replace Subramanian's /proc/*/maps checking
Subramanian's code needed rewriting. It didn't actual snapshot any globals, and
it was also written so that it would never snapshot libmodel.so. I rewrite this
code and fix these problems, after Brian Demsky has fixed the problem with
dynamic linking of the HandlePF() code.
Brian Demsky [Wed, 30 May 2012 07:18:44 +0000 (00:18 -0700)]
fix bug...this is another evil one...
Brian Norris [Wed, 30 May 2012 15:06:02 +0000 (08:06 -0700)]
node: do not use static member variable
Static member variables of a class are going to be snapshotted. Move them so
they aren't static in order to prevent this.
(This can create interesting behavior, where the "total number of nodes
created" is decreasing at times!)
Brian Norris [Wed, 30 May 2012 06:35:15 +0000 (23:35 -0700)]
snapshot: move declarations to the right interface header
We should have a minimal set of code/declarations in the snapshot-interface.h
header. And it should not include other headers unless necessary. With this
change, the model checker code only needs to use snapshot-interface.h.
Brian Norris [Wed, 30 May 2012 06:29:06 +0000 (23:29 -0700)]
snapshot: rename MyFuncPtr to VoidFuncPtr
Better descriptive name.
Brian Norris [Wed, 30 May 2012 06:20:37 +0000 (23:20 -0700)]
snapshot: rename USE_CHECKPOINTING to USE_MPROTECT_SNAPSHOT
"Checkpointing" is a generic name for either method. USE_MPROTECT_SNAPSHOT is a
more descriptive name.
Brian Norris [Tue, 29 May 2012 20:22:09 +0000 (13:22 -0700)]
snapshot-interface: don't redefine PAGESIZE
Brian Norris [Tue, 29 May 2012 19:30:35 +0000 (12:30 -0700)]
snapshot-interface: bugfix - fixup array indeces
When removing code, I missed a few magic numbers in the code.
Brian Norris [Tue, 29 May 2012 17:46:42 +0000 (10:46 -0700)]
nodestack: push 'create_cv' functionality responsibility back to ModelChecker
It doesn't really make sense to have NodeStack call the 'create_cv' function
for a ModelAction. This commit separates the functionality of 'explore_action'
from 'create_cv', calling each separately from the higher-level
'check_current_action' model-checking function.
Brian Norris [Tue, 29 May 2012 17:29:59 +0000 (10:29 -0700)]
model: thread creation establishes synchronization
First, I add a get_parent_action() wrapper which finds either the last action
in the current thread (get_last_action()) or if NULL, finds the parent
thread-creation action.
Then, using this functionality, I provide the correct 'parent' to the
explore_action() function, which performs the clock-vector creation.
Brian Norris [Tue, 29 May 2012 17:21:06 +0000 (10:21 -0700)]
threads: add 'creation' information
The 'creation' field will hold the ModelAction that created the thread. For the
main user-thread, this is NULL.
Brian Norris [Tue, 29 May 2012 17:17:23 +0000 (10:17 -0700)]
libthreads: pass 'class Thread' object as ModelAction 'location'
Currently, the 'location' parameter is unused for THREAD_CREATE. I need to
provide a reference from a Thread object to the ModelAction which created it,
so I will use this parameter as an entry point into the ModelChecker, which can
build the necessary reference later.
Brian Norris [Mon, 28 May 2012 19:58:56 +0000 (12:58 -0700)]
model: move bookkeeping to add_action_to_lists()
I keep a lot of bookkeeping info for efficiently locating ModelActions (e.g.,
in lists, maps, vectors). Let's just perform the dirty calculations in a single
function to help separate logical functions a little better.
Brian Norris [Mon, 28 May 2012 19:45:54 +0000 (12:45 -0700)]
model: set 'last action in thread' as an action's parent
This is a step toward synchronizing clock vectors properly: on exploration of
an action, we use only the last action in the current thread as the 'parent'
(or NULL).
Note that this still does not include the parent thread in determining each
ModelAction's parent.
Brian Norris [Mon, 28 May 2012 19:42:54 +0000 (12:42 -0700)]
model: log the last action in each thread
The last action in each thread is needed for some model-checking computations.
This could be expanded to a full-fledged per-thread list if needed...
Brian Norris [Mon, 28 May 2012 19:20:01 +0000 (12:20 -0700)]
nodestack: compute parent ModelAction externally
For a particular ModelAction, the 'parent' may be the last action in the
current thread, or otherwise, the action in the parent thread that created the
current thread. This calculation is not suitable for within the NodeStack (and
the current implementation is wrong, taking the last action performed by *any*
thread as the parent). Thus, I set up the method calls to pass the 'parent' to
explore_action() and leave the details to further work.
Brian Norris [Mon, 28 May 2012 19:12:04 +0000 (12:12 -0700)]
clockvector: fixup initialization
Two related fixes:
Even if parent is NULL, pass the current ModelAction to ClockVector
constructor.
When no parent is present, do not make special case for initializing
clock[0] = 1. This is only correct for a single case (the root Action)
and is already handled in other ways.
Brian Norris [Mon, 28 May 2012 17:16:34 +0000 (10:16 -0700)]
nodestack: construct Node with 'number of threads', not 'parent node'
I don't really want to base the number of threads off of a 'parent'; I can
just record the global 'number of threads' as a Node parameter.
Brian Norris [Sat, 26 May 2012 02:17:51 +0000 (19:17 -0700)]
model: add obj_thrd_map
Provides a mapping of ModelActions so that we can efficiently sort through the
actions on a particular object (memory location) in a particular thread.
Brian Norris [Sat, 26 May 2012 01:35:27 +0000 (18:35 -0700)]
Makefile: add 'make debug'
This is sort of hacky, but it works! Now (after cleaning), you can recompile
with 'make debug' to enable my debugging features (not Subramanian's).
Brian Norris [Sat, 26 May 2012 02:19:15 +0000 (19:19 -0700)]
action: enhance print() message
Include clock vector, realign
Brian Norris [Sat, 26 May 2012 02:16:06 +0000 (19:16 -0700)]
nodestack: create ModelAction clock vectors
Only create the clock vector if the ModelAction will be retained in our
nodestack, and hence will be used for synchronization, etc.
Brian Norris [Sat, 26 May 2012 02:13:36 +0000 (19:13 -0700)]
action: add create_cv() and read_from()
These functions provide basic wrapper functionality for creating and updating
the clock vector for a particular ModelAction.
Brian Norris [Sat, 26 May 2012 03:28:58 +0000 (20:28 -0700)]
clockvector: bugfix - fixup vector initialization, size
This fixes a few bugs in ClockVector:
- The parent-less vector is the initial-thread creation, so set its vector
clock[0] = 1
- The clock vector's data should be initialized to 0
- A clock vector cannot determine its size simply by the size of its parent (+1
if 'act' is THREAD_CREATE); other threads could have been created, giving an
inconsistent result here. Instead of trying to be smart about calculating
num_threads from the parent, then, I just ask for it globally.
Brian Norris [Sat, 26 May 2012 03:28:30 +0000 (20:28 -0700)]
model: add get_num_threads()
Brian Norris [Sat, 26 May 2012 02:36:06 +0000 (19:36 -0700)]
clockvector: fixup print message
Brian Norris [Wed, 16 May 2012 19:45:03 +0000 (12:45 -0700)]
clockvector: add print() method
Brian Norris [Wed, 16 May 2012 18:45:04 +0000 (11:45 -0700)]
action: add clock vector field, destructor
Brian Norris [Sat, 26 May 2012 02:00:37 +0000 (19:00 -0700)]
action: use proper location comparison
Now that snapshotting is in place for the initial state, stack allocation is
deterministic across executions, so we can compare stack-allocated addresses
again.
Brian Norris [Sat, 26 May 2012 01:44:23 +0000 (18:44 -0700)]
clockvector: add snapshotting new/delete operators
Brian Norris [Sat, 26 May 2012 01:28:49 +0000 (18:28 -0700)]
rename snapshotStack -> SnapshotStack
Brian Norris [Sat, 26 May 2012 01:23:44 +0000 (18:23 -0700)]
snapshot: remove #include, use snapshot_id typedef
Brian Norris [Sat, 26 May 2012 01:10:58 +0000 (18:10 -0700)]
snapshot-interface: cleanup interface header
The MyString type does not belong in an interface header. It's only used in one
file, so move its typedef locally.
Remove/move a bunch of misplaced #includes.
There's an unnecessary forward declaration of class snapshotStack.
Brian Norris [Sat, 26 May 2012 01:00:10 +0000 (18:00 -0700)]
model: remove scheduler comment
It's being snapshotted now.
Brian Norris [Sat, 26 May 2012 00:59:13 +0000 (17:59 -0700)]
model: don't clear thread_map (snapshot)
The thread_map structure is being snapshotted, so no need to clear it.
Brian Norris [Sat, 26 May 2012 00:11:09 +0000 (17:11 -0700)]
model: don't reset action_trace manually
Snapshotting takes care of this one
Brian Norris [Thu, 24 May 2012 18:33:36 +0000 (11:33 -0700)]
main: take/revert snapshots
Use basic snapshotting for 'reset_to_initial_state()'.
Brian Norris [Sat, 26 May 2012 00:53:56 +0000 (17:53 -0700)]
model: make thread_map heap allocated
I want to snapshot this structure, so make it heap-allocated.
Brian Norris [Fri, 25 May 2012 23:50:55 +0000 (16:50 -0700)]
action: add all action_lists to snapshot...
Brian Norris [Sat, 26 May 2012 00:14:56 +0000 (17:14 -0700)]
common: remove unneeded macros/includes
Brian Norris [Sat, 26 May 2012 00:14:18 +0000 (17:14 -0700)]
threads: fixup stack allocation (snapshotting...)
Brian Norris [Thu, 24 May 2012 18:31:39 +0000 (11:31 -0700)]
snapshot: remove time information
Why do we need timestamps? This is unneeded extra code and might cause
problems.
Brian Norris [Fri, 25 May 2012 23:45:37 +0000 (16:45 -0700)]
snapshot: fix indentation
Brian Norris [Fri, 25 May 2012 00:14:30 +0000 (17:14 -0700)]
snapshot: use %p for printing pointers
Brian Norris [Fri, 25 May 2012 23:13:02 +0000 (16:13 -0700)]
more allocation fixes (use snapshotting)
Brian Norris [Fri, 25 May 2012 23:05:23 +0000 (16:05 -0700)]
nodestack: bugfix - fixup allocators for vectors
Brian Norris [Thu, 24 May 2012 18:32:55 +0000 (11:32 -0700)]
add more classes to snapshotting region
Classes that don't use MyAlloc or MEMALLOC are snapshotted by default.
Brian Norris [Fri, 25 May 2012 00:23:38 +0000 (17:23 -0700)]
mymemory: use the right *&^% allocator!!
We're using MYMALLOC in the global new/delete instead of defaulting to
snapshottable malloc, as planned. What a stupid bug.
Also extend new/delete operators to be sure.
Brian Norris [Thu, 24 May 2012 23:39:08 +0000 (16:39 -0700)]
snapshot: fix EOL spaces
Brian Demsky [Thu, 24 May 2012 20:32:55 +0000 (13:32 -0700)]
wow, this is a nasty bug...
the last part of the snapshot bug is the following:
we snapshot the user threads stack... when we get a seg fault,
the signal handler is using the same write protected stack...
obviously this is going to cause problems. luckily there is support
for a special stack for the signal handler. this checkin switches
the signal handler to run on a different stack than the program stack.
Brian Demsky [Thu, 24 May 2012 19:09:39 +0000 (12:09 -0700)]
fix one segfault bug...something is still strange, but has to do with stack
Brian Demsky [Thu, 24 May 2012 18:50:19 +0000 (11:50 -0700)]
factor page alignment into function call...place near existing call
Brian Demsky [Thu, 24 May 2012 18:40:14 +0000 (11:40 -0700)]
fix page alignment issue...
Brian Norris [Thu, 24 May 2012 17:57:20 +0000 (10:57 -0700)]
snapshot: use perror() on failed library calls
This will print more informative messages when we fail.
Brian Norris [Thu, 24 May 2012 17:32:19 +0000 (10:32 -0700)]
mymemory: define the "opposite" of MEMALLOC
We may want an identifier to show that a particular class is intended to be
snapshotted.
Brian Norris [Thu, 24 May 2012 17:31:50 +0000 (10:31 -0700)]
mymemory: include some spacing
Brian Norris [Mon, 21 May 2012 19:33:12 +0000 (12:33 -0700)]
fixup EOL whitespace
Brian Norris [Mon, 21 May 2012 19:16:30 +0000 (12:16 -0700)]
snapshot: use 'SSDEBUG', not 'DEBUG'
Brian Norris [Mon, 21 May 2012 19:13:33 +0000 (12:13 -0700)]
model: remove incorrect #undef
Don't 'undef' something; rename it. Anyway, this is unnecessary now, since
someone renamed the new DEBUG.
Brian Norris [Mon, 21 May 2012 18:59:02 +0000 (11:59 -0700)]
userprog: use modulo
Increasing the number of loops is useless unless we have modulo here... I
don't know why this was changed by Subramanian.
Brian Norris [Mon, 21 May 2012 18:58:26 +0000 (11:58 -0700)]
libthreads: fix thrd_create() to use typedef'd start_routine
Brian Norris [Mon, 21 May 2012 18:51:07 +0000 (11:51 -0700)]
fix indentation + spacing, esp. for MEMALLOC macro
Brian Norris [Mon, 21 May 2012 18:32:56 +0000 (11:32 -0700)]
mymemory: fix indentation, spacing
Brian Norris [Mon, 21 May 2012 18:24:43 +0000 (11:24 -0700)]
nodestack: allocate from "mymemory" region
Brian Norris [Mon, 21 May 2012 18:07:44 +0000 (11:07 -0700)]
Merge commit: branch 'work'
tree.{cc,h} were replaced with NodeStack. (Will need to update them)
Other trivial conflicts in Makefile and model.h
Conflicts:
Makefile
model.h
tree.cc
tree.h
Brian Norris [Mon, 21 May 2012 17:57:16 +0000 (10:57 -0700)]
snapshot: remove references to libmymemory.so
This library doesn't exist any more.
Brian Norris [Mon, 21 May 2012 17:55:28 +0000 (10:55 -0700)]
snapshot: move local defines after #includes
Prevents accidental dependencies, where a header *might* use PAGESIZE, e.g.
Brian Norris [Mon, 21 May 2012 17:52:46 +0000 (10:52 -0700)]
main: clear out redundant comments
We don't really need these. I can read the source :)
Brian Norris [Mon, 21 May 2012 17:32:34 +0000 (10:32 -0700)]
common: disable debugging
Note to others: do not enable debugging in the checked-in code. It is for
testint purposes only.
Brian Norris [Mon, 21 May 2012 17:32:05 +0000 (10:32 -0700)]
run.sh: provide gdb option
Brian Norris [Mon, 21 May 2012 17:05:47 +0000 (10:05 -0700)]
Makefile: only build a single shared library
Now that everything is uniform, we can easily just build a single library.
Brian Norris [Mon, 21 May 2012 16:47:05 +0000 (09:47 -0700)]
Makefile: clean up Makefile
There are a number of inconsistencies and superfluous arguments:
- For libmymemory, we don't need (or want) to hardcode a shared library
relative path
- For libmodel, we don't really need the 'soname' parameter
- Linking C++ probably should be done with the C++ compiler, not the C compiler
- We don't need CPPFLAGS for linking-only stages
- We want to use LDFLAGS for an early-stage linking rather than the late-stage
linking of the user program
Overall, simpler is better
Brian Norris [Mon, 21 May 2012 16:38:50 +0000 (09:38 -0700)]
Makfile: remove MEMCPPFLAGS, more uniform command format
Brian Demsky [Mon, 21 May 2012 07:40:46 +0000 (00:40 -0700)]
remove lines from other files
Brian Demsky [Mon, 21 May 2012 07:25:37 +0000 (00:25 -0700)]
Found new way to fix emacs issue.. There are directory level preferences.
Remove file-level emacs comment and replace with directory level overrides.