forums.ps2dev.org Forum Index forums.ps2dev.org
Homebrew PS2, PSP & PS3 Development Discussions
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Problem building IRX modules for IOP

 
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development
View previous topic :: View next topic  
Author Message
redcoat



Joined: 11 Aug 2004
Posts: 21

PostPosted: Fri Aug 27, 2004 5:26 pm    Post subject: Problem building IRX modules for IOP Reply with quote

I'm attempting to build an IRX module for the IOP. I've been studying the "Hello IOP" tutorial that I downloaded from http://ps2dev.org/files/helloiop.zip.

I've detailed the problem below, what I need to know is:
Am I using the right version of the toolchain?
Is this a known problem?
How can I build IRX modules for the IOP that contain both ".s" and ".c" source code?


I'm using a fresh install of the toolchain (from http://www.oopo.net/consoledev), and the PS2DEV source code was checked-out of CVS on Aug. 16th.

Tool versions are:
iop-gcc 3.2.2
iop-as 2.14 20030612
iop-ld 2.14 20030612

I was told by a couple of people on IRC (EFnet#ps2dev), including Oobles, that this tutorial was out-of-date, but the problem appears to occur with two such simple files I have difficultly believings its age is the explanation.

I have tweaked and added some options to the Makefile, to use the latest libkernel.a and to spit-out diagnostic information. However, varying these options has no affect on the error message

Make output (additional options added to give additional information):

iop-as -EL -G0 -march=r3000 -o export/exp.o export/exp.s
iop-gcc -I. -I/usr/local/ps2dev/ps2lib/common/include -I/usr/local/ps2dev/ps2lib/iop/include -g -march=r3000 -o export/export.o -c export/export.c
iop-ld -dc -mmipsirx -r export/exp.o export/export.o -L/usr/local/ps2dev/ps2lib/iop/lib -t -lkernel -o export/export.elf
iop-ld: mode mipsirx
export/exp.o
export/export.o
(/usr/local/ps2dev/ps2lib/iop/lib/libkernel.a)iop_loadcore.o
(/usr/local/ps2dev/ps2lib/iop/lib/libkernel.a)iop_stdio.o
built in linker script:51: undefined symbol `_start' referenced in expression
make: *** [export/export.elf] Error 1


I have gone to the extreme of defining a label "_start:" in the "exp.s" file, but all this did was change the error to be:

built in linker script:51: undefined symbol `_gp' referenced in expression.


After researching the problem I infer that iop-ld is using the linker script:
$PS2DEV/iop/iop/lib/ldscripts/mipsirx.xr

I have no knowledge of how to read/write/fix/tweak linker scripts so I have not attempted to change it.

For convenience I have appended the two files, exp.s and export.c, that I'm attempting to build.

# --o export/exp.s o--

/*
_____ ___ ____
____| | ____| PSX2 OpenSource Project
| ___| |____ (C)2002, David Ryan ( oobles@hotmail.com )
------------------------------------------------------------------------
exp.s Example Export Function List.
*/



.text
.set noreorder
.global func_dec
.global iop_module
.extern blah
.extern start

.local iop_module

iop_module:
.word 0x41c00000
.word 0
.word 0x00000101
.ascii "export\0\0"

.align 2

func_dec:
.word start
.word do_nothing
.word do_nothing
.word do_nothing
.word blah

.word 0

do_nothing:
.word 0x03e00008
.word 0

# --o--


# --o export/export.c o--

/*
_____ ___ ____
____| | ____| PSX2 OpenSource Project
| ___| |____ (C)2002, David Ryan ( oobles@hotmail.com )
------------------------------------------------------------------------
export.c EXAMPLE LIBRARY OF FUNCTIONS MODULE
*/

#include <tamtypes.h>
//#include <stdio.h>
#include <kernel.h>

/* This is defined in exp.s */
extern int * iop_module;


/* The function that makes up this library */
/* Yes.. It doesn't do much! */

int blah()
{
printf( "EXPORT: blah function called\n" );
return 22;
}


/* a loadcore library function to export */
/* our function list. */

int start(int argc, char *argv[])
{
int ret;

printf( "EXPORT: Module Loaded.\n" );

ret = ExportFunctions( &iop_module );
printf( "EXPORT: ExportFunctions returned = %i\n" , ret );
return ret;
}

# --o--
Back to top
View user's profile Send private message
apache37



Joined: 04 Jun 2004
Posts: 76

PostPosted: Sat Aug 28, 2004 7:32 am    Post subject: Reply with quote

isnt it supposed to be: int _start(int argc, char *argv[]) ??
Back to top
View user's profile Send private message
redcoat



Joined: 11 Aug 2004
Posts: 21

PostPosted: Sat Aug 28, 2004 8:05 am    Post subject: Reply with quote

I believe that "start" is correct. My recall is that C and Asm identifiers are prefixed with "_" (underscore) by gcc/gas/ld when they build their internal symbol lists. Though, I confess I haven't found any online reference that supports my recollection.

However, look at the 'man' page for 'iop-ld' and you'll see:

-y symbol
--trace-symbol=symbol
Print the name of each linked file in which symbol appears. This
option may be given any number of times. On many systems it is
necessary to prepend an *underscore*.

This option is useful when you have an undefined symbol in your
link but don't know where the reference is coming from.


I accept I could be completely wrong on this point (about underscores) as I don't know what the PS2 patches do to the toolchain.

BTW: The function names & labels in the C and Asm code are as they were in the original tutorial.
Back to top
View user's profile Send private message
redcoat



Joined: 11 Aug 2004
Posts: 21

PostPosted: Sat Aug 28, 2004 8:11 am    Post subject: Reply with quote

I tried your (apache37) suggestion, and changed all occurrences of "start" to "_start". This just gives the same error about "_gp" being undefined(?).
Back to top
View user's profile Send private message
apache37



Joined: 04 Jun 2004
Posts: 76

PostPosted: Sat Aug 28, 2004 8:23 am    Post subject: Reply with quote

try going here: \ps2dev\ps2lib\iop\sample\hello in your ps2lib setup

compile that. simple enough and easy.
Back to top
View user's profile Send private message
redcoat



Joined: 11 Aug 2004
Posts: 21

PostPosted: Sat Aug 28, 2004 8:42 am    Post subject: Reply with quote

Excellent! Thanks apache37.

Now, you see I didn't know about this "-miop" option for "iop-gcc".

I think mharris is right, you definitely need a FAQ around here so newbie won't keep bugging you with silly questions :wink:
Back to top
View user's profile Send private message
apache37



Joined: 04 Jun 2004
Posts: 76

PostPosted: Sat Aug 28, 2004 8:51 am    Post subject: Reply with quote

np. fyi next time dont post that in this section ;)

This is toolchain development. Maybe better off in Q&A or IOP Dev.

Good luck.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development All times are GMT + 10 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group