D.gnu - Help! arm-wince-pe undefined references.
- Chad J (108/108) Jul 28 2006 Since the thread about arm-wince-pe-gdc when I had a bunch of undefined
- pedro alves (13/40) Jul 29 2006 main.exe is a simple hello world type app.
- Chad J (6/56) Aug 01 2006 That worked, fixed the os_query_staticdataseg thing. Strange! It was
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: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 :(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
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: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 dateThat 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 02 2006
Chad J wrote:kris wrote: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 :DChad J wrote: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 dateThat 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 02 2006








kris <foo bar.com>