Page 1 of 1

Trying to understand the exception

Posted: Fri Jul 17, 2009 9:45 am
by lupidan
Well, sometimes in my program when I hit Home to return to the Homewbrew Channel, a exception take place.
My knowledge in Wii Programming is not very extensive, all I can read from there is that a DSI exception ocurred, and i have the stack copy, wich I think it could help me debbugging.

¿What's a DSI exception?¿How could I translate de Stack Dump into lines of my code?

Thanks in advance :)

Re: Trying to understand the exception

Posted: Fri Jul 17, 2009 8:23 pm
by Samson
lupidan wrote:¿What's a DSI exception?
An illegal memory access, most likely an invalid or NULL pointer.
¿How could I translate de Stack Dump into lines of my code?

Code: Select all

Usage: ./powerpc-gekko-addr2line [option(s)] [addr(s)]
 Convert addresses into line number/file name pairs.
 If no addresses are specified on the command line, they will be read from stdin
 The options are:
  @<file>                Read options from <file>
  -b --target=<bfdname>  Set the binary file format
  -e --exe=<executable>  Set the input file name (default is a.out)
  -i --inlines           Unwind inlined functions
  -j --section=<name>    Read section-relative offsets instead of addresses
  -s --basenames         Strip directory names
  -f --functions         Show function names
  -C --demangle[=style]  Demangle function names
  -h --help              Display this information
  -v --version           Display the program's version

./powerpc-gekko-addr2line: supported targets: elf32-powerpc aixcoff-rs6000 elf32-powerpcle ppcboot elf32-little elf32-big srec symbolsrec tekhex binary ihex
Report bugs to <http://www.sourceware.org/bugzilla/>
Make sure the code is built and linked with debug information, i.e -g .

Re: Trying to understand the exception

Posted: Sat Jul 18, 2009 6:32 pm
by lupidan
Thanks a lot Samson :)

Well, i went to my Makefile to check if the -g option is enabled

Code: Select all

CFLAGS	= -g -O2 -Wall $(MACHDEP) $(INCLUDE)
And wehenever I try to use the debugger...

Code: Select all

powerpc-gekko-addr2line -e Game.elf
0x813a373c
All I get is this:

Code: Select all

??:0
I guess the debugging information is not present. ¿Should I change something in my code?

UPDATE:
I tried removing the -O2 flag from de CFLAGS, and now it doesn't seem to crash, when It was present, the program randomly crashed when I clicked the home button to return to Homebrew Channel. ¿Possible bug?

Re: Trying to understand the exception

Posted: Sat Jul 18, 2009 7:30 pm
by Samson
Do you have -g in the linker flags, when you create the elf, as well?
BTW: For a test find the address of main(), and see if you can resolve it from the address. And there is a chance that the crash is outside your program.
Have a look at the map file, or the section information printed by readelf, which memory addresses your program actually covers.

Re: Trying to understand the exception

Posted: Sun Jul 19, 2009 12:05 pm
by lupidan
Thanks for answering

Well, my load flags also have -g:

Code: Select all

LDFLAGS	=	-g $(MACHDEP) -Wl,-Map,$(notdir $@).map
And, in the end, the program crashed, I tried to locate the code dump:
8133883C:
8133884C:
8133885C:

And in the .elf.map file there isn't a single reference to a line 0x813....

I also tried again powerpc-gekko-addr2line -e Game.elf 0x8133883C but nothing... what am I missing?

Re: Trying to understand the exception

Posted: Thu Sep 10, 2009 11:46 pm
by Beau
You've most likely corrupted/wrote to High MEM1 memory where the loader code is stored.

When your application exits, an attempt is made to re-load the loader (typically HBC) from that memory location.

I'm not sure if LibOGC currently protects against this in sbrk, so that LibOGC itself does not allocate memory out of the loader section when you call malloc.