Hot!In Bootloader global variables are being overwritten seemingly randomly

Author
NVergunst
Super Member
  • Total Posts : 386
  • Reward points : 0
  • Joined: 2007/02/11 19:58:16
  • Location: 0
  • Status: offline
2017/11/14 23:56:39 (permalink)
0

In Bootloader global variables are being overwritten seemingly randomly

Hello,
 
I am writing a bootloader for the PIC32MZ2048EFH. I used Harmony (2.03) to generate the bootloader linker. I have been messing with it trying to get it to use both parts of the bootflash. I have been able to get it to compile and link into a larger area using example code, some changes and/or stuff found on the forums, so I thought I had it working. Problem is, it doesn't work.
 
It runs through lots and lots of code. Setting up a cell connection, HTTP requests and posts, data parsing, all that seemingly works. But some of the code, seemingly gets random values thrown into it. I am using the debugger. Looking at my linker, I don't quite understand how the debugger is reserving room in the kseg0 area, if it even is.
 
When I look at the memory debug window "Data Memory" and use the GoTo functionality to look for a symbol that has this problem, the table cell that it highlights is filled with RR which I take to mean this is reserved space. For example one variable the debugger tells me is at address location 0x800002F8
 
My first questions would be if my suspicions are correct: my variables being blasted away are because they are being put in reserved memory space they shouldn't be in. Something, perhaps the debugger, is blowing it away because it is reserved.
 
My linker as generated by Harmony:
 
/*--------------------------------------------------------------------------
 * MPLAB XC Compiler - PIC32MZ BootLoader linker script
 *
 * This software is developed by Microchip Technology Inc. and its
 * subsidiaries ("Microchip").
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided
 * with the distribution.
 * 3. Microchip's name may not be used to endorse or promote products
 * derived from this software without specific prior written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY MICROCHIP "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR PURPOSE ARE DISCLAIMED. IN NO EVENT
 * SHALL MICROCHIP BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWSOEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *-------------------------------------------------------------------------*/


/* Custom linker script, for bootloaders residing completely in boot flash */

/* NOTE: This single-file linker script replaces the two-file system used
 * for older PIC32 devices.
 */

OUTPUT_FORMAT("elf32-tradlittlemips")
OUTPUT_ARCH(pic32mx)
ENTRY(_reset)
/*
 * Provide for a minimum stack and heap size
 * - _min_stack_size - represents the minimum space that must be made
 * available for the stack. Can be overridden from
 * the command line using the linker's --defsym option.
 * - _min_heap_size - represents the minimum space that must be made
 * available for the heap. Must be specified on
 * the command line using the linker's --defsym option.
 */
EXTERN (_min_stack_size _min_heap_size)

/*************************************************************************
 * Processor-specific object file. Contains SFR definitions.
 *************************************************************************/
INPUT("processor.o")

/*************************************************************************
 * Processor-specific peripheral libraries are optional
 *************************************************************************/
OPTIONAL("libmchp_peripheral.a")


/*************************************************************************
 * Vector-offset initialization
 *************************************************************************/
OPTIONAL("vector_offset_init.o")

/*************************************************************************
 * For interrupt vector handling
 *************************************************************************/
PROVIDE(_vector_spacing = 0x00000001);
PROVIDE(_ebase_address = 0x9FC01000);

/*************************************************************************
 * Memory Address Equates
 * _RESET_ADDR -- Reset Vector
 * _BEV_EXCPT_ADDR -- Boot exception Vector
 * _DBG_EXCPT_ADDR -- In-circuit Debugging Exception Vector
 * _SIMPLE_TLB_REFILL_EXCPT_ADDR -- Simple TLB-Refill Exception Vector
 * _CACHE_ERR_EXCPT_ADDR -- Cache-error Exception Vector
 * _GEN_EXCPT_ADDR -- General Exception Vector
 *************************************************************************/

_BEV_EXCPT_ADDR = 0xBFC00380;
_DBG_EXCPT_ADDR = 0xBFC00480;
_RESET_ADDR = 0xBFC00000;
_SIMPLE_TLB_REFILL_EXCPT_ADDR = _ebase_address + 0;
_CACHE_ERR_EXCPT_ADDR = _ebase_address + 0x100;
_GEN_EXCPT_ADDR = _ebase_address + 0x180;

/*************************************************************************
 * Memory Regions
 *
 * Memory regions without attributes cannot be used for orphaned sections.
 * Only sections specifically assigned to these regions can be allocated
 * into these regions.
 *
 * The Debug exception vector is located at 0x9FC00480.
 * The config_<address> sections are used to locate the config words at
 * their absolute addresses.
 *************************************************************************/
MEMORY
{
    kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x480
    kseg0_program_mem (rx) : ORIGIN = 0x9fc01000, LENGTH = 0xFF00 - 0x1000
    kseg0_boot_mem : ORIGIN = 0x9fc004b0, LENGTH = 0x00000000
  kseg1_boot_mem_4B0 : ORIGIN = 0xBFC004B0, LENGTH = 0x1000 - 0x4B0
  config_BFC0FF40 : ORIGIN = 0xBFC0FF40, LENGTH = 0x4
  config_BFC0FF44 : ORIGIN = 0xBFC0FF44, LENGTH = 0x4
  config_BFC0FF48 : ORIGIN = 0xBFC0FF48, LENGTH = 0x4
  config_BFC0FF4C : ORIGIN = 0xBFC0FF4C, LENGTH = 0x4
  config_BFC0FF50 : ORIGIN = 0xBFC0FF50, LENGTH = 0x4
  config_BFC0FF54 : ORIGIN = 0xBFC0FF54, LENGTH = 0x4
  config_BFC0FF58 : ORIGIN = 0xBFC0FF58, LENGTH = 0x4
  config_BFC0FF5C : ORIGIN = 0xBFC0FF5C, LENGTH = 0x4
  config_BFC0FF60 : ORIGIN = 0xBFC0FF60, LENGTH = 0x4
  config_BFC0FF64 : ORIGIN = 0xBFC0FF64, LENGTH = 0x4
  config_BFC0FF68 : ORIGIN = 0xBFC0FF68, LENGTH = 0x4
  config_BFC0FF6C : ORIGIN = 0xBFC0FF6C, LENGTH = 0x4
  config_BFC0FF70 : ORIGIN = 0xBFC0FF70, LENGTH = 0x4
  config_BFC0FF74 : ORIGIN = 0xBFC0FF74, LENGTH = 0x4
  config_BFC0FF78 : ORIGIN = 0xBFC0FF78, LENGTH = 0x4
  config_BFC0FF7C : ORIGIN = 0xBFC0FF7C, LENGTH = 0x4
  config_BFC0FFC0 : ORIGIN = 0xBFC0FFC0, LENGTH = 0x4
  config_BFC0FFC4 : ORIGIN = 0xBFC0FFC4, LENGTH = 0x4
  config_BFC0FFC8 : ORIGIN = 0xBFC0FFC8, LENGTH = 0x4
  config_BFC0FFCC : ORIGIN = 0xBFC0FFCC, LENGTH = 0x4
  config_BFC0FFD0 : ORIGIN = 0xBFC0FFD0, LENGTH = 0x4
  config_BFC0FFD4 : ORIGIN = 0xBFC0FFD4, LENGTH = 0x4
  config_BFC0FFD8 : ORIGIN = 0xBFC0FFD8, LENGTH = 0x4
  config_BFC0FFDC : ORIGIN = 0xBFC0FFDC, LENGTH = 0x4
  config_BFC0FFE0 : ORIGIN = 0xBFC0FFE0, LENGTH = 0x4
  config_BFC0FFE4 : ORIGIN = 0xBFC0FFE4, LENGTH = 0x4
  config_BFC0FFE8 : ORIGIN = 0xBFC0FFE8, LENGTH = 0x4
  config_BFC0FFEC : ORIGIN = 0xBFC0FFEC, LENGTH = 0x4
  config_BFC0FFF0 : ORIGIN = 0xBFC0FFF0, LENGTH = 0x4
  config_BFC0FFF4 : ORIGIN = 0xBFC0FFF4, LENGTH = 0x4
  config_BFC0FFF8 : ORIGIN = 0xBFC0FFF8, LENGTH = 0x4
  config_BFC0FFFC : ORIGIN = 0xBFC0FFFC, LENGTH = 0x4
  lowerbootaliaslastpage : ORIGIN = 0xBFC10000, LENGTH = 0x4000
  upperbootalias : ORIGIN = 0xBFC20000, LENGTH = 0x14000
  boot1 : ORIGIN = 0xBFC40000, LENGTH = 0xFF00
  config_BFC4FF40 : ORIGIN = 0xBFC4FF40, LENGTH = 0x4
  config_BFC4FF44 : ORIGIN = 0xBFC4FF44, LENGTH = 0x4
  config_BFC4FF48 : ORIGIN = 0xBFC4FF48, LENGTH = 0x4
  config_BFC4FF4C : ORIGIN = 0xBFC4FF4C, LENGTH = 0x4
  config_BFC4FF50 : ORIGIN = 0xBFC4FF50, LENGTH = 0x4
  config_BFC4FF54 : ORIGIN = 0xBFC4FF54, LENGTH = 0x4
  config_BFC4FF58 : ORIGIN = 0xBFC4FF58, LENGTH = 0x4
  config_BFC4FF5C : ORIGIN = 0xBFC4FF5C, LENGTH = 0x4
  config_BFC4FF60 : ORIGIN = 0xBFC4FF60, LENGTH = 0x4
  config_BFC4FF64 : ORIGIN = 0xBFC4FF64, LENGTH = 0x4
  config_BFC4FF68 : ORIGIN = 0xBFC4FF68, LENGTH = 0x4
  config_BFC4FF6C : ORIGIN = 0xBFC4FF6C, LENGTH = 0x4
  config_BFC4FF70 : ORIGIN = 0xBFC4FF70, LENGTH = 0x4
  config_BFC4FF74 : ORIGIN = 0xBFC4FF74, LENGTH = 0x4
  config_BFC4FF78 : ORIGIN = 0xBFC4FF78, LENGTH = 0x4
  config_BFC4FF7C : ORIGIN = 0xBFC4FF7C, LENGTH = 0x4
  config_BFC4FFC0 : ORIGIN = 0xBFC4FFC0, LENGTH = 0x4
  config_BFC4FFC4 : ORIGIN = 0xBFC4FFC4, LENGTH = 0x4
  config_BFC4FFC8 : ORIGIN = 0xBFC4FFC8, LENGTH = 0x4
  config_BFC4FFCC : ORIGIN = 0xBFC4FFCC, LENGTH = 0x4
  config_BFC4FFD0 : ORIGIN = 0xBFC4FFD0, LENGTH = 0x4
  config_BFC4FFD4 : ORIGIN = 0xBFC4FFD4, LENGTH = 0x4
  config_BFC4FFD8 : ORIGIN = 0xBFC4FFD8, LENGTH = 0x4
  config_BFC4FFDC : ORIGIN = 0xBFC4FFDC, LENGTH = 0x4
  config_BFC4FFE0 : ORIGIN = 0xBFC4FFE0, LENGTH = 0x4
  config_BFC4FFE4 : ORIGIN = 0xBFC4FFE4, LENGTH = 0x4
  config_BFC4FFE8 : ORIGIN = 0xBFC4FFE8, LENGTH = 0x4
  config_BFC4FFEC : ORIGIN = 0xBFC4FFEC, LENGTH = 0x4
  config_BFC4FFF0 : ORIGIN = 0xBFC4FFF0, LENGTH = 0x4
  config_BFC4FFF4 : ORIGIN = 0xBFC4FFF4, LENGTH = 0x4
  config_BFC4FFF8 : ORIGIN = 0xBFC4FFF8, LENGTH = 0x4
  config_BFC4FFFC : ORIGIN = 0xBFC4FFFC, LENGTH = 0x4
  boot1lastpage : ORIGIN = 0xBFC50000, LENGTH = 0x4000
  config_BFC54000 : ORIGIN = 0xBFC54000, LENGTH = 0x4
  config_BFC54004 : ORIGIN = 0xBFC54004, LENGTH = 0x4
  config_BFC54008 : ORIGIN = 0xBFC54008, LENGTH = 0x4
  config_BFC5400C : ORIGIN = 0xBFC5400C, LENGTH = 0x4
  config_BFC54010 : ORIGIN = 0xBFC54010, LENGTH = 0x4
  config_BFC54020 : ORIGIN = 0xBFC54020, LENGTH = 0x4
  config_BFC54024 : ORIGIN = 0xBFC54024, LENGTH = 0x4
  boot2 : ORIGIN = 0xBFC60000, LENGTH = 0xFF00
  config_BFC6FF40 : ORIGIN = 0xBFC6FF40, LENGTH = 0x4
  config_BFC6FF44 : ORIGIN = 0xBFC6FF44, LENGTH = 0x4
  config_BFC6FF48 : ORIGIN = 0xBFC6FF48, LENGTH = 0x4
  config_BFC6FF4C : ORIGIN = 0xBFC6FF4C, LENGTH = 0x4
  config_BFC6FF50 : ORIGIN = 0xBFC6FF50, LENGTH = 0x4
  config_BFC6FF54 : ORIGIN = 0xBFC6FF54, LENGTH = 0x4
  config_BFC6FF58 : ORIGIN = 0xBFC6FF58, LENGTH = 0x4
  config_BFC6FF5C : ORIGIN = 0xBFC6FF5C, LENGTH = 0x4
  config_BFC6FF60 : ORIGIN = 0xBFC6FF60, LENGTH = 0x4
  config_BFC6FF64 : ORIGIN = 0xBFC6FF64, LENGTH = 0x4
  config_BFC6FF68 : ORIGIN = 0xBFC6FF68, LENGTH = 0x4
  config_BFC6FF6C : ORIGIN = 0xBFC6FF6C, LENGTH = 0x4
  config_BFC6FF70 : ORIGIN = 0xBFC6FF70, LENGTH = 0x4
  config_BFC6FF74 : ORIGIN = 0xBFC6FF74, LENGTH = 0x4
  config_BFC6FF78 : ORIGIN = 0xBFC6FF78, LENGTH = 0x4
  config_BFC6FF7C : ORIGIN = 0xBFC6FF7C, LENGTH = 0x4
  config_BFC6FFC0 : ORIGIN = 0xBFC6FFC0, LENGTH = 0x4
  config_BFC6FFC4 : ORIGIN = 0xBFC6FFC4, LENGTH = 0x4
  config_BFC6FFC8 : ORIGIN = 0xBFC6FFC8, LENGTH = 0x4
  config_BFC6FFCC : ORIGIN = 0xBFC6FFCC, LENGTH = 0x4
  config_BFC6FFD0 : ORIGIN = 0xBFC6FFD0, LENGTH = 0x4
  config_BFC6FFD4 : ORIGIN = 0xBFC6FFD4, LENGTH = 0x4
  config_BFC6FFD8 : ORIGIN = 0xBFC6FFD8, LENGTH = 0x4
  config_BFC6FFDC : ORIGIN = 0xBFC6FFDC, LENGTH = 0x4
  config_BFC6FFE0 : ORIGIN = 0xBFC6FFE0, LENGTH = 0x4
  config_BFC6FFE4 : ORIGIN = 0xBFC6FFE4, LENGTH = 0x4
  config_BFC6FFE8 : ORIGIN = 0xBFC6FFE8, LENGTH = 0x4
  config_BFC6FFEC : ORIGIN = 0xBFC6FFEC, LENGTH = 0x4
  config_BFC6FFF0 : ORIGIN = 0xBFC6FFF0, LENGTH = 0x4
  config_BFC6FFF4 : ORIGIN = 0xBFC6FFF4, LENGTH = 0x4
  config_BFC6FFF8 : ORIGIN = 0xBFC6FFF8, LENGTH = 0x4
  config_BFC6FFFC : ORIGIN = 0xBFC6FFFC, LENGTH = 0x4
  boot2lastpage : ORIGIN = 0xBFC70000, LENGTH = 0x4000
  configsfrs_BFC0FF40 : ORIGIN = 0xBFC0FF40, LENGTH = 0x40
  configsfrs_BFC0FFC0 : ORIGIN = 0xBFC0FFC0, LENGTH = 0x40
  configsfrs_BFC4FF40 : ORIGIN = 0xBFC4FF40, LENGTH = 0x40
  configsfrs_BFC4FFC0 : ORIGIN = 0xBFC4FFC0, LENGTH = 0x40
  configsfrs_BFC54000 : ORIGIN = 0xBFC54000, LENGTH = 0x14
  configsfrs_BFC54020 : ORIGIN = 0xBFC54020, LENGTH = 0x8
  configsfrs_BFC6FF40 : ORIGIN = 0xBFC6FF40, LENGTH = 0x40
  configsfrs_BFC6FFC0 : ORIGIN = 0xBFC6FFC0, LENGTH = 0x40
  kseg0_data_mem (w!x) : ORIGIN = 0x80000000, LENGTH = 0x80000
  sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000
  kseg2_ebi_data_mem : ORIGIN = 0xC0000000, LENGTH = 0x4000000
  kseg2_sqi_data_mem : ORIGIN = 0xD0000000, LENGTH = 0x4000000
  kseg3_ebi_data_mem : ORIGIN = 0xE0000000, LENGTH = 0x4000000
  kseg3_sqi_data_mem : ORIGIN = 0xF0000000, LENGTH = 0x4000000
}

/*************************************************************************
 * Configuration-word sections. Map the config-pragma input sections to
 * absolute-address output sections.
 *************************************************************************/
SECTIONS
{
  .config_BFC0FF40 : {
    KEEP(*(.config_BFC0FF40))
  } > config_BFC0FF40
  .config_BFC0FF44 : {
    KEEP(*(.config_BFC0FF44))
  } > config_BFC0FF44
  .config_BFC0FF48 : {
    KEEP(*(.config_BFC0FF48))
  } > config_BFC0FF48
  .config_BFC0FF4C : {
    KEEP(*(.config_BFC0FF4C))
  } > config_BFC0FF4C
  .config_BFC0FF50 : {
    KEEP(*(.config_BFC0FF50))
  } > config_BFC0FF50
  .config_BFC0FF54 : {
    KEEP(*(.config_BFC0FF54))
  } > config_BFC0FF54
  .config_BFC0FF58 : {
    KEEP(*(.config_BFC0FF58))
  } > config_BFC0FF58
  .config_BFC0FF5C : {
    KEEP(*(.config_BFC0FF5C))
  } > config_BFC0FF5C
  .config_BFC0FF60 : {
    KEEP(*(.config_BFC0FF60))
  } > config_BFC0FF60
  .config_BFC0FF64 : {
    KEEP(*(.config_BFC0FF64))
  } > config_BFC0FF64
  .config_BFC0FF68 : {
    KEEP(*(.config_BFC0FF68))
  } > config_BFC0FF68
  .config_BFC0FF6C : {
    KEEP(*(.config_BFC0FF6C))
  } > config_BFC0FF6C
  .config_BFC0FF70 : {
    KEEP(*(.config_BFC0FF70))
  } > config_BFC0FF70
  .config_BFC0FF74 : {
    KEEP(*(.config_BFC0FF74))
  } > config_BFC0FF74
  .config_BFC0FF78 : {
    KEEP(*(.config_BFC0FF78))
  } > config_BFC0FF78
  .config_BFC0FF7C : {
    KEEP(*(.config_BFC0FF7C))
  } > config_BFC0FF7C
  .config_BFC0FFC0 : {
    KEEP(*(.config_BFC0FFC0))
  } > config_BFC0FFC0
  .config_BFC0FFC4 : {
    KEEP(*(.config_BFC0FFC4))
  } > config_BFC0FFC4
  .config_BFC0FFC8 : {
    KEEP(*(.config_BFC0FFC8))
  } > config_BFC0FFC8
  .config_BFC0FFCC : {
    KEEP(*(.config_BFC0FFCC))
  } > config_BFC0FFCC
  .config_BFC0FFD0 : {
    KEEP(*(.config_BFC0FFD0))
  } > config_BFC0FFD0
  .config_BFC0FFD4 : {
    KEEP(*(.config_BFC0FFD4))
  } > config_BFC0FFD4
  .config_BFC0FFD8 : {
    KEEP(*(.config_BFC0FFD8))
  } > config_BFC0FFD8
  .config_BFC0FFDC : {
    KEEP(*(.config_BFC0FFDC))
  } > config_BFC0FFDC
  .config_BFC0FFE0 : {
    KEEP(*(.config_BFC0FFE0))
  } > config_BFC0FFE0
  .config_BFC0FFE4 : {
    KEEP(*(.config_BFC0FFE4))
  } > config_BFC0FFE4
  .config_BFC0FFE8 : {
    KEEP(*(.config_BFC0FFE8))
  } > config_BFC0FFE8
  .config_BFC0FFEC : {
    KEEP(*(.config_BFC0FFEC))
  } > config_BFC0FFEC
  .config_BFC0FFF0 : {
    KEEP(*(.config_BFC0FFF0))
  } > config_BFC0FFF0
  .config_BFC0FFF4 : {
    KEEP(*(.config_BFC0FFF4))
  } > config_BFC0FFF4
  .config_BFC0FFF8 : {
    KEEP(*(.config_BFC0FFF8))
  } > config_BFC0FFF8
  .config_BFC0FFFC : {
    KEEP(*(.config_BFC0FFFC))
  } > config_BFC0FFFC
  .config_BFC4FF40 : {
    KEEP(*(.config_BFC4FF40))
  } > config_BFC4FF40
  .config_BFC4FF44 : {
    KEEP(*(.config_BFC4FF44))
  } > config_BFC4FF44
  .config_BFC4FF48 : {
    KEEP(*(.config_BFC4FF48))
  } > config_BFC4FF48
  .config_BFC4FF4C : {
    KEEP(*(.config_BFC4FF4C))
  } > config_BFC4FF4C
  .config_BFC4FF50 : {
    KEEP(*(.config_BFC4FF50))
  } > config_BFC4FF50
  .config_BFC4FF54 : {
    KEEP(*(.config_BFC4FF54))
  } > config_BFC4FF54
  .config_BFC4FF58 : {
    KEEP(*(.config_BFC4FF58))
  } > config_BFC4FF58
  .config_BFC4FF5C : {
    KEEP(*(.config_BFC4FF5C))
  } > config_BFC4FF5C
  .config_BFC4FF60 : {
    KEEP(*(.config_BFC4FF60))
  } > config_BFC4FF60
  .config_BFC4FF64 : {
    KEEP(*(.config_BFC4FF64))
  } > config_BFC4FF64
  .config_BFC4FF68 : {
    KEEP(*(.config_BFC4FF68))
  } > config_BFC4FF68
  .config_BFC4FF6C : {
    KEEP(*(.config_BFC4FF6C))
  } > config_BFC4FF6C
  .config_BFC4FF70 : {
    KEEP(*(.config_BFC4FF70))
  } > config_BFC4FF70
  .config_BFC4FF74 : {
    KEEP(*(.config_BFC4FF74))
  } > config_BFC4FF74
  .config_BFC4FF78 : {
    KEEP(*(.config_BFC4FF78))
  } > config_BFC4FF78
  .config_BFC4FF7C : {
    KEEP(*(.config_BFC4FF7C))
  } > config_BFC4FF7C
  .config_BFC4FFC0 : {
    KEEP(*(.config_BFC4FFC0))
  } > config_BFC4FFC0
  .config_BFC4FFC4 : {
    KEEP(*(.config_BFC4FFC4))
  } > config_BFC4FFC4
  .config_BFC4FFC8 : {
    KEEP(*(.config_BFC4FFC8))
  } > config_BFC4FFC8
  .config_BFC4FFCC : {
    KEEP(*(.config_BFC4FFCC))
  } > config_BFC4FFCC
  .config_BFC4FFD0 : {
    KEEP(*(.config_BFC4FFD0))
  } > config_BFC4FFD0
  .config_BFC4FFD4 : {
    KEEP(*(.config_BFC4FFD4))
  } > config_BFC4FFD4
  .config_BFC4FFD8 : {
    KEEP(*(.config_BFC4FFD8))
  } > config_BFC4FFD8
  .config_BFC4FFDC : {
    KEEP(*(.config_BFC4FFDC))
  } > config_BFC4FFDC
  .config_BFC4FFE0 : {
    KEEP(*(.config_BFC4FFE0))
  } > config_BFC4FFE0
  .config_BFC4FFE4 : {
    KEEP(*(.config_BFC4FFE4))
  } > config_BFC4FFE4
  .config_BFC4FFE8 : {
    KEEP(*(.config_BFC4FFE8))
  } > config_BFC4FFE8
  .config_BFC4FFEC : {
    KEEP(*(.config_BFC4FFEC))
  } > config_BFC4FFEC
  .config_BFC4FFF0 : {
    KEEP(*(.config_BFC4FFF0))
  } > config_BFC4FFF0
  .config_BFC4FFF4 : {
    KEEP(*(.config_BFC4FFF4))
  } > config_BFC4FFF4
  .config_BFC4FFF8 : {
    KEEP(*(.config_BFC4FFF8))
  } > config_BFC4FFF8
  .config_BFC4FFFC : {
    KEEP(*(.config_BFC4FFFC))
  } > config_BFC4FFFC
  .config_BFC54000 : {
    KEEP(*(.config_BFC54000))
  } > config_BFC54000
  .config_BFC54004 : {
    KEEP(*(.config_BFC54004))
  } > config_BFC54004
  .config_BFC54008 : {
    KEEP(*(.config_BFC54008))
  } > config_BFC54008
  .config_BFC5400C : {
    KEEP(*(.config_BFC5400C))
  } > config_BFC5400C
  .config_BFC54010 : {
    KEEP(*(.config_BFC54010))
  } > config_BFC54010
  .config_BFC54020 : {
    KEEP(*(.config_BFC54020))
  } > config_BFC54020
  .config_BFC54024 : {
    KEEP(*(.config_BFC54024))
  } > config_BFC54024
  .config_BFC6FF40 : {
    KEEP(*(.config_BFC6FF40))
  } > config_BFC6FF40
  .config_BFC6FF44 : {
    KEEP(*(.config_BFC6FF44))
  } > config_BFC6FF44
  .config_BFC6FF48 : {
    KEEP(*(.config_BFC6FF48))
  } > config_BFC6FF48
  .config_BFC6FF4C : {
    KEEP(*(.config_BFC6FF4C))
  } > config_BFC6FF4C
  .config_BFC6FF50 : {
    KEEP(*(.config_BFC6FF50))
  } > config_BFC6FF50
  .config_BFC6FF54 : {
    KEEP(*(.config_BFC6FF54))
  } > config_BFC6FF54
  .config_BFC6FF58 : {
    KEEP(*(.config_BFC6FF58))
  } > config_BFC6FF58
  .config_BFC6FF5C : {
    KEEP(*(.config_BFC6FF5C))
  } > config_BFC6FF5C
  .config_BFC6FF60 : {
    KEEP(*(.config_BFC6FF60))
  } > config_BFC6FF60
  .config_BFC6FF64 : {
    KEEP(*(.config_BFC6FF64))
  } > config_BFC6FF64
  .config_BFC6FF68 : {
    KEEP(*(.config_BFC6FF68))
  } > config_BFC6FF68
  .config_BFC6FF6C : {
    KEEP(*(.config_BFC6FF6C))
  } > config_BFC6FF6C
  .config_BFC6FF70 : {
    KEEP(*(.config_BFC6FF70))
  } > config_BFC6FF70
  .config_BFC6FF74 : {
    KEEP(*(.config_BFC6FF74))
  } > config_BFC6FF74
  .config_BFC6FF78 : {
    KEEP(*(.config_BFC6FF78))
  } > config_BFC6FF78
  .config_BFC6FF7C : {
    KEEP(*(.config_BFC6FF7C))
  } > config_BFC6FF7C
  .config_BFC6FFC0 : {
    KEEP(*(.config_BFC6FFC0))
  } > config_BFC6FFC0
  .config_BFC6FFC4 : {
    KEEP(*(.config_BFC6FFC4))
  } > config_BFC6FFC4
  .config_BFC6FFC8 : {
    KEEP(*(.config_BFC6FFC8))
  } > config_BFC6FFC8
  .config_BFC6FFCC : {
    KEEP(*(.config_BFC6FFCC))
  } > config_BFC6FFCC
  .config_BFC6FFD0 : {
    KEEP(*(.config_BFC6FFD0))
  } > config_BFC6FFD0
  .config_BFC6FFD4 : {
    KEEP(*(.config_BFC6FFD4))
  } > config_BFC6FFD4
  .config_BFC6FFD8 : {
    KEEP(*(.config_BFC6FFD8))
  } > config_BFC6FFD8
  .config_BFC6FFDC : {
    KEEP(*(.config_BFC6FFDC))
  } > config_BFC6FFDC
  .config_BFC6FFE0 : {
    KEEP(*(.config_BFC6FFE0))
  } > config_BFC6FFE0
  .config_BFC6FFE4 : {
    KEEP(*(.config_BFC6FFE4))
  } > config_BFC6FFE4
  .config_BFC6FFE8 : {
    KEEP(*(.config_BFC6FFE8))
  } > config_BFC6FFE8
  .config_BFC6FFEC : {
    KEEP(*(.config_BFC6FFEC))
  } > config_BFC6FFEC
  .config_BFC6FFF0 : {
    KEEP(*(.config_BFC6FFF0))
  } > config_BFC6FFF0
  .config_BFC6FFF4 : {
    KEEP(*(.config_BFC6FFF4))
  } > config_BFC6FFF4
  .config_BFC6FFF8 : {
    KEEP(*(.config_BFC6FFF8))
  } > config_BFC6FFF8
  .config_BFC6FFFC : {
    KEEP(*(.config_BFC6FFFC))
  } > config_BFC6FFFC
}
SECTIONS
{
  /* Boot Sections */
  .reset _RESET_ADDR :
  {
    KEEP(*(.reset))
    KEEP(*(.reset.startup))
  } > kseg1_boot_mem
  .bev_excpt _BEV_EXCPT_ADDR :
  {
    KEEP(*(.bev_handler))
  } > kseg1_boot_mem
  .cache_init :
  {
    *(.cache_init)
    *(.cache_init.*)
  } > kseg1_boot_mem_4B0
  .simple_tlb_refill_excpt _SIMPLE_TLB_REFILL_EXCPT_ADDR :
  {
    KEEP(*(.simple_tlb_refill_vector))
  } > kseg0_program_mem
  .cache_err_excpt _CACHE_ERR_EXCPT_ADDR :
  {
    KEEP(*(.cache_err_vector))
  } > kseg0_program_mem
  .app_excpt _GEN_EXCPT_ADDR :
  {
    KEEP(*(.gen_handler))
  } > kseg0_program_mem

  /* Interrupt vector table with vector offsets */
  .vectors _ebase_address + 0x200 :
  {
    /* Symbol __vector_offset_n points to .vector_n if it exists,
     * otherwise points to the default handler. The
     * vector_offset_init.o module then provides a .data section
     * containing values used to initialize the vector-offset SFRs
     * in the crt0 startup code.
     */
    __vector_offset_0 = (DEFINED(__vector_dispatch_0) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_0))
    __vector_offset_1 = (DEFINED(__vector_dispatch_1) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_1))
    __vector_offset_2 = (DEFINED(__vector_dispatch_2) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_2))
    __vector_offset_3 = (DEFINED(__vector_dispatch_3) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_3))
    __vector_offset_4 = (DEFINED(__vector_dispatch_4) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_4))
    __vector_offset_5 = (DEFINED(__vector_dispatch_5) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_5))
    __vector_offset_6 = (DEFINED(__vector_dispatch_6) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_6))
    __vector_offset_7 = (DEFINED(__vector_dispatch_7) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_7))
    __vector_offset_8 = (DEFINED(__vector_dispatch_8) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_8))
    __vector_offset_9 = (DEFINED(__vector_dispatch_9) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_9))
    __vector_offset_10 = (DEFINED(__vector_dispatch_10) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_10))
    __vector_offset_11 = (DEFINED(__vector_dispatch_11) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_11))
    __vector_offset_12 = (DEFINED(__vector_dispatch_12) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_12))
    __vector_offset_13 = (DEFINED(__vector_dispatch_13) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_13))
    __vector_offset_14 = (DEFINED(__vector_dispatch_14) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_14))
    __vector_offset_15 = (DEFINED(__vector_dispatch_15) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_15))
    __vector_offset_16 = (DEFINED(__vector_dispatch_16) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_16))
    __vector_offset_17 = (DEFINED(__vector_dispatch_17) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_17))
    __vector_offset_18 = (DEFINED(__vector_dispatch_18) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_18))
    __vector_offset_19 = (DEFINED(__vector_dispatch_19) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_19))
    __vector_offset_20 = (DEFINED(__vector_dispatch_20) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_20))
    __vector_offset_21 = (DEFINED(__vector_dispatch_21) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_21))
    __vector_offset_22 = (DEFINED(__vector_dispatch_22) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_22))
    __vector_offset_23 = (DEFINED(__vector_dispatch_23) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_23))
    __vector_offset_24 = (DEFINED(__vector_dispatch_24) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_24))
    __vector_offset_25 = (DEFINED(__vector_dispatch_25) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_25))
    __vector_offset_26 = (DEFINED(__vector_dispatch_26) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_26))
    __vector_offset_27 = (DEFINED(__vector_dispatch_27) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_27))
    __vector_offset_28 = (DEFINED(__vector_dispatch_28) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_28))
    __vector_offset_29 = (DEFINED(__vector_dispatch_29) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_29))
    __vector_offset_30 = (DEFINED(__vector_dispatch_30) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_30))
    __vector_offset_31 = (DEFINED(__vector_dispatch_31) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_31))
    __vector_offset_32 = (DEFINED(__vector_dispatch_32) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_32))
    __vector_offset_33 = (DEFINED(__vector_dispatch_33) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_33))
    __vector_offset_34 = (DEFINED(__vector_dispatch_34) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_34))
    __vector_offset_35 = (DEFINED(__vector_dispatch_35) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_35))
    __vector_offset_36 = (DEFINED(__vector_dispatch_36) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_36))
    __vector_offset_37 = (DEFINED(__vector_dispatch_37) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_37))
    __vector_offset_38 = (DEFINED(__vector_dispatch_38) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_38))
    __vector_offset_39 = (DEFINED(__vector_dispatch_39) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_39))
    __vector_offset_40 = (DEFINED(__vector_dispatch_40) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_40))
    __vector_offset_41 = (DEFINED(__vector_dispatch_41) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_41))
    __vector_offset_42 = (DEFINED(__vector_dispatch_42) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_42))
    __vector_offset_43 = (DEFINED(__vector_dispatch_43) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_43))
    __vector_offset_44 = (DEFINED(__vector_dispatch_44) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_44))
    __vector_offset_45 = (DEFINED(__vector_dispatch_45) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_45))
    __vector_offset_46 = (DEFINED(__vector_dispatch_46) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_46))
    __vector_offset_47 = (DEFINED(__vector_dispatch_47) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_47))
    __vector_offset_48 = (DEFINED(__vector_dispatch_48) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_48))
    __vector_offset_49 = (DEFINED(__vector_dispatch_49) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_49))
    __vector_offset_50 = (DEFINED(__vector_dispatch_50) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_50))
    __vector_offset_51 = (DEFINED(__vector_dispatch_51) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_51))
    __vector_offset_52 = (DEFINED(__vector_dispatch_52) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_52))
    __vector_offset_53 = (DEFINED(__vector_dispatch_53) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_53))
    __vector_offset_54 = (DEFINED(__vector_dispatch_54) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_54))
    __vector_offset_55 = (DEFINED(__vector_dispatch_55) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_55))
    __vector_offset_56 = (DEFINED(__vector_dispatch_56) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_56))
    __vector_offset_57 = (DEFINED(__vector_dispatch_57) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_57))
    __vector_offset_58 = (DEFINED(__vector_dispatch_58) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_58))
    __vector_offset_59 = (DEFINED(__vector_dispatch_59) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_59))
    __vector_offset_60 = (DEFINED(__vector_dispatch_60) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_60))
    __vector_offset_61 = (DEFINED(__vector_dispatch_61) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_61))
    __vector_offset_62 = (DEFINED(__vector_dispatch_62) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_62))
    __vector_offset_63 = (DEFINED(__vector_dispatch_63) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_63))
    __vector_offset_64 = (DEFINED(__vector_dispatch_64) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_64))
    __vector_offset_65 = (DEFINED(__vector_dispatch_65) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_65))
    __vector_offset_66 = (DEFINED(__vector_dispatch_66) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_66))
    __vector_offset_67 = (DEFINED(__vector_dispatch_67) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_67))
    __vector_offset_68 = (DEFINED(__vector_dispatch_68) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_68))
    __vector_offset_69 = (DEFINED(__vector_dispatch_69) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_69))
    __vector_offset_70 = (DEFINED(__vector_dispatch_70) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_70))
    __vector_offset_71 = (DEFINED(__vector_dispatch_71) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_71))
    __vector_offset_72 = (DEFINED(__vector_dispatch_72) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_72))
    __vector_offset_73 = (DEFINED(__vector_dispatch_73) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_73))
    __vector_offset_74 = (DEFINED(__vector_dispatch_74) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_74))
    __vector_offset_75 = (DEFINED(__vector_dispatch_75) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_75))
    __vector_offset_76 = (DEFINED(__vector_dispatch_76) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_76))
    __vector_offset_77 = (DEFINED(__vector_dispatch_77) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_77))
    __vector_offset_78 = (DEFINED(__vector_dispatch_78) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_78))
    __vector_offset_79 = (DEFINED(__vector_dispatch_79) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_79))
    __vector_offset_80 = (DEFINED(__vector_dispatch_80) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_80))
    __vector_offset_81 = (DEFINED(__vector_dispatch_81) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_81))
    __vector_offset_82 = (DEFINED(__vector_dispatch_82) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_82))
    __vector_offset_83 = (DEFINED(__vector_dispatch_83) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_83))
    __vector_offset_84 = (DEFINED(__vector_dispatch_84) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_84))
    __vector_offset_85 = (DEFINED(__vector_dispatch_85) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_85))
    __vector_offset_86 = (DEFINED(__vector_dispatch_86) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_86))
    __vector_offset_87 = (DEFINED(__vector_dispatch_87) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_87))
    __vector_offset_88 = (DEFINED(__vector_dispatch_88) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_88))
    __vector_offset_89 = (DEFINED(__vector_dispatch_89) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_89))
    __vector_offset_90 = (DEFINED(__vector_dispatch_90) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_90))
    __vector_offset_91 = (DEFINED(__vector_dispatch_91) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_91))
    __vector_offset_92 = (DEFINED(__vector_dispatch_92) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_92))
    __vector_offset_93 = (DEFINED(__vector_dispatch_93) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_93))
    __vector_offset_94 = (DEFINED(__vector_dispatch_94) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_94))
    __vector_offset_95 = (DEFINED(__vector_dispatch_95) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_95))
    __vector_offset_96 = (DEFINED(__vector_dispatch_96) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_96))
    __vector_offset_97 = (DEFINED(__vector_dispatch_97) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_97))
    __vector_offset_98 = (DEFINED(__vector_dispatch_98) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_98))
    __vector_offset_99 = (DEFINED(__vector_dispatch_99) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_99))
    __vector_offset_100 = (DEFINED(__vector_dispatch_100) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_100))
    __vector_offset_101 = (DEFINED(__vector_dispatch_101) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_101))
    __vector_offset_102 = (DEFINED(__vector_dispatch_102) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_102))
    __vector_offset_103 = (DEFINED(__vector_dispatch_103) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_103))
    __vector_offset_104 = (DEFINED(__vector_dispatch_104) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_104))
    __vector_offset_105 = (DEFINED(__vector_dispatch_105) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_105))
    __vector_offset_106 = (DEFINED(__vector_dispatch_106) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_106))
    __vector_offset_107 = (DEFINED(__vector_dispatch_107) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_107))
    __vector_offset_108 = (DEFINED(__vector_dispatch_108) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_108))
    __vector_offset_109 = (DEFINED(__vector_dispatch_109) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_109))
    __vector_offset_110 = (DEFINED(__vector_dispatch_110) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_110))
    __vector_offset_111 = (DEFINED(__vector_dispatch_111) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_111))
    __vector_offset_112 = (DEFINED(__vector_dispatch_112) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_112))
    __vector_offset_113 = (DEFINED(__vector_dispatch_113) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_113))
    __vector_offset_114 = (DEFINED(__vector_dispatch_114) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_114))
    __vector_offset_115 = (DEFINED(__vector_dispatch_115) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_115))
    __vector_offset_116 = (DEFINED(__vector_dispatch_116) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_116))
    __vector_offset_117 = (DEFINED(__vector_dispatch_117) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_117))
    __vector_offset_118 = (DEFINED(__vector_dispatch_118) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_118))
    __vector_offset_119 = (DEFINED(__vector_dispatch_119) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_119))
    __vector_offset_120 = (DEFINED(__vector_dispatch_120) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_120))
    __vector_offset_121 = (DEFINED(__vector_dispatch_121) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_121))
    __vector_offset_122 = (DEFINED(__vector_dispatch_122) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_122))
    __vector_offset_123 = (DEFINED(__vector_dispatch_123) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_123))
    __vector_offset_124 = (DEFINED(__vector_dispatch_124) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_124))
    __vector_offset_125 = (DEFINED(__vector_dispatch_125) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_125))
    __vector_offset_126 = (DEFINED(__vector_dispatch_126) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_126))
    __vector_offset_127 = (DEFINED(__vector_dispatch_127) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_127))
    __vector_offset_128 = (DEFINED(__vector_dispatch_128) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_128))
    __vector_offset_129 = (DEFINED(__vector_dispatch_129) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_129))
    __vector_offset_130 = (DEFINED(__vector_dispatch_130) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_130))
    __vector_offset_131 = (DEFINED(__vector_dispatch_131) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_131))
    __vector_offset_132 = (DEFINED(__vector_dispatch_132) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_132))
    __vector_offset_133 = (DEFINED(__vector_dispatch_133) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_133))
    __vector_offset_134 = (DEFINED(__vector_dispatch_134) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_134))
    __vector_offset_135 = (DEFINED(__vector_dispatch_135) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_135))
    __vector_offset_136 = (DEFINED(__vector_dispatch_136) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_136))
    __vector_offset_137 = (DEFINED(__vector_dispatch_137) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_137))
    __vector_offset_138 = (DEFINED(__vector_dispatch_138) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_138))
    __vector_offset_139 = (DEFINED(__vector_dispatch_139) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_139))
    __vector_offset_140 = (DEFINED(__vector_dispatch_140) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_140))
    __vector_offset_141 = (DEFINED(__vector_dispatch_141) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_141))
    __vector_offset_142 = (DEFINED(__vector_dispatch_142) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_142))
    __vector_offset_143 = (DEFINED(__vector_dispatch_143) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_143))
    __vector_offset_144 = (DEFINED(__vector_dispatch_144) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_144))
    __vector_offset_145 = (DEFINED(__vector_dispatch_145) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_145))
    __vector_offset_146 = (DEFINED(__vector_dispatch_146) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_146))
    __vector_offset_147 = (DEFINED(__vector_dispatch_147) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_147))
    __vector_offset_148 = (DEFINED(__vector_dispatch_148) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_148))
    __vector_offset_149 = (DEFINED(__vector_dispatch_149) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_149))
    __vector_offset_150 = (DEFINED(__vector_dispatch_150) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_150))
    __vector_offset_151 = (DEFINED(__vector_dispatch_151) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_151))
    __vector_offset_152 = (DEFINED(__vector_dispatch_152) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_152))
    __vector_offset_153 = (DEFINED(__vector_dispatch_153) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_153))
    __vector_offset_154 = (DEFINED(__vector_dispatch_154) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_154))
    __vector_offset_155 = (DEFINED(__vector_dispatch_155) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_155))
    __vector_offset_156 = (DEFINED(__vector_dispatch_156) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_156))
    __vector_offset_157 = (DEFINED(__vector_dispatch_157) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_157))
    __vector_offset_158 = (DEFINED(__vector_dispatch_158) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_158))
    __vector_offset_159 = (DEFINED(__vector_dispatch_159) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_159))
    __vector_offset_160 = (DEFINED(__vector_dispatch_160) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_160))
    __vector_offset_161 = (DEFINED(__vector_dispatch_161) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_161))
    __vector_offset_162 = (DEFINED(__vector_dispatch_162) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_162))
    __vector_offset_163 = (DEFINED(__vector_dispatch_163) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_163))
    __vector_offset_164 = (DEFINED(__vector_dispatch_164) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_164))
    __vector_offset_165 = (DEFINED(__vector_dispatch_165) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_165))
    __vector_offset_166 = (DEFINED(__vector_dispatch_166) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_166))
    __vector_offset_167 = (DEFINED(__vector_dispatch_167) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_167))
    __vector_offset_168 = (DEFINED(__vector_dispatch_168) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_168))
    __vector_offset_169 = (DEFINED(__vector_dispatch_169) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_169))
    __vector_offset_170 = (DEFINED(__vector_dispatch_170) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_170))
    __vector_offset_171 = (DEFINED(__vector_dispatch_171) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_171))
    __vector_offset_172 = (DEFINED(__vector_dispatch_172) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_172))
    __vector_offset_173 = (DEFINED(__vector_dispatch_173) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_173))
    __vector_offset_174 = (DEFINED(__vector_dispatch_174) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_174))
    __vector_offset_175 = (DEFINED(__vector_dispatch_175) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_175))
    __vector_offset_176 = (DEFINED(__vector_dispatch_176) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_176))
    __vector_offset_177 = (DEFINED(__vector_dispatch_177) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_177))
    __vector_offset_178 = (DEFINED(__vector_dispatch_178) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_178))
    __vector_offset_179 = (DEFINED(__vector_dispatch_179) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_179))
    __vector_offset_180 = (DEFINED(__vector_dispatch_180) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_180))
    __vector_offset_181 = (DEFINED(__vector_dispatch_181) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_181))
    __vector_offset_182 = (DEFINED(__vector_dispatch_182) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_182))
    __vector_offset_183 = (DEFINED(__vector_dispatch_183) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_183))
    __vector_offset_184 = (DEFINED(__vector_dispatch_184) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_184))
    __vector_offset_185 = (DEFINED(__vector_dispatch_185) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_185))
    __vector_offset_186 = (DEFINED(__vector_dispatch_186) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_186))
    __vector_offset_187 = (DEFINED(__vector_dispatch_187) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_187))
    __vector_offset_188 = (DEFINED(__vector_dispatch_188) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_188))
    __vector_offset_189 = (DEFINED(__vector_dispatch_189) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_189))
    __vector_offset_190 = (DEFINED(__vector_dispatch_190) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_190))
    __vector_offset_191 = (DEFINED(__vector_dispatch_191) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_191))
    __vector_offset_192 = (DEFINED(__vector_dispatch_192) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_192))
    __vector_offset_193 = (DEFINED(__vector_dispatch_193) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_193))
    __vector_offset_194 = (DEFINED(__vector_dispatch_194) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_194))
    __vector_offset_195 = (DEFINED(__vector_dispatch_195) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_195))
    __vector_offset_196 = (DEFINED(__vector_dispatch_196) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_196))
    __vector_offset_197 = (DEFINED(__vector_dispatch_197) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_197))
    __vector_offset_198 = (DEFINED(__vector_dispatch_198) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_198))
    __vector_offset_199 = (DEFINED(__vector_dispatch_199) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_199))
    __vector_offset_200 = (DEFINED(__vector_dispatch_200) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_200))
    __vector_offset_201 = (DEFINED(__vector_dispatch_201) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_201))
    __vector_offset_202 = (DEFINED(__vector_dispatch_202) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_202))
    __vector_offset_203 = (DEFINED(__vector_dispatch_203) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_203))
    __vector_offset_204 = (DEFINED(__vector_dispatch_204) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_204))
    __vector_offset_205 = (DEFINED(__vector_dispatch_205) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_205))
    __vector_offset_206 = (DEFINED(__vector_dispatch_206) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_206))
    __vector_offset_207 = (DEFINED(__vector_dispatch_207) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_207))
    __vector_offset_208 = (DEFINED(__vector_dispatch_208) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_208))
    __vector_offset_209 = (DEFINED(__vector_dispatch_209) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_209))
    __vector_offset_210 = (DEFINED(__vector_dispatch_210) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_210))
    __vector_offset_211 = (DEFINED(__vector_dispatch_211) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_211))
    __vector_offset_212 = (DEFINED(__vector_dispatch_212) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_212))
    __vector_offset_213 = (DEFINED(__vector_dispatch_213) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_213))
    __vector_offset_214 = (DEFINED(__vector_dispatch_214) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_214))
    __vector_offset_215 = (DEFINED(__vector_dispatch_215) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_215))
    __vector_offset_216 = (DEFINED(__vector_dispatch_216) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_216))
    __vector_offset_217 = (DEFINED(__vector_dispatch_217) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_217))
    __vector_offset_218 = (DEFINED(__vector_dispatch_218) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_218))
    __vector_offset_219 = (DEFINED(__vector_dispatch_219) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_219))
    __vector_offset_220 = (DEFINED(__vector_dispatch_220) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_220))
    __vector_offset_221 = (DEFINED(__vector_dispatch_221) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_221))
    __vector_offset_222 = (DEFINED(__vector_dispatch_222) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_222))
    __vector_offset_223 = (DEFINED(__vector_dispatch_223) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_223))
    __vector_offset_224 = (DEFINED(__vector_dispatch_224) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_224))
    __vector_offset_225 = (DEFINED(__vector_dispatch_225) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_225))
    __vector_offset_226 = (DEFINED(__vector_dispatch_226) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_226))
    __vector_offset_227 = (DEFINED(__vector_dispatch_227) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_227))
    __vector_offset_228 = (DEFINED(__vector_dispatch_228) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_228))
    __vector_offset_229 = (DEFINED(__vector_dispatch_229) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_229))
    __vector_offset_230 = (DEFINED(__vector_dispatch_230) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_230))
    __vector_offset_231 = (DEFINED(__vector_dispatch_231) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_231))
    __vector_offset_232 = (DEFINED(__vector_dispatch_232) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_232))
    __vector_offset_233 = (DEFINED(__vector_dispatch_233) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_233))
    __vector_offset_234 = (DEFINED(__vector_dispatch_234) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_234))
    __vector_offset_235 = (DEFINED(__vector_dispatch_235) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_235))
    __vector_offset_236 = (DEFINED(__vector_dispatch_236) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_236))
    __vector_offset_237 = (DEFINED(__vector_dispatch_237) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_237))
    __vector_offset_238 = (DEFINED(__vector_dispatch_238) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_238))
    __vector_offset_239 = (DEFINED(__vector_dispatch_239) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_239))
    __vector_offset_240 = (DEFINED(__vector_dispatch_240) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_240))
    __vector_offset_241 = (DEFINED(__vector_dispatch_241) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_241))
    __vector_offset_242 = (DEFINED(__vector_dispatch_242) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_242))
    __vector_offset_243 = (DEFINED(__vector_dispatch_243) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_243))
    __vector_offset_244 = (DEFINED(__vector_dispatch_244) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_244))
    __vector_offset_245 = (DEFINED(__vector_dispatch_245) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_245))
    __vector_offset_246 = (DEFINED(__vector_dispatch_246) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_246))
    __vector_offset_247 = (DEFINED(__vector_dispatch_247) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_247))
    __vector_offset_248 = (DEFINED(__vector_dispatch_248) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_248))
    __vector_offset_249 = (DEFINED(__vector_dispatch_249) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_249))
    __vector_offset_250 = (DEFINED(__vector_dispatch_250) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_250))
    __vector_offset_251 = (DEFINED(__vector_dispatch_251) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_251))
    __vector_offset_252 = (DEFINED(__vector_dispatch_252) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_252))
    __vector_offset_253 = (DEFINED(__vector_dispatch_253) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_253))
    __vector_offset_254 = (DEFINED(__vector_dispatch_254) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_254))
    __vector_offset_255 = (DEFINED(__vector_dispatch_255) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_255))
    /* Default interrupt handler */
    __vector_offset_default = . - _ebase_address;
    KEEP(*(.vector_default))
  } > kseg0_program_mem

  /* The startup code is in the .reset.startup section.
   * Keep this here for backwards compatibility with older
   * C32 v1.xx releases.
   */
  .startup ORIGIN(kseg0_boot_mem) :
  {
    KEEP(*(.startup))
  } > kseg0_boot_mem
  /* Code Sections - Note that input sections *(.text) and *(.text.*)
  ** are not mapped here. The best-fit allocator locates them,
  ** so that .text may flow around absolute sections as needed.
  */
  .text :
  {
    *(.stub .gnu.linkonce.t.*)
    KEEP (*(.text.*personality*))
    *(.mips16.fn.*)
    *(.mips16.call.*)
    *(.gnu.warning)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /* Global-namespace object initialization */
  .init :
  {
    KEEP (*crti.o(.init))
    KEEP (*crtbegin.o(.init))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o *crtn.o ).init))
    KEEP (*crtend.o(.init))
    KEEP (*crtn.o(.init))
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .fini :
  {
    KEEP (*(.fini))
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .preinit_array :
  {
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array))
    PROVIDE_HIDDEN (__preinit_array_end = .);
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .init_array :
  {
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array))
    PROVIDE_HIDDEN (__init_array_end = .);
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .fini_array :
  {
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT(.fini_array.*)))
    KEEP (*(.fini_array))
    PROVIDE_HIDDEN (__fini_array_end = .);
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .ctors :
  {
    /* XC32 uses crtbegin.o to find the start of
       the constructors, so we make sure it is
       first. Because this is a wildcard, it
       doesn't matter if the user does not
       actually link against crtbegin.o; the
       linker won't look for a file to match a
       wildcard. The wildcard also means that it
       doesn't matter which directory crtbegin.o
       is in. */
    KEEP (*crtbegin.o(.ctors))
    KEEP (*crtbegin?.o(.ctors))
    /* We don't want to include the .ctor section from
       the crtend.o file until after the sorted ctors.
       The .ctor section from the crtend file contains the
       end of ctors marker and it must be last */
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .dtors :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*crtbegin?.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /* Read-only sections */
  .rodata :
  {
    *( .gnu.linkonce.r.*)
    *(.rodata1)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /*
   * Small initialized constant global and static data can be placed in the
   * .sdata2 section. This is different from .sdata, which contains small
   * initialized non-constant global and static data.
   */
  .sdata2 ALIGN(4) :
  {
    *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /*
   * Uninitialized constant global and static data (i.e., variables which will
   * always be zero). Again, this is different from .sbss, which contains
   * small non-initialized, non-constant global and static data.
   */
  .sbss2 ALIGN(4) :
  {
    *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .eh_frame_hdr :
  {
    *(.eh_frame_hdr)
  } >kseg0_program_mem
    . = ALIGN(4) ;
  .eh_frame : ONLY_IF_RO
  {
    KEEP (*(.eh_frame))
  } >kseg0_program_mem
    . = ALIGN(4) ;
  .gcc_except_table : ONLY_IF_RO
  {
    *(.gcc_except_table .gcc_except_table.*)
  } >kseg0_program_mem
    . = ALIGN(4) ;
  .dbg_data (NOLOAD) :
  {
    . += (DEFINED (_DEBUGGER) ? 0x200 : 0x0);
    /* Additional data memory required for DSPr2 registers */
    . += (DEFINED (_DEBUGGER) ? 0x80 : 0x0);
  } >kseg0_data_mem
  .jcr :
  {
    KEEP (*(.jcr))
    . = ALIGN(4) ;
  } >kseg0_data_mem
  .eh_frame : ONLY_IF_RW
  {
    KEEP (*(.eh_frame))
  } >kseg0_data_mem
    . = ALIGN(4) ;
  .gcc_except_table : ONLY_IF_RW
  {
    *(.gcc_except_table .gcc_except_table.*)
  } >kseg0_data_mem
    . = ALIGN(4) ;
  /* Persistent data - Use the new C 'persistent' attribute instead. */
  .persist :
  {
    _persist_begin = .;
    *(.persist .persist.*)
    *(.pbss .pbss.*)
    . = ALIGN(4) ;
    _persist_end = .;
  } >kseg0_data_mem
  /*
   * Note that input sections named .data* are not mapped here.
   * The best-fit allocator locates them, so that they may flow
   * around absolute sections as needed.
   */
  .data :
  {
    *( .gnu.linkonce.d.*)
    SORT(CONSTRUCTORS)
    *(.data1)
    . = ALIGN(4) ;
  } >kseg0_data_mem
  . = .;
  _gp = ALIGN(16) + 0x7ff0;
  .got ALIGN(4) :
  {
    *(.got.plt) *(.got)
    . = ALIGN(4) ;
  } >kseg0_data_mem /* AT>kseg0_program_mem */
  /*
   * Note that 'small' data sections are still mapped in the linker
   * script. This ensures that they are grouped together for
   * gp-relative addressing. Absolute sections are allocated after
   * the 'small' data sections so small data cannot flow around them.
   */
  /*
   * We want the small data sections together, so single-instruction offsets
   * can access them all, and initialized data all before uninitialized, so
   * we can shorten the on-disk segment size.
   */
  .sdata ALIGN(4) :
  {
    _sdata_begin = . ;
    *(.sdata .sdata.* .gnu.linkonce.s.*)
    . = ALIGN(4) ;
    _sdata_end = . ;
  } >kseg0_data_mem
  .lit8 :
  {
    *(.lit8)
  } >kseg0_data_mem
  .lit4 :
  {
    *(.lit4)
  } >kseg0_data_mem
  . = ALIGN (4) ;
  _data_end = . ;
  _bss_begin = . ;
  .sbss ALIGN(4) :
  {
    _sbss_begin = . ;
    *(.dynsbss)
    *(.sbss .sbss.* .gnu.linkonce.sb.*)
    *(.scommon)
    _sbss_end = . ;
    . = ALIGN(4) ;
  } >kseg0_data_mem
  /*
   * Align here to ensure that the .bss section occupies space up to
   * _end. Align after .bss to ensure correct alignment even if the
   * .bss section disappears because there are no input sections.
   *
   * Note that input sections named .bss* are no longer mapped here.
   * The best-fit allocator locates them, so that they may flow
   * around absolute sections as needed.
   *
   */
  .bss :
  {
    *(.dynbss)
    *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end. Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections. */
   . = ALIGN(. != 0 ? 4 : 1);
  } >kseg0_data_mem
  . = ALIGN(4) ;
  _end = . ;
  _bss_end = . ;
  /*
   * The heap and stack are best-fit allocated by the linker after other
   * data and bss sections have been allocated.
   */
  /*
   * RAM functions go at the end of our stack and heap allocation.
   * Alignment of 2K required by the boundary register (BMXDKPBA).
   *
   * RAM functions are now allocated by the linker. The linker generates
   * _ramfunc_begin and _bmxdkpba_address symbols depending on the
   * location of RAM functions.
   */
  _bmxdudba_address = LENGTH(kseg0_data_mem) ;
  _bmxdupba_address = LENGTH(kseg0_data_mem) ;
    /* The .pdr section belongs in the absolute section */
    /DISCARD/ : { *(.pdr) }
  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
  .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) }
  .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) }
  .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) }
  .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) }
  .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) }
  .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) }
  .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) }
  .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) }
  /* Stabs debugging sections. */
  .stab 0 : { *(.stab) }
  .stabstr 0 : { *(.stabstr) }
  .stab.excl 0 : { *(.stab.excl) }
  .stab.exclstr 0 : { *(.stab.exclstr) }
  .stab.index 0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment 0 : { *(.comment) }
  /* DWARF debug sections used by MPLAB X for source-level debugging.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0. */
  /* DWARF 1 */
  .debug 0 : { *(.debug) }
  .line 0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo 0 : { *(.debug_srcinfo) }
  .debug_sfnames 0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges 0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
  .debug_abbrev 0 : { *(.debug_abbrev) }
  .debug_line 0 : { *(.debug_line) }
  .debug_frame 0 : { *(.debug_frame) }
  .debug_str 0 : { *(.debug_str) }
  .debug_loc 0 : { *(.debug_loc) }
  .debug_macinfo 0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames 0 : { *(.debug_varnames) }
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
  .debug_ranges 0 : { *(.debug_ranges) }
  /DISCARD/ : { *(.rel.dyn) }
  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
  /DISCARD/ : { *(.note.GNU-stack) }
  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.discard) }
  /DISCARD/ : { *(._debug_exception) }
}

/*************************************************************************
 * L1 Cache initialization symbols
 *************************************************************************/
/*
 * Provide virtual addresses for cache initialization
 * These symbols are used by the pic32_init_cache.o module to set up
 * the cache at startup.
 */
EXTERN (__pic32_init_cache_program_base_addr)
PROVIDE (__pic32_init_cache_program_base_addr = 0x9D000000) ;
EXTERN (__pic32_init_cache_data_base_addr)
PROVIDE (__pic32_init_cache_data_base_addr = 0x80000000) ;

/*************************************************************************
 * TLB-Based MMU Initialization section for EBI/SQI memory regions
 *************************************************************************/
/*
 * Provide virtual and physical addresses of the SQI for TLB initialization
 * These symbols are used below to create a table, which is in turn used to
 * initialize the TLB at startup.
 */
EXTERN (__pic32_init_sqi_kseg2_virtual_base_addr)
PROVIDE (__pic32_init_sqi_kseg2_virtual_base_addr = 0xD0000000) ;
EXTERN (__pic32_init_sqi_kseg2_physical_base_addr)
PROVIDE (__pic32_init_sqi_kseg2_physical_base_addr = 0x30000000) ;
EXTERN (__pic32_init_sqi_kseg2_entrylo0_bitset)
PROVIDE (__pic32_init_sqi_kseg2_entrylo0_bitset = 0x1F) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_0_entryhi = __pic32_init_sqi_kseg2_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_0_entrylo0 = (__pic32_init_sqi_kseg2_physical_base_addr >> 6) | __pic32_init_sqi_kseg2_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_0_entrylo1 = __pic32_tlb_0_entrylo0 | 0x00080000 ;

EXTERN (__pic32_init_sqi_kseg3_virtual_base_addr)
PROVIDE (__pic32_init_sqi_kseg3_virtual_base_addr = 0xF0000000) ;
EXTERN (__pic32_init_sqi_kseg3_physical_base_addr)
PROVIDE (__pic32_init_sqi_kseg3_physical_base_addr = 0x30000000) ;
EXTERN (__pic32_init_sqi_kseg3_entrylo0_bitset)
PROVIDE (__pic32_init_sqi_kseg3_entrylo0_bitset = 0x17) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_1_entryhi = __pic32_init_sqi_kseg3_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_1_entrylo0 = (__pic32_init_sqi_kseg3_physical_base_addr >> 6) | __pic32_init_sqi_kseg3_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_1_entrylo1 = __pic32_tlb_1_entrylo0 | 0x00080000 ;
/*
 * Provide virtual and physical addresses of the EBI for TLB initialization
 * These symbols are used below to create a table, which is in turn used to
 * initialize the TLB at startup.
 */
EXTERN (__pic32_init_ebi_kseg2_virtual_base_addr)
PROVIDE (__pic32_init_ebi_kseg2_virtual_base_addr = 0xC0000000) ;
EXTERN (__pic32_init_ebi_kseg2_physical_base_addr)
PROVIDE (__pic32_init_ebi_kseg2_physical_base_addr = 0x20000000) ;
EXTERN (__pic32_init_ebi_kseg2_entrylo0_bitset)
PROVIDE (__pic32_init_ebi_kseg2_entrylo0_bitset = 0x1F) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_2_entryhi = __pic32_init_ebi_kseg2_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_2_entrylo0 = (__pic32_init_ebi_kseg2_physical_base_addr >> 6) | __pic32_init_ebi_kseg2_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_2_entrylo1 = __pic32_tlb_2_entrylo0 | 0x00080000 ;

EXTERN (__pic32_init_ebi_kseg3_virtual_base_addr)
PROVIDE (__pic32_init_ebi_kseg3_virtual_base_addr = 0xE0000000) ;
EXTERN (__pic32_init_ebi_kseg3_physical_base_addr)
PROVIDE (__pic32_init_ebi_kseg3_physical_base_addr = 0x20000000) ;
EXTERN (__pic32_init_ebi_kseg3_entrylo0_bitset)
PROVIDE (__pic32_init_ebi_kseg3_entrylo0_bitset = 0x17) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_3_entryhi = __pic32_init_ebi_kseg3_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_3_entrylo0 = (__pic32_init_ebi_kseg3_physical_base_addr >> 6) | __pic32_init_ebi_kseg3_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_3_entrylo1 = __pic32_tlb_3_entrylo0 | 0x00080000 ;
/*
 * The default pic32_init_tlb_ebi_sqi.o module, which is
 * called by the default C startup code (crt0_<isa>.o),
 * uses the table created in the .tlb_init_values output
 * section to initialize the Translation Lookaside buffer (TLB)
 * of the Memory Mangagement Unit (MMU).
 */
SECTIONS
{
  .tlb_init_values :
  {
    . = ALIGN(4) ;
    __pic32_tlb_init_values_begin = ABSOLUTE(.);
    LONG(__pic32_tlb_0_entryhi) ;
    LONG(__pic32_tlb_0_entrylo0) ;
    LONG(__pic32_tlb_0_entrylo1) ;
    LONG(__pic32_tlb_1_entryhi) ;
    LONG(__pic32_tlb_1_entrylo0) ;
    LONG(__pic32_tlb_1_entrylo1) ;
    LONG(__pic32_tlb_2_entryhi) ;
    LONG(__pic32_tlb_2_entrylo0) ;
    LONG(__pic32_tlb_2_entrylo1) ;
    LONG(__pic32_tlb_3_entryhi) ;
    LONG(__pic32_tlb_3_entrylo0) ;
    LONG(__pic32_tlb_3_entrylo1) ;
    __pic32_tlb_init_values_end = ABSOLUTE(.);
    __pic32_tlb_init_values_count = 4 ;
  } > kseg1_boot_mem_4B0


}




 
And my linker to get to use more boot config space is below. Used the reserved protected region as shown elsewhere on the forums. It does compile and run, but I get the same variable problems.
 
/*--------------------------------------------------------------------------
 * MPLAB XC Compiler - PIC32MZ BootLoader linker script
 *
 * This software is developed by Microchip Technology Inc. and its
 * subsidiaries ("Microchip").
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided
 * with the distribution.
 * 3. Microchip's name may not be used to endorse or promote products
 * derived from this software without specific prior written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY MICROCHIP "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR PURPOSE ARE DISCLAIMED. IN NO EVENT
 * SHALL MICROCHIP BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWSOEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *-------------------------------------------------------------------------*/


/* Custom linker script, for bootloaders residing completely in boot flash */

/* NOTE: This single-file linker script replaces the two-file system used
 * for older PIC32 devices.
 */

OUTPUT_FORMAT("elf32-tradlittlemips")
OUTPUT_ARCH(pic32mx)
ENTRY(_reset)
/*
 * Provide for a minimum stack and heap size
 * - _min_stack_size - represents the minimum space that must be made
 * available for the stack. Can be overridden from
 * the command line using the linker's --defsym option.
 * - _min_heap_size - represents the minimum space that must be made
 * available for the heap. Must be specified on
 * the command line using the linker's --defsym option.
 */
EXTERN (_min_stack_size _min_heap_size)

/*************************************************************************
 * Processor-specific object file. Contains SFR definitions.
 *************************************************************************/
INPUT("processor.o")

/*************************************************************************
 * Processor-specific peripheral libraries are optional
 *************************************************************************/
OPTIONAL("libmchp_peripheral.a")


/*************************************************************************
 * Vector-offset initialization
 *************************************************************************/
OPTIONAL("vector_offset_init.o")

/*************************************************************************
 * For interrupt vector handling
 *************************************************************************/
PROVIDE(_vector_spacing = 0x00000001);
PROVIDE(_ebase_address = 0x9FC01000);

/*************************************************************************
 * Memory Address Equates
 * _RESET_ADDR -- Reset Vector
 * _BEV_EXCPT_ADDR -- Boot exception Vector
 * _DBG_EXCPT_ADDR -- In-circuit Debugging Exception Vector
 * _SIMPLE_TLB_REFILL_EXCPT_ADDR -- Simple TLB-Refill Exception Vector
 * _CACHE_ERR_EXCPT_ADDR -- Cache-error Exception Vector
 * _GEN_EXCPT_ADDR -- General Exception Vector
 *************************************************************************/

_BEV_EXCPT_ADDR = 0xBFC00380;
_DBG_EXCPT_ADDR = 0xBFC00480;
_RESET_ADDR = 0xBFC00000;
_SIMPLE_TLB_REFILL_EXCPT_ADDR = _ebase_address + 0;
_CACHE_ERR_EXCPT_ADDR = _ebase_address + 0x100;
_GEN_EXCPT_ADDR = _ebase_address + 0x180;

/*************************************************************************
 * Memory Regions
 *
 * Memory regions without attributes cannot be used for orphaned sections.
 * Only sections specifically assigned to these regions can be allocated
 * into these regions.
 *
 * The Debug exception vector is located at 0x9FC00480.
 * The config_<address> sections are used to locate the config words at
 * their absolute addresses.
 *************************************************************************/
MEMORY
{
    /* This change uses both bootloader banks to increase space. */
    kseg0_program_mem (rx) : ORIGIN = 0x9fc01000, LENGTH = 0x00013000
    protected_reg3 : ORIGIN = 0x9FC14000, LENGTH = 0x20000-0x14000
    kseg0_boot_mem : ORIGIN = 0x9fc004b0, LENGTH = 0x00000000
    kseg1_boot_mem : ORIGIN = 0xbfc00000, LENGTH = 0x00000480
    kseg1_boot_mem_4B0 : ORIGIN = 0xBFC004B0, LENGTH = 0x1000 - 0x4B0
  config_BFC0FF40 : ORIGIN = 0xBFC0FF40, LENGTH = 0x4
  config_BFC0FF44 : ORIGIN = 0xBFC0FF44, LENGTH = 0x4
  config_BFC0FF48 : ORIGIN = 0xBFC0FF48, LENGTH = 0x4
  config_BFC0FF4C : ORIGIN = 0xBFC0FF4C, LENGTH = 0x4
  config_BFC0FF50 : ORIGIN = 0xBFC0FF50, LENGTH = 0x4
  config_BFC0FF54 : ORIGIN = 0xBFC0FF54, LENGTH = 0x4
  config_BFC0FF58 : ORIGIN = 0xBFC0FF58, LENGTH = 0x4
  config_BFC0FF5C : ORIGIN = 0xBFC0FF5C, LENGTH = 0x4
  config_BFC0FF60 : ORIGIN = 0xBFC0FF60, LENGTH = 0x4
  config_BFC0FF64 : ORIGIN = 0xBFC0FF64, LENGTH = 0x4
  config_BFC0FF68 : ORIGIN = 0xBFC0FF68, LENGTH = 0x4
  config_BFC0FF6C : ORIGIN = 0xBFC0FF6C, LENGTH = 0x4
  config_BFC0FF70 : ORIGIN = 0xBFC0FF70, LENGTH = 0x4
  config_BFC0FF74 : ORIGIN = 0xBFC0FF74, LENGTH = 0x4
  config_BFC0FF78 : ORIGIN = 0xBFC0FF78, LENGTH = 0x4
  config_BFC0FF7C : ORIGIN = 0xBFC0FF7C, LENGTH = 0x4
  config_BFC0FFC0 : ORIGIN = 0xBFC0FFC0, LENGTH = 0x4
  config_BFC0FFC4 : ORIGIN = 0xBFC0FFC4, LENGTH = 0x4
  config_BFC0FFC8 : ORIGIN = 0xBFC0FFC8, LENGTH = 0x4
  config_BFC0FFCC : ORIGIN = 0xBFC0FFCC, LENGTH = 0x4
  config_BFC0FFD0 : ORIGIN = 0xBFC0FFD0, LENGTH = 0x4
  config_BFC0FFD4 : ORIGIN = 0xBFC0FFD4, LENGTH = 0x4
  config_BFC0FFD8 : ORIGIN = 0xBFC0FFD8, LENGTH = 0x4
  config_BFC0FFDC : ORIGIN = 0xBFC0FFDC, LENGTH = 0x4
  config_BFC0FFE0 : ORIGIN = 0xBFC0FFE0, LENGTH = 0x4
  config_BFC0FFE4 : ORIGIN = 0xBFC0FFE4, LENGTH = 0x4
  config_BFC0FFE8 : ORIGIN = 0xBFC0FFE8, LENGTH = 0x4
  config_BFC0FFEC : ORIGIN = 0xBFC0FFEC, LENGTH = 0x4
  config_BFC0FFF0 : ORIGIN = 0xBFC0FFF0, LENGTH = 0x4
  config_BFC0FFF4 : ORIGIN = 0xBFC0FFF4, LENGTH = 0x4
  config_BFC0FFF8 : ORIGIN = 0xBFC0FFF8, LENGTH = 0x4
  config_BFC0FFFC : ORIGIN = 0xBFC0FFFC, LENGTH = 0x4
  lowerbootaliaslastpage : ORIGIN = 0xBFC10000, LENGTH = 0x4000
  upperbootalias : ORIGIN = 0xBFC20000, LENGTH = 0x14000
  boot1 : ORIGIN = 0xBFC40000, LENGTH = 0xFF00
  config_BFC4FF40 : ORIGIN = 0xBFC4FF40, LENGTH = 0x4
  config_BFC4FF44 : ORIGIN = 0xBFC4FF44, LENGTH = 0x4
  config_BFC4FF48 : ORIGIN = 0xBFC4FF48, LENGTH = 0x4
  config_BFC4FF4C : ORIGIN = 0xBFC4FF4C, LENGTH = 0x4
  config_BFC4FF50 : ORIGIN = 0xBFC4FF50, LENGTH = 0x4
  config_BFC4FF54 : ORIGIN = 0xBFC4FF54, LENGTH = 0x4
  config_BFC4FF58 : ORIGIN = 0xBFC4FF58, LENGTH = 0x4
  config_BFC4FF5C : ORIGIN = 0xBFC4FF5C, LENGTH = 0x4
  config_BFC4FF60 : ORIGIN = 0xBFC4FF60, LENGTH = 0x4
  config_BFC4FF64 : ORIGIN = 0xBFC4FF64, LENGTH = 0x4
  config_BFC4FF68 : ORIGIN = 0xBFC4FF68, LENGTH = 0x4
  config_BFC4FF6C : ORIGIN = 0xBFC4FF6C, LENGTH = 0x4
  config_BFC4FF70 : ORIGIN = 0xBFC4FF70, LENGTH = 0x4
  config_BFC4FF74 : ORIGIN = 0xBFC4FF74, LENGTH = 0x4
  config_BFC4FF78 : ORIGIN = 0xBFC4FF78, LENGTH = 0x4
  config_BFC4FF7C : ORIGIN = 0xBFC4FF7C, LENGTH = 0x4
  config_BFC4FFC0 : ORIGIN = 0xBFC4FFC0, LENGTH = 0x4
  config_BFC4FFC4 : ORIGIN = 0xBFC4FFC4, LENGTH = 0x4
  config_BFC4FFC8 : ORIGIN = 0xBFC4FFC8, LENGTH = 0x4
  config_BFC4FFCC : ORIGIN = 0xBFC4FFCC, LENGTH = 0x4
  config_BFC4FFD0 : ORIGIN = 0xBFC4FFD0, LENGTH = 0x4
  config_BFC4FFD4 : ORIGIN = 0xBFC4FFD4, LENGTH = 0x4
  config_BFC4FFD8 : ORIGIN = 0xBFC4FFD8, LENGTH = 0x4
  config_BFC4FFDC : ORIGIN = 0xBFC4FFDC, LENGTH = 0x4
  config_BFC4FFE0 : ORIGIN = 0xBFC4FFE0, LENGTH = 0x4
  config_BFC4FFE4 : ORIGIN = 0xBFC4FFE4, LENGTH = 0x4
  config_BFC4FFE8 : ORIGIN = 0xBFC4FFE8, LENGTH = 0x4
  config_BFC4FFEC : ORIGIN = 0xBFC4FFEC, LENGTH = 0x4
  config_BFC4FFF0 : ORIGIN = 0xBFC4FFF0, LENGTH = 0x4
  config_BFC4FFF4 : ORIGIN = 0xBFC4FFF4, LENGTH = 0x4
  config_BFC4FFF8 : ORIGIN = 0xBFC4FFF8, LENGTH = 0x4
  config_BFC4FFFC : ORIGIN = 0xBFC4FFFC, LENGTH = 0x4
  boot1lastpage : ORIGIN = 0xBFC50000, LENGTH = 0x4000
  config_BFC54000 : ORIGIN = 0xBFC54000, LENGTH = 0x4
  config_BFC54004 : ORIGIN = 0xBFC54004, LENGTH = 0x4
  config_BFC54008 : ORIGIN = 0xBFC54008, LENGTH = 0x4
  config_BFC5400C : ORIGIN = 0xBFC5400C, LENGTH = 0x4
  config_BFC54010 : ORIGIN = 0xBFC54010, LENGTH = 0x4
  config_BFC54020 : ORIGIN = 0xBFC54020, LENGTH = 0x4
  config_BFC54024 : ORIGIN = 0xBFC54024, LENGTH = 0x4
  boot2 : ORIGIN = 0xBFC60000, LENGTH = 0xFF00
  config_BFC6FF40 : ORIGIN = 0xBFC6FF40, LENGTH = 0x4
  config_BFC6FF44 : ORIGIN = 0xBFC6FF44, LENGTH = 0x4
  config_BFC6FF48 : ORIGIN = 0xBFC6FF48, LENGTH = 0x4
  config_BFC6FF4C : ORIGIN = 0xBFC6FF4C, LENGTH = 0x4
  config_BFC6FF50 : ORIGIN = 0xBFC6FF50, LENGTH = 0x4
  config_BFC6FF54 : ORIGIN = 0xBFC6FF54, LENGTH = 0x4
  config_BFC6FF58 : ORIGIN = 0xBFC6FF58, LENGTH = 0x4
  config_BFC6FF5C : ORIGIN = 0xBFC6FF5C, LENGTH = 0x4
  config_BFC6FF60 : ORIGIN = 0xBFC6FF60, LENGTH = 0x4
  config_BFC6FF64 : ORIGIN = 0xBFC6FF64, LENGTH = 0x4
  config_BFC6FF68 : ORIGIN = 0xBFC6FF68, LENGTH = 0x4
  config_BFC6FF6C : ORIGIN = 0xBFC6FF6C, LENGTH = 0x4
  config_BFC6FF70 : ORIGIN = 0xBFC6FF70, LENGTH = 0x4
  config_BFC6FF74 : ORIGIN = 0xBFC6FF74, LENGTH = 0x4
  config_BFC6FF78 : ORIGIN = 0xBFC6FF78, LENGTH = 0x4
  config_BFC6FF7C : ORIGIN = 0xBFC6FF7C, LENGTH = 0x4
  config_BFC6FFC0 : ORIGIN = 0xBFC6FFC0, LENGTH = 0x4
  config_BFC6FFC4 : ORIGIN = 0xBFC6FFC4, LENGTH = 0x4
  config_BFC6FFC8 : ORIGIN = 0xBFC6FFC8, LENGTH = 0x4
  config_BFC6FFCC : ORIGIN = 0xBFC6FFCC, LENGTH = 0x4
  config_BFC6FFD0 : ORIGIN = 0xBFC6FFD0, LENGTH = 0x4
  config_BFC6FFD4 : ORIGIN = 0xBFC6FFD4, LENGTH = 0x4
  config_BFC6FFD8 : ORIGIN = 0xBFC6FFD8, LENGTH = 0x4
  config_BFC6FFDC : ORIGIN = 0xBFC6FFDC, LENGTH = 0x4
  config_BFC6FFE0 : ORIGIN = 0xBFC6FFE0, LENGTH = 0x4
  config_BFC6FFE4 : ORIGIN = 0xBFC6FFE4, LENGTH = 0x4
  config_BFC6FFE8 : ORIGIN = 0xBFC6FFE8, LENGTH = 0x4
  config_BFC6FFEC : ORIGIN = 0xBFC6FFEC, LENGTH = 0x4
  config_BFC6FFF0 : ORIGIN = 0xBFC6FFF0, LENGTH = 0x4
  config_BFC6FFF4 : ORIGIN = 0xBFC6FFF4, LENGTH = 0x4
  config_BFC6FFF8 : ORIGIN = 0xBFC6FFF8, LENGTH = 0x4
  config_BFC6FFFC : ORIGIN = 0xBFC6FFFC, LENGTH = 0x4
  boot2lastpage : ORIGIN = 0xBFC70000, LENGTH = 0x4000
  configsfrs_BFC0FF40 : ORIGIN = 0xBFC0FF40, LENGTH = 0x40
  configsfrs_BFC0FFC0 : ORIGIN = 0xBFC0FFC0, LENGTH = 0x40
  configsfrs_BFC4FF40 : ORIGIN = 0xBFC4FF40, LENGTH = 0x40
  configsfrs_BFC4FFC0 : ORIGIN = 0xBFC4FFC0, LENGTH = 0x40
  configsfrs_BFC54000 : ORIGIN = 0xBFC54000, LENGTH = 0x14
  configsfrs_BFC54020 : ORIGIN = 0xBFC54020, LENGTH = 0x8
  configsfrs_BFC6FF40 : ORIGIN = 0xBFC6FF40, LENGTH = 0x40
  configsfrs_BFC6FFC0 : ORIGIN = 0xBFC6FFC0, LENGTH = 0x40
  kseg0_data_mem (w!x) : ORIGIN = 0x80000000, LENGTH = 0x80000
  sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000
  kseg2_ebi_data_mem : ORIGIN = 0xC0000000, LENGTH = 0x4000000
  kseg2_sqi_data_mem : ORIGIN = 0xD0000000, LENGTH = 0x4000000
  kseg3_ebi_data_mem : ORIGIN = 0xE0000000, LENGTH = 0x4000000
  kseg3_sqi_data_mem : ORIGIN = 0xF0000000, LENGTH = 0x4000000
}

/*************************************************************************
 * Configuration-word sections. Map the config-pragma input sections to
 * absolute-address output sections.
 *************************************************************************/
SECTIONS
{
  .config_BFC0FF40 : {
    KEEP(*(.config_BFC0FF40))
  } > config_BFC0FF40
  .config_BFC0FF44 : {
    KEEP(*(.config_BFC0FF44))
  } > config_BFC0FF44
  .config_BFC0FF48 : {
    KEEP(*(.config_BFC0FF48))
  } > config_BFC0FF48
  .config_BFC0FF4C : {
    KEEP(*(.config_BFC0FF4C))
  } > config_BFC0FF4C
  .config_BFC0FF50 : {
    KEEP(*(.config_BFC0FF50))
  } > config_BFC0FF50
  .config_BFC0FF54 : {
    KEEP(*(.config_BFC0FF54))
  } > config_BFC0FF54
  .config_BFC0FF58 : {
    KEEP(*(.config_BFC0FF58))
  } > config_BFC0FF58
  .config_BFC0FF5C : {
    KEEP(*(.config_BFC0FF5C))
  } > config_BFC0FF5C
  .config_BFC0FF60 : {
    KEEP(*(.config_BFC0FF60))
  } > config_BFC0FF60
  .config_BFC0FF64 : {
    KEEP(*(.config_BFC0FF64))
  } > config_BFC0FF64
  .config_BFC0FF68 : {
    KEEP(*(.config_BFC0FF68))
  } > config_BFC0FF68
  .config_BFC0FF6C : {
    KEEP(*(.config_BFC0FF6C))
  } > config_BFC0FF6C
  .config_BFC0FF70 : {
    KEEP(*(.config_BFC0FF70))
  } > config_BFC0FF70
  .config_BFC0FF74 : {
    KEEP(*(.config_BFC0FF74))
  } > config_BFC0FF74
  .config_BFC0FF78 : {
    KEEP(*(.config_BFC0FF78))
  } > config_BFC0FF78
  .config_BFC0FF7C : {
    KEEP(*(.config_BFC0FF7C))
  } > config_BFC0FF7C
  .config_BFC0FFC0 : {
    KEEP(*(.config_BFC0FFC0))
  } > config_BFC0FFC0
  .config_BFC0FFC4 : {
    KEEP(*(.config_BFC0FFC4))
  } > config_BFC0FFC4
  .config_BFC0FFC8 : {
    KEEP(*(.config_BFC0FFC8))
  } > config_BFC0FFC8
  .config_BFC0FFCC : {
    KEEP(*(.config_BFC0FFCC))
  } > config_BFC0FFCC
  .config_BFC0FFD0 : {
    KEEP(*(.config_BFC0FFD0))
  } > config_BFC0FFD0
  .config_BFC0FFD4 : {
    KEEP(*(.config_BFC0FFD4))
  } > config_BFC0FFD4
  .config_BFC0FFD8 : {
    KEEP(*(.config_BFC0FFD8))
  } > config_BFC0FFD8
  .config_BFC0FFDC : {
    KEEP(*(.config_BFC0FFDC))
  } > config_BFC0FFDC
  .config_BFC0FFE0 : {
    KEEP(*(.config_BFC0FFE0))
  } > config_BFC0FFE0
  .config_BFC0FFE4 : {
    KEEP(*(.config_BFC0FFE4))
  } > config_BFC0FFE4
  .config_BFC0FFE8 : {
    KEEP(*(.config_BFC0FFE8))
  } > config_BFC0FFE8
  .config_BFC0FFEC : {
    KEEP(*(.config_BFC0FFEC))
  } > config_BFC0FFEC
  .config_BFC0FFF0 : {
    KEEP(*(.config_BFC0FFF0))
  } > config_BFC0FFF0
  .config_BFC0FFF4 : {
    KEEP(*(.config_BFC0FFF4))
  } > config_BFC0FFF4
  .config_BFC0FFF8 : {
    KEEP(*(.config_BFC0FFF8))
  } > config_BFC0FFF8
  .config_BFC0FFFC : {
    KEEP(*(.config_BFC0FFFC))
  } > config_BFC0FFFC
  .config_BFC4FF40 : {
    KEEP(*(.config_BFC4FF40))
  } > config_BFC4FF40
  .config_BFC4FF44 : {
    KEEP(*(.config_BFC4FF44))
  } > config_BFC4FF44
  .config_BFC4FF48 : {
    KEEP(*(.config_BFC4FF48))
  } > config_BFC4FF48
  .config_BFC4FF4C : {
    KEEP(*(.config_BFC4FF4C))
  } > config_BFC4FF4C
  .config_BFC4FF50 : {
    KEEP(*(.config_BFC4FF50))
  } > config_BFC4FF50
  .config_BFC4FF54 : {
    KEEP(*(.config_BFC4FF54))
  } > config_BFC4FF54
  .config_BFC4FF58 : {
    KEEP(*(.config_BFC4FF58))
  } > config_BFC4FF58
  .config_BFC4FF5C : {
    KEEP(*(.config_BFC4FF5C))
  } > config_BFC4FF5C
  .config_BFC4FF60 : {
    KEEP(*(.config_BFC4FF60))
  } > config_BFC4FF60
  .config_BFC4FF64 : {
    KEEP(*(.config_BFC4FF64))
  } > config_BFC4FF64
  .config_BFC4FF68 : {
    KEEP(*(.config_BFC4FF68))
  } > config_BFC4FF68
  .config_BFC4FF6C : {
    KEEP(*(.config_BFC4FF6C))
  } > config_BFC4FF6C
  .config_BFC4FF70 : {
    KEEP(*(.config_BFC4FF70))
  } > config_BFC4FF70
  .config_BFC4FF74 : {
    KEEP(*(.config_BFC4FF74))
  } > config_BFC4FF74
  .config_BFC4FF78 : {
    KEEP(*(.config_BFC4FF78))
  } > config_BFC4FF78
  .config_BFC4FF7C : {
    KEEP(*(.config_BFC4FF7C))
  } > config_BFC4FF7C
  .config_BFC4FFC0 : {
    KEEP(*(.config_BFC4FFC0))
  } > config_BFC4FFC0
  .config_BFC4FFC4 : {
    KEEP(*(.config_BFC4FFC4))
  } > config_BFC4FFC4
  .config_BFC4FFC8 : {
    KEEP(*(.config_BFC4FFC8))
  } > config_BFC4FFC8
  .config_BFC4FFCC : {
    KEEP(*(.config_BFC4FFCC))
  } > config_BFC4FFCC
  .config_BFC4FFD0 : {
    KEEP(*(.config_BFC4FFD0))
  } > config_BFC4FFD0
  .config_BFC4FFD4 : {
    KEEP(*(.config_BFC4FFD4))
  } > config_BFC4FFD4
  .config_BFC4FFD8 : {
    KEEP(*(.config_BFC4FFD8))
  } > config_BFC4FFD8
  .config_BFC4FFDC : {
    KEEP(*(.config_BFC4FFDC))
  } > config_BFC4FFDC
  .config_BFC4FFE0 : {
    KEEP(*(.config_BFC4FFE0))
  } > config_BFC4FFE0
  .config_BFC4FFE4 : {
    KEEP(*(.config_BFC4FFE4))
  } > config_BFC4FFE4
  .config_BFC4FFE8 : {
    KEEP(*(.config_BFC4FFE8))
  } > config_BFC4FFE8
  .config_BFC4FFEC : {
    KEEP(*(.config_BFC4FFEC))
  } > config_BFC4FFEC
  .config_BFC4FFF0 : {
    KEEP(*(.config_BFC4FFF0))
  } > config_BFC4FFF0
  .config_BFC4FFF4 : {
    KEEP(*(.config_BFC4FFF4))
  } > config_BFC4FFF4
  .config_BFC4FFF8 : {
    KEEP(*(.config_BFC4FFF8))
  } > config_BFC4FFF8
  .config_BFC4FFFC : {
    KEEP(*(.config_BFC4FFFC))
  } > config_BFC4FFFC
  .config_BFC54000 : {
    KEEP(*(.config_BFC54000))
  } > config_BFC54000
  .config_BFC54004 : {
    KEEP(*(.config_BFC54004))
  } > config_BFC54004
  .config_BFC54008 : {
    KEEP(*(.config_BFC54008))
  } > config_BFC54008
  .config_BFC5400C : {
    KEEP(*(.config_BFC5400C))
  } > config_BFC5400C
  .config_BFC54010 : {
    KEEP(*(.config_BFC54010))
  } > config_BFC54010
  .config_BFC54020 : {
    KEEP(*(.config_BFC54020))
  } > config_BFC54020
  .config_BFC54024 : {
    KEEP(*(.config_BFC54024))
  } > config_BFC54024
  .config_BFC6FF40 : {
    KEEP(*(.config_BFC6FF40))
  } > config_BFC6FF40
  .config_BFC6FF44 : {
    KEEP(*(.config_BFC6FF44))
  } > config_BFC6FF44
  .config_BFC6FF48 : {
    KEEP(*(.config_BFC6FF48))
  } > config_BFC6FF48
  .config_BFC6FF4C : {
    KEEP(*(.config_BFC6FF4C))
  } > config_BFC6FF4C
  .config_BFC6FF50 : {
    KEEP(*(.config_BFC6FF50))
  } > config_BFC6FF50
  .config_BFC6FF54 : {
    KEEP(*(.config_BFC6FF54))
  } > config_BFC6FF54
  .config_BFC6FF58 : {
    KEEP(*(.config_BFC6FF58))
  } > config_BFC6FF58
  .config_BFC6FF5C : {
    KEEP(*(.config_BFC6FF5C))
  } > config_BFC6FF5C
  .config_BFC6FF60 : {
    KEEP(*(.config_BFC6FF60))
  } > config_BFC6FF60
  .config_BFC6FF64 : {
    KEEP(*(.config_BFC6FF64))
  } > config_BFC6FF64
  .config_BFC6FF68 : {
    KEEP(*(.config_BFC6FF68))
  } > config_BFC6FF68
  .config_BFC6FF6C : {
    KEEP(*(.config_BFC6FF6C))
  } > config_BFC6FF6C
  .config_BFC6FF70 : {
    KEEP(*(.config_BFC6FF70))
  } > config_BFC6FF70
  .config_BFC6FF74 : {
    KEEP(*(.config_BFC6FF74))
  } > config_BFC6FF74
  .config_BFC6FF78 : {
    KEEP(*(.config_BFC6FF78))
  } > config_BFC6FF78
  .config_BFC6FF7C : {
    KEEP(*(.config_BFC6FF7C))
  } > config_BFC6FF7C
  .config_BFC6FFC0 : {
    KEEP(*(.config_BFC6FFC0))
  } > config_BFC6FFC0
  .config_BFC6FFC4 : {
    KEEP(*(.config_BFC6FFC4))
  } > config_BFC6FFC4
  .config_BFC6FFC8 : {
    KEEP(*(.config_BFC6FFC8))
  } > config_BFC6FFC8
  .config_BFC6FFCC : {
    KEEP(*(.config_BFC6FFCC))
  } > config_BFC6FFCC
  .config_BFC6FFD0 : {
    KEEP(*(.config_BFC6FFD0))
  } > config_BFC6FFD0
  .config_BFC6FFD4 : {
    KEEP(*(.config_BFC6FFD4))
  } > config_BFC6FFD4
  .config_BFC6FFD8 : {
    KEEP(*(.config_BFC6FFD8))
  } > config_BFC6FFD8
  .config_BFC6FFDC : {
    KEEP(*(.config_BFC6FFDC))
  } > config_BFC6FFDC
  .config_BFC6FFE0 : {
    KEEP(*(.config_BFC6FFE0))
  } > config_BFC6FFE0
  .config_BFC6FFE4 : {
    KEEP(*(.config_BFC6FFE4))
  } > config_BFC6FFE4
  .config_BFC6FFE8 : {
    KEEP(*(.config_BFC6FFE8))
  } > config_BFC6FFE8
  .config_BFC6FFEC : {
    KEEP(*(.config_BFC6FFEC))
  } > config_BFC6FFEC
  .config_BFC6FFF0 : {
    KEEP(*(.config_BFC6FFF0))
  } > config_BFC6FFF0
  .config_BFC6FFF4 : {
    KEEP(*(.config_BFC6FFF4))
  } > config_BFC6FFF4
  .config_BFC6FFF8 : {
    KEEP(*(.config_BFC6FFF8))
  } > config_BFC6FFF8
  .config_BFC6FFFC : {
    KEEP(*(.config_BFC6FFFC))
  } > config_BFC6FFFC
}
SECTIONS
{
  /* Boot Sections */
  .reset _RESET_ADDR :
  {
    KEEP(*(.reset))
    KEEP(*(.reset.startup))
  } > kseg1_boot_mem
  .bev_excpt _BEV_EXCPT_ADDR :
  {
    KEEP(*(.bev_handler))
  } > kseg1_boot_mem
  .cache_init :
  {
    *(.cache_init)
    *(.cache_init.*)
  } > kseg1_boot_mem_4B0
  .simple_tlb_refill_excpt _SIMPLE_TLB_REFILL_EXCPT_ADDR :
  {
    KEEP(*(.simple_tlb_refill_vector))
  } > kseg0_program_mem
  .cache_err_excpt _CACHE_ERR_EXCPT_ADDR :
  {
    KEEP(*(.cache_err_vector))
  } > kseg0_program_mem
  .app_excpt _GEN_EXCPT_ADDR :
  {
    KEEP(*(.gen_handler))
  } > kseg0_program_mem

  /* Interrupt vector table with vector offsets */
  .vectors _ebase_address + 0x200 :
  {
    /* Symbol __vector_offset_n points to .vector_n if it exists,
     * otherwise points to the default handler. The
     * vector_offset_init.o module then provides a .data section
     * containing values used to initialize the vector-offset SFRs
     * in the crt0 startup code.
     */
    __vector_offset_0 = (DEFINED(__vector_dispatch_0) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_0))
    __vector_offset_1 = (DEFINED(__vector_dispatch_1) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_1))
    __vector_offset_2 = (DEFINED(__vector_dispatch_2) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_2))
    __vector_offset_3 = (DEFINED(__vector_dispatch_3) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_3))
    __vector_offset_4 = (DEFINED(__vector_dispatch_4) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_4))
    __vector_offset_5 = (DEFINED(__vector_dispatch_5) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_5))
    __vector_offset_6 = (DEFINED(__vector_dispatch_6) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_6))
    __vector_offset_7 = (DEFINED(__vector_dispatch_7) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_7))
    __vector_offset_8 = (DEFINED(__vector_dispatch_8) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_8))
    __vector_offset_9 = (DEFINED(__vector_dispatch_9) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_9))
    __vector_offset_10 = (DEFINED(__vector_dispatch_10) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_10))
    __vector_offset_11 = (DEFINED(__vector_dispatch_11) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_11))
    __vector_offset_12 = (DEFINED(__vector_dispatch_12) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_12))
    __vector_offset_13 = (DEFINED(__vector_dispatch_13) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_13))
    __vector_offset_14 = (DEFINED(__vector_dispatch_14) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_14))
    __vector_offset_15 = (DEFINED(__vector_dispatch_15) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_15))
    __vector_offset_16 = (DEFINED(__vector_dispatch_16) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_16))
    __vector_offset_17 = (DEFINED(__vector_dispatch_17) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_17))
    __vector_offset_18 = (DEFINED(__vector_dispatch_18) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_18))
    __vector_offset_19 = (DEFINED(__vector_dispatch_19) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_19))
    __vector_offset_20 = (DEFINED(__vector_dispatch_20) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_20))
    __vector_offset_21 = (DEFINED(__vector_dispatch_21) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_21))
    __vector_offset_22 = (DEFINED(__vector_dispatch_22) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_22))
    __vector_offset_23 = (DEFINED(__vector_dispatch_23) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_23))
    __vector_offset_24 = (DEFINED(__vector_dispatch_24) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_24))
    __vector_offset_25 = (DEFINED(__vector_dispatch_25) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_25))
    __vector_offset_26 = (DEFINED(__vector_dispatch_26) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_26))
    __vector_offset_27 = (DEFINED(__vector_dispatch_27) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_27))
    __vector_offset_28 = (DEFINED(__vector_dispatch_28) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_28))
    __vector_offset_29 = (DEFINED(__vector_dispatch_29) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_29))
    __vector_offset_30 = (DEFINED(__vector_dispatch_30) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_30))
    __vector_offset_31 = (DEFINED(__vector_dispatch_31) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_31))
    __vector_offset_32 = (DEFINED(__vector_dispatch_32) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_32))
    __vector_offset_33 = (DEFINED(__vector_dispatch_33) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_33))
    __vector_offset_34 = (DEFINED(__vector_dispatch_34) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_34))
    __vector_offset_35 = (DEFINED(__vector_dispatch_35) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_35))
    __vector_offset_36 = (DEFINED(__vector_dispatch_36) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_36))
    __vector_offset_37 = (DEFINED(__vector_dispatch_37) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_37))
    __vector_offset_38 = (DEFINED(__vector_dispatch_38) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_38))
    __vector_offset_39 = (DEFINED(__vector_dispatch_39) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_39))
    __vector_offset_40 = (DEFINED(__vector_dispatch_40) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_40))
    __vector_offset_41 = (DEFINED(__vector_dispatch_41) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_41))
    __vector_offset_42 = (DEFINED(__vector_dispatch_42) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_42))
    __vector_offset_43 = (DEFINED(__vector_dispatch_43) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_43))
    __vector_offset_44 = (DEFINED(__vector_dispatch_44) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_44))
    __vector_offset_45 = (DEFINED(__vector_dispatch_45) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_45))
    __vector_offset_46 = (DEFINED(__vector_dispatch_46) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_46))
    __vector_offset_47 = (DEFINED(__vector_dispatch_47) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_47))
    __vector_offset_48 = (DEFINED(__vector_dispatch_48) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_48))
    __vector_offset_49 = (DEFINED(__vector_dispatch_49) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_49))
    __vector_offset_50 = (DEFINED(__vector_dispatch_50) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_50))
    __vector_offset_51 = (DEFINED(__vector_dispatch_51) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_51))
    __vector_offset_52 = (DEFINED(__vector_dispatch_52) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_52))
    __vector_offset_53 = (DEFINED(__vector_dispatch_53) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_53))
    __vector_offset_54 = (DEFINED(__vector_dispatch_54) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_54))
    __vector_offset_55 = (DEFINED(__vector_dispatch_55) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_55))
    __vector_offset_56 = (DEFINED(__vector_dispatch_56) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_56))
    __vector_offset_57 = (DEFINED(__vector_dispatch_57) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_57))
    __vector_offset_58 = (DEFINED(__vector_dispatch_58) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_58))
    __vector_offset_59 = (DEFINED(__vector_dispatch_59) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_59))
    __vector_offset_60 = (DEFINED(__vector_dispatch_60) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_60))
    __vector_offset_61 = (DEFINED(__vector_dispatch_61) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_61))
    __vector_offset_62 = (DEFINED(__vector_dispatch_62) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_62))
    __vector_offset_63 = (DEFINED(__vector_dispatch_63) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_63))
    __vector_offset_64 = (DEFINED(__vector_dispatch_64) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_64))
    __vector_offset_65 = (DEFINED(__vector_dispatch_65) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_65))
    __vector_offset_66 = (DEFINED(__vector_dispatch_66) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_66))
    __vector_offset_67 = (DEFINED(__vector_dispatch_67) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_67))
    __vector_offset_68 = (DEFINED(__vector_dispatch_68) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_68))
    __vector_offset_69 = (DEFINED(__vector_dispatch_69) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_69))
    __vector_offset_70 = (DEFINED(__vector_dispatch_70) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_70))
    __vector_offset_71 = (DEFINED(__vector_dispatch_71) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_71))
    __vector_offset_72 = (DEFINED(__vector_dispatch_72) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_72))
    __vector_offset_73 = (DEFINED(__vector_dispatch_73) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_73))
    __vector_offset_74 = (DEFINED(__vector_dispatch_74) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_74))
    __vector_offset_75 = (DEFINED(__vector_dispatch_75) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_75))
    __vector_offset_76 = (DEFINED(__vector_dispatch_76) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_76))
    __vector_offset_77 = (DEFINED(__vector_dispatch_77) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_77))
    __vector_offset_78 = (DEFINED(__vector_dispatch_78) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_78))
    __vector_offset_79 = (DEFINED(__vector_dispatch_79) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_79))
    __vector_offset_80 = (DEFINED(__vector_dispatch_80) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_80))
    __vector_offset_81 = (DEFINED(__vector_dispatch_81) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_81))
    __vector_offset_82 = (DEFINED(__vector_dispatch_82) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_82))
    __vector_offset_83 = (DEFINED(__vector_dispatch_83) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_83))
    __vector_offset_84 = (DEFINED(__vector_dispatch_84) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_84))
    __vector_offset_85 = (DEFINED(__vector_dispatch_85) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_85))
    __vector_offset_86 = (DEFINED(__vector_dispatch_86) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_86))
    __vector_offset_87 = (DEFINED(__vector_dispatch_87) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_87))
    __vector_offset_88 = (DEFINED(__vector_dispatch_88) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_88))
    __vector_offset_89 = (DEFINED(__vector_dispatch_89) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_89))
    __vector_offset_90 = (DEFINED(__vector_dispatch_90) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_90))
    __vector_offset_91 = (DEFINED(__vector_dispatch_91) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_91))
    __vector_offset_92 = (DEFINED(__vector_dispatch_92) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_92))
    __vector_offset_93 = (DEFINED(__vector_dispatch_93) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_93))
    __vector_offset_94 = (DEFINED(__vector_dispatch_94) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_94))
    __vector_offset_95 = (DEFINED(__vector_dispatch_95) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_95))
    __vector_offset_96 = (DEFINED(__vector_dispatch_96) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_96))
    __vector_offset_97 = (DEFINED(__vector_dispatch_97) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_97))
    __vector_offset_98 = (DEFINED(__vector_dispatch_98) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_98))
    __vector_offset_99 = (DEFINED(__vector_dispatch_99) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_99))
    __vector_offset_100 = (DEFINED(__vector_dispatch_100) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_100))
    __vector_offset_101 = (DEFINED(__vector_dispatch_101) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_101))
    __vector_offset_102 = (DEFINED(__vector_dispatch_102) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_102))
    __vector_offset_103 = (DEFINED(__vector_dispatch_103) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_103))
    __vector_offset_104 = (DEFINED(__vector_dispatch_104) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_104))
    __vector_offset_105 = (DEFINED(__vector_dispatch_105) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_105))
    __vector_offset_106 = (DEFINED(__vector_dispatch_106) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_106))
    __vector_offset_107 = (DEFINED(__vector_dispatch_107) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_107))
    __vector_offset_108 = (DEFINED(__vector_dispatch_108) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_108))
    __vector_offset_109 = (DEFINED(__vector_dispatch_109) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_109))
    __vector_offset_110 = (DEFINED(__vector_dispatch_110) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_110))
    __vector_offset_111 = (DEFINED(__vector_dispatch_111) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_111))
    __vector_offset_112 = (DEFINED(__vector_dispatch_112) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_112))
    __vector_offset_113 = (DEFINED(__vector_dispatch_113) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_113))
    __vector_offset_114 = (DEFINED(__vector_dispatch_114) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_114))
    __vector_offset_115 = (DEFINED(__vector_dispatch_115) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_115))
    __vector_offset_116 = (DEFINED(__vector_dispatch_116) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_116))
    __vector_offset_117 = (DEFINED(__vector_dispatch_117) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_117))
    __vector_offset_118 = (DEFINED(__vector_dispatch_118) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_118))
    __vector_offset_119 = (DEFINED(__vector_dispatch_119) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_119))
    __vector_offset_120 = (DEFINED(__vector_dispatch_120) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_120))
    __vector_offset_121 = (DEFINED(__vector_dispatch_121) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_121))
    __vector_offset_122 = (DEFINED(__vector_dispatch_122) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_122))
    __vector_offset_123 = (DEFINED(__vector_dispatch_123) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_123))
    __vector_offset_124 = (DEFINED(__vector_dispatch_124) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_124))
    __vector_offset_125 = (DEFINED(__vector_dispatch_125) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_125))
    __vector_offset_126 = (DEFINED(__vector_dispatch_126) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_126))
    __vector_offset_127 = (DEFINED(__vector_dispatch_127) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_127))
    __vector_offset_128 = (DEFINED(__vector_dispatch_128) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_128))
    __vector_offset_129 = (DEFINED(__vector_dispatch_129) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_129))
    __vector_offset_130 = (DEFINED(__vector_dispatch_130) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_130))
    __vector_offset_131 = (DEFINED(__vector_dispatch_131) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_131))
    __vector_offset_132 = (DEFINED(__vector_dispatch_132) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_132))
    __vector_offset_133 = (DEFINED(__vector_dispatch_133) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_133))
    __vector_offset_134 = (DEFINED(__vector_dispatch_134) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_134))
    __vector_offset_135 = (DEFINED(__vector_dispatch_135) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_135))
    __vector_offset_136 = (DEFINED(__vector_dispatch_136) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_136))
    __vector_offset_137 = (DEFINED(__vector_dispatch_137) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_137))
    __vector_offset_138 = (DEFINED(__vector_dispatch_138) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_138))
    __vector_offset_139 = (DEFINED(__vector_dispatch_139) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_139))
    __vector_offset_140 = (DEFINED(__vector_dispatch_140) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_140))
    __vector_offset_141 = (DEFINED(__vector_dispatch_141) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_141))
    __vector_offset_142 = (DEFINED(__vector_dispatch_142) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_142))
    __vector_offset_143 = (DEFINED(__vector_dispatch_143) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_143))
    __vector_offset_144 = (DEFINED(__vector_dispatch_144) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_144))
    __vector_offset_145 = (DEFINED(__vector_dispatch_145) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_145))
    __vector_offset_146 = (DEFINED(__vector_dispatch_146) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_146))
    __vector_offset_147 = (DEFINED(__vector_dispatch_147) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_147))
    __vector_offset_148 = (DEFINED(__vector_dispatch_148) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_148))
    __vector_offset_149 = (DEFINED(__vector_dispatch_149) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_149))
    __vector_offset_150 = (DEFINED(__vector_dispatch_150) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_150))
    __vector_offset_151 = (DEFINED(__vector_dispatch_151) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_151))
    __vector_offset_152 = (DEFINED(__vector_dispatch_152) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_152))
    __vector_offset_153 = (DEFINED(__vector_dispatch_153) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_153))
    __vector_offset_154 = (DEFINED(__vector_dispatch_154) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_154))
    __vector_offset_155 = (DEFINED(__vector_dispatch_155) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_155))
    __vector_offset_156 = (DEFINED(__vector_dispatch_156) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_156))
    __vector_offset_157 = (DEFINED(__vector_dispatch_157) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_157))
    __vector_offset_158 = (DEFINED(__vector_dispatch_158) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_158))
    __vector_offset_159 = (DEFINED(__vector_dispatch_159) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_159))
    __vector_offset_160 = (DEFINED(__vector_dispatch_160) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_160))
    __vector_offset_161 = (DEFINED(__vector_dispatch_161) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_161))
    __vector_offset_162 = (DEFINED(__vector_dispatch_162) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_162))
    __vector_offset_163 = (DEFINED(__vector_dispatch_163) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_163))
    __vector_offset_164 = (DEFINED(__vector_dispatch_164) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_164))
    __vector_offset_165 = (DEFINED(__vector_dispatch_165) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_165))
    __vector_offset_166 = (DEFINED(__vector_dispatch_166) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_166))
    __vector_offset_167 = (DEFINED(__vector_dispatch_167) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_167))
    __vector_offset_168 = (DEFINED(__vector_dispatch_168) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_168))
    __vector_offset_169 = (DEFINED(__vector_dispatch_169) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_169))
    __vector_offset_170 = (DEFINED(__vector_dispatch_170) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_170))
    __vector_offset_171 = (DEFINED(__vector_dispatch_171) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_171))
    __vector_offset_172 = (DEFINED(__vector_dispatch_172) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_172))
    __vector_offset_173 = (DEFINED(__vector_dispatch_173) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_173))
    __vector_offset_174 = (DEFINED(__vector_dispatch_174) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_174))
    __vector_offset_175 = (DEFINED(__vector_dispatch_175) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_175))
    __vector_offset_176 = (DEFINED(__vector_dispatch_176) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_176))
    __vector_offset_177 = (DEFINED(__vector_dispatch_177) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_177))
    __vector_offset_178 = (DEFINED(__vector_dispatch_178) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_178))
    __vector_offset_179 = (DEFINED(__vector_dispatch_179) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_179))
    __vector_offset_180 = (DEFINED(__vector_dispatch_180) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_180))
    __vector_offset_181 = (DEFINED(__vector_dispatch_181) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_181))
    __vector_offset_182 = (DEFINED(__vector_dispatch_182) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_182))
    __vector_offset_183 = (DEFINED(__vector_dispatch_183) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_183))
    __vector_offset_184 = (DEFINED(__vector_dispatch_184) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_184))
    __vector_offset_185 = (DEFINED(__vector_dispatch_185) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_185))
    __vector_offset_186 = (DEFINED(__vector_dispatch_186) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_186))
    __vector_offset_187 = (DEFINED(__vector_dispatch_187) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_187))
    __vector_offset_188 = (DEFINED(__vector_dispatch_188) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_188))
    __vector_offset_189 = (DEFINED(__vector_dispatch_189) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_189))
    __vector_offset_190 = (DEFINED(__vector_dispatch_190) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_190))
    __vector_offset_191 = (DEFINED(__vector_dispatch_191) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_191))
    __vector_offset_192 = (DEFINED(__vector_dispatch_192) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_192))
    __vector_offset_193 = (DEFINED(__vector_dispatch_193) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_193))
    __vector_offset_194 = (DEFINED(__vector_dispatch_194) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_194))
    __vector_offset_195 = (DEFINED(__vector_dispatch_195) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_195))
    __vector_offset_196 = (DEFINED(__vector_dispatch_196) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_196))
    __vector_offset_197 = (DEFINED(__vector_dispatch_197) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_197))
    __vector_offset_198 = (DEFINED(__vector_dispatch_198) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_198))
    __vector_offset_199 = (DEFINED(__vector_dispatch_199) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_199))
    __vector_offset_200 = (DEFINED(__vector_dispatch_200) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_200))
    __vector_offset_201 = (DEFINED(__vector_dispatch_201) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_201))
    __vector_offset_202 = (DEFINED(__vector_dispatch_202) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_202))
    __vector_offset_203 = (DEFINED(__vector_dispatch_203) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_203))
    __vector_offset_204 = (DEFINED(__vector_dispatch_204) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_204))
    __vector_offset_205 = (DEFINED(__vector_dispatch_205) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_205))
    __vector_offset_206 = (DEFINED(__vector_dispatch_206) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_206))
    __vector_offset_207 = (DEFINED(__vector_dispatch_207) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_207))
    __vector_offset_208 = (DEFINED(__vector_dispatch_208) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_208))
    __vector_offset_209 = (DEFINED(__vector_dispatch_209) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_209))
    __vector_offset_210 = (DEFINED(__vector_dispatch_210) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_210))
    __vector_offset_211 = (DEFINED(__vector_dispatch_211) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_211))
    __vector_offset_212 = (DEFINED(__vector_dispatch_212) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_212))
    __vector_offset_213 = (DEFINED(__vector_dispatch_213) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_213))
    __vector_offset_214 = (DEFINED(__vector_dispatch_214) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_214))
    __vector_offset_215 = (DEFINED(__vector_dispatch_215) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_215))
    __vector_offset_216 = (DEFINED(__vector_dispatch_216) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_216))
    __vector_offset_217 = (DEFINED(__vector_dispatch_217) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_217))
    __vector_offset_218 = (DEFINED(__vector_dispatch_218) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_218))
    __vector_offset_219 = (DEFINED(__vector_dispatch_219) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_219))
    __vector_offset_220 = (DEFINED(__vector_dispatch_220) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_220))
    __vector_offset_221 = (DEFINED(__vector_dispatch_221) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_221))
    __vector_offset_222 = (DEFINED(__vector_dispatch_222) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_222))
    __vector_offset_223 = (DEFINED(__vector_dispatch_223) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_223))
    __vector_offset_224 = (DEFINED(__vector_dispatch_224) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_224))
    __vector_offset_225 = (DEFINED(__vector_dispatch_225) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_225))
    __vector_offset_226 = (DEFINED(__vector_dispatch_226) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_226))
    __vector_offset_227 = (DEFINED(__vector_dispatch_227) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_227))
    __vector_offset_228 = (DEFINED(__vector_dispatch_228) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_228))
    __vector_offset_229 = (DEFINED(__vector_dispatch_229) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_229))
    __vector_offset_230 = (DEFINED(__vector_dispatch_230) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_230))
    __vector_offset_231 = (DEFINED(__vector_dispatch_231) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_231))
    __vector_offset_232 = (DEFINED(__vector_dispatch_232) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_232))
    __vector_offset_233 = (DEFINED(__vector_dispatch_233) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_233))
    __vector_offset_234 = (DEFINED(__vector_dispatch_234) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_234))
    __vector_offset_235 = (DEFINED(__vector_dispatch_235) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_235))
    __vector_offset_236 = (DEFINED(__vector_dispatch_236) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_236))
    __vector_offset_237 = (DEFINED(__vector_dispatch_237) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_237))
    __vector_offset_238 = (DEFINED(__vector_dispatch_238) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_238))
    __vector_offset_239 = (DEFINED(__vector_dispatch_239) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_239))
    __vector_offset_240 = (DEFINED(__vector_dispatch_240) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_240))
    __vector_offset_241 = (DEFINED(__vector_dispatch_241) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_241))
    __vector_offset_242 = (DEFINED(__vector_dispatch_242) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_242))
    __vector_offset_243 = (DEFINED(__vector_dispatch_243) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_243))
    __vector_offset_244 = (DEFINED(__vector_dispatch_244) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_244))
    __vector_offset_245 = (DEFINED(__vector_dispatch_245) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_245))
    __vector_offset_246 = (DEFINED(__vector_dispatch_246) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_246))
    __vector_offset_247 = (DEFINED(__vector_dispatch_247) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_247))
    __vector_offset_248 = (DEFINED(__vector_dispatch_248) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_248))
    __vector_offset_249 = (DEFINED(__vector_dispatch_249) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_249))
    __vector_offset_250 = (DEFINED(__vector_dispatch_250) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_250))
    __vector_offset_251 = (DEFINED(__vector_dispatch_251) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_251))
    __vector_offset_252 = (DEFINED(__vector_dispatch_252) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_252))
    __vector_offset_253 = (DEFINED(__vector_dispatch_253) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_253))
    __vector_offset_254 = (DEFINED(__vector_dispatch_254) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_254))
    __vector_offset_255 = (DEFINED(__vector_dispatch_255) ? (. - _ebase_address) : __vector_offset_default);
    KEEP(*(.vector_255))
    /* Default interrupt handler */
    __vector_offset_default = . - _ebase_address;
    KEEP(*(.vector_default))
  } > kseg0_program_mem

  /* The startup code is in the .reset.startup section.
   * Keep this here for backwards compatibility with older
   * C32 v1.xx releases.
   */
  .startup ORIGIN(kseg0_boot_mem) :
  {
    KEEP(*(.startup))
  } > kseg0_boot_mem
  /* Code Sections - Note that input sections *(.text) and *(.text.*)
  ** are not mapped here. The best-fit allocator locates them,
  ** so that .text may flow around absolute sections as needed.
  */
  .text :
  {
    *(.stub .gnu.linkonce.t.*)
    KEEP (*(.text.*personality*))
    *(.mips16.fn.*)
    *(.mips16.call.*)
    *(.gnu.warning)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /* Global-namespace object initialization */
  .init :
  {
    KEEP (*crti.o(.init))
    KEEP (*crtbegin.o(.init))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o *crtn.o ).init))
    KEEP (*crtend.o(.init))
    KEEP (*crtn.o(.init))
    . = ALIGN(4) ;
  } >kseg0_program_mem
    .fill1 (NOLOAD):
    {
     FILL(0xFF);
     . = ORIGIN(protected_reg3) + LENGTH(protected_reg3) - 1;
     BYTE(0xFF)

    } > protected_reg3
  .fini :
  {
    KEEP (*(.fini))
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .preinit_array :
  {
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array))
    PROVIDE_HIDDEN (__preinit_array_end = .);
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .init_array :
  {
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array))
    PROVIDE_HIDDEN (__init_array_end = .);
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .fini_array :
  {
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT(.fini_array.*)))
    KEEP (*(.fini_array))
    PROVIDE_HIDDEN (__fini_array_end = .);
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .ctors :
  {
    /* XC32 uses crtbegin.o to find the start of
       the constructors, so we make sure it is
       first. Because this is a wildcard, it
       doesn't matter if the user does not
       actually link against crtbegin.o; the
       linker won't look for a file to match a
       wildcard. The wildcard also means that it
       doesn't matter which directory crtbegin.o
       is in. */
    KEEP (*crtbegin.o(.ctors))
    KEEP (*crtbegin?.o(.ctors))
    /* We don't want to include the .ctor section from
       the crtend.o file until after the sorted ctors.
       The .ctor section from the crtend file contains the
       end of ctors marker and it must be last */
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .dtors :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*crtbegin?.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /* Read-only sections */
  .rodata :
  {
    *( .gnu.linkonce.r.*)
    *(.rodata1)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /*
   * Small initialized constant global and static data can be placed in the
   * .sdata2 section. This is different from .sdata, which contains small
   * initialized non-constant global and static data.
   */
  .sdata2 ALIGN(4) :
  {
    *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  /*
   * Uninitialized constant global and static data (i.e., variables which will
   * always be zero). Again, this is different from .sbss, which contains
   * small non-initialized, non-constant global and static data.
   */
  .sbss2 ALIGN(4) :
  {
    *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
    . = ALIGN(4) ;
  } >kseg0_program_mem
  .eh_frame_hdr :
  {
    *(.eh_frame_hdr)
  } >kseg0_program_mem
    . = ALIGN(4) ;
  .eh_frame : ONLY_IF_RO
  {
    KEEP (*(.eh_frame))
  } >kseg0_program_mem
    . = ALIGN(4) ;
  .gcc_except_table : ONLY_IF_RO
  {
    *(.gcc_except_table .gcc_except_table.*)
  } >kseg0_program_mem
    . = ALIGN(4) ;
  .dbg_data (NOLOAD) :
  {
    . += (DEFINED (_DEBUGGER) ? 0x200 : 0x0);
    /* Additional data memory required for DSPr2 registers */
    . += (DEFINED (_DEBUGGER) ? 0x80 : 0x0);
  } >kseg0_data_mem
  .jcr :
  {
    KEEP (*(.jcr))
    . = ALIGN(4) ;
  } >kseg0_data_mem
  .eh_frame : ONLY_IF_RW
  {
    KEEP (*(.eh_frame))
  } >kseg0_data_mem
    . = ALIGN(4) ;
  .gcc_except_table : ONLY_IF_RW
  {
    *(.gcc_except_table .gcc_except_table.*)
  } >kseg0_data_mem
    . = ALIGN(4) ;
  /* Persistent data - Use the new C 'persistent' attribute instead. */
  .persist :
  {
    _persist_begin = .;
    *(.persist .persist.*)
    *(.pbss .pbss.*)
    . = ALIGN(4) ;
    _persist_end = .;
  } >kseg0_data_mem
  /*
   * Note that input sections named .data* are not mapped here.
   * The best-fit allocator locates them, so that they may flow
   * around absolute sections as needed.
   */
  .data :
  {
    *( .gnu.linkonce.d.*)
    SORT(CONSTRUCTORS)
    *(.data1)
    . = ALIGN(4) ;
  } >kseg0_data_mem
  . = .;
  _gp = ALIGN(16) + 0x7ff0;
  .got ALIGN(4) :
  {
    *(.got.plt) *(.got)
    . = ALIGN(4) ;
  } >kseg0_data_mem /* AT>kseg0_program_mem */
  /*
   * Note that 'small' data sections are still mapped in the linker
   * script. This ensures that they are grouped together for
   * gp-relative addressing. Absolute sections are allocated after
   * the 'small' data sections so small data cannot flow around them.
   */
  /*
   * We want the small data sections together, so single-instruction offsets
   * can access them all, and initialized data all before uninitialized, so
   * we can shorten the on-disk segment size.
   */
  .sdata ALIGN(4) :
  {
    _sdata_begin = . ;
    *(.sdata .sdata.* .gnu.linkonce.s.*)
    . = ALIGN(4) ;
    _sdata_end = . ;
  } >kseg0_data_mem
  .lit8 :
  {
    *(.lit8)
  } >kseg0_data_mem
  .lit4 :
  {
    *(.lit4)
  } >kseg0_data_mem
  . = ALIGN (4) ;
  _data_end = . ;
  _bss_begin = . ;
  .sbss ALIGN(4) :
  {
    _sbss_begin = . ;
    *(.dynsbss)
    *(.sbss .sbss.* .gnu.linkonce.sb.*)
    *(.scommon)
    _sbss_end = . ;
    . = ALIGN(4) ;
  } >kseg0_data_mem
  /*
   * Align here to ensure that the .bss section occupies space up to
   * _end. Align after .bss to ensure correct alignment even if the
   * .bss section disappears because there are no input sections.
   *
   * Note that input sections named .bss* are no longer mapped here.
   * The best-fit allocator locates them, so that they may flow
   * around absolute sections as needed.
   *
   */
  .bss :
  {
    *(.dynbss)
    *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end. Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections. */
   . = ALIGN(. != 0 ? 4 : 1);
  } >kseg0_data_mem
  . = ALIGN(4) ;
  _end = . ;
  _bss_end = . ;
  /*
   * The heap and stack are best-fit allocated by the linker after other
   * data and bss sections have been allocated.
   */
  /*
   * RAM functions go at the end of our stack and heap allocation.
   * Alignment of 2K required by the boundary register (BMXDKPBA).
   *
   * RAM functions are now allocated by the linker. The linker generates
   * _ramfunc_begin and _bmxdkpba_address symbols depending on the
   * location of RAM functions.
   */
  _bmxdudba_address = LENGTH(kseg0_data_mem) ;
  _bmxdupba_address = LENGTH(kseg0_data_mem) ;
    /* The .pdr section belongs in the absolute section */
    /DISCARD/ : { *(.pdr) }
  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
  .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) }
  .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) }
  .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) }
  .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) }
  .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) }
  .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) }
  .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) }
  .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) }
  /* Stabs debugging sections. */
  .stab 0 : { *(.stab) }
  .stabstr 0 : { *(.stabstr) }
  .stab.excl 0 : { *(.stab.excl) }
  .stab.exclstr 0 : { *(.stab.exclstr) }
  .stab.index 0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment 0 : { *(.comment) }
  /* DWARF debug sections used by MPLAB X for source-level debugging.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0. */
  /* DWARF 1 */
  .debug 0 : { *(.debug) }
  .line 0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo 0 : { *(.debug_srcinfo) }
  .debug_sfnames 0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges 0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
  .debug_abbrev 0 : { *(.debug_abbrev) }
  .debug_line 0 : { *(.debug_line) }
  .debug_frame 0 : { *(.debug_frame) }
  .debug_str 0 : { *(.debug_str) }
  .debug_loc 0 : { *(.debug_loc) }
  .debug_macinfo 0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames 0 : { *(.debug_varnames) }
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
  .debug_ranges 0 : { *(.debug_ranges) }
  /DISCARD/ : { *(.rel.dyn) }
  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
  /DISCARD/ : { *(.note.GNU-stack) }
  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.discard) }
  /DISCARD/ : { *(._debug_exception) }
}

/*************************************************************************
 * L1 Cache initialization symbols
 *************************************************************************/
/*
 * Provide virtual addresses for cache initialization
 * These symbols are used by the pic32_init_cache.o module to set up
 * the cache at startup.
 */
EXTERN (__pic32_init_cache_program_base_addr)
PROVIDE (__pic32_init_cache_program_base_addr = 0x9D000000) ;
EXTERN (__pic32_init_cache_data_base_addr)
PROVIDE (__pic32_init_cache_data_base_addr = 0x80000000) ;

/*************************************************************************
 * TLB-Based MMU Initialization section for EBI/SQI memory regions
 *************************************************************************/
/*
 * Provide virtual and physical addresses of the SQI for TLB initialization
 * These symbols are used below to create a table, which is in turn used to
 * initialize the TLB at startup.
 */
EXTERN (__pic32_init_sqi_kseg2_virtual_base_addr)
PROVIDE (__pic32_init_sqi_kseg2_virtual_base_addr = 0xD0000000) ;
EXTERN (__pic32_init_sqi_kseg2_physical_base_addr)
PROVIDE (__pic32_init_sqi_kseg2_physical_base_addr = 0x30000000) ;
EXTERN (__pic32_init_sqi_kseg2_entrylo0_bitset)
PROVIDE (__pic32_init_sqi_kseg2_entrylo0_bitset = 0x1F) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_0_entryhi = __pic32_init_sqi_kseg2_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_0_entrylo0 = (__pic32_init_sqi_kseg2_physical_base_addr >> 6) | __pic32_init_sqi_kseg2_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_0_entrylo1 = __pic32_tlb_0_entrylo0 | 0x00080000 ;

EXTERN (__pic32_init_sqi_kseg3_virtual_base_addr)
PROVIDE (__pic32_init_sqi_kseg3_virtual_base_addr = 0xF0000000) ;
EXTERN (__pic32_init_sqi_kseg3_physical_base_addr)
PROVIDE (__pic32_init_sqi_kseg3_physical_base_addr = 0x30000000) ;
EXTERN (__pic32_init_sqi_kseg3_entrylo0_bitset)
PROVIDE (__pic32_init_sqi_kseg3_entrylo0_bitset = 0x17) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_1_entryhi = __pic32_init_sqi_kseg3_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_1_entrylo0 = (__pic32_init_sqi_kseg3_physical_base_addr >> 6) | __pic32_init_sqi_kseg3_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_1_entrylo1 = __pic32_tlb_1_entrylo0 | 0x00080000 ;
/*
 * Provide virtual and physical addresses of the EBI for TLB initialization
 * These symbols are used below to create a table, which is in turn used to
 * initialize the TLB at startup.
 */
EXTERN (__pic32_init_ebi_kseg2_virtual_base_addr)
PROVIDE (__pic32_init_ebi_kseg2_virtual_base_addr = 0xC0000000) ;
EXTERN (__pic32_init_ebi_kseg2_physical_base_addr)
PROVIDE (__pic32_init_ebi_kseg2_physical_base_addr = 0x20000000) ;
EXTERN (__pic32_init_ebi_kseg2_entrylo0_bitset)
PROVIDE (__pic32_init_ebi_kseg2_entrylo0_bitset = 0x1F) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_2_entryhi = __pic32_init_ebi_kseg2_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_2_entrylo0 = (__pic32_init_ebi_kseg2_physical_base_addr >> 6) | __pic32_init_ebi_kseg2_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_2_entrylo1 = __pic32_tlb_2_entrylo0 | 0x00080000 ;

EXTERN (__pic32_init_ebi_kseg3_virtual_base_addr)
PROVIDE (__pic32_init_ebi_kseg3_virtual_base_addr = 0xE0000000) ;
EXTERN (__pic32_init_ebi_kseg3_physical_base_addr)
PROVIDE (__pic32_init_ebi_kseg3_physical_base_addr = 0x20000000) ;
EXTERN (__pic32_init_ebi_kseg3_entrylo0_bitset)
PROVIDE (__pic32_init_ebi_kseg3_entrylo0_bitset = 0x17) ;

/* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */
__pic32_tlb_3_entryhi = __pic32_init_ebi_kseg3_virtual_base_addr ;


/* Create one 64MB page table entry consisting of two 32MB physical pages.
 * ENTRYLO0 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0>
 * Shift __pic32_init_sqi_kseg3_physical_base_addr to PFN.
 * Bitwise-OR the other bits of ENTRYLO0.
 */
__pic32_tlb_3_entrylo0 = (__pic32_init_ebi_kseg3_physical_base_addr >> 6) | __pic32_init_ebi_kseg3_entrylo0_bitset ;


/* ENTRYLO1 = RI<31> XI<30> 0<29:26> PFN<25:6> C<5:3> D<2> V<1> G<0> */
__pic32_tlb_3_entrylo1 = __pic32_tlb_3_entrylo0 | 0x00080000 ;
/*
 * The default pic32_init_tlb_ebi_sqi.o module, which is
 * called by the default C startup code (crt0_<isa>.o),
 * uses the table created in the .tlb_init_values output
 * section to initialize the Translation Lookaside buffer (TLB)
 * of the Memory Mangagement Unit (MMU).
 */
SECTIONS
{
  .tlb_init_values :
  {
    . = ALIGN(4) ;
    __pic32_tlb_init_values_begin = ABSOLUTE(.);
    LONG(__pic32_tlb_0_entryhi) ;
    LONG(__pic32_tlb_0_entrylo0) ;
    LONG(__pic32_tlb_0_entrylo1) ;
    LONG(__pic32_tlb_1_entryhi) ;
    LONG(__pic32_tlb_1_entrylo0) ;
    LONG(__pic32_tlb_1_entrylo1) ;
    LONG(__pic32_tlb_2_entryhi) ;
    LONG(__pic32_tlb_2_entrylo0) ;
    LONG(__pic32_tlb_2_entrylo1) ;
    LONG(__pic32_tlb_3_entryhi) ;
    LONG(__pic32_tlb_3_entrylo0) ;
    LONG(__pic32_tlb_3_entrylo1) ;
    __pic32_tlb_init_values_end = ABSOLUTE(.);
    __pic32_tlb_init_values_count = 4 ;
  } > kseg1_boot_mem_4B0


}




 
The other thing I haven't ruled out is optimization problems. If I put the code optimized to "s" I can squeeze the whole thing into 0xEC00 ish bytes and use the default linker. But I have the same problem and debugging is crazy stupid. Setting everything to "s" except my main app code to 0 or 1, I have to use the larger linker, but I have the same problem. I cannot compile the whole project as 0 as it doesn't fit either way.
 
Any suggestions would be appreciated...
#1

3 Replies Related Threads

    aschen0866
    Super Member
    • Total Posts : 4176
    • Reward points : 0
    • Joined: 2006/01/08 22:18:32
    • Location: San Diego
    • Status: offline
    Re: In Bootloader global variables are being overwritten seemingly randomly 2017/11/15 10:59:16 (permalink)
    +1 (1)

    ... I don't quite understand how the debugger is reserving room in the kseg0 area, if it even is.

    It is done by the following linker command in the linker script:

     
    .dbg_data (NOLOAD) :
    {
    . += (DEFINED (_DEBUGGER) ? 0x200 : 0x0);
    /* Additional data memory required for DSPr2 registers */
    . += (DEFINED (_DEBUGGER) ? 0x80 : 0x0);
    /* Additional data memory required for FPU64 registers */
    . += (DEFINED (_DEBUGGER) ? 0x100 : 0x0);
    } >kseg0_data_mem
     

    This tells the linker to reserve 512 bytes at the very beginning of data memory if a debugger is enabled.  Therefore, unless you have data memory objects that are defined at fixed addresses within this range (using address attribute), I can't see how this becomes a problem.
     
    Given the complexity of the bootloader as you mentioned, I would exclude the custom linker script from the build, comment out the actual Flash erase/write functions, and check if the project does what it is supposed to do except the Flash programming part.
    #2
    NVergunst
    Super Member
    • Total Posts : 386
    • Reward points : 0
    • Joined: 2007/02/11 19:58:16
    • Location: 0
    • Status: offline
    Re: In Bootloader global variables are being overwritten seemingly randomly 2017/11/15 11:08:11 (permalink)
    0
    aschen0866
    It is done by the following linker command in the linker script:

     
     
     
    .dbg_data (NOLOAD) :
    {
    . += (DEFINED (_DEBUGGER) ? 0x200 : 0x0);
    /* Additional data memory required for DSPr2 registers */
    . += (DEFINED (_DEBUGGER) ? 0x80 : 0x0);
    /* Additional data memory required for FPU64 registers */
    . += (DEFINED (_DEBUGGER) ? 0x100 : 0x0);
    } >kseg0_data_mem
     
     
     

    This tells the linker to reserve 512 bytes at the very beginning of data memory if a debugger is enabled.  Therefore, unless you have data memory objects that are defined at fixed addresses within this range (using address attribute), I can't see how this becomes a problem.

     
    Yes that's what I thought. My variable is outside that range, but I don't see what's overwriting it.
     
    aschen0866
    Given the complexity of the bootloader as you mentioned, I would exclude the custom linker script from the build, comment out the actual Flash erase/write functions, and check if the project does what it is supposed to do except the Flash programming part.




    Yes that all works fine. The main application is similar and all of that is worked out.
     
    The parts of the code that are exhibiting the problem are actually the framework bootloader sections. I have made a software buffer UART and tied it into the datastream so that internally I get a blob of data from the web server, then construct a serial UART packet as the UART-Bootloader expects and "send it" to the bootloader. The "currDir" variable in the bootloader which switches it from RX to TX states should only be 0/1/2 for IDLE, RX, and TX states. Sometimes it goes to something crazy that looks like a memory address. Pointer overflow, or just complete re-write. I have put the debugger on breakpoint on data change, and I do not see it happening in any normal given place.
    #3
    NVergunst
    Super Member
    • Total Posts : 386
    • Reward points : 0
    • Joined: 2007/02/11 19:58:16
    • Location: 0
    • Status: offline
    Re: In Bootloader global variables are being overwritten seemingly randomly 2017/11/15 18:52:22 (permalink)
    0
    Ok, the linker is putting these variables in bad part of memory (RAM). Not sure why...
     
    I changed the linker file so that the kseg0_data_mem section starts at 0x80000400 just because I wanted to force all variables above that address and out of what MPLABX tells me is reserved memory areas. I have tons of ram, so wasting a few bytes isn't a big deal.
     
     
     kseg0_data_mem (w!x) : ORIGIN = 0x80000400, LENGTH = 0x80000 - 0x0400

     
    In the Data Memory window, looking at kseg0 addresses, I see the reserved "RR" stuff start at 0x80000000 as it always does but still when I pause the debugger and do a GoTo to a certain variable like "currDir" it shows up in this bad section. As you can see it has been overwritten by lots of other stuff. Is this the IVT or something? Lots of what appear to be memory locations scattered throughout the "reserved" areas. Maybe debugger RAM, I have no idea.
     
    But my question is why is variable currDir being initialized to this memory address when I specifically said don't do that in the linker???

    Attachment(s)

    Attachments are not available: Download requirements not met
    #4
    Jump to:
    © 2017 APG vNext Commercial Version 4.5