<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yui_3_16_0_1_1412655643541_17612" dir="ltr">Well, Pd-extended 0.43-4 will crash when trying to create [iem_sqrt4~].  (I'm not sure how to tell whether it's using the latest code or not.)</div><div dir="ltr"><br></div><div dir="ltr">-Jonathan<br></div><div id="yui_3_16_0_1_1412655643541_17315"><span></span></div> <div class="qtdSeparateBR"><br><br></div><div style="display: block;" class="yahoo_quoted"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div dir="ltr"> <font face="Arial" size="2"> On Monday, October 6, 2014 10:23 PM, Jonathan Wilkes <jancsika@yahoo.com> wrote:<br> </font> </div>  <br><br> <div class="y_msg_container"><div id="yiv3617442959"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"><div id="yiv3617442959yui_3_16_0_1_1412646943383_10075">I'm still a little shaky on type-punning, but here goes:</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412646943383_10074">I'm guessing that the author of iemlib_sqrt4~ assumed that sizeof(long) == sizeof(float) == 4.  Then when one sets the value of the type-pun'd variable that new value would be guaranteed to lie within the float's 4-byte boundary.  But since sizeof(long) == 8 on a 64-bit OS, Pd writes another 4 bytes past what's been allocated for that float.  Then... glibc gets angry, and Linux puts Pd to bed.</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412646943383_11175"><br clear="none"></div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412646943383_11174">Is this about right?  If so, what's the solution?  I guess one could use sizeof and have a branch for 32-bit and one for 64, but that seems even worse.</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412646943383_11840"><br clear="none"></div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412646943383_11841">-Jonathan<br clear="none"></div> <div class="yiv3617442959qtdSeparateBR"><br clear="none"><br clear="none"></div><div class="yiv3617442959yahoo_quoted" style="display:block;"> <div style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"> <div style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"> <div class="yiv3617442959yqt5482971284" id="yiv3617442959yqt48142"><div dir="ltr"> <font face="Arial" size="2"> On Monday, October 6, 2014 6:09 PM, Jonathan Wilkes via Pd-list <pd-list@lists.iem.at> wrote:<br clear="none"> </font> </div>  <br clear="none"><br clear="none"> <div class="yiv3617442959y_msg_container"><div id="yiv3617442959"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"><div id="yiv3617442959yui_3_16_0_1_1412625357546_34101">Hi list,</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34100">[iem_sqrt4~] crashes when trying to create on amd_64.  It creates fine on 32 bit linux.</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34111"><br clear="none"></div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34110">This leads me to believe there is something in the setup routine that makes an assumption that only holds true for a 32bit OS.</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34129"><br clear="none"></div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34191">The only thing that stands out to me is a function called in the setup routine, posted below.  This looks particularly suspicious to my untrained eye:</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34197">      *(long *)(&f) = l;</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34206">Even if that's not causing the crash, what does it do?<br clear="none"></div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34207"><br clear="none"></div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34205">And does that or anything stand out to anyone else?</div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34204"><br clear="none"></div><div dir="ltr">Thanks,</div><div dir="ltr">Jonathan<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr" id="yiv3617442959yui_3_16_0_1_1412625357546_34158">static void iem_sqrt4_tilde_maketable(void)<br class="yiv3617442959" style="" clear="none">{<br class="yiv3617442959" style="" clear="none">  int i;<br class="yiv3617442959" style="" clear="none">  t_float f;<br class="yiv3617442959" style="" clear="none">  long l;<br class="yiv3617442959" style="" clear="none">  <br class="yiv3617442959" style="" clear="none">  if(!iem_sqrt4_tilde_exptab)<br class="yiv3617442959" style="" clear="none">  {<br class="yiv3617442959" style="" clear="none">    iem_sqrt4_tilde_exptab = (t_float *)getbytes(sizeof(t_float) * IEMSQRT4TAB1SIZE);<br class="yiv3617442959" style="" clear="none">    for(i=0; i<IEMSQRT4TAB1SIZE; i++)<br class="yiv3617442959" style="" clear="none">    {<br class="yiv3617442959" style="" clear="none">      l = (i ? (i == IEMSQRT4TAB1SIZE-1 ? IEMSQRT4TAB1SIZE-2 : i) : 1)<< 23;<br class="yiv3617442959" style="" clear="none">      *(long *)(&f) = l;<br class="yiv3617442959" style="" clear="none">      iem_sqrt4_tilde_exptab[i] = 1.0f/sqrt(f);<br class="yiv3617442959" style="" clear="none">    }<br class="yiv3617442959" style="" clear="none">  }<br class="yiv3617442959" style="" clear="none">  if(!iem_sqrt4_tilde_mantissatab)<br class="yiv3617442959" style="" clear="none">  {<br class="yiv3617442959" style="" clear="none">    iem_sqrt4_tilde_mantissatab = (t_float *)getbytes(sizeof(t_float) * IEMSQRT4TAB2SIZE);<br class="yiv3617442959" style="" clear="none">    for(i=0; i<IEMSQRT4TAB2SIZE; i++)<br class="yiv3617442959" style="" clear="none">    {<br class="yiv3617442959" style="" clear="none">      f = 1.0f + (1.0f/(t_float)IEMSQRT4TAB2SIZE) * (t_float)i;<br class="yiv3617442959" style="" clear="none">      iem_sqrt4_tilde_mantissatab[i] = 1.0f/sqrt(f);<br class="yiv3617442959" style="" clear="none">    }<br class="yiv3617442959" style="" clear="none">  }<br class="yiv3617442959" style="" clear="none">}<br class="yiv3617442959" style="" clear="none"><br clear="none"></div><div></div></div></div></div><br clear="none">_______________________________________________<br clear="none"><a href="" class="removed-link" rel="nofollow" shape="rect" ymailto="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br clear="none">UNSUBSCRIBE and account-management -> <a href="" class="removed-link" rel="nofollow" shape="rect" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none"><br clear="none"><br clear="none"></div></div>  </div> </div>  </div> </div></div></div><br><br></div>  </div> </div>  </div> </div></body></html>