===============================================================================
Metrowerks CodeWarrior Development Studio for NINTENDO DS 1.2 Service Pack 3
===============================================================================

November 9, 2005

===============================================================================
         Very Important Notes. Please Read Before Using The Tools!
===============================================================================

This is a collection of important information concerning last-minute changes 
and other topics that deserve special attention. Please read these notes 
carefully, they supersede the manuals and other documentation.

*** THE LICENSE FOR THIS PRODUCT WILL EXPIRE MARCH 31, 2006 ***

=====================================
Service Pack 3 Install Notes
=====================================

This installer will update your CodeWarrior for NINTENDO DS Version 1.2,
Version 1.2 Service Pack 1 or Version 1.2 Service Pack 2.
  1. Terminate all CodeWarrior which is running on your PC.
  2. Run CW_NINTENDO_DS_R1.2_Service_Pack_3.exe to update.

This Service Pack 3 includes all changes in patches released for Version 1.2 Service Pack 2.

Please use this Service Pack with IS-NITRO-DEBUGGER v1.61 or later.

=====================================
Summary of Changes Since Last Release
=====================================

The following summarizes changes in the tools for recent releases.

=====================================
Changes in Release 1.2 Service Pack 3
=====================================

* COMPILER AND LINKER FIXES
----------------
This release includes updated compiler and linker to fix a number of 
reported issues. Re-compiled libraries are incorporated in this release.


* DEBUGGER FIXES
----------------
This release includes an updated IDE and debugger plugins to fix a number of
reported issues.


* STATIONERY FOR NITROSDK 3.0
-----------------------------
This release includes stationery for the upcoming NitroSDK 3.0. NitroSDK 
3.0 will be released by Nintendo sometime between now and the end of 2005. 
Please continue using the NitroSDK 2.1 stationery if you are using 
NitroSDK 2.2.

In the stationery for NitroSDK 3.0:
  - Precompiled headers are used.
    More information is available in the ReadMe.txt which is in each 
    project created from the SDK3.0 stationery.
  - In the "Nitro TS Debug" build target, the "Smaller Code Size" option 
    is selected for the "Optimize For" switch in the Global Optimizations 
    panel. Previously, "Faster Execution Speed" was used. This new choice 
    is equivalent to the option switch used in command-line makefile with 
    NITRO_DEBUG=true


* MWGD71, MWGD142 NEW FEATURES IN BACKUP DEVICE WINDOW
------------------------------------------------------
Some new features have been added to the Backup device window 
(Nitro->"Backup Memory..." command):
  - Write certain value to whole of backup device
  - Write random values to parts of backup device
  - Supporting 4M FLASH and 256K FRAM as a type of backup device
To use these features, please install IS-NITRO-DEBUGGER ver 1.61 or later
beforehand.


* MWGD60 COMPILER DOES NOT EMIT "redefined" ERROR FOR DUPLICATED #DEFINE
------------------------------------------------------------------------
The fix for MWGD60 (compiler does not emit "redefined" error for duplicated
#define in precompiled header and command-line) has the following impact.

The compiler now emits a error and the compiler stops if a previously
defined macro has a different definition in a precompiled header file.

     --- my.pch++ --
     #pragma precompile_target "my.mch++"

     #define NG_VALUE 123
     #define OK_VALUE 456
     ---------------

     --- test.cpp ---
     #define NG_VALUE 1234
     #define OK_VALUE 456

     #include "my.mch++"  // error and stop for NG_VALUE redef,
                          // no error for OK_VALUE

     ----------------

         =>

     Error : macro 'NG_VALUE' redefined
     test.cpp line 4   #include "my.mch++"


* MWGD68 COMPILER GENERATES WRONG INSTRUCTIONS FOR LARGE THUMB SWITCH-CASE
--------------------------------------------------------------------------
The compiler will now emit the following error if the total size of a switch
statement exceeds ~32K bytes:

"Thumb mode switch range is 32K bytes, use '#pragma big_switch on' option for 
large switches in Thumb mode"

16-bit switch tables are used by default in Thumb mode to conserve space. If 
it is necessary to have a switch statement that exceeds 32K bytes in Thumb 
mode, use '#pragma big_switch on|off|reset' around the required switch 
statement. This will yield larger code size because 32-bit switch tables are 
used. #pragma big_switch has no effect in ARM mode. 

#pragma big_switch on 
	switch (value)
	{
	... very large switch cases ...
	}
#pragma big_switch reset


* MTWX19574 IMPROVEMENT IN MULTIPLE OVERLAY GROUPS SUPPORT
----------------------------------------------------------
In the case of a function used in a static mosule and modules in multiple
overlay groups at the same time and an instance of the function in the 
static module has been removed due to inlining of the function, instances of 
the function can now exist in each overlay module. If the instance of 
function in the static module was not inlined and remained, the instances of 
the function in each overlay modules are removed and the instance in the 
static module is called from overlay modules.


* THUMB FUNCTIONS ARE 4-BYTE ALIGNED
------------------------------------
All Thumb functions are now 4-byte aligned, whereas previously, Thumb
functions may have been aligned on 2-bytes. Required to ensure properly
aligned access to constant pools in Thumb mode. A padding word may be added 
at the end of some Thumb functions to ensure the next function is 4-byte 
aligned.


* FUNCTION REFERENCE MANUAL FOR NITROSDK 2.2
--------------------------------------------
The new NitroSDK FUNCTION REFERENCE MANUAL is available from within the 
CodeWarrior IDE.


================================================================================
Fixed Issues
================================================================================

* ISSUES FIXED IN RELEASE 1.2 SERVICE PACK 3
--------------------------------------------

  Number     Problem Addressed
  =========  =================
- MTWX18157  Debugger stops at a instruction which does not access a 
             watchpoint
- MTWX18240  Debugger does not show class member in some cases when using 
             class prototype - the linker has been updated to distinguish 
             placeholder DWARF2 class type entries from real class type 
             entries
- MTWX18496  Debugger can't step over ADDLS instruction but runs
- MTWX19431  Compiler is crashed when a Precompiled Header source which used 
             the "Boost C++ Libraries Version 1.33.0 
- MTWX19434  the linker now emits error when a section name is used more than
             once in the LCF.
- MTWX19445  the linker now emits warning when an initialized object is
             assigned a new location via the LCF.
- MTWX19484  Compiler fails when a structure is initialized in the way that
             "gcc_extensions" is necessary
- MTWX19490  Switch statement causes application crash when Thumb
- MTWX19492  Compiler generates wrong instructions for "default" switch-case
             statement with a specific condition
- MTWX19507  __memcpy() prototype is made same as memcpy()
- MTWX19508  "mwccarm.exe -help" does not explain the default value of -opt
             (speed/space)
- MTWX19545  "#pragma big_switch on" causes wrong jump target address when 
             Thumb mode and Global Optimization level is set to 1 or higher
- MTWX19572  Internal Compiler Error at OPtimization level 1 or above (IRO 
             MTWX19573  related)
- MTWX19573  duplicate of MTWX19572.
- MTWX19574  by updating how the linker handle symbols with MULTIDEF binding.
             The linker now allows the same symbol with MULTIDEF binding to
             exist in each unique overlay, if the symbol is not already 
             present in the main application.
- MTWX19666  Explanation of option -readonlystrings in mwccarm help message 
             is broken
- MTWX19671  "Make string constants read-only" option is broken
- MTWX19672  Optimized return from function for v5t architectures by using 
             ldmfd sp,{r,pc} or pop {r,pc}.Both instructions can switch 
             operating modes (similar to bx) in the v5 architectures, so 
             there's no reason to emit bx.
- MWGD48     Address of constant is not properly loaded in Thumb mode. Note 
             that Thumb functions are now 4-byte aligned. This may result in 
             larger code sections due to alignment padding
- MWGD60     Compiler does not emit "redefined" error for duplicated #define 
             in precompiled header and command line (see 'Changes In Release
             1.2 Service Pack 3', above)
- MWGD67     Inline assembler generates wrong code that branches off to the 
             Address:0x00000000 when Global Optimization level is set to 2 or 
             higher
- MWGD68     Reworked fix for MWGD68 - compiler generates wrong instructions 
             for large switch-case statement for Thumb (see 'Changes in 
             Release 1.2 Service Pack 3', above)
- N/A        Fixed a bug where DWARF2 base types referenced by DWARF2 typedef
             entries get dead-stripped
- MWGD71     New features of backup device window. Write certain value to 
             whole of backup device, and Write random values to parts of 
             backup device
- MWGD72     When using the TCL command window in the IDE, it is not possible
             to get a printout of any errors that occurred doing a make 
             command
- MWGD92     Right after debugger is started, ARM7 sometimes becomes a state
             of break illegally if 'Generate Thumb Instructions' enabled
- MWGD102    Watchpoint stops the debugger at a line which does not change 
             the watchpoint memory area
- MWGD114    Release 1.2 Service Pack 2 debugger crasher
- MWGD115    Step-over with expression or variable window causes the debugger 
             to crash
- MWGD116    Step-over with expression window causes the debugger to crash
- MWGD121    Support for NitroSDK 3.0 new thread structure
- MWGD122    keep supporting NitroSDK 2.x style thread in addition to SDK3.0
             style thread.
- MWGD142    Support new backup devices, "4M FLASH" and "256K FRAM"
- MWGD151    Installer applies unexpected change to Remote Debugging Panel

