<div dir="ltr">Relatedly, does this crash?<div><br></div><div><div>(parameterize ([current-input-port (open-input-string &quot;#\\c&quot;)]) (read-eval-print-loop))</div></div><div><br></div><div style>Robby</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Sat, May 11, 2013 at 12:28 PM, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu" target="_blank">robby@eecs.northwestern.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Did you try to pull out and simplify read-eval-print-loop until you can get a stand-alone program that crashes? (The impl is in racket/private/misc.rkt.)<span class="HOEnZb"><font color="#888888"><div><br>Robby</div>
</font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra">
<br><br><div class="gmail_quote">On Sat, May 11, 2013 at 12:19 PM, Jon Zeppieri <span dir="ltr">&lt;<a href="mailto:zeppieri@gmail.com" target="_blank">zeppieri@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I did:<br>
<br>
@@ -1555,9 +1570,9 @@ typedef void (*Scheme_Invoke_Proc)(Scheme_Env<br>
*env, intptr_t phase_shift,<br>
<br>
 /* Exploit the fact that these should never be dereferenced: */<br>
 #ifndef FIRST_TWO_BYTES_ARE_LEGAL_ADDRESSES<br>
-# define MZ_EVAL_WAITING_CONSTANT ((Scheme_Object *)0x2)<br>
-# define MZ_APPLY_WAITING_CONSTANT ((Scheme_Object *)0x4)<br>
-# define MZ_MULTIPLE_VALUES_CONSTANT ((Scheme_Object *)0x6)<br>
+# define MZ_EVAL_WAITING_CONSTANT ((Scheme_Object *)0x4)<br>
+# define MZ_APPLY_WAITING_CONSTANT ((Scheme_Object *)0x8)<br>
+# define MZ_MULTIPLE_VALUES_CONSTANT ((Scheme_Object *)0xc)<br>
 #endif<br>
<div><div><br>
<br>
<br>
On Sat, May 11, 2013 at 1:16 PM, Matthew Flatt &lt;<a href="mailto:mflatt@cs.utah.edu" target="_blank">mflatt@cs.utah.edu</a>&gt; wrote:<br>
&gt; Wild guess: Did you change the pseudo-values MZ_EVAL_WAITING_CONSTANT<br>
&gt; and MZ_MULTIPLE_VALUES_CONSTANT to make sure they&#39;re not mistreated as<br>
&gt; immediates --- or that a character is not mistreated as a pseduo-value?<br>
&gt;<br>
&gt; At Sat, 11 May 2013 13:12:54 -0400, Jon Zeppieri wrote:<br>
&gt;&gt; These all work:<br>
&gt;&gt;<br>
&gt;&gt; -&gt; (write #\c)<br>
&gt;&gt; #\c<br>
&gt;&gt; -&gt; (print #\c)<br>
&gt;&gt; #\c<br>
&gt;&gt; -&gt; (display #\c)<br>
&gt;&gt; c<br>
&gt;&gt;<br>
&gt;&gt; It really seems to be the case that only functions that return<br>
&gt;&gt; characters have problems, and then, only those that return to the repo<br>
&gt;&gt; loop. For instance:<br>
&gt;&gt;<br>
&gt;&gt; -&gt; (write (values #\c))<br>
&gt;&gt; #\c<br>
&gt;&gt; -&gt; (values #\c)<br>
&gt;&gt; Segmentation fault: 11<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Sat, May 11, 2013 at 11:29 AM, Matthew Flatt &lt;<a href="mailto:mflatt@cs.utah.edu" target="_blank">mflatt@cs.utah.edu</a>&gt; wrote:<br>
&gt;&gt; &gt; The last example seems to be the only one that uses `write&#39;, while the<br>
&gt;&gt; &gt; others implicitly use `print&#39;.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Does<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  (write #\c)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; crash? How about<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  (print #\c)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; At Fri, 10 May 2013 21:19:25 -0400, Jon Zeppieri wrote:<br>
&gt;&gt; &gt;&gt; My experiment with immediately represented characters has gotten to a<br>
&gt;&gt; &gt;&gt; state where a non-JIT build passes all tests, but a JIT build fails<br>
&gt;&gt; &gt;&gt; (as in, segfaults) on the following program:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; #\c<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; It also fails on:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; (integer-&gt;char 99)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; and:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; (define (foo x) (integer-&gt;char x))<br>
&gt;&gt; &gt;&gt; (foo 99)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; but not on:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; (define (foo x) (write (integer-&gt;char x)))<br>
&gt;&gt; &gt;&gt; (foo 99)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; So there seems to be a problem returning a character from a jitted<br>
&gt;&gt; &gt;&gt; function back to the repl. I haven&#39;t been able to figure out where<br>
&gt;&gt; &gt;&gt; this occurs, though. gdb&#39;s stack traces don&#39;t seem very useful for<br>
&gt;&gt; &gt;&gt; jitted code, and I can&#39;t use Sam&#39;s disassembler, because the process<br>
&gt;&gt; &gt;&gt; dies.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Any idea where to look or what debugging tools might be useful?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; -Jon<br>
&gt;&gt; &gt;&gt; _________________________<br>
&gt;&gt; &gt;&gt;   Racket Developers list:<br>
&gt;&gt; &gt;&gt;   <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
_________________________<br>
  Racket Developers list:<br>
  <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>