Finish stack walking, mark+sweep for GC
diff --git a/doc/filesystem.rst b/doc/filesystem.rst
index fc8a025..df5373e 100644
--- a/doc/filesystem.rst
+++ b/doc/filesystem.rst
@@ -3,15 +3,15 @@
 
 Filesystem drivers are still a work in progress. To test a file system you will
 want to create and mount a virtual block device. The makefile in ``src/kernel``
-will generate an ``hd0.img`` EXT2 disk image for you automatically. The default
-size is 32 megabytes, but you can create your own of any size if you want. Once
-the image has been created it will be loaded by QEMU automatically.
+will generate an ``hd0_ext2.img`` EXT2 disk image for you automatically. The
+default size is 32 megabytes, but you can create your own of any size if you
+want. Once the image has been created it will be loaded by QEMU automatically.
 
 In order to write to the virtual hard disk from your host operating system you
 should mount it. The ``make mount`` command in ``src/kernel`` mount the image to
-``$(BLUEJAY_ROOT)/mnt``. It will automatically give read and write permissions
-to the current user. This operation uses ``sudo`` internally, you will be
-prompted for your password.
+``$(BLUEJAY_ROOT)/mnt``. If you are using an EXT2 filesystem you should probably
+change the owner of that directory once it is mounted so that you can write to
+it.
 
 Virtual Filesystem
 ------------------
diff --git a/doc/lisp-std.rst b/doc/lisp-std.rst
new file mode 100644
index 0000000..b0a33f8
--- /dev/null
+++ b/doc/lisp-std.rst
@@ -0,0 +1,54 @@
+Lisp Standard Library
+=====================
+
+This provides documentation for every built-in function in the Lisp standard
+library. It is not auto-generated, please update this documentation if you
+change the API in any way.
+
+In general every user-facing API in the standard library should be documented
+here.
+
+Built-in "functions"
+--------------------
+
+.. function:: (if condition true-condition [false-condition])
+
+	Evaluates ``condition``, if it is truthy (non-``nil``) ``true-condition`` is
+	evaluated. Otherwise ``false-condition`` is evaluated. If
+	``false-condition`` is not provided, ``if`` will evaluate to ``nil``.
+
+.. function:: (let1 (variable binding) & body)
+
+	Evaluates ``binding`` and binds it to ``variable``, then evaluates ``body``.
+	After ``body`` is evaluated ``variable`` is unbound.
+
+	.. code-block:: lisp
+
+		(let1 (greeting (greet "John"))
+		  (do-something greeting)
+		  (print greeting))
+		; greeting is no longer bound
+
+.. function:: (gc)
+
+	Force the garbage collector (GC) to run.
+
+Functions
+---------
+
+.. function:: (car pair)
+
+	Return the first item in ``pair``.
+
+.. function:: (cdr pair)
+
+	Return the second (last) item in ``pair``.
+
+.. function:: (cons a b)
+
+	Return a cons-pair containing ``a`` and ``b``.
+
+.. function:: (print val)
+
+	Print out ``val`` to standard output. This will not be formatted as an
+	s-expression, but in a manner more similar to the internal representation.
\ No newline at end of file