Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
GHC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
alexbiehl-gc
GHC
Commits
68bb5a60
Commit
68bb5a60
authored
26 years ago
by
Keith Wansbrough
Browse files
Options
Downloads
Patches
Plain Diff
[project @ 1999-03-18 14:16:00 by kw217]
Minor documentation fixes, and addition of SRT explanation.
parent
3159f57d
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
docs/rts/rts.verb
+33
-11
33 additions, 11 deletions
docs/rts/rts.verb
with
33 additions
and
11 deletions
docs/rts/rts.verb
+
33
−
11
View file @
68bb5a60
...
...
@@ -25,7 +25,7 @@
\newcommand{\note}[1]{{{\bf Note:}\sl #1}}
\newcommand{\ToDo}[1]{{{\bf ToDo:}\sl #1}}
\newcommand{\Arg}[1]{\mbox{${\tt arg}_{#1}$}}
\newcommand{\bottom}{
bottom} % foo, can't remember the symbol name
\newcommand{\bottom}{
\perp}
\newcommand{\secref}[1]{Section~\ref{sec:#1}}
\newcommand{\figref}[1]{Figure~\ref{fig:#1}}
...
...
@@ -222,6 +222,8 @@ the same size as pointers to reduce complexity in the code
generator/RTS. It would be useful to relax this restriction, and have
eg. 32-bit Ints on a 64-bit machine.}
% should define terms like SRT, CAF, PAP, etc. here? --KSW 1999-03
\subsection{Subtle Dependencies}
Some decisions have very subtle consequences which should be written
...
...
@@ -925,7 +927,7 @@ the scheduler.
We avoid the need to test return addresses in the machine code
evaluator by pushing a special return address on top of a pointer to
the bytecode return continuation. \figref{hugs-return-stack}
the bytecode return continuation. \figref{hugs-return-stack
1
}
shows the state of the stack just before evaluating the scrutinee.
\begin{figure}[ht]
...
...
@@ -941,7 +943,7 @@ shows the state of the stack just before evaluating the scrutinee.
%\input{hugs_return1.pstex_t}
\end{center}
\caption{Stack layout for evaluating a scrutinee}
\label{fig:hugs-return-stack}
\label{fig:hugs-return-stack
1
}
\end{figure}
This return address rearranges the stack so that the bco pointer is
...
...
@@ -1094,6 +1096,8 @@ Indirections are shorted out.
Update frames pointing to unreachable objects are squeezed out.
\ToDo{Part IV suggests this doesn't happen.}
\item
Adjacent update frames (for different closures) are compressed to a
...
...
@@ -1179,7 +1183,7 @@ An initialisation routine. (Might also be used for finalisation.)
\item
A table of symbols it exports.
Entries in this table consist of the symbol name and the address of the
names value.
name
'
s value.
\item
A table of symbols it imports.
Entries in this table consist of the symbol name and a list of references
...
...
@@ -1237,7 +1241,7 @@ described in the previous part.
The major components of the system are:
\begin{itemize}
\item The scheduler (\secref{s
torage-manag
er-internals})
\item The scheduler (\secref{s
chedul
er-internals})
\item The storage manager (\secref{storage-manager-internals})
\item The evaluators
\item The loader
...
...
@@ -1429,6 +1433,20 @@ and is only present for the following closure types:
\item @RET_*@
\end{itemize}
\ToDo{Expand the following explanation.}
An SRT is basically a vector of pointers to static closures. A
top-level function or thunk will have an SRT (which might be empty),
which points to all the static closures referenced by that function or
thunk. Every non-top-level thunk or function also has an SRT, but
it'll be a sub-sequence of the top-level SRT, so we just store a
pointer and a length in the info table - the pointer points into the
middle of the larger SRT.
At GC time, the garbage collector traverses the transitive closure of
all the SRTs reachable from the roots, and thereby discovers which
CAFs are live.
\item \emph{Profiling info\/}
\ToDo{The profiling info is completely bogus. I've not deleted it
...
...
@@ -2016,7 +2034,9 @@ special.]
There is a fixed set of pre-compiled selector thunks built into the
RTS, representing offsets from 0 to @MAX_SPEC_SELECTOR_THUNK@. The
info tables are labelled @sel_info_$n$@ where $n$ is the offset.
info tables are labelled @__sel_$n$_upd_info@ where $n$ is the offset.
Non-updating versions are also built in, with info tables labelled
@__sel_$n$_noupd_info@.
\end{itemize}
...
...
@@ -2173,7 +2193,7 @@ It contains a \emph{mutable link field} that is used to string together
mutable objects in each old generation.
\item[@IND_PERM@]
f
or lexical profiling, it is necessary to maintain cost centre
F
or lexical profiling, it is necessary to maintain cost centre
information in an indirection, so ``permanent indirections'' are
retained forever. Otherwise they are just like vanilla indirections.
\note{If a permanent indirection points to another permanent
...
...
@@ -2662,6 +2682,7 @@ top, traversing pending-argument sections and activation records
alternately. Next we discuss how it finds the pointers in each of
these two stack regions.
\Subsubsection{Activation records}{activation-records}
An \emph{activation record} is a contiguous chunk of stack,
...
...
@@ -2714,7 +2735,7 @@ The garbage collector traverses a pending argument section from the
top (i.e. lowest memory address). It looks at each word in turn:
\begin{itemize}
\item If it is less than or equal to a small constant @
MAX_STACK_TAG
@
\item If it is less than or equal to a small constant @
ARGTAG_MAX
@
then it treats it as a tag heralding zero or more words of
non-pointers, so it just skips over them.
...
...
@@ -2855,7 +2876,7 @@ when it is no longer live because, whilst it might not be required in
the evaluation of the current expression, it might be required in the
next evaluation.
There are two possible behaviours we mig
t
h want:
There are two possible behaviours we migh
t
want:
\begin{enumerate}
\item
When a CAF is no longer required for the current evaluation, the CAF
...
...
@@ -3073,7 +3094,7 @@ by compiled code:
\item
Whereas compiled code has five different ways of entering a closure
(\secref{
entering-closures
}), interpreted code has only one.
(\secref{
ghc-fun-call
}), interpreted code has only one.
The entry point for interpreted code behaves like slow entry points for
compiled code.
...
...
@@ -3292,6 +3313,7 @@ stack layout is shown in \figref{hugs-return-stack}.
\end{center}
\caption{Stack layout for a Hugs return address}
\label{fig:hugs-return-stack}
% this figure apparently duplicates {fig:hugs-return-stack1} earlier.
\end{figure}
\begin{figure}[ht]
...
...
@@ -3321,7 +3343,7 @@ stack layout is shown in \figref{hugs-return-stack}.
%\input{hugs_ret2.pstex_t}
\end{center}
\caption{Stack layout on entering a Hugs return address with an unboxed value}
\label{fig:hugs-return-int}
\label{fig:hugs-return-int
1
}
\end{figure}
\begin{figure}[ht]
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment