完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
PIC32 MZ上的看门狗超时导致NMI中断,这可以由一个NyMiHieldLe()函数捕获。下面的示例使用NMI处理程序设置一个“持久”变量(即,不被C启动代码重置的变量,即它的值将在MCU重置中幸存)。这里的一个更实际的用途是捕获一些用于诊断后复位的应用上下文,但我保持简单。在主()函数中检查持久变量,如果设置了BIT-0,则RED2被点亮。然后,变量被递增。在应用中,LeD3在500毫秒的间隔内切换。在LeD3的10次切换之后,进入无限循环,从而最终导致WDT超时。预期的行为是,RED3将闪烁5次,然后暂停等待WDT超时,这是由NMI处理程序捕获的,它将持久变量设置为1,然后强制MCU重置。复位RED2应点亮后,LED 3将再次闪烁5次,停止,复位,冲洗和重复…但是,在第一次重置之后,LeD2总是被点亮。当运行独立时,这一切都很好。但是,当通过一个Bootloader加载相同的HEX文件时,它会有不同的行为。在每次重置时,LED 2被接通或断开,即与先前复位相反。切换是由于持久变量在主()中递增,并且演示了它的值*生存于重置,并且NMI处理程序没有运行*。我无法解释为什么NMI处理程序只作为独立的应用程序运行。任何想法或尝试的东西,将不胜感激!该示例是基于Hydio演示的“BLIMKY”应用程序,带有一个修改的链接器脚本,它在Bootloader下运行,一些汇编代码带有单个跳转指令,因此它也可以在没有引导程序的情况下独立运行。Bootloader本身是基于Hydio演示的“Basic”Bootloader和一个修改的链接器脚本来约束可用RAM,这样就不会冒它踩在应用程序持久数据上的风险。硬件是PIC32 MZ EC启动器套件(PIC32 MZ2048 ECH144)。我使用的是Oracle 1.0602和XC32 1.40,不是最新版本,但是升级对于我们的实际应用来说是相当痛苦的,所以希望这不是原因。MUC.C:App.c:虚拟引导加载程序(用于独立运行),哑:应用程序链接器脚本,P32 MZ2048 ECH144.LD:引导加载程序链接脚本,BTLYMZ.LD:
以上来自于百度翻译 以下为原文 A watchdog timeout on PIC32MZ causes a NMI interrupt and this can be caught by a _nmi_handler() function. The following example uses the nmi handler to set a 'persistent' variable (that is, a variable which does not get reset by the C startup code, i.e. its value will survive a MCU reset). A more realistic use here would be to capture some application context for diagnosis post-reset, but I'm keeping it simple. The persistent variable is inspected in the main() function and LED2 is lit if bit-0 is set. The variable is then incremented. Separately in the application, LED3 is toggled at 500ms interval. After 10 toggles of LED3 an infinite loop is entered thus eventually causing a WDT timeout. Expected behaviour is that LED3 will flash 5 times then halt pending the WDT timeout, which is caught by the nmi handler, which sets the persistent variable to 1 and then forces a MCU reset. After reset LED2 should be lit, LED3 will again flash 5 times, halt, reset, rinse and repeat... but LED2 will be always lit from the first reset and thereafter. This all works fine when run standalone. However it has a different behaviour when the same hex file is loaded via a bootloader. At each reset, LED 2 is toggled either on or off, i.e. set opposite to the previous reset. The toggling is due to the persistent variable being incremented in main() and demonstrates that its value *is* surviving the reset and that the nmi handler did *not* run. I'm at a loss to explain why the nmi handler will only run as a standalone app. Any ideas or things to try would be appreciated! The example is based upon the HARMony demo 'blinky' application, with a modified linker script to run under the bootloader and some assembly code with a single jump instruction so it can also be run standalone without the bootloader. The bootloader itself is based on the Harmony demo 'basic' bootloader and a modified linker script to constrain the available ram so not to risk it stomping on the application's persistent data. Hardware is a PIC32MZ EC starter kit (PIC32MZ2048ECH144). I'm using Harmony 1.06.02 and XC32 1.40, not the latest versions but upgrading would be fairly painful for our actual application so hopefully this is not the cause. main.c: #include "system_definitions.h" static volatile uint32_t __attribute__((persistent)) persistent_var; void __attribute__((nomips16)) _nmi_handler(void); void __attribute__((nomips16)) _nmi_handler(void) { persistent_var = 1; SYS_RESET_SoftwareReset(); } int main(void) { SYS_Initialize(NULL); if (persistent_var & 1u) { BSP_LEDOn(BSP_LED_2); } persistent_var++; SYSKEY = 0x00000000; /* unlock */ SYSKEY = 0xaa996655; SYSKEY = 0x556699aa; RNMICONbits.NMICNT = 0xff; /* grace period for nmi handler to run */ SYSKEY = 0x33333333; /* lock */ if (RNMICONbits.NMICNT != 0xff) { BSP_LEDOn(BSP_LED_1); } while (true) { SYS_WDT_TimerClear(); SYS_Tasks(); } return 0; } app.c: #include "app.h" void TimerCallBack(uintptr_t context, uint32_t tickCount) { static int count; BSP_LEDToggle(BSP_LED_3); if (++count > 10) { while (1); } } void APP_Initialize ( void ) { } void APP_Tasks ( void ) { static SYS_TMR_HANDLE tmrServiceHandle = SYS_TMR_HANDLE_INVALID; if (tmrServiceHandle == SYS_TMR_HANDLE_INVALID) { tmrServiceHandle = SYS_TMR_ObjectCreate(500, 1, TimerCallBack, SYS_TMR_FLAG_PERIODIC); } } Dummy bootloader (for standalone running), dummy.S: .section .bootloader_reset,code jal 0x9d001970 Application linker script, p32MZ2048ECH144.ld: /*-------------------------------------------------------------------------- * MPLAB XC Compiler - PIC32MZ2048ECH144 linker script * Build date : May 01 2015 * * Copyright (c) 2015, Microchip Technology Inc. and its subsidiaries ("Microchip") * All rights reserved. * * 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. * */ /* Default linker script, for normal executables */ /* 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) PROVIDE(_min_stack_size = 0x400) ; /************************************************************************* * Processor-specific object file. Contains SFR definitions. *************************************************************************/ INPUT("processor.o") /************************************************************************* * Processor-specific peripheral libraries are optional *************************************************************************/ OPTIONAL("libmchp_peripheral.a") OPTIONAL("libmchp_peripheral_32MZ2048ECH144.a") /************************************************************************* * Vector-offset initialization *************************************************************************/ OPTIONAL("vector_offset_init.o") /************************************************************************* * For interrupt vector handling *************************************************************************/ PROVIDE(_vector_spacing = 0x00000001); PROVIDE(_ebase_address = 0x9D000000); /************************************************************************* * 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 *************************************************************************/ /* Equate _RESET_ADDR to the ORIGIN value of kseg1_boot_mem (see below) */ _RESET_ADDR = (0x9D000000 + 0x1000 + 0x970); /* Map _BEV_EXCPT_ADDR and _DBG_EXCPT_ADDR in to kseg1_boot_mem (see below) */ /* Place _BEV_EXCPT_ADDR at an offset of 0x380 to _RESET_ADDR */ /* Place _DBG_EXCPT_ADDR at an offset of 0x480 to _RESET_ADDR */ _BEV_EXCPT_ADDR = (0x9D000000 + 0x1000 + 0x970 + 0x380); _DBG_EXCPT_ADDR = (0x9D000000 + 0x1000 + 0x970 + 0x480); /* _RESET_ADDR = 0xBFC00000; */ /* _BEV_EXCPT_ADDR = 0xBFC00380; */ /* _DBG_EXCPT_ADDR = 0xBFC00480; */ _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_ sections are used to locate the config words at * their absolute addresses. *************************************************************************/ MEMORY { bootloader_kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x480 /* IVT is mapped into the exception_mem. ORIGIN value of exception_mem must align with 4K address boundary. Keep the default value for the length */ exception_mem : ORIGIN = 0x9D000000, LENGTH = 0x1000 /* Place kseg0_boot_mem adjacent to exception_mem. Keep the default value for the length */ kseg0_boot_mem : ORIGIN = (0x9D000000 + 0x1000), LENGTH = 0x970 /* C Start-up code is mapped into kseg1_boot_mem. Place kseg1_boot_mem adjacent to kseg0_boot_mem. Keep the default value for the length */ kseg1_boot_mem : ORIGIN = (0x9D000000 + 0x1000 + 0x970), LENGTH = 0x490 kseg1_boot_mem_4B0 : ORIGIN = (0x9D000000 + 0x1000 + 0x970 + 0x4B0), LENGTH = 0xFA50 /* All C files (Text and Data) are mapped into kseg0_program_mem. Place kseg0_program_mem adjacent to kseg1_boot_mem. Change the length of kseg0_program_mem as required. */ kseg0_program_mem (rx) :ORIGIN = (0x9D000000 + 0x1000 + 0x970 + 0x4B0 + 0xFA50), LENGTH = (0x200000 - (0x1000 + 0x970 + 0x4B0 + 0xFA50)) /* kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x200000 */ /* kseg0_boot_mem : ORIGIN = 0x9FC004B0, LENGTH = 0x0 */ /* kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x480 */ /* kseg1_boot_mem_4B0 : ORIGIN = 0xBFC004B0, LENGTH = 0xFA50 */ 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 = 0xFF00 config_BFC2FF40 : ORIGIN = 0xBFC2FF40, LENGTH = 0x4 config_BFC2FF44 : ORIGIN = 0xBFC2FF44, LENGTH = 0x4 config_BFC2FF48 : ORIGIN = 0xBFC2FF48, LENGTH = 0x4 config_BFC2FF4C : ORIGIN = 0xBFC2FF4C, LENGTH = 0x4 config_BFC2FF50 : ORIGIN = 0xBFC2FF50, LENGTH = 0x4 config_BFC2FF54 : ORIGIN = 0xBFC2FF54, LENGTH = 0x4 config_BFC2FF58 : ORIGIN = 0xBFC2FF58, LENGTH = 0x4 config_BFC2FF5C : ORIGIN = 0xBFC2FF5C, LENGTH = 0x4 config_BFC2FF60 : ORIGIN = 0xBFC2FF60, LENGTH = 0x4 config_BFC2FF64 : ORIGIN = 0xBFC2FF64, LENGTH = 0x4 config_BFC2FF68 : ORIGIN = 0xBFC2FF68, LENGTH = 0x4 config_BFC2FF6C : ORIGIN = 0xBFC2FF6C, LENGTH = 0x4 config_BFC2FF70 : ORIGIN = 0xBFC2FF70, LENGTH = 0x4 config_BFC2FF74 : ORIGIN = 0xBFC2FF74, LENGTH = 0x4 config_BFC2FF78 : ORIGIN = 0xBFC2FF78, LENGTH = 0x4 config_BFC2FF7C : ORIGIN = 0xBFC2FF7C, LENGTH = 0x4 config_BFC2FFC0 : ORIGIN = 0xBFC2FFC0, LENGTH = 0x4 config_BFC2FFC4 : ORIGIN = 0xBFC2FFC4, LENGTH = 0x4 config_BFC2FFC8 : ORIGIN = 0xBFC2FFC8, LENGTH = 0x4 config_BFC2FFCC : ORIGIN = 0xBFC2FFCC, LENGTH = 0x4 config_BFC2FFD0 : ORIGIN = 0xBFC2FFD0, LENGTH = 0x4 config_BFC2FFD4 : ORIGIN = 0xBFC2FFD4, LENGTH = 0x4 config_BFC2FFD8 : ORIGIN = 0xBFC2FFD8, LENGTH = 0x4 config_BFC2FFDC : ORIGIN = 0xBFC2FFDC, LENGTH = 0x4 config_BFC2FFE0 : ORIGIN = 0xBFC2FFE0, LENGTH = 0x4 config_BFC2FFE4 : ORIGIN = 0xBFC2FFE4, LENGTH = 0x4 config_BFC2FFE8 : ORIGIN = 0xBFC2FFE8, LENGTH = 0x4 config_BFC2FFEC : ORIGIN = 0xBFC2FFEC, LENGTH = 0x4 config_BFC2FFF0 : ORIGIN = 0xBFC2FFF0, LENGTH = 0x4 config_BFC2FFF4 : ORIGIN = 0xBFC2FFF4, LENGTH = 0x4 config_BFC2FFF8 : ORIGIN = 0xBFC2FFF8, LENGTH = 0x4 config_BFC2FFFC : ORIGIN = 0xBFC2FFFC, LENGTH = 0x4 upperbootaliaslastpage : ORIGIN = 0xBFC30000, LENGTH = 0x4000 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 /* first 0x800 bytes of ram are for the bootloader's use only. */ kseg0_data_mem (w!x) : ORIGIN = 0x80000000 + 0x800, LENGTH = 0x80000 - 0x800 sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000 configsfrs_BFC0FF40 : ORIGIN = 0xBFC0FF40, LENGTH = 0x40 configsfrs_BFC0FFC0 : ORIGIN = 0xBFC0FFC0, LENGTH = 0x40 configsfrs_BFC2FF40 : ORIGIN = 0xBFC2FF40, LENGTH = 0x40 configsfrs_BFC2FFC0 : ORIGIN = 0xBFC2FFC0, 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 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_BFC2FF40 : { KEEP(*(.config_BFC2FF40)) } > config_BFC2FF40 .config_BFC2FF44 : { KEEP(*(.config_BFC2FF44)) } > config_BFC2FF44 .config_BFC2FF48 : { KEEP(*(.config_BFC2FF48)) } > config_BFC2FF48 .config_BFC2FF4C : { KEEP(*(.config_BFC2FF4C)) } > config_BFC2FF4C .config_BFC2FF50 : { KEEP(*(.config_BFC2FF50)) } > config_BFC2FF50 .config_BFC2FF54 : { KEEP(*(.config_BFC2FF54)) } > config_BFC2FF54 .config_BFC2FF58 : { KEEP(*(.config_BFC2FF58)) } > config_BFC2FF58 .config_BFC2FF5C : { KEEP(*(.config_BFC2FF5C)) } > config_BFC2FF5C .config_BFC2FF60 : { KEEP(*(.config_BFC2FF60)) } > config_BFC2FF60 .config_BFC2FF64 : { KEEP(*(.config_BFC2FF64)) } > config_BFC2FF64 .config_BFC2FF68 : { KEEP(*(.config_BFC2FF68)) } > config_BFC2FF68 .config_BFC2FF6C : { KEEP(*(.config_BFC2FF6C)) } > config_BFC2FF6C .config_BFC2FF70 : { KEEP(*(.config_BFC2FF70)) } > config_BFC2FF70 .config_BFC2FF74 : { KEEP(*(.config_BFC2FF74)) } > config_BFC2FF74 .config_BFC2FF78 : { KEEP(*(.config_BFC2FF78)) } > config_BFC2FF78 .config_BFC2FF7C : { KEEP(*(.config_BFC2FF7C)) } > config_BFC2FF7C .config_BFC2FFC0 : { KEEP(*(.config_BFC2FFC0)) } > config_BFC2FFC0 .config_BFC2FFC4 : { KEEP(*(.config_BFC2FFC4)) } > config_BFC2FFC4 .config_BFC2FFC8 : { KEEP(*(.config_BFC2FFC8)) } > config_BFC2FFC8 .config_BFC2FFCC : { KEEP(*(.config_BFC2FFCC)) } > config_BFC2FFCC .config_BFC2FFD0 : { KEEP(*(.config_BFC2FFD0)) } > config_BFC2FFD0 .config_BFC2FFD4 : { KEEP(*(.config_BFC2FFD4)) } > config_BFC2FFD4 .config_BFC2FFD8 : { KEEP(*(.config_BFC2FFD8)) } > config_BFC2FFD8 .config_BFC2FFDC : { KEEP(*(.config_BFC2FFDC)) } > config_BFC2FFDC .config_BFC2FFE0 : { KEEP(*(.config_BFC2FFE0)) } > config_BFC2FFE0 .config_BFC2FFE4 : { KEEP(*(.config_BFC2FFE4)) } > config_BFC2FFE4 .config_BFC2FFE8 : { KEEP(*(.config_BFC2FFE8)) } > config_BFC2FFE8 .config_BFC2FFEC : { KEEP(*(.config_BFC2FFEC)) } > config_BFC2FFEC .config_BFC2FFF0 : { KEEP(*(.config_BFC2FFF0)) } > config_BFC2FFF0 .config_BFC2FFF4 : { KEEP(*(.config_BFC2FFF4)) } > config_BFC2FFF4 .config_BFC2FFF8 : { KEEP(*(.config_BFC2FFF8)) } > config_BFC2FFF8 .config_BFC2FFFC : { KEEP(*(.config_BFC2FFFC)) } > config_BFC2FFFC .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 .***ss, which contains * small non-initialized, non-constant global and static data. */ .***ss2 ALIGN(4) : { *(.***ss2 .***ss2.* .gnu.linkonce.***2.*) . = 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 = . ; .***ss ALIGN(4) : { _***ss_begin = . ; *(.dyn***ss) *(.***ss .***ss.* .gnu.linkonce.***.*) *(.scommon) _***ss_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.***ss : { *(.gptab.bss) *(.gptab.***ss) } .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) } } /************************************************************************* * 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 page table entry consisting of two 16MB 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 | ((__pic32_init_sqi_kseg2_physical_base_addr + 0x1000000) >> 6) ; /* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */ __pic32_tlb_1_entryhi = __pic32_init_sqi_kseg2_virtual_base_addr + 0x2000000; /* Create one page table entry consisting of two 16MB 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_kseg2_physical_base_addr + 0x2000000) >> 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_1_entrylo1 = __pic32_tlb_1_entrylo0 | 0x00040000 ; 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_2_entryhi = __pic32_init_sqi_kseg3_virtual_base_addr ; /* Create one page table entry consisting of two 16MB 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_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_2_entrylo1 = __pic32_tlb_2_entrylo0 | ((__pic32_init_sqi_kseg3_physical_base_addr + 0x1000000) >> 6) ; /* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */ __pic32_tlb_3_entryhi = __pic32_init_sqi_kseg3_virtual_base_addr + 0x2000000; /* Create one page table entry consisting of two 16MB 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_sqi_kseg3_physical_base_addr + 0x2000000) >> 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_3_entrylo1 = __pic32_tlb_3_entrylo0 | 0x00040000 ; /* * 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_4_entryhi = __pic32_init_ebi_kseg2_virtual_base_addr ; /* Create one page table entry consisting of two 16MB 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_4_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_4_entrylo1 = __pic32_tlb_4_entrylo0 | ((__pic32_init_ebi_kseg2_physical_base_addr + 0x1000000) >> 6) ; /* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */ __pic32_tlb_5_entryhi = __pic32_init_ebi_kseg2_virtual_base_addr + 0x2000000; /* Create one page table entry consisting of two 16MB 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_5_entrylo0 = ((__pic32_init_ebi_kseg2_physical_base_addr + 0x2000000) >> 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_5_entrylo1 = __pic32_tlb_5_entrylo0 | 0x00040000 ; 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_6_entryhi = __pic32_init_ebi_kseg3_virtual_base_addr ; /* Create one page table entry consisting of two 16MB 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_6_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_6_entrylo1 = __pic32_tlb_6_entrylo0 | ((__pic32_init_ebi_kseg3_physical_base_addr + 0x1000000) >> 6) ; /* ENTRYHI = VPN2<31:13> VPN2X<12:11> 0<10:8> ASID<7:0> */ __pic32_tlb_7_entryhi = __pic32_init_ebi_kseg3_virtual_base_addr + 0x2000000; /* Create one page table entry consisting of two 16MB 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_7_entrylo0 = ((__pic32_init_ebi_kseg3_physical_base_addr + 0x2000000) >> 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_7_entrylo1 = __pic32_tlb_7_entrylo0 | 0x00040000 ; /* * The default pic32_init_tlb_ebi_sqi.o module, which is * called by the default C startup code (crt0_ * 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 { .bootloader_reset 0xBFC00000 : { KEEP(*(.bootloader_reset)) } > bootloader_kseg1_boot_mem .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) ; LONG(__pic32_tlb_4_entryhi) ; LONG(__pic32_tlb_4_entrylo0) ; LONG(__pic32_tlb_4_entrylo1) ; LONG(__pic32_tlb_5_entryhi) ; LONG(__pic32_tlb_5_entrylo0) ; LONG(__pic32_tlb_5_entrylo1) ; LONG(__pic32_tlb_6_entryhi) ; LONG(__pic32_tlb_6_entrylo0) ; LONG(__pic32_tlb_6_entrylo1) ; LONG(__pic32_tlb_7_entryhi) ; LONG(__pic32_tlb_7_entrylo0) ; LONG(__pic32_tlb_7_entrylo1) ; __pic32_tlb_init_values_end = ABSOLUTE(.); __pic32_tlb_init_values_count = 8 ; } > kseg1_boot_mem_4B0 } Bootloader linker script, btl_mz.ld: /*-------------------------------------------------------------------------- * 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_ 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 = 0x00026000 protected_reg3 : ORIGIN = 0x9FC14000, LENGTH = 0x20000-0x14000 protected_reg4 : ORIGIN = 0x9FC34000, LENGTH = 0x40000-0x34000 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 /* restrict ram usage to avoid stomping on the application's persistent variables. */ kseg0_data_mem (w!x) : ORIGIN = 0x80000000, LENGTH = 0x800 /* was 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 .***ss, which contains * small non-initialized, non-constant global and static data. */ .***ss2 ALIGN(4) : { *(.***ss2 .***ss2.* .gnu.linkonce.***2.*) . = 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 = . ; .***ss ALIGN(4) : { _***ss_begin = . ; *(.dyn***ss) *(.***ss .***ss.* .gnu.linkonce.***.*) *(.scommon) _***ss_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.***ss : { *(.gptab.bss) *(.gptab.***ss) } .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_ * 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 .fill1 : { FILL(0xFF); . = ORIGIN(protected_reg3) + LENGTH(protected_reg3) - 1; BYTE(0xFF) } > protected_reg3 .fill12 : { FILL(0xFF); . = ORIGIN(protected_reg4) + LENGTH(protected_reg4) - 1; BYTE(0xFF) } > protected_reg4 } |
|
相关推荐
3个回答
|
|
|
TLDR:在应用程序中使用Bootloader来启动应用程序时,在应用程序中处理NMI中断有不同的行为。Bootloader是用一个单一的跳转指令来模拟的。我有点接近这个答案。以前我强迫WDT超时来诱导NMI。特鲁普我仍然需要这种场景来工作,但我也尝试通过设置SWNMI位直接调用NMI。这遇到了同样的问题(NMI处理程序不运行),但我发现了一个修复——即在Bootloader项目中包含一个自定义CRT0s,用下面的编辑来禁用它的NMI处理程序:这适用于SWNMI(Hurrh!)我假设,上面的代码注释了,引导加载程序保留了NMI位,让应用程序处理它。但是…原来的问题还在那里。在WDT超时之后,应用程序重新回到引导程序中,引导程序重新启动应用程序,但是它的NMIIHANDLE()不被调用。使用Bootloader替换为单个跳转指令,应用程序NMIIHANDLE()*运行。这是使用完全相同的应用程序。每种情况下的HEX文件。请问,什么是将我的NMI转换为非NMI?GRR。我现在使用XC32 V1.43作为引导加载程序(CRT0. S不使用1.40)。PPS。当尝试用微笑来发布时,我会被“拒绝访问”。想象一下!GRR。
以上来自于百度翻译 以下为原文 TLDR : there is a different behaviour in the handling of NMI interrupt in an application if a bootloader is used to launch the application vs. the bootloader is simulated with a single jump instruction. I'm a little closer to answering this. Previously I was forcing a WDT timeout to induce the NMI interrupt. I still need that scenario to work, but also I experimented with invoking a NMI directly through setting SWNMI bit. This suffered the same issue (NMI handler not running) but I found a fix - that is to include a custom crt0.s in the bootloader project with the following edit to disable its nmi handler: ################################################################## # Startup code ################################################################## .align 2 .globl _startup .set noreorder .ent _startup _startup: ################################################################## # If entered because of an NMI, jump to the NMI handler. ################################################################## /* Bootloader does not handle NMI, application will do this. mfc0 k0,_CP0_STATUS ext k0,k0,19,1 # Extract NMI bit beqz k0,_no_nmi nop la k0,_nmi_handler jr k0 nop */ _no_nmi: This works for SWNMI (hurrah!) and what I presume happens is, with the above code commented out, the bootloader preserves the NMI bit leaving the application to handle it. BUT... the original problem is still there. Upon WDT timeout the application resets back into the bootloader, which restarts the application but its nmi_handler() is not called. With the bootloader replaced with a single jump instruction the application nmi_handler() *is* run. This is using the exact same application.hex file in each case. Please, WHAT is turning my NMI into a non-NMI? grr. ps. I'm now using XC32 v1.43 for the bootloader (crt0.S wouldn't build with 1.40). pps. I get "Access Denied" when attempting to post with with smilies. Imagine that! grr. |
|
|
|
|
|
正如伊恩在http://www. McCHIP.COM/FoMss/FordPase/77101和http://www. McCHIP.COM/FUMMS/FANDPOST/780169中提供的一些见解。
以上来自于百度翻译 以下为原文 as ian said in http://www.microchip.com/forums/FindPost/777101 and http://www.microchip.com/forums/FindPost/780169 may provide some insight |
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
514 浏览 0 评论
5819 浏览 9 评论
2351 浏览 8 评论
2238 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3545 浏览 3 评论
1169浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1123浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
893浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
514浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-17 11:56 , Processed in 1.239442 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5102