alignment problem causing strange linker error

FreekSh0w86 perfectcell14 at yahoo.com
Sun Jul 27 14:32:24 PDT 2008


In my journey of GDC on the PSP, I have encountered this awful mess when 
trying to use the function sceGumDrawArray with second argument == 
anything but a literal constant:
psp-gdc -c main.d  -fversion=Psp
psp-gcc -I. -I/usr/local/pspdev/psp/sdk/include -O2 -G0 -Wall 
-D_PSP_FW_VERSION=300  -L. -L/usr/local/pspdev/psp/sdk/lib   module.o 
main.o -lgphobos -lpspgum -lpspgu -lm  -lpspdebug -lpspdisplay -lpspge 
-lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl 
-lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o DieCrittersDie.elf
main.o: In function `_D4main8drawLineFiikZv':
main.d:(.text+0x7e0): undefined reference to 
`_D6pspsdk5pspgu24__T15GU_VERTEX_SHIFTVi3Z15GU_VERTEX_SHIFTi'
main.d:(.text+0x7e0): relocation truncated to fit: R_MIPS_GPREL16 
against `_D6pspsdk5pspgu24__T15GU_VERTEX_SHIFTVi3Z15GU_VERTEX_SHIFTi'
main.d:(.text+0x7e4): undefined reference to 
`_D6pspsdk5pspgu27__T18GU_TRANSFORM_SHIFTVi0Z18GU_TRANSFORM_SHIFTi'
main.d:(.text+0x7e4): relocation truncated to fit: R_MIPS_GPREL16 
against `_D6pspsdk5pspgu27__T18GU_TRANSFORM_SHIFTVi0Z18GU_TRANSFORM_SHIFTi'
collect2: ld returned 1 exit status
I've tried everything including align(16) in front of constant 
declarations (which were #define's in the C header).
This is the prototype of the function in C:
void sceGumDrawArray(int prim, int vtype, int count, const void* 
indices, const void* vertices);
Translated to D:
void sceGumDrawArray(int prim, int vtype, int count, void* indices, 
void* vertices);
That second parameter, vtype, has to be a literal constant or that error 
  occurs. Even returning a constant from a function call doesn't work. 
Local variables don't work either. This is a real problem because 
writing literal numbers is too obscure and error-prone. I hope this is 
easily fixable. Thanks.


More information about the D.gnu mailing list