D.gnu - Help! arm-wince-pe undefined references.
- Chad J <gamerChad _spamIsBad_gmail.com> Jul 28 2006
- pedro alves <pedro.alves domatica.pt> Jul 29 2006
- Chad J <gamerChad _spamIsBad_gmail.com> Aug 01 2006
- kris <foo bar.com> Aug 01 2006
- Chad J <gamerChad _spamIsBad_gmail.com> Aug 02 2006
- kris <foo bar.com> Aug 02 2006
Since the thread about arm-wince-pe-gdc when I had a bunch of undefined
references, I've managed to work it down to a remaining few. This all
happens when linking a small helloworld type app. These are the ones I
don't know how to fix:
/usr/local/arm-wince-pe/lib/gcc/arm-wince-pe/4.0.3/../../../../arm-wince-pe/lib/li
gphobos.a(boxer.o):
In function
`_D3std5boxer3Box13findTypeClassFC8TypeInfoZE3std5boxer9TypeClass':
/root/gcc/gdc-4.0.3/libphobos/std/boxer.d:192: undefined reference to
`_init_19TypeInfo_C8TypeInfo'
/root/gcc/gdc-4.0.3/libphobos/std/boxer.d:192: undefined reference to
`_init_24TypeInfo_S3std5boxer3Box'
/usr/local/arm-wince-pe/lib/gcc/arm-wince-pe/4.0.3/../../../../arm-wince-pe/lib/li
gphobos.a(win32.o):
In function `_D5win3222os_query_staticdatasegFPPvPkZv':
/root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined
reference to `_data_start__'
/root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined
reference to `_bss_end__'
For the std.boxer stuff, I grepped around for that _init_ typeinfo
stuff, but didn't have any success. Here is what that part of the file
looks like:
private static TypeClass findTypeClass(TypeInfo type)
{
if (cast(TypeInfo_Class) type)
return TypeClass.Class;
if (cast(TypeInfo_Pointer) type)
return TypeClass.Pointer;
if (isArrayTypeInfo(type))
return TypeClass.Array;
version (DigitalMars_TypeInfo)
{
/* Depend upon the name of the base type classes. */
if (type.classinfo.name.length != "TypeInfo_?".length)
return TypeClass.Other;
switch (type.classinfo.name[9])
{
//case 'b': return TypeClass.Bit;
case 'x': return TypeClass.Bool;
case 'g', 'h', 's', 't', 'i', 'k', 'l', 'm': return
TypeClass.Integer;
case 'f', 'd', 'e': return TypeClass.Float;
case 'q', 'r', 'c': return TypeClass.Complex;
case 'o', 'p', 'j': return TypeClass.Imaginary;
/*ln 192*/ default: return TypeClass.Other; // Line 192
}
}
else
{
/* Use the name returned from toString, which might (but
hopefully doesn't) include an allocation. */
switch (type.toString)
{
case "bool": return TypeClass.Bool;
case "byte", "ubyte", "short", "ushort", "int", "uint",
"long", "ulong": return TypeClass.Integer;
case "float", "real", "double": return TypeClass.Float;
case "cfloat", "cdouble", "creal": return TypeClass.Complex;
case "ifloat", "idouble", "ireal": return TypeClass.Imaginary;
default: return TypeClass.Other;
}
}
}
If I comment out that line then the error just moves to another place
where TypeInfo was used.
As for
`_D5win3222os_query_staticdatasegFPPvPkZv':
/root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined
reference to `_data_start__'
/root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined
reference to `_bss_end__'
it comes from here:
version (GNU)
{
// This is MinGW specific
extern (C)
{
// TODO: skip the .rdata between .data and .bss?
extern int _data_start__;
extern int _bss_end__;
}
void os_query_staticdataseg(void **base, uint *nbytes)
{
*base = cast(void *)&_data_start__;
*nbytes = cast(uint)(cast(char *)&_bss_end__ - cast(char
*)&_data_start__);
}
}
else
{
extern (C)
{
extern int _xi_a; // &_xi_a just happens to be start of data segment
extern int _edata; // &_edata is start of BSS segment
extern int _end; // &_end is past end of BSS
}
void os_query_staticdataseg(void **base, uint *nbytes)
{
*base = cast(void *)&_xi_a;
*nbytes = cast(uint)(cast(char *)&_end - cast(char *)&_xi_a);
}
}
I have also made it use the non-GNU version, which then yields the error
/usr/local/arm-wince-pe/lib/gcc/arm-wince-pe/4.0.3/../../../../arm-wince-pe/lib/li
gphobos.a(win32.o):
In function `_D5win3222os_query_staticdatasegFPPvPkZv':
/root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:150: undefined
reference to `_xi_a'
I could really use some help fixing these errors. They are stopping me
from creating a wince executable in D.
Also, what does os_query_staticdataseg do?
Jul 28 2006
Hi Chad, Chad J wrote:As for `_D5win3222os_query_staticdatasegFPPvPkZv': /root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined reference to `_data_start__' /root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined reference to `_bss_end__' it comes from here: version (GNU) { // This is MinGW specific extern (C) { // TODO: skip the .rdata between .data and .bss? extern int _data_start__; extern int _bss_end__; } void os_query_staticdataseg(void **base, uint *nbytes) { *base = cast(void *)&_data_start__; *nbytes = cast(uint)(cast(char *)&_bss_end__ - cast(char *)&_data_start__); }
main.exe is a simple hello world type app. [~]>arm-wince-pe-nm main.exe | grep data_start 00012000 D __data_start__ [~]>arm-wince-pe-nm main.exe | grep data_end 00012004 D __data_end__ Looks like underscoring strikes again. Try: extern int __data_start__; extern int __bss_end__; Cheers, Pedro Alves
Jul 29 2006
pedro alves wrote:Hi Chad, Chad J wrote:As for `_D5win3222os_query_staticdatasegFPPvPkZv': /root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined reference to `_data_start__' /root/gcc/gdc-4.0.3/libphobos/internal/gc/win32.d:134: undefined reference to `_bss_end__' it comes from here: version (GNU) { // This is MinGW specific extern (C) { // TODO: skip the .rdata between .data and .bss? extern int _data_start__; extern int _bss_end__; } void os_query_staticdataseg(void **base, uint *nbytes) { *base = cast(void *)&_data_start__; *nbytes = cast(uint)(cast(char *)&_bss_end__ - cast(char *)&_data_start__); }
main.exe is a simple hello world type app. [~]>arm-wince-pe-nm main.exe | grep data_start 00012000 D __data_start__ [~]>arm-wince-pe-nm main.exe | grep data_end 00012004 D __data_end__ Looks like underscoring strikes again. Try: extern int __data_start__; extern int __bss_end__; Cheers, Pedro Alves
That worked, fixed the os_query_staticdataseg thing. Strange! It was fixed in all other cases, but here it misbehaves. Thanks Unfortunately the same trick didn't work for the boxer stuff, so that still needs help :(
Aug 01 2006
Chad J wrote:That worked, fixed the os_query_staticdataseg thing. Strange! It was fixed in all other cases, but here it misbehaves. Thanks Unfortunately the same trick didn't work for the boxer stuff, so that still needs help :(
Why not just leave boxer out? I don't think it is used internally?
Aug 01 2006
kris wrote:Chad J wrote:That worked, fixed the os_query_staticdataseg thing. Strange! It was fixed in all other cases, but here it misbehaves. Thanks Unfortunately the same trick didn't work for the boxer stuff, so that still needs help :(
Why not just leave boxer out? I don't think it is used internally?
Ah yes. I was thinking it was needed because it was being linked in, but then I am probably wrong because I don't fully understand how this stuff gets linked. So I just left boxer out, and it got me an executable. A 1.5 megabyte executable :o Unfortunately the executable hits some kind of error when I run it on my PDA, so I'll have to dig in with GDB. FYI the error is as follows: Error: circular initialization dependency with module date
Aug 02 2006
Chad J wrote:kris wrote:Chad J wrote:That worked, fixed the os_query_staticdataseg thing. Strange! It was fixed in all other cases, but here it misbehaves. Thanks Unfortunately the same trick didn't work for the boxer stuff, so that still needs help :(
Why not just leave boxer out? I don't think it is used internally?
Ah yes. I was thinking it was needed because it was being linked in, but then I am probably wrong because I don't fully understand how this stuff gets linked. So I just left boxer out, and it got me an executable. A 1.5 megabyte executable :o Unfortunately the executable hits some kind of error when I run it on my PDA, so I'll have to dig in with GDB. FYI the error is as follows: Error: circular initialization dependency with module date
This means that there are (at least) two modules with static ctors, and they wind up importing each other either directly or via some circuitous route. 1.5MB? That's huge; I sure hope you've got every debug flag in the world enabled there :) Oh, and congratulations! That's pretty freaking awesome :D
Aug 02 2006








kris <foo bar.com>