MPLINK Linker Release Notes

Release Notes for MPLINK™ Object Linker and Utilities v4.47

MPLINK Object Linker | v4.47
MPLIB™ Object Librarian | v4.47
MP2COD COFF to COD File Converter | v4.47
MP2HEX COFF to HEX File Converter | v4.47

21 February 2013
Table of Contents

1. Important Backward Compatibility Notes
2. What's New in v4.3x
3. What's Been Fixed Since v4.30
4. Command Line Device Options Supported
5. Operating System Support List - MPLAB IDE
6. Operating System Support List - MPLAB X IDE
7. Known Problems
8. Customer Support

1. # Important Backward Compatibility Notes

## COFF File Format Replaces COD File Format

Due to the elimination of the COD Format from MPASM ouput, and the use of COFF format instead, new flags have been added to COFF files that are generated by C18 v3.30 and MPASM v5.30. These flags are only recognized by MPLINK v4.30 and above. MPLINK v4.30 and above continue to recognize the old COFF files. However, earlier versions of MPLINK may not recognize new COFF files.

## Corrected behavior for programs with no high priority Interrupt Service Routine (ISR) due to removal of the vectors region from linker scripts (BIN18-70)

This note is only applicable to programs with the following characteristics:

1. Explicitly defined low priority ISR and
2. No defined high priority ISR and
3. Has the High priority interrupt enabled (either explicity or by not disabling the default)

In the previous versions of the linker scripts (with the vectors region), no code or data was being placed between the High/Low-priority interrupt vectors. Consequently, with the arrival of a High-priority interrupt, the execution of the program would (erroneously) fall into the low-priority ISR. With the removal of the vectors region from the linker scripts, other data or code may be placed at the addresses between the High and Low priority interrupt vectors. This results in a non-deterministic behavior, upon the arrival of a high priority interrupt for these programs.

## MPLINK Linker and MPLAB IDE Compatibilty

Due to a change in COFF file format, MPLAB C18 v3.00 and later will not be compatible with versions of MPLINK Linker prior to v4.00 or versions of the MPLAB IDE prior to v7.21.

MPLINK Linker v4.00 and later will have backward compatibility to earlier versions at the source level only. Any existing object files or libraries compiled with earlier versions of the tools will not link using new versions of the tools. They will need to be recompiled from source.

If the user attempts to use this release with object files or libraries compiled with earlier versions of MPLAB C18, MPLINK Linker, and MPASM Assembler, the error message that will be received will be similar to:

    Error - Coff file format for 'C:\mcc18\lib/c018i.o' is out of date.

If the user attempts to use an old version of MPLINK Linker to link object files or libraries compiled with this release, the error message that will be received will be similar to:

    Error - Coff file format for 'C:\mcc18\lib/c018i.o' does not appear to be a valid COFF file.

2. # What's New in v4.3x

- Early adopter part support has been added. See "Devices" below.
- Old linker scripts will no longer be included in new installations. Only the generic linker scripts will be included. For example, 18F4550.lkr, 18F4550i.lkr, 18F4550_e.lkr and 18F4550i_e.lkr (which would be found under MCC18/lkr for the compiler) will no longer be installed. Instead, only 18F4550_g.lkr will be installed (which can be found under MCC18/bin/LKR for the compiler).
  Note: Installing over an older installation will not remove the old linker scripts, but updates will only be made to the new generic linker scripts.
- The following beta devices have been renamed from "L" devices to "LF" devices:
  18L13K22 to 18LF13K22
  18L13K50 to 18LF13K50
  18L14K22 to 18LF14K22
  18L14K50 to 18LF14K50
  18L24J11 to 18LF24J11
  18L24J50 to 18LF24J50
  18L25J11 to 18LF25J11
  18L25J50 to 18LF25J50
  18L26J11 to 18LF26J11
  18L26J50 to 18LF26J50
  18L44J11 to 18LF44J11
  18L44J50 to 18LF44J50
  18L45J11 to 18LF45J11
  18L45J50 to 18LF45J50
  18L46J11 to 18LF46J11
  18L46J50 to 18LF46J50

Introduced in v4.22 from BIN18-72
  Request for new #define and #if/else style directives for linker scripts.

  As an extension to the new features implemented for BIN18-72, now MPLINK has made available:

  1. `/p` command-line flag allows the user or IDE to define the part number for the linker. If this flag is used, MPLINK will select the correct generic linker script from the `lkr` directory relative to the location of the executable and use it to build the project.
  2. `/u` command-line flag allows the user or IDE to define symbols that will be used by the linker to resolve the conditional directives inside the linker script. For more details on this please refer to the MPASM Assembler,MPLINK Object Linker, MPLIB Object Librarian User's Guide (DS33014).
  3. Customized Linker Scripts:
     1. The existing (old) linker scripts will be removed (in the future) from the distribution tree and only the generic linker scripts will be supported. The existing projects with local linker scripts will continue to work and user can decide if they want to use their local linker script or just eliminate it and let the linker to use the generic one. However, regarding the projects that use the default linker script, we recommend that users move to the new paradigm of not having any linker script.
     2. Customization of linker scripts is no different than before. Users can use their existing linker script or take a generic linker script and apply their modifications, and include it in their project. For more details on how to do this modification please refer to the MPASM Assembler,MPLINK Object Linker, MPLIB Object Librarian User's Guide (DS33014).
  4. Generic Linker Scripts:
     Using the conditional directives, now a single generic linker script, per device, replaces the various existing linker scripts, eliminating the need for an explicit selection of a linker-script inside the MPLAB projects. Through the `/p` and `/u` command-line flags, the IDE communicates the part number and different debug and part specific information to MPLINK. Accordingly, MPLINK selects the proper generic linker script and uses it to link the entire project. Any combination of the following build possibilities will automatically be handled without the user needing to worry about linker scripts:
     1. Build for debug or no debug for various debuggers
     2. Build for C or assembly only projects
     3. Build for extended or traditional mode (for PIC18)

3. # What's Been Fixed Since v4.30:

   1. Problems resolved between v4.46 and v4.47:
      None
   2. Problems resolved between v4.45 and v4.46:
      None
   3. Problems resolved between v4.44 and v4.45:
      None
   4. Problems resolved between v4.43 and v4.44:
      None
   5. Problems resolved between v4.42 and v4.43:
      None
   6. Problems resolved between v4.41 and v4.42:
      None
   7. Problems resolved between v4.40 and v4.41:
      None
   8. Problems resolved between v4.39 and v4.40:
      (BIN18-134)
        MPLINK fails to link the 16f630 project
      (BIN18-142)
        Flash Memory is not defined in the linker scripts
      (BIN18-143)
        Flash Memory information is missing in the linker script for 16F526
   9. Problems resolved between v4.38 and v4.39:
      (BIN18-135)
        Make MPLINK display resource file version number in version banner
   10. Problems resolved between v4.37 and v4.38:
       (BIN18-132)
         Linker CODEPAGE .config end address for 16F88/16F87 Family changed from 0x2009 to 0x2008.
   11. Problems resolved between v4.36 and v4.37:
       None
   12. Problems resolved between v4.35 and v4.36:
       (BIN18-116)
         Need to add RESERVED keyword to the linker script
       (BIN18-122)
         Correct the end address for eedata in the linker script for 16F882.
       (BIN18-124)
         MPLINK does not recognize MCP250XX
   13. Problems resolved between v4.34 and v4.35:
       (BIN18-4)
         MPLIB truncates filenames containing a forward-slash path delimiter
       (BIN18-110)
         Add /i command line option description to MPLINK help documentation
       (BIN18-114)
         Enable linker to also search the linker script at {linkerexepath}../lkr and linkerexepath}../LKR by default.
       (BIN18-115)
         For midrange devices, the one byte used by debug executable is not safe
       (BIN18-117)
         idloc locations are not PROTECTed in the device 16F877
   14. Problems resolved between v4.33 and v4.34:
       (BIN18-104)
         Internal Coff output file is corrupt, error is generated when the code has empty code and data sections
       (BIN18-108)
         Add support to allocate large objects (size more than one bank size) in Linear Memory for enhanced midrange devices (PIC16F193x).
   15. Problems resolved between v4.32 and v4.33:
       (BIN18-107)
         MPLINK fails to link for the device 18F86K95.
   16. Problems resolved between v4.31 and v4.32:
       None
   17. Problems resolved between v4.30 and v4.31:
       None

4. # Command Line Device Options Supported

    MCV201B      MCV202B*	  MCV282B*     MCV283B*
    MCV442B*     MCV443B*     10F200       10F202
    10F204       10F206       10F220       10F222
    10F320       10F322       10LF320      10LF322
    12C508       12C508A      12C509       12C509A
    12C671       12C672
    12CE518      12CE519      12CE673      12CE674
    12CR509A
    12F1501      12F1822      12F1840      12LF1552
    12F508       12F509       12F510       12F519
    12F520       12F529T39A   12F529T48A
    12F609       12F615       12F617
    12F629       12F635       12F675       12F683
    12F752
    12HV609      12HV615      12HV752
    12LF1501     12LF1822     12LF1840     12LF1840T39A
    12LF1840T48A

    14000

    16C432       16C433       16C505       16C52
    16C54        16C54A       16C54B       16C54C
    16C55        16C554       16C557       16C558
    16C55A       16C56        16C56A       16C57
    16C57C       16C58A       16C58B
    16C5X
    16C61        16C62        16C620       16C620A
    16C621       16C621A      16C622       16C622A
    16C62A       16C62B       16C63        16C63A
    16C64        16C642       16C64A       16C65
    16C65A       16C65B       16C66        16C662
    16C67        16C71        16C710       16C711
    16C712       16C715       16C716       16C717
    16C72        16C72A       16C73        16C73A
    16C73B       16C74        16C745
    16C74A       16C74B       16C76        16C765
    16C77        16C770       16C771       16C773
    16C774       16C781       16C782       16C84
    16C923       16C924       16C925       16C926
    16CE623      16CE624      16CE625
    16CR54       16CR54A      16CR54B      16CR54C
    16CR56A      16CR57A      16CR57B      16CR57C
    16CR58A      16CR58B      16CR62       16CR620A
    16CR63       16CR64       16CR65       16CR72
    16CR83       16CR84
    16CXX
    16F1454      16F1455      16F1459      16F1503
    16F1507      16F1508      16F1509      16F1512
    16F1513
    16F1516      16F1517      16F1518      16F1519
    16F1526      15F1527      16F1782      16F1783
    16F1784	     16F1786      16F1787      16F1788
    16F1789
    16F1823      16F1824      16F1825      16F1826
    16F1827      16F1828      16F1829      16F1847
    16F1933
    16F1934      16F1936      16F1937      16F1938
    16F1939      16F1946      16F1947
    16F505       16F506       16F526
    16F54        16F57        16F570
    16F59        16F610       16F616       16F627
    16F627A      16F628       16F628A      16F630
    16F631       16F636       16F639       16F648A
    16F676       16F677       16F684       16F685
    16F687       16F688       16F689       16F690
    16F707       16F716       16F72        16F720
    16F721       16F722       16F722A      16F723
    16F723A
    16F724       16F726       16F727       16F73
    16F737       16F74        16F747       16F753
    16F76        16F767
    16F77        16F777       16F785       16F818
    16F819       16F83        16F84        16F84A
    16F87        16F870       16F871       16F872
    16F873       16F873A      16F874       16F874A
    16F876       16F876A      16F877       16F877A
    16F88        16F882       16F883       16F884
    16F886       16F887       16F913       16F914
    16F916       16F917       16F946

    16LF1454     16LF1455     16LF1459     16LF1503
    16LF1507     16LF1508     16LF1509     16LF1512
    16LF1513
    16LF1516     16LF1517     16LF1518     16LF1519
    16LF1526     16LF1527     16LF1782     16LF1783
    16LF1784     16LF1786     16LF1787     16LF1788
    16LF1789
    16LF1823     16LF1824     16LF1824T39A
    16LF1825     16LF1826
    16LF1827     16LF1828     16LF1829     16LF1847
    16LF1902     16LF1903     16LF1904     16LF1906
    16LF1907
    16LF1933     16LF1934     16LF1936     16LF1937
    16LF1938     16LF1939     16LF1946     16LF1947
    16LF707      16LF720      16LF721      16LF722
    16LF722A     16LF723      16LF724
    16LF726      16LF727

    16HV540      16HV610      16HV616      16HV753
    16HV785

    17C42        17C42A       17C43        17C44
    17C752       17C756       17C756A      17C762
    17C766
    17CR42       17CR43
    17CXX

    18C242       18C252       18C442       18C452
    18C601       18C658       18C801       18C858

    18F1220      18F1230      18F1320      18F1330
    18F13K22     18F13K50     18F14K22     18F14K22LIN
    18F14K50
    18F2220      18F2221      18F2320      18F2321
    18F2331      18F23K20     18F23K22     18F2410
    18F242       18F2420      18F2423      18F2431
    18F2439      18F2450      18F2455      18F2458
    18F248       18F2480      18F24J10     18F24J11
    18F24J50     18F24K20     18F24K22     18F24K50
    18F2510      18F2515      18F252       18F2520
    18F2523      18F2525      18F2539      18F2550
    18F2553      18F258       18F2580      18F2585
    18F25J10     18F25J11     18F25J50     18F25K20
    18F25K22     18F25K50     18F25K80
    18F2610      18F2620      18F2680      18F2682
    18F2685      18F26J11     18F26J13     18F26J50
    18F26J53     18F26K20     18F26K22     18F26K80
    18F27J13     18F27J53
    18F4220      18F4221      18F4320      18F4321
    18F43K20     18F4331      18F43K22
    18F4410      18F442       18F4420
    18F4423      18F4431      18F4439      18F4450
    18F4455      18F4458      18F448       18F4480
    18F44J10     18F44J11     18F44J50     18F44K20
    18F44K22     18F4510      18F4515
    18F452       18F4520      18F4523      18F4525
    18F4539      18F4550      18F4553      18F458
    18F4580      18F4585      18F45J10     18F45J11
    18F45J50     18F45K20     18F45K22     18F45K50
    18F45K80
    18F4610      18F4620
    18F4680      18F4682      18F4685      18F46J11
    18F46J13     18F46J50     18F46J53     18F46K20
    18F46K22     18F46K80
    18F47J13     18F47J53     18F6310
    18F6390      18F6393      18F63J11     18F63J90
    18F6410      18F6490      18F6493
    18F64J11     18F64J90     18F6520
    18F6525      18F6527      18F6585      18F65J10
    18F65J11     18F65J15     18F65J50     18F65J90
    18F65J94     18F65K22     18F65K80     18F65K90
    18F6620      18F6621      18F6622      18F6627
    18F6628      18F6680      18F66J10     18F66J11
    18F66J15     18F66J16     18F66J50     18F66J55
    18F66J60     18F66J65     18F66J90     18F66J93
    18F66J94     18F66J99
    18F66K22     18F66K80     18F66K90
    18F6720      18F6722      18F6723      18F67J10
    18F67J11     18F67J50     18F67J60     18F67J90
    18F67J93     18F67J94     18F67K22     18F67K90
    18F8310      18F8390      18F8393      18F83J11
    18F83J90     18F8410      18F8490
    18F8493      18F84J11     18F84J90
    18F8520      18F8525      18F8527      18F8585
    18F85J10     18F85J11     18F85J15     18F85J50
    18F85J90     18F85J94
    18F85K22     18F85K90     18F8620
    18F8621      18F8622
    18F8627      18F8628      18F8680      18F86J10
    18F86J11     18F86J15     18F86J16     18F86J50
    18F86J55     18F86J60     18F86J65     18F86J72
    18F86J90     18F86J99
    18F86J93     18F86J94     18F86K22
    18F86K90
    18F8720      18F8722      18F8723      18F87J10
    18F87J11     18F87J50     18F87J60     18F87J72
    18F87J90     18F87J93     18F87J94     18F87K22
    18F87K90     18F95J94     18F96J60
    18F96J65     18F96J94     18F96J99
    18F97J60     18F97J94

    18LF13K22    18LF13K50    18LF14K22    18LF14K50
    18LF23K22    18LF24J10    18LF24J11    18LF24J50
    18LF24K22    18LF24K50    18LF25J10
    18LF25J11    18LF25J50    18LF25K22    18LF25K50
    18LF25K80
    18LF26J11    18LF26J13    18LF26J50    18LF26J53
    18LF26K22    18LF26K80
    18LF27J13    18LF27J53    18LF43K22    18LF44J10
    18LF44J11    18LF44J50    18LF44K22    18LF45J10
    18LF45J11    18LF45J50
    18LF45K22    18LF45K50    18LF45K80    18LF46J11
    18LF46J13    18LF46J50    18LF46J53    18LF46K22
    18LF46K80    18LF47J13    18LF47J53
    18LF65K80    18LF66K80

    EEPROM16     EEPROM8

    MCP19110     MCP19111     MCP19114     MCP19115
    MCP25020     MCP25025     MCP25050     MCP25055
    MCV08A       MCV14A       MCV18A       MCV18E
    MCV20USB     MCV28A

    RF509AF      RF509AG      RF675F       RF675H
    RF675K

*Note: Early adopter support has been added for these devices since last release

THE PARTS CORRESPONDING TO THESE OPTIONS MAY NOT ALL BE COMMERCIALLY AVAILABLE.

The part selection is specified at assembly time and contained within the object file. An appropriate linker command file is necessary to properly link for the chosen part.

5. # Operating System Support List - MPLAB IDE

MLINK.EXE is the 32-bit Windows version of MPLINK Object Linker which is distributed with MPLAB IDE and MPLAB C18. It is supported on the following platforms (32- and 64-bit):

- Microsoft Windows XP Professional SP3/ Windows 7 Professional/ Windows 8 Professional

6. # Operating System Support List - MPLAB X IDE

MLINK.EXE is the 32-bit version of MPLINK Object Linker which is distributed with MPLAB X IDE. It is supported on the following platforms (32- and 64-bit):

- Microsoft Windows XP Professional SP3/ Windows 7 Professional/ Windows 8 Professional
- Ubuntu 9.10
- Macintosh OS X 10.5 Intel

7. # Known Problems

(BIN18-3 / 22483)
  MPLIB is unable to work with MPLAB C18 files compiled in the static overlay model.
  For example, the source code:

              int add( int a, int b )
              {
                 int c;

                 c = a + b;
                 return c;
              }

  can be compiled and archived with the commands:

              mcc18 test.c -sco
              mplib -c test.lib test.o

  However, attempting to list the files in the archive link the archive will result in the error:

              Error - Coff file 'test.o' could not read string table.
              Error - Could not build member 'test.o' in library file './test.lib'.

(BIN18-5 / 3224)
  MPLINK Linker always links in the section which loads initialized data from program memory to data memory, even though it is not required.
(BIN18-21 / 18214)
  If MPLINK.EXE is invoked without arguments, an error message stating "Error spawning _mplink.exe" is emitted. This message is spurious; it can be ignored.
(BIN18-22 / 18432)
  An interrupt with locals of "overlay" storage class which calls a function reachable from main is incorrectly viewed as recursive.
  For example, the program:

              int g (void) {
                return 2;
              }

              void f (void);
              #pragma interrupt f
              void f (void) {
                overlay int x;
                x = g ();
              }

              void main (void) {
                int x;
                x = g ();
              }

  Will cause a linker error, stating that 'g' is recursive and has locals of "overlay" storage class. The workaround is to use "auto" instead of "overlay" in the interrupt.
(BIN18-26 / 19225)
  MPLINK Linker may generate an assertion failure on programs which contain a section of zero length. The workaround is to remove such sections from the program.
(BIN18-27 / 20403)
  The '/r' option of MP2HEX does not work correctly for ranges specified outside of any existing data.
  For example, given the following source, 't.asm':

              LIST P=12C508
              CODE 0x100
              MOVLW 0
              MOVLW 1
              MOVLW 2
              MOVLW 3
              END

  After assembly, execute 'mp2hex.exe t.o /r 0x104-0x104'. The hex file content is:

              :02 0000 04 0000FA
              :02 0206 00 030C E7
              :00 0000 01 FF

  The data record shows the instruction 'MOVLW 3' at address 0x103, but 0x103 was not specified in the range.
  Since no data exists at 0x104 in the COFF file, there should be no data bytes in the hex file.
(BIN18-29 / 22228)
  Quiet mode (/q) disables the printing of errors and warnings to standard out.
(BIN18-33 / 22947)
  The /? command-line option may give the following error message on Windows 2000:

              Error - unknown switch: /r

  Use the /h option instead.
(BIN18-50 / 27314)
  Program memory utilization is not correct in map files generated for PIC18F87J10.
(BIN18-53 / 28114)
  The linker may disregard the section information in the last IDATA due to CONFIG syntax directives.
(BIN18-139)
  Linker error - "Cannot fit the section" seen with 12F675

8. # Customer Support

   Microchip provides online support via our home page at:
   http://www.microchip.com
   Technical support is available through the web site at:
   http://support.microchip.com
   A forum for discussion of Microchip products and tools is available at:
   http://forum.microchip.com