<div class="gmail_quote">On Fri, Jun 1, 2012 at 3:24 PM, Alex Rønne Petersen <span dir="ltr"><<a href="mailto:alex@lycus.org" target="_blank">alex@lycus.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5">On 01-06-2012 23:05, Matthew Caron wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hey folks,<br>
<br>
So, I've used the instructions and code here:<br>
<br>
<a href="https://bitbucket.org/goshawk/gdc/wiki/crosstool-ng" target="_blank">https://bitbucket.org/goshawk/<u></u>gdc/wiki/crosstool-ng</a><br>
<br>
to build a gdc for ARM.<br>
<br>
I've written up a simple "Hello world" and I get an Illegal Instruction<br>
when executing on my ARM Linux EABI system.<br>
<br>
GDB says (edited to remove standard stuff):<br>
<br>
==<br>
(gdb) run<br>
Starting program: /hello<br>
<br>
Program received signal SIGILL, Illegal instruction.<br>
0x0002f5c4 in _D2gc3gcx2GC6mallocMFkkPkZPv (this=@0x96018, size=88, bits=1,<br>
alloc_size=0x0)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d:1224<br>
<br>
1224<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d: No<br>
such file or directory.<br>
in /home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d<br>
Current language: auto; currently minimal<br>
(gdb) bt full<br>
#0 0x0002f5c4 in _D2gc3gcx2GC6mallocMFkkPkZPv (this=@0x96018, size=88,<br>
bits=1, alloc_size=0x0)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d:1224<br>
<br>
No locals.<br>
#1 0x0002692c in gc.gc.gc_malloc (sz=<value optimized out>,<br>
ba=<value optimized out>)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gc.d:201<br>
No locals.<br>
#2 0x00019ad0 in _d_newclass (ci=@0x8e8bc)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/rt/lifetime.d:123<br>
<br>
p = Unhandled dwarf expression opcode 0x9f<br>
==<br>
<br>
So, the error is at line 1224 of gcx.d, which is:<br>
<br>
==<br>
/**<br>
* add range to scan for roots<br>
*/<br>
void addRange(void *p, size_t sz)<br>
{<br>
if (!p || !sz) // 1224<br>
{<br>
return;<br>
}<br>
==<br>
<br>
The full backtrace is less than useful here, because of optimizations in<br>
libphobos, so I've recompiled libphobos with -O0. Recompiling my program<br>
and re-running it gives me:<br>
<br>
==<br>
(gdb) run<br>
Starting program: /hello<br>
Hello gents<br>
<br>
Program received signal SIGILL, Illegal instruction.<br>
0x0004535c in _<u></u>D2gc3gcx3Gcx16fullcollectshell<u></u>MFZk (this=Cannot access<br>
memory at address 0x1<br>
)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d:245<br>
<br>
245<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d: No<br>
such file or directory.<br>
in /home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d<br>
Current language: auto; currently minimal<br>
(gdb) bt full<br>
#0 0x0004535c in _<u></u>D2gc3gcx3Gcx16fullcollectshell<u></u>MFZk (this=Cannot access<br>
memory at address 0x1<br>
)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d:245<br>
<br>
No locals.<br>
#1 0x000418ec in _<u></u>D2gc3gcx2GC18fullCollectNoStac<u></u>kMFZv (this=@0xe4018)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gcx.d:245<br>
<br>
__sync33 = (struct TypeInfo_Class &) @0xdce4c: {init = {length = 8,<br>
ptr = 0xbc81c "4�v"}, name = {length = 13,<br>
ptr = 0xbc824 "gc.gcx.GCLock"}, vtbl = {length = 6, ptr = 0xbc834},<br>
interfaces = {length = 0, ptr = 0x0}, base = @0xda804, destructor = 0x0,<br>
classInvariant = 0, m_flags = 54, deallocator = 0x0, m_offTi = {length = 0,<br>
ptr = 0x0}, defaultConstructor = 0x0, xgetMembers = 0}<br>
#2 0x0003ca34 in gc_term ()<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/gc/gc.d:133<br>
No locals.<br>
#3 0x00022e2c in rt.dmain2.main.runAll (this=0xbe9e7cd8)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/rt/dmain2.d:67<br>
<br>
No locals.<br>
#4 0x000227c4 in rt.dmain2.main.tryExec (this=0xbe9e7cd8, dg=<br>
{object = 0xbe9e7cd8, func = 0x22d94 <rt.dmain2.main.runAll>})<br>
---Type <return> to continue, or q <return> to quit---<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/rt/dmain2.d:67<br>
<br>
No locals.<br>
#5 0x000225ac in main (argc=1, argv=0xbe9e7e64)<br>
at<br>
/home/mattc/workspace/d/<u></u>buildder/.build/src/gcc-4.6.2/<u></u>libphobos/rt/dmain2.d:67<br>
<br>
trapExceptions = true<br>
am = (struct char[] *) 0xe4008<br>
result = 0<br>
args = {length = 1, ptr = 0xe4008}<br>
==<br>
<br>
This actually does print the "Hello gents" that it is supposed to, but<br>
then dies after (likely when exiting and collecting all its memory).<br>
<br>
The line referenced is in the following:<br>
==<br>
{{{<br>
void initialize() // 245<br>
{<br>
gcLock = GCLock.classinfo;<br>
gcx = cast(Gcx*)cstdlib.calloc(1, Gcx.sizeof);<br>
if (!gcx)<br>
onOutOfMemoryError();<br>
gcx.initialize();<br>
setStackBottom(rt_stackBottom(<u></u>));<br>
}<br>
}}}<br>
<br>
I should note that I tested the gcc which was built along with gdc and<br>
it does produce a "Hello world" application which appears to work<br>
correctly.<br>
<br>
Does anyone have any ideas/pointers/hey there, do it this way, dummy/etc?<br>
</blockquote>
<br></div></div>
Please try building libphobos and libdruntime with -fno-section-anchors.<span class="HOEnZb"><font color="#888888"><br><br></font></span></blockquote><div><br></div><div>You certainly need to do this, but -O0 means that section-anchors optimization is turned off anyway, so that isn't actually your problem. Can you run `disassemble` in gdb to see what the faulting instruction is? </div>

</div>