Explain why a null pointer sentinel must be pushed on the stack.
authorBen Pfaff <blp@cs.stanford.edu>
Thu, 14 Feb 2008 08:17:14 +0000 (08:17 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Thu, 14 Feb 2008 08:17:14 +0000 (08:17 +0000)
From Valentin I. Spitkovsky <vspitkovsky@yahoo.com>.

doc/userprog.texi

index 0872f798bd170d4319bdaf9a434b5cf156970c45..5bd0bb2b0d5681a14ceeeca5e49d9ff2b1ef724c 100644 (file)
@@ -1090,10 +1090,11 @@ pointers.
 
 Then, push the address of each string plus a null pointer sentinel, on
 the stack, in right-to-left order.  These are the elements of
-@code{argv}.  The order ensures that @code{argv[0]} is at the lowest
-virtual address.  Word-aligned accesses are faster than unaligned
-accesses, so for best performance round the stack pointer down to a
-multiple of 4 before the first push.
+@code{argv}.  The null pointer sentinel ensures that @code{argv[argc]}
+is a null pointer, as required by the C standard.  The order ensures
+that @code{argv[0]} is at the lowest virtual address.  Word-aligned
+accesses are faster than unaligned accesses, so for best performance
+round the stack pointer down to a multiple of 4 before the first push.
 
 Then, push @code{argv} (the address of @code{argv[0]}) and @code{argc},
 in that order.  Finally, push a fake ``return address'': although the