/usr/share/doc/sbcl/sbcl-internals/Lazy-Alien-Resolution.html is in sbcl-doc 2:1.4.5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This manual is part of the SBCL software system. See the
README file for more information.
This manual is in the public domain and is provided with absolutely no
warranty. See the COPYING and CREDITS files for more
information. -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Lazy Alien Resolution (SBCL Internals)</title>
<meta name="description" content="Lazy Alien Resolution (SBCL Internals)">
<meta name="keywords" content="Lazy Alien Resolution (SBCL Internals)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Foreign-Linkage.html#Foreign-Linkage" rel="up" title="Foreign Linkage">
<link href="Callbacks.html#Callbacks" rel="next" title="Callbacks">
<link href="Linkage_002dtable.html#Linkage_002dtable" rel="prev" title="Linkage-table">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en">
<a name="Lazy-Alien-Resolution"></a>
<div class="header">
<p>
Next: <a href="Callbacks.html#Callbacks" accesskey="n" rel="next">Callbacks</a>, Previous: <a href="Linkage_002dtable.html#Linkage_002dtable" accesskey="p" rel="prev">Linkage-table</a>, Up: <a href="Foreign-Linkage.html#Foreign-Linkage" accesskey="u" rel="up">Foreign Linkage</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>
<hr>
<a name="Lazy-Alien-Resolution-1"></a>
<h3 class="section">4.2 Lazy Alien Resolution</h3>
<p>On linkage-table ports SBCL is able to deal with forward-references to
aliens – which is to say, compile and load code referring to aliens
before the shared object containing the alien in question has been
loaded.
</p>
<p>This is handled by <code>ENSURE-DYNAMIC-FOREIGN-SYMBOL-ADDRESS</code>, which
first tries to resolve the address in the loaded shared objects, but
failing that records the alien as undefined and returns the address of
a read/write/execute protected guard page for variables, and address
of <code>undefined_alien_function</code> for routines. These are in turn
responsible for catching attempts to access the undefined alien, and
signalling the appropriate error.
</p>
<p>These placeholder addresses get recorded in the linkage-table.
</p>
<p>When new shared objects are loaded <code>UPDATE-LINKAGE-TABLE</code> is
called, which in turn attempts to resolve all currently undefined
aliens, and registers the correct addresses for them in the
linkage-table.
</p>
</body>
</html>
|