about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDavid Hill <dhill@conformal.com>2013-06-07 11:38:08 -0400
committerDavid Hill <dhill@conformal.com>2013-06-07 11:38:08 -0400
commitf63f268bbd160d73ccd57b2b0307c28d5c5728f9 (patch)
treef677ecfb74e4594ac12121941533e457bef6f718
parent2d4b99a281677e193f1ea94dc06ec88aab08265d (diff)
downloadxombrero-f63f268bbd160d73ccd57b2b0307c28d5c5728f9.tar.gz
add local ipv6 unicast addresses to proxy_exclude list.
-rw-r--r--settings.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/settings.c b/settings.c
index 778b280..760a2d6 100644
--- a/settings.c
+++ b/settings.c
@@ -26,7 +26,7 @@
 /* globals */
 #if SOUP_CHECK_VERSION(2, 42, 2)
 GProxyResolver	*proxy_uri = NULL;
-gchar		*proxy_exclude[] = { "::1", "127.0.0.1", NULL };
+gchar		*proxy_exclude[] = { "fc00::/7", "::1", "127.0.0.1", NULL };
 #else
 SoupURI		*proxy_uri = NULL;
 #endif
6'>106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 035compute_segment_address.cc</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.LineNr { }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.Comment { color: #005faf; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Identifier { color: #af5f00; }
.Delimiter { color: #c000c0; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/035compute_segment_address.cc'>https://github.com/akkartik/mu/blob/master/035compute_segment_address.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: ELF binaries have finicky rules about the precise alignment each segment</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment">//: should start at. They depend on the amount of code in a program.</span>
<span id="L3" class="LineNr"> 3 </span><span class="Comment">//: We shouldn't expect people to adjust segment addresses everytime they make</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment">//: a change to their programs.</span>
<span id="L5" class="LineNr"> 5 </span><span class="Comment">//: Let's start taking the given segment addresses as guidelines, and adjust</span>
<span id="L6" class="LineNr"> 6 </span><span class="Comment">//: them as necessary.</span>
<span id="L7" class="LineNr"> 7 </span><span class="Comment">//: This gives up a measure of control in placing code and data.</span>
<span id="L8" class="LineNr"> 8 </span>
<span id="L9" class="LineNr"> 9 </span><span class="Normal">void</span> <a href='035compute_segment_address.cc.html#L9'>test_segment_name</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L10" class="LineNr">10 </span>  <a href='011run.cc.html#L82'>run</a><span class="Delimiter">(</span>
<span id="L11" class="LineNr">11 </span>      <span class="Constant">&quot;== code 0x09000000\n&quot;</span>
<span id="L12" class="LineNr">12 </span>      <span class="Constant">&quot;05/add-to-EAX  0x0d0c0b0a/imm32\n&quot;</span>
<span id="L13" class="LineNr">13 </span>      <span class="Comment">// code starts at 0x09000000 + p_offset, which is 0x54 for a single-segment binary</span>
<span id="L14" class="LineNr">14 </span>  <span class="Delimiter">);</span>
<span id="L15" class="LineNr">15 </span>  <a href='003trace.cc.html#L290'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L16" class="LineNr">16 </span>      <span class="Constant">&quot;load: 0x09000054 -&gt; 05\n&quot;</span>
<span id="L17" class="LineNr">17 </span>      <span class="Constant">&quot;load: 0x09000055 -&gt; 0a\n&quot;</span>
<span id="L18" class="LineNr">18 </span>      <span class="Constant">&quot;load: 0x09000056 -&gt; 0b\n&quot;</span>
<span id="L19" class="LineNr">19 </span>      <span class="Constant">&quot;load: 0x09000057 -&gt; 0c\n&quot;</span>
<span id="L20" class="LineNr">20 </span>      <span class="Constant">&quot;load: 0x09000058 -&gt; 0d\n&quot;</span>
<span id="L21" class="LineNr">21 </span>      <span class="Constant">&quot;run: add imm32 0x0d0c0b0a to EAX\n&quot;</span>
<span id="L22" class="LineNr">22 </span>      <span class="Constant">&quot;run: storing 0x0d0c0b0a\n&quot;</span>
<span id="L23" class="LineNr">23 </span>  <span class="Delimiter">);</span>
<span id="L24" class="LineNr">24 </span><span class="Delimiter">}</span>
<span id="L25" class="LineNr">25 </span>
<span id="L26" class="LineNr">26 </span><span class="Comment">//: compute segment address</span>
<span id="L27" class="LineNr">27 </span>
<span id="L28" class="LineNr">28 </span><span class="Delimiter">:(before &quot;End Transforms&quot;)</span>
<span id="L29" class="LineNr">29 </span><span class="SpecialChar"><a href='031transforms.cc.html#L4'>Transform</a></span><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='035compute_segment_address.cc.html#L32'>compute_segment_starts</a><span class="Delimiter">);</span>
<span id="L30" class="LineNr">30 </span>
<span id="L31" class="LineNr">31 </span><span class="Delimiter">:(code)</span>
<span id="L32" class="LineNr">32 </span><span class="Normal">void</span> <a href='035compute_segment_address.cc.html#L32'>compute_segment_starts</a><span class="Delimiter">(</span>program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L33" class="LineNr">33 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- compute segment addresses&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L34" class="LineNr">34 </span>  <span class="Normal">uint32_t</span> p_offset = <span class="Comment">/*</span><span class="Comment">size of ehdr</span><span class="Comment">*/</span><span class="Constant">0x34</span> + <a href='001help.cc.html#L166'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L106'>segments</a><span class="Delimiter">)</span>*<span class="Constant">0x20</span><span class="Comment">/*</span><span class="Comment">size of each phdr</span><span class="Comment">*/</span><span class="Delimiter">;</span>
<span id="L35" class="LineNr">35 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; p<span class="Delimiter">.</span><a href='011run.cc.html#L106'>segments</a><span class="Delimiter">.</span>size<span class="Delimiter">();</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L36" class="LineNr">36 </span>    segment&amp; curr = p<span class="Delimiter">.</span><a href='011run.cc.html#L106'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L37" class="LineNr">37 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>start &gt;= <span class="Constant">0x08000000</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L38" class="LineNr">38 </span>      <span class="Comment">// valid address for user space, so assume we're creating a real ELF binary, not just running a test</span>
<span id="L39" class="LineNr">39 </span>      curr<span class="Delimiter">.</span>start &amp;= <span class="Constant">0xfffff000</span><span class="Delimiter">;</span>  <span class="Comment">// same number of zeros as the p_align used when emitting the ELF binary</span>
<span id="L40" class="LineNr">40 </span>      curr<span class="Delimiter">.</span>start |= <span class="Delimiter">(</span>p_offset &amp; <span class="Constant">0xfff</span><span class="Delimiter">);</span>
<span id="L41" class="LineNr">41 </span>      <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;segment &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; begins at address 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L408'>HEXWORD</a> &lt;&lt; curr<span class="Delimiter">.</span>start &lt;&lt; end<span class="Delimiter">();</span>
<span id="L42" class="LineNr">42 </span>    <span class="Delimiter">}</span>
<span id="L43" class="LineNr">43 </span>    p_offset += size_of<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
<span id="L44" class="LineNr">44 </span>    assert<span class="Delimiter">(</span>p_offset &lt; <a href='010vm.cc.html#L98'>SEGMENT_ALIGNMENT</a><span class="Delimiter">);</span>  <span class="Comment">// for now we get less and less available space in each successive segment</span>
<span id="L45" class="LineNr">45 </span>  <span class="Delimiter">}</span>
<span id="L46" class="LineNr">46 </span><span class="Delimiter">}</span>
<span id="L47" class="LineNr">47 </span>
<span id="L48" class="LineNr">48 </span><span class="Normal">uint32_t</span> size_of<span class="Delimiter">(</span><span class="Normal">const</span> segment&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L49" class="LineNr">49 </span>  <span class="Normal">uint32_t</span> sum = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L50" class="LineNr">50 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L166'>SIZE</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span><a href='011run.cc.html#L113'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
<span id="L51" class="LineNr">51 </span>    sum += <a href='035compute_segment_address.cc.html#L56'>num_bytes</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span><a href='011run.cc.html#L113'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L52" class="LineNr">52 </span>  <span class="Identifier">return</span> sum<span class="Delimiter">;</span>
<span id="L53" class="LineNr">53 </span><span class="Delimiter">}</span>
<span id="L54" class="LineNr">54 </span>
<span id="L55" class="LineNr">55 </span><span class="Comment">// Assumes all bitfields are packed.</span>
<span id="L56" class="LineNr">56 </span><span class="Normal">uint32_t</span> <a href='035compute_segment_address.cc.html#L56'>num_bytes</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L57" class="LineNr">57 </span>  <span class="Normal">uint32_t</span> sum = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L58" class="LineNr">58 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L166'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L122'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
<span id="L59" class="LineNr">59 </span>    sum += size_of<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L122'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
<span id="L60" class="LineNr">60 </span>  <span class="Identifier">return</span> sum<span class="Delimiter">;</span>
<span id="L61" class="LineNr">61 </span><span class="Delimiter">}</span>
<span id="L62" class="LineNr">62 </span>
<span id="L63" class="LineNr">63 </span><span class="Normal">int</span> size_of<span class="Delimiter">(</span><span class="Normal">const</span> word&amp; w<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L64" class="LineNr">64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_argument_metadata<span class="Delimiter">(</span>w<span class="Delimiter">,</span> <span class="Constant">&quot;disp32&quot;</span><span class="Delimiter">)</span> || has_argument_metadata<span class="Delimiter">(</span>w<span class="Delimiter">,</span> <span class="Constant">&quot;imm32&quot;</span><span class="Delimiter">))</span>
<span id="L65" class="LineNr">65 </span>    <span class="Identifier">return</span> <span class="Constant">4</span><span class="Delimiter">;</span>
<span id="L66" class="LineNr">66 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_argument_metadata<span class="Delimiter">(</span>w<span class="Delimiter">,</span> <span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">))</span>
<span id="L67" class="LineNr">67 </span>    <span class="Identifier">return</span> <span class="Constant">2</span><span class="Delimiter">;</span>
<span id="L68" class="LineNr">68 </span>  <span class="Comment">// End size_of(word w) Special-cases</span>
<span id="L69" class="LineNr">69 </span>  <span class="Normal">else</span>
<span id="L70" class="LineNr">70 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L71" class="LineNr">71 </span><span class="Delimiter">}</span>
<span id="L72" class="LineNr">72 </span>
<span id="L73" class="LineNr">73 </span><span class="Comment">//: Dependencies:</span>
<span id="L74" class="LineNr">74 </span><span class="Comment">//: - We'd like to compute segment addresses before setting up global variables,</span>
<span id="L75" class="LineNr">75 </span><span class="Comment">//:   because computing addresses for global variables requires knowing where</span>
<span id="L76" class="LineNr">76 </span><span class="Comment">//:   the data segment starts.</span>
<span id="L77" class="LineNr">77 </span><span class="Comment">//: - We'd like to finish expanding labels before computing segment addresses,</span>
<span id="L78" class="LineNr">78 </span><span class="Comment">//:   because it would make computing the sizes of segments more self-contained</span>
<span id="L79" class="LineNr">79 </span><span class="Comment">//:   (num_bytes).</span>
<span id="L80" class="LineNr">80 </span><span class="Comment">//:</span>
<span id="L81" class="LineNr">81 </span><span class="Comment">//: Decision: compute segment addresses before expanding labels, by being</span>
<span id="L82" class="LineNr">82 </span><span class="Comment">//: aware in this layer of certain argument types that will eventually occupy</span>
<span id="L83" class="LineNr">83 </span><span class="Comment">//: multiple bytes.</span>
<span id="L84" class="LineNr">84 </span><span class="Comment">//:</span>
<span id="L85" class="LineNr">85 </span><span class="Comment">//: The layer to expand labels later hooks into num_bytes() to teach this</span>
<span id="L86" class="LineNr">86 </span><span class="Comment">//: layer that labels occupy zero space in the binary.</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->