RE: Re: cpp init & machine check
"Randall" <[email protected]>
| Newsgroups | gmane.comp.hardware.motorola.microcontrollers |
|---|---|
| Message-ID | <[email protected]> |
Lei, I'm not sure of the details, as I'm not a C++ programmer. But based on the code you posted, I'm fairly sure that _ctors is a list of initializer functions for any objects that need them (eg constructors for static objects), and for the exception handling code. That means it's not used directly for exceptions, it's only used at startup to initialize the exception handling routines. I assume the list should be formed automagically by the C++ compiler and linker, but I'm not sure by what mechanism. Have you verified that you have RAM at 0x405340 ? For example, you could write a few words of garbage with your debugger and check that you read back the same garbage. Randall > -----Original Message----- > From: [email protected] [mailto:[email protected]]On Behalf Of > coles555 > Sent: Saturday, October 08, 2005 7:49 PM > To: [email protected] > Subject: [MPC500] Re: cpp init & machine check > > > Hi Randall, > Thanks for your reply to my question. I was wondering if you happen > to know what the _ctors addresses are for? In CW I see the _ctors > values are all 0xFB00FB00 (not terminated by a null). This address is > definitely out of range of the PB board. Can you tell me where these > addresses are generated from? > According to the documentation of cpp init function: > Calls constructors of which the cpp exception handling initialization > is the first constructor, if exceptions are used. > Does this mean that the _ctors addresses are used for cpp exception > handling? Any help would be greatly appreciated. > > Lei > > > --- In [email protected], "Randall" <ryoung@n...> wrote: > > > > > > "bne" is "branch not equal", and it implements the "for" loop. The > three > > instructions above the bne increment the pointer "constructor", > dereference it, > > and compare it to 0x0. If it's not zero, the bne instruction > repeats the loop > > until it is. > > > > What is the value in R12 (and CTR) when you get the machine check ? > > > > Does the table stored at 0x405340 (_ctors) appear to contain a list > of valid > > function addresses, terminated by a NULL (0x0) ? R31 should point > to one of the > > entries in the table, and R12 should have the address stored in the > table. > > > > At first blush, I'd guess you're trying to run this from internal > RAM, and your > > program is too large. I don't have my manual handy, but ISTR > 0x405340 is a bad > > address. > > > > Randall Young > > Senior Software Engineer > > NavCom Technology, Inc > > A John Deere Company > > > > > Hey guys, > > > I'm really stuck on this constructor function in the cpp-init. For > > > some reason Codewarrior keeps giving me machine check exceptions > > > during the branch command shown below: > > > > > > { > > > 003FA35C: 9421FFF0 stwu SP,-16(SP) > > > 003FA360: 7C0802A6 mflr r0 > > > 003FA364: 90010014 stw r0,20(SP) > > > 003FA368: 93E1000C stw r31,12(SP) > > > voidfunctionptr *constructor; > > > > > > /* > > > * call static initializers > > > */ > > > for (constructor = _ctors; *constructor; constructor++) { > > > 003FA36C: 3C600040 lis r3,64 > > > 003FA370: 3BE35340 addi r31,r3,21312 > > > 003FA374: 48000014 b __init_cpp+0x28 (0x3fa388) > > > (*constructor)(); > > > 003FA378: 819F0000 lwz r12,0(r31) > > > 003FA37C: 7D8903A6 mtctr r12 > > > 003FA380: 4E800421 bctrl //MACHINE CHECK > > > } > > > 003FA384: 3BFF0004 addi r31,r31,4 > > > 003FA388: 801F0000 lwz r0,0(r31) > > > 003FA38C: 28000000 cmplwi r0,0x0000 > > > 003FA390: 4082FFE8 bne __init_cpp+0x1c (0x3fa378) //branch > > > to 003FA378 > > > > > > } > > > 003FA394: 83E1000C lwz r31,12(SP) > > > 003FA398: 80010014 lwz r0,20(SP) > > > 003FA39C: 7C0803A6 mtlr r0 > > > 003FA3A0: 38210010 addi SP,SP,16 > > > 003FA3A4: 4E800020 blr > > > > > > I'm not sure what is the bne instruction for, if anyone can help I > > > would really appreciated. > > > > > > Lei > > > > > > > > > > > > > > > > > > ----------------------------------------------------------- > > > To learn more about Freescale Microcontrollers, please visit > > > http://www.freescale.com/mcu > > > > > > > > > > > > Yahoo! Groups Links > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ----------------------------------------------------------- > To learn more about Freescale Microcontrollers, please visit > http://www.freescale.com/mcu > > > > Yahoo! Groups Links > > > > > > > ------------------------ Yahoo! Groups Sponsor --------------------~--> Most low income households are not online. Help bridge the digital divide today! http://us.click.yahoo.com/cd_AJB/QnQLAA/TtwFAA/dN_tlB/TM --------------------------------------------------------------------~-> ----------------------------------------------------------- To learn more about Freescale Microcontrollers, please visit http://www.freescale.com/mcu Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/MPC500/ <*> To unsubscribe from this group, send an email to: [email protected] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/