TweetFollow Us on Twitter

Debugging Tips
Volume Number:10
Issue Number:5
Column Tag:PowerPC Series

Related Info: Memory Manager Dialog Manager

Debugging Tips for Mixed Mode

So that’s what I’m looking at when I crash!

By Dave Falkenburg, Apple Computer, Inc.

Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.

About the author

For having such short legs, Dave runs well - he’s part of the team which just shipped Power Macintosh in record time. As keeper of the secrets of the Process Manager, he’s something of a nexus for the myriad parts of the Macintosh which all seem to come together in that cauldron of code, a veritable witch’s brew of bat wings and furless pets. Among other accomplishments, he’s the guy who gave Ron Avitzur his first PowerPC 601 book.

When writing for Power Macs...

You’ll need several tools. The obvious ones are a Power Macintosh and a development environment. Also handy, and not so obvious, are some bits and pieces. develop Issue #17 contains the dis dcmd. ETO #13 and recent developer CDs have MacsBug 6.5d6 (or later), and it has support for the new Power Macintosh Memory Manager.

When developing native applications for the Power Macintosh family, it’s pretty likely that you will stumble upon bugs which get introduced due to misuse of Mixed Mode Universal Procedure Pointers (UPPs).

Both the calling conventions and instruction set of any function are encoded within a data structure when that function has been “wrapped” by a UPP - two essential details which Mixed Mode needs in order to make your applications and plug-in modules work without knowing the sordid details of the emulator.

In the 68K Macintosh world, parameters to functions generally go on the stack or in registers, or sometimes both. PowerPC code generally puts all parameters in registers. On 68K, Pascal and C also have different calling conventions- each language passes parameters in the reverse order of it’s peer, and Pascal also insists on the callee cleaning up parameters. PowerPC has a single calling convention, which Mixed Mode will happily deal with.

Another important point is that PowerPC ProcPtrs aren’t pointers to code, but in fact, point at a data structure called a transition vector. This essentially makes them “ProcHandles”. We can take advantage of that when we diagnose crashes.

Another essential thing we rely on is the fact that the PowerPC and 680x0 instruction sets aren’t very similar - if you are looking at some sort of code in MacsBug, il <address> or dis <address> will probably tell you what kind of code you are looking at. For example, if we look at 680x0 code with dis, we will see something like the following.

dis 00142028
 00142028
 00142028 **undefined**   | 4e754e56
 0014202c **undefined**   | fffc48e7
 00142030 twi TO_LT|TO_GT,23622098,0x2a2e    | 0f082a2e
 00142034 **undefined**   | 000c286e
 00142038 **undefined**   | 0010382e
 0014203c **undefined**   | 0014200d
 00142040 subfic  r16,r21,0x2a78   | 22152a78
 00142044 **undefined**   | 0b7c2a81
 

The same code as viewed with il looks more familiar:

il 0014202A
 +15DA  0014202A LINKA6,#$FFFC| 4E56 FFFC
 +15DE  0014202E MOVEM.L  D4-D7/A4,-(A7)     | 48E7 0F08
 +15E2  00142032 MOVE.L   $000C(A6),D5 | 2A2E 000C
 +15E6  00142036 MOVEA.L  $0010(A6),A4 | 286E 0010
 +15EA  0014203A MOVE.W   $0014(A6),D4 | 382E 0014
 +15EE  0014203E MOVE.L   A5,D0    | 200D

If you aren’t already familiar with the Mixed Mode Manager or the PowerPC Runtime Architecture, you’ll might want to read more about it in Inside Macintosh: RISC System Software before reading on.

UPP Basics

Emulated code can always call UPPs “blindly”, that is, without needing to use CallUniversalProc.

This was a necessary design principle for the emulator, because older applications, and large portions of the Macintosh Toolbox have no idea they are running on a PowerPC 601 microprocessor most of the time. JSR-ing through a UPP essentially executes a trap instruction which transfers control to Mixed Mode. Mixed Mode converts parameters, calls the PowerPC subroutine, and the returns to the emulated caller after translating the result code.

This may seem like magic, but is actually more mundane than mysterious. A UPP data structure starts with a trap (0xAAFE, a.k.a. _MixedModeMagic). When you’re executing 68K code, and it JSRs through a UPP, the trap gets handled by Mixed Mode. Mixed Mode checks the rest of the data structure to figure out whether it’s 68K code, PowerPC code, or both. Mixed Mode then transfers control to the destination code, moving parameters from one mode to the other. So it might move 68K registers and/or stack arguments into PowerPC registers, or vice versa. What gets moved depends on the contents of the procInfo, a data structure which describes where parameters live, and where they should go.

PowerPC code must always use CallUniversalProc to call code which was passed as a ProcPtr of unknown type. All code which doesn’t look like a UPP is assumed to be 68K code. This allows a PowerPC-based Dialog Manager to automatically call a ModalFilterProc regardless of whether or not the application is 68K code or PowerPC code.

Mixed Mode relies on the procInfo field in order to convert parameters and function result.

The biggest opportunity for making a mistake is in the creation of procInfo values. Much of the work has been done for you by Apple engineers in the Universal Headers. They defined constants and CallXXXProc macros for most of the Toolbox and OS routines which accept a ProcPtr, and it’s far more trouble-free to use them than to create your own.

UPP Symptoms

We’ll discuss the problems you can stumble across by breaking down the three major cases that Mixed Mode must deal with:
68K -> PowerPC, PowerPC -> 68K, and PowerPC -> PowerPC.

In almost all cases, a bad procInfo value is usually fatal, and very difficult to debug. Your program’s stack can be completely munged beyond all repair. It’s far easier to check your procInfos up front than to debug a bad one at run time! Always use the uppXXX, NewXXXProc, and CallXXXProc macros in the Universal Headers to keep you from screwing this up.

Bad procInfo values usually show up as either a crash with the PC pointing two bytes into the RoutineDescriptor data structure, or as mysterious crashes which have unexplained side effects. Remember those Macintosh 128K crashes when you accidentally slammed into the sound/disk pages? You won’t have any easier of a time figuring out how you got there, and you don’t even get to see the technicolor snowcrash or hear the machine-gun sounds.

Here are a variety of situations where something can go wrong. I’ll treat each one separately.

Calling from 68K to PowerPC

Problem: Calling a PowerPC ProcPtr that hasn’t been wrapped in a UPP.

You will see a 68K illegal instruction, and the PC will be somewhere in code where every third longword is a zero.

What’s happening is that Mixed Mode never got the chance to switch modes for you, so you’re still trying to execute this code with the 68K emulator. That’s eventually going to generate an error, because the PowerPC instruction set is so different from the 68K instruction set. You can tell if this is what happened by doing a dis PC^ in MacsBug. You’ll need the dis dcmd that came with develop Issue #17, or future developer CDs. If you see something like “mflr r0” then this is probably what happened.

Problem: Calling a UPP with a bad procInfo

Check your procInfos, because bad ones will almost always get you. I’ve told you this already, and Imay repeat it a time or two. Check out Inside Macintosh: RISC System Software, or <MixedMode.h> for information about creating procInfo values.

Calling from PowerPC to 68K

Problem: Calling 68K code as PowerPC code (i.e. you forgot to use CallUniversalProc)

This will manifest itself as a “spurious interrupt” or “bus error” in older versions of MacsBug. This usually turns up as a random jump into space. Remember that PowerPC ProcPtrs are really ProcHandles and the caller will actually dereference your “LINK #-xx,A6” and try to use it as a pointer.

Take a look at your PC. Are you executing in the 0x4E560000 to 0x4E56FFFF range? If you are, odds are good that you did a jump into what turns out to have been a LINK instruction which was incorrectly treated as an address. LINK’s opcode is 0x4E56.

Problem: Calling a UPP with a bad procInfo

Check your procInfos. An incorrectly-formed procInfo will get you. It is OK to call 68K code directly with CallUniversalProc. That’s because anything that doesn’t begin with the MixedMode trap instruction is assumed to be 68K code, and that particular instruction was carefully chosen to not be a likely value to hit by accident.

Calling from PowerPC to PowerPC

I bet you didn’t think of this case. It arises when a PowerPC-based manager must support both emulated callers, and PowerPC callers.

Problem: Calling a UPP without CallUniversalProc from PowerPC Code

All routine descriptors start with 0xAAFE, which is not only a trap, but also an illegal instruction for the PowerPC microprocessor.

This will manifest itself as either a PowerPC Illegal Instruction (a.k.a. spurious interrupt, for you MacsBug fans) or bus error depending on what is going on inside Mixed Mode at the time. This is similar to the Calling 68K code as PowerPC code above. If you get an illegal instruction, you can try doing a dm PC-2 and see if you find an 0xAAFE hanging around.

Problem: Calling a PowerPC procPtr as if it were a UPP

This case is pretty easy to spot - you will die in MacsBug with a 68K illegal instruction error. If you do a dis PC (using those wonderful PowerPC dcmds), you can see that the emulator is running, but for some reason the PC is pointing at “mflr r0” and something like “lwz r3,10(r1)”, two things a 680x0 emulator doesn’t know how to do!

Problem: Calling a routine descriptor with a bad procInfo

Check your procInfos. Got the idea?

More tips and tricks

When developing native applications for Power Macintosh, try to do the following things to avoid getting into the trouble described above.

• Source level debugging and single stepping are your friends - become familiar with one of the PowerPC-capable debuggers: CodeWarrior, Macintosh Debugger for PowerPC, or Jasik’s Debugger. Keep your eyes open for others, as well.

• Try to understand everywhere you use ProcPtrs in your code. This is where all those seemingly useless naming conventions we all use really pay off, like naming call function pointers XXXProcPtr, or all global variables gXXX.

• Use the macros provided by in the Universal Headers to avoid botching procInfos. You can also make your code “universal” by using these macros. That means that you can compile for 68K or PowerPC without any further modification of your source code.

Remember, you don’t need to use UPPs internally within your application if the code type is always known - UPPs are only needed when code can be called from either side of the mixed mode boundary. Supporting both emulated and PowerPC plug in modules is a good example of when to use a UPP.

Happy debugging!

For more information on items mentioned above:

CodeWarrior - a development environment from Metrowerks for both 68K and PowerPC, and it runs native on either platform. Available from the Mail Order Store. See page 89 for details, or call 310/575-4343.

Macintosh Debugger for PowerPC - a two-machine debugger from Apple. Requires one Power Macintosh (to debug) and any other Macintosh to do the driving.

Jasik’s Debugger - a two-headed debugger from Steve Jasik, famous for his personal support. Available from the Mail Order Store. See page 89 for details, or call 310/575-4343. Jasik Designs may be reached at 415/322-1386.

dis dcmd - develop Issue #17, available from Apple.

Debugging On PowerPC, by Dave Falkenburg and Brian Topping - develop Issue #17, available from Apple.

MacsBug 6.5d6 - ETO #13 and recent developer CDs.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Final Cut Pro X 10.4 - Professional vide...
Final Cut Pro X is a professional video editing solution. Completely redesigned from the ground up, Final Cut Pro adds extraordinary speed, quality, and flexibility to every part of the post-... Read more
Motion 5.4 - Create and customize Final...
Motion is designed for video editors, Motion 5 lets you customize Final Cut Pro titles, transitions, and effects. Or create your own dazzling animations in 2D or 3D space, with real-time feedback as... Read more
Logic Pro X 10.3.3 - Music creation and...
Logic Pro X is the most advanced version of Logic ever. Sophisticated new tools for professional songwriting, editing, and mixing are built around a modern interface that's designed to get creative... Read more
Compressor 4.4 - Adds power and flexibil...
Compressor adds power and flexibility to Final Cut Pro X export. Customize output settings, work faster with distributed encoding, and tap into a comprehensive set of delivery features. Features... Read more
Drive Genius 5.1.0 - $99.00
Drive Genius features a comprehensive Malware Scan. Automate your malware protection. Protect your investment from any threat. The Malware Scan is part of the automated DrivePulse utility. DrivePulse... Read more
Microsoft Office 2016 15.41 - Popular pr...
Microsoft Office 2016 - Unmistakably Office, designed for Mac. The new versions of Word, Excel, PowerPoint, Outlook and OneNote provide the best of both worlds for Mac users - the familiar Office... Read more
iExplorer 4.1.13 - View and transfer fil...
iExplorer is an iPhone browser for Mac lets you view the files on your iOS device. By using a drag and drop interface, you can quickly copy files and folders between your Mac and your iPhone or... Read more
Civilization VI 1.0.6 - Next iteration o...
Sid Meier’s Civilization VI is the next entry in the popular Civilization franchise. Originally created by legendary game designer Sid Meier, Civilization is a strategy game in which you attempt to... Read more
Data Rescue 5.0.3 - Powerful hard drive...
Data Rescue’s new and improved features let you scan, search, and recover your files faster than ever before. We have modernized the file-preview capabilities, added new files types to the recovery... Read more
Civilization VI 1.0.6 - Next iteration o...
Sid Meier’s Civilization VI is the next entry in the popular Civilization franchise. Originally created by legendary game designer Sid Meier, Civilization is a strategy game in which you attempt to... Read more

Latest Forum Discussions

See All

The 5 best Star Wars games on iOS
The time has almost come.Star Wars: The Last Jedifinally hits theaters in the cinematic event that might be bigger than Christmas. To celebrate, we're taking a look at the best--and only the best--Star Warsmobile games to date. [Read more] | Read more »
Life Is Strange (Games)
Life Is Strange 1.1 Device: iOS Universal Category: Games Price: $2.99, Version: 1.1 (iTunes) Description: Life Is Strange is a five part episodic game that sets out to revolutionize story-based choice and consequence games by... | Read more »
Oddworld: New 'n' Tasty (Game...
Oddworld: New 'n' Tasty 1.0 Device: iOS Universal Category: Games Price: $7.99, Version: 1.0 (iTunes) Description: ** PLEASE NOTE: Requires 3.6GB free space to install. Runs at variable resolutions based on device capabilities.... | Read more »
Gorogoa (Games)
Gorogoa 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Gorogoa is an elegant evolution of the puzzle genre, told through a beautifully hand-drawn story designed and illustrated by Jason... | Read more »
Why Guns of Boom will be big for mobile...
Earlier this week, Game Insight, the minds that brought you Guns of Boom, revealed plans for an esports mode in the popular FPS title, with big implications for the game's future. Guns of Boom has been quite popular for some time now, so it's... | Read more »
Rules of Survival guide - how to boost y...
It's not easy surviving in the "every-man-for-himself" world of Rules of Survival. You'll be facing off against many other players who might be more skilled than you, or are luckier than you. There are a lot of factors weighing against you. With... | Read more »
FEZ Pocket Edition (Games)
FEZ Pocket Edition 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: | Read more »
Amazing Katamari Damacy guide - beginner...
Amazing Katamari Damacy brings the bizarro world of the original games to mobile and shifts them into an endless format that's just as addictive as the PlayStation entries. Your goal is still to roll as much random stuff as you possibly can, though... | Read more »
Portal Knights guide - crafting tips and...
In Portal Knights, you're only as strong as the items you have at your disposal. This sandbox adventure is all about crafting and building up the next big thing. Whether you're an avid explorer or collector, crafting will likely play a large part... | Read more »
The best deals on the App Store this wee...
A new week means new discounts on the App Store. This week's deals run the gamut of action-adventure titles, puzzle games, and one of the best narrative adventure series out there. If you're looking to fill out your mobile gaming library on a... | Read more »

Price Scanner via MacPrices.net

Beats Holiday sale at B&H, headphones and...
B&H Photo has Beats by Dr. Dre headphones, earphones, and speakers on sale for up to $80 off MSRP as part of their Holiday sale. Expedited shipping is free, and B&H charges sales tax to NY... Read more
Holiday sale: Apple resellers offer 2017 15″...
MacMall has 15″ MacBook Pros on sale for $220-$300 off MSRP, each including free shipping: – 15″ 2.8GHz MacBook Pro Space Gray (MPTR2LL/A): $2179, $220 off MSRP – 15″ 2.8GHz MacBook Pro Silver (... Read more
Holiday sale: Apple resellers offer 13″ MacBo...
B&H Photo has 13″ MacBook Pros on sale for up to $150 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 13-inch 2.3GHz/128GB Space Gray MacBook Pro (... Read more
Apple Watch Series 2, Certified Refurbished,...
Apple has Certified Refurbished Apple Watch Nike+ Series 2s, 42mm Space Gray Aluminum Case with Anthracite/Black Nike Sport Bands, available for $249 (38mm) or $279 (42mm). The 38mm model was out of... Read more
Apple offers Certified Refurbished 2016 12″ R...
Apple has Certified Refurbished 2016 12″ Retina MacBooks available starting at $949. Apple will include a standard one-year warranty with each MacBook, and shipping is free. The following... Read more
B&H drops price on 13″ 256GB MacBook Air...
B&H has the 13″ 1.8GHz/256GB Apple MacBook Air (MQD42LL/A) now on sale for $1079 including free shipping plus NY & NJ sales tax only. Their price is $120 off MSRP, and it’s the lowest price... Read more
Holiday sale: 9″ iPads starting at $299, take...
MacMall has 9″ WiFi iPads on sale for $30 off including free shipping: – 9″ 32GB WiFi iPad: $299 – 9″ 128GB WiFi iPad: $399 Read more
Green Monday deal: 15″ 2.8GHz MacBook Pro on...
B&H Photo has the 15″ 2.8GHz Space Gray MacBook Pro on sale for $250 off MSRP for today only as part of their Green Monday/Holiday sale. Shipping is free, and B&H charges sales tax for NY... Read more
Green Monday sale: B&H offers 12″ Apple i...
B&H Photo has 12″ iPad Pros on sale for up to $150 off MSRP as part of their Green Monday/Holiday sale. Shipping is free, and B&H charges sales tax in NY & NJ only: – 12″ 64GB WiFi iPad... Read more
Holiday deal: 21″ and 27″ Apple iMacs on sale...
MacMall has 2017 21″ and 27″ Apple iMacs on sale for up to $200 off MSRP. Shipping is free: – 21″ 2.3GHz iMac: $999 $100 off MSRP – 21″ 3.0GHz iMac: $1199 $100 off MSRP – 21″ 3.4GHz iMac: $1379 $120... Read more

Jobs Board

*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 113124408 Waterford, CT, Connecticut, United States Posted: 17-Oct-2017 Weekly Hours: 40.00 **Job Summary** Are you Read more
QA Automation Engineer, *Apple* Pay - Apple...
# QA Automation Engineer, Apple Pay Job Number: 113202642 Santa Clara Valley, California, United States Posted: 11-Dec-2017 Weekly Hours: 40.00 **Job Summary** At Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.