This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5310: Where to get info about libraries, rts430x_lc_sd_eabi.lib, etc? Moving from CCS5.5 to 12.6, where is section .boot in RTS library?

Part Number: MSP430F5310
Other Parts Discussed in Thread: MSP430WARE,

Tool/software:

I have an old project that was done in CCS5.5. It was using compiler v4.2. I don't have that compiler anymore. It also used MSP430Ware v1.80.01.03. TI does not provide MSP430Ware older than 2.x on the website.

Therefore, I decided to make a new project from scratch and bring my source code into it. I create a new project using the template "Empty Project with main.c". I am now using compiler v21.6.1LTS, MSP430Ware v3.80.13.03, and RTS rts430x_lc_sd_eabi.lib.

It's going OK. I had to update to some new function call names for UCS_xxx setup. The names had changed in the MSP430Ware.

This issue I have that I am getting a linker warning:

"../lnk_msp430f5310.cmd", line 162: warning #10068-D: no matching section
        -l rts*.lib<boot.obj > (.text)

I have this in the old linker command file:

    .boot > 0x8000
    {
        -l rts*.lib<boot.obj > (.text)
    }

It is highly likely that some section names have changed in the RTS. Where can I get a breakdown of the section names in the library? I have looked at the Compiler & Assembly tools documentation.

Can someone provide me with an equivalent command line statement for the new library (rts430x_lc_sd_eabi.lib)?

I am stuck.

  • Attached are the boot.c files from compiler v4.2.2 and compiler v21.6.1LTS.

    /*****************************************************************************/
    /* BOOT.C          - Initialize the MSP430 C runtime environment             */
    /*                                                                           */
    /* Copyright (c) 2003 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     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.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS 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) HOWEVER 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.     */
    /*                                                                           */
    /*****************************************************************************/
    #include <stdlib.h>
    #include <_lock.h>
    #include "boot_hooks.h"
    
    #ifdef __TI_RTS_BUILD
    /*---------------------------------------------------------------------------*/
    /* __TI_default_c_int00 indicates that the default TI entry routine is being  */
    /* used.  The linker makes assumptions about what exit does when this symbol */
    /* is seen. This symbols should NOT be defined if a customized exit routine  */
    /* is used.                                                                  */
    /*---------------------------------------------------------------------------*/
    __asm("__TI_default_c_int00 .set 1");
    #endif
    
    /*---------------------------------------------------------------------------*/
    /* Allocate the memory for the system stack.  This section will be sized     */
    /* by the linker.                                                            */
    /*---------------------------------------------------------------------------*/
    __attribute__((section(".stack")))
    #if defined(__LARGE_DATA_MODEL__)
    long _stack;
    #else
    int _stack;
    #endif
    
    __asm("\t.global _c_int00");
    __asm("\t.global _reset_vector");
    __asm("\t.sect   \".reset\"");
    __asm("\t.align  2");
    __asm("_reset_vector:\n\t.field _c_int00, 16");
    
    /*---------------------------------------------------------------------------*/
    /* Macro to initialize stack pointer.  Stack grows towards lower memory.     */
    /*---------------------------------------------------------------------------*/
    __asm("\t.global __STACK_END");
    #if defined(__LARGE_DATA_MODEL__)
    #define STACK_INIT() __asm("\t   MOVX.A\t   #__STACK_END,SP")
    #else
    #define STACK_INIT() __asm("\t   MOV.W\t    #__STACK_END,SP")
    #endif
    
    /*---------------------------------------------------------------------------*/
    /* Macro for the declaration of _c_int00 and related routines.               */
    /*---------------------------------------------------------------------------*/
    #if defined(__LARGE_CODE_MODEL__)
    #define CSTART_DECL __attribute__((section(".text:_isr"), naked)) void __interrupt
    #else
    #define CSTART_DECL __attribute__((naked)) void __interrupt
    #endif
    
    /*---------------------------------------------------------------------------*/
    /* Extern declarations.                                                      */
    /*---------------------------------------------------------------------------*/
    extern int  _args_main();
    extern void exit(int status);
    extern void _auto_init();
    extern void __mpu_init(void);
    extern int  main(int argc);   
    
    static __inline __attribute__((always_inline))
    void _c_int00_template(int NEEDS_ARGS, int NEEDS_INIT, int NEEDS_MPU)
    {
       STACK_INIT();
    
       if (NEEDS_MPU)
          __mpu_init();
       
       /*------------------------------------------------------------------------*/
       /* Allow for any application-specific low level initialization prior to   */
       /* initializing the C/C++ environment (global variable initialization,    */
       /* constructers).  If _system_pre_init() returns 0, then bypass C/C++     */
       /* initialization.  NOTE: BYPASSING THE CALL TO THE C/C++ INITIALIZATION  */
       /* ROUTINE MAY RESULT IN PROGRAM FAILURE.                                 */
       /*------------------------------------------------------------------------*/
       if(_system_pre_init() != 0)
       {
          if (NEEDS_INIT)
             _auto_init();
       }
    
       /*------------------------------------------------------------------------*/
       /* Handle any argc/argv arguments if supported by an MSP430 loader.       */
       /*------------------------------------------------------------------------*/
       if (NEEDS_ARGS)
          _args_main();
       else
          main(0);
    
       exit(1);
    }
    
    CSTART_DECL _c_int00(void)
    {
       _c_int00_template(1, 1, 0);
    }
    
    CSTART_DECL _c_int00_noargs(void)
    {
       _c_int00_template(0, 1, 0);
    }
    
    CSTART_DECL _c_int00_noinit(void)
    {
       _c_int00_template(1, 0, 0);
    }
    
    CSTART_DECL _c_int00_noinit_noargs(void)
    {
       _c_int00_template(0, 0, 0);
    }
    
    CSTART_DECL _c_int00_mpu(void)
    {
       _c_int00_template(1, 1, 1);
    }
    
    CSTART_DECL _c_int00_noargs_mpu(void)
    {
       _c_int00_template(0, 1, 1);
    }
    
    CSTART_DECL _c_int00_noinit_mpu(void)
    {
       _c_int00_template(1, 0, 1);
    }   
    
    CSTART_DECL _c_int00_noinit_noargs_mpu(void)
    {
       _c_int00_template(0, 0, 1);
    }
    
    
    
    
    
    

    /*****************************************************************************/
    /* BOOT.C   v4.2.2 - Initialize the MSP430 C runtime environment             */
    /*                                                                           */
    /* Copyright (c) 2003-2013 Texas Instruments Incorporated                    */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     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.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS 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) HOWEVER 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.     */
    /*                                                                           */
    /*****************************************************************************/
    #include <stdlib.h>
    #include <_lock.h>
    
    extern int _args_main();
    extern int main(int argc);
    extern void exit(int status);
    extern void _auto_init();
    extern void __interrupt _c_int00();
    extern void __interrupt _c_int00_noargs();
    extern void __interrupt _c_int00_noinit();
    extern void __interrupt _c_int00_noexit();
    extern void __interrupt _c_int00_noinit_noexit();
    extern void __interrupt _c_int00_mpu_init();
    extern void __interrupt _c_int00_noargs_mpu_init();
    extern void __interrupt _c_int00_noinit_mpu_init();
    extern void __interrupt _c_int00_noexit_mpu_init();
    extern void __interrupt _c_int00_noinit_noexit_mpu_init();
    extern int  _system_pre_init(void);
    
    void              (*__TI_cleanup_ptr)(void);
    void _DATA_ACCESS (*__TI_dtors_ptr)(int);
    
    /*---------------------------------------------------------------------------*/
    /* Allocate the memory for the system stack.  This section will be sized     */
    /* by the linker.                                                            */
    /*---------------------------------------------------------------------------*/
    __asm("\t.global __STACK_END");
    #pragma DATA_SECTION (_stack, ".stack");
    #if defined(__LARGE_DATA_MODEL__)
    long _stack;
    #else
    int _stack;
    #endif
    
    /*---------------------------------------------------------------------------*/
    /*  Initialize reset vector to point at _c_int00                             */
    /*  _c_int00 must always be located in low-memory on MSP430X devices.        */
    /*---------------------------------------------------------------------------*/
    #if defined(__LARGE_CODE_MODEL__)
    _Pragma("CODE_SECTION(_c_int00, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noargs, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noinit, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noexit, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noinit_noexit, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_mpu_init, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noargs_mpu_init, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noinit_mpu_init, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noexit_mpu_init, \".text:_isr\")")
    _Pragma("CODE_SECTION(_c_int00_noinit_noexit_mpu_init, \".text:_isr\")")
    #endif
    
    __asm("\t.global _reset_vector");
    __asm("\t.sect   \".reset\"");
    __asm("\t.align  2");
    __asm("_reset_vector:\n\t.field _c_int00, 16");
    
    /*---------------------------------------------------------------------------*/
    /* Macro to initialize stack pointer.  Stack grows towards lower memory.     */
    /*---------------------------------------------------------------------------*/
    #if defined(__LARGE_DATA_MODEL__)
    #define STACK_INIT() __asm("\t   MOVX.A\t   #__STACK_END,SP")
    #else
    #define STACK_INIT() __asm("\t   MOV.W\t    #__STACK_END,SP")
    #endif
    
    /*---------------------------------------------------------------------------*/
    /* Macros to initialize required global variables.                           */
    /*---------------------------------------------------------------------------*/
    #if defined(__TI_EABI__)
    #define INIT_EXIT_PTRS() do { } while(0)
    #define INIT_LOCKS()     do { } while(0)
    #else
    #define INIT_EXIT_PTRS() do { __TI_cleanup_ptr = NULL; __TI_dtors_ptr = NULL; } while(0)
    #define INIT_LOCKS()     do { _lock = _nop; _unlock = _nop; } while(0)
    #endif
    
    /*****************************************************************************/
    /* C_INT00() - C ENVIRONMENT ENTRY POINT                                     */
    /*****************************************************************************/
    #pragma CLINK(_c_int00)
    extern void __interrupt _c_int00()
    {
       STACK_INIT();
       
       INIT_EXIT_PTRS();
       INIT_LOCKS();
    
       /*------------------------------------------------------------------------*/
       /* Allow for any application-specific low level initialization prior to   */
       /* initializing the C/C++ environment (global variable initialization,    */
       /* constructers).  If _system_pre_init() returns 0, then bypass C/C++     */
       /* initialization.  NOTE: BYPASSING THE CALL TO THE C/C++ INITIALIZATION  */
       /* ROUTINE MAY RESULT IN PROGRAM FAILURE.                                 */
       /*------------------------------------------------------------------------*/
       if(_system_pre_init() != 0)  _auto_init();
    
       /*------------------------------------------------------------------------*/
       /* Handle any argc/argv arguments if supported by an MSP430 loader.       */
       /*------------------------------------------------------------------------*/
       _args_main();
    
       exit(1);
    }
    
    
    /*****************************************************************************/
    /* C_INT00_NOARGS() - Specialized version of _c_int00 that does not handle   */
    /*                    arguments passed to main.                              */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noargs)
    extern void __interrupt _c_int00_noargs()
    {
       STACK_INIT();
       INIT_EXIT_PTRS();
       INIT_LOCKS();
       if(_system_pre_init() != 0) _auto_init();
       main(0);
       exit(1);
    }
    
    /*****************************************************************************/
    /* C_INT00_NOINIT() - Specialized version of _c_int00 that does not perform  */
    /*                    auto initialization.                                   */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noinit)
    extern void __interrupt _c_int00_noinit()
    {
       STACK_INIT();
       INIT_EXIT_PTRS();
       INIT_LOCKS();
       _system_pre_init();
       _args_main();
       exit(1);
    }
    
    /*****************************************************************************/
    /* C_INT00_NOEXIT() - Specialized version of _c_int00 that directly calls    */
    /*                    abort and skips cleanup in exit.                       */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noexit)
    extern void __interrupt _c_int00_noexit()
    {
       STACK_INIT();
       INIT_LOCKS();
       if(_system_pre_init() != 0) _auto_init();
       main(0);
       abort();
    }
    
    /*****************************************************************************/
    /* C_INT00_NOINIT_NOEXIT() - Specialized version of _c_int00 that does not   */
    /*                           perform auto initialization and calls abort     */
    /*                           directly.                                       */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noinit_noexit)
    extern void __interrupt _c_int00_noinit_noexit()
    {
       STACK_INIT();
       INIT_LOCKS();
       _system_pre_init();
       main(0);
       abort();
    }
    
    extern volatile unsigned int MPUCTL0;
    extern volatile unsigned int MPUSEG;
    extern volatile unsigned int MPUSAM;
    
    extern unsigned int __mpuseg;
    extern unsigned int __mpusam;
    
    /*---------------------------------------------------------------------------*/
    /* Macro to initialize the FRAM MPU.                                         */
    /*---------------------------------------------------------------------------*/
    #define MPU_INIT() do { \
         MPUCTL0 = 0xA500;                           /* Unlock MPU             */ \
         MPUSEG  = (unsigned int)_symval(&__mpuseg); /* Set segment boundaries */ \
         MPUSAM  = (unsigned int)_symval(&__mpusam); /* Set RWX permissions    */ \
         MPUCTL0 = 0xA501;                           /* Enable MPU             */ \
       } while (0)
    
    /*****************************************************************************/
    /* C_INT00_MPU_INIT() - Specialized version of _c_int00 that initializes the */
    /*                      FRAM memory protection unit.                         */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_mpu_init)
    extern void __interrupt _c_int00_mpu_init()
    {
       MPU_INIT();
       STACK_INIT();
       INIT_EXIT_PTRS();
       INIT_LOCKS();
       if(_system_pre_init() != 0)  _auto_init();
       _args_main();
       exit(1);
    }
    
    /*****************************************************************************/
    /* C_INT00_NOARGS_MPU_INIT() - Specialized version of _c_int00 that          */ 
    /*                             initializes the FRAM memory protection unit   */
    /*                             and does not handle arguments passed to main. */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noargs_mpu_init)
    extern void __interrupt _c_int00_noargs_mpu_init()
    {
       MPU_INIT();
       STACK_INIT();
       INIT_EXIT_PTRS();
       INIT_LOCKS();
       if(_system_pre_init() != 0) _auto_init();
       main(0);
       exit(1);
    }
    
    /*****************************************************************************/
    /* C_INT00_NOINIT_MPU_INIT() - Specialized version of _c_int00 that          */
    /*                             initializes the FRAM memory protection unit   */
    /*                             and does not perform auto initialization.     */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noinit_mpu_init)
    extern void __interrupt _c_int00_noinit_mpu_init()
    {
       MPU_INIT();
       STACK_INIT();
       INIT_EXIT_PTRS();
       INIT_LOCKS();
       _system_pre_init();
       _args_main();
       exit(1);
    }
    
    /*****************************************************************************/
    /* C_INT00_NOEXIT_MPU_INIT() - Specialized version of _c_int00 that          */
    /*                             initializes the FRAM memory protection unit   */
    /*                             and directly calls abort and skips cleanup in */
    /*                             exit.                                         */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noexit_mpu_init)
    extern void __interrupt _c_int00_noexit_mpu_init()
    {
       MPU_INIT();
       STACK_INIT();
       INIT_LOCKS();
       if(_system_pre_init() != 0) _auto_init();
       main(0);
       abort();
    }
    
    /*****************************************************************************/
    /* C_INT00_NOINIT_NOEXIT_MPU_INIT() - Specialized version of _c_int00 that   */
    /*                                    initializes the FRAM memory protection */
    /*                                    unit and does not perform auto         */
    /*                                    initialization and calls abort         */
    /*                                    directly.                              */
    /*****************************************************************************/
    #pragma CLINK(_c_int00_noinit_noexit_mpu_init)
    extern void __interrupt _c_int00_noinit_noexit_mpu_init()
    {
       MPU_INIT();
       STACK_INIT();
       INIT_LOCKS();
       _system_pre_init();
       main(0);
       abort();
    }
    
    

  • Hi,
    I can't seem to read this .lib file. I'll consult with my team on Monday.

    Best Regards,

    Diego Abad

  • Thanks Diego. In the mean-time, here is some more info.

    Looking at the map file, I found this:

     7 25:ENTRY POINT SYMBOL: "_c_int00_noargs"  address: 0000b802
         +:
    ------:
           -:                  0000b7e6    0000001c     Sci.obj (.text:USCI_A1_SharedVector)
      180 95:                  0000b802    0000001c     rts430x_lc_sd_eabi.lib : boot.c.obj (.text:_isr:_c_int00_noargs)
           +:                  0000b81e    00000018                            : mult16_f5hw.asm.obj (.text)
    --------:
            -:0000b426  __mspabi_srll_9                        
      1059 14:0000b802  _c_int00_noargs                        
            +:0000c1b4  _ramvector                             
    ---------:
            -:0000b7e6  USCI_A1_SharedVector                   
      1739 14:0000b802  _c_int00_noargs                        
            +:0000b81e  __mspabi_mpyi_f5hw                     
    Total found: 4

    So, I changed the linker command file to this:

        .boot > 0x8000
        {
            -l rts*.lib<boot.obj > (.text:_isr:_c_int00_noargs)
            /*-l rts*.lib<boot.obj > (.text)*/
        }

    Still getting the same error with the new section name:

    "../lnk_msp430f5310.cmd", line 162: warning #10068-D: no matching section
            -l rts*.lib<boot.obj > (.text:_isr:_c_int00_noargs)

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

    So, I still have the error/issue however, now I have an additional question.

    1) The boot.c from compiler 21.6.1LTS has a template for _c_int_00. It can have the following forms:

    CSTART_DECL _c_int00(void)
    CSTART_DECL _c_int00_noargs(void)
    CSTART_DECL _c_int00_noinit(void)
    CSTART_DECL _c_int00_noinit_noargs(void)
    CSTART_DECL _c_int00_mpu(void)
    CSTART_DECL _c_int00_noargs_mpu(void)
    CSTART_DECL _c_int00_noinit_mpu(void)
    CSTART_DECL _c_int00_noinit_noargs_mpu(void)

    How is one of these forms selected?

    I have not made an specific choice but as you can see from my .map file (above), it is using _c_int00_noargs.

    Does the compiler select this?

    Can the user force a selection?

    I don't want to change it but I do want to know how the compiler works here for a better understanding.

  • In general, the boot loader is not the standard way to run things. I just searched all of the linker scripts included with GCC for the string "boot" and got nothing.

    The linker scripts have to be edited by the end user to create that section. Which does require some level of understanding of linker scripts.

  • I tried these combinations this morning. These formats did not work either.

    -l rts*.lib<boot.obj > (.text:_c_int00_noargs)

    -l rts*.lib<boot.obj > (._c_int00_noargs)

  • Generally, MSP430 C projects don't require custom linker command files. When you create the new empty project, did you add your old linker command file to the new project below? If so, can you try not doing that? The warning is saying that the linker is not finding an object file called boot.obj which the linker command file is explicitly asking for. If you must do this to explicitly link the RTS code to 0x8000, then try replacing boot.obj with boot.c.obj in your linker command file. From examining the map file of another recent project I see that the new codegen tools show this object file as "rts430x_lc_sd_eabi.lib : boot.c.obj ()".

  • The issue is that we have our own bootloader. That bootloader needs to a specific place to jump to to run the application. So, our bootloader is set to jump to address 0x8000, This how all of our products work with "bootloader jump to app". So, I need to placed c_int00 of the application at 0x8000.

  • Yes, I did add my old linker command file.

    I replaced with boot.c.obj as you suggested.

    -l rts*.lib<boot.c.obj > (.text)

    That worked!

    There is something vaguely familiar about this. Maybe I ran into this issue some years ago and forgot.?!

    It is confusion though, because the error was no matching section. The section name created with the "section: keyword are usually in the parenthesis. The .obj is from a compilation unit. 

    Anyway, none the less. It worked. Thanks a lot.

**Attention** This is a public forum