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.

CCS/MSP430F5529: Custom BSL example: linker skipping sections

Part Number: MSP430F5529
Other Parts Discussed in Thread: MSP430F5418,

Tool/software: Code Composer Studio

Hello, 
I am using CCS v6.2 and v1_00_12_00 of MSP430 Custom BSL to create my own bootloader to fit my communication needs. I modified MSP430F5418 example project to MSP430F5529, that also included some changes to linker file. However when I builded project I noticed, that sections created in BSL430_LOW_LEVEL_INIT.asm file doesn't appear in generated TI-HEX file nor are listed during linking. Espescially the ".ZAREA" section is missing which I planned to use for "jumping" into Bootloader.

Linker creating HEX file:

Translating to TI-TXT format...
   "MSP430_BSL.out" .BSL430_VERSION_VENDOR ==> .BSL430_VERSION_VENDOR
   "MSP430_BSL.out" .BSL430_VERSION_CI ==> .BSL430_VERSION_CI
   "MSP430_BSL.out" .BSL430_VERSION_API ==> .BSL430_VERSION_API
   "MSP430_BSL.out" .BSL430_VERSION_PI ==> .BSL430_VERSION_PI
   "MSP430_BSL.out" .text:_isr ==> .text:_isr
   "MSP430_BSL.out" .text ==> .text
   "MSP430_BSL.out" .cinit ==> .cinit
   "MSP430_BSL.out" RTC ==> RTC
   "MSP430_BSL.out" PORT2 ==> PORT2
   "MSP430_BSL.out" TIMER2_A1 ==> TIMER2_A1
   "MSP430_BSL.out" TIMER2_A0 ==> TIMER2_A0
   "MSP430_BSL.out" USCI_B1 ==> USCI_B1
   "MSP430_BSL.out" USCI_A1 ==> USCI_A1
   "MSP430_BSL.out" PORT1 ==> PORT1
   "MSP430_BSL.out" TIMER1_A1 ==> TIMER1_A1
   "MSP430_BSL.out" TIMER1_A0 ==> TIMER1_A0
   "MSP430_BSL.out" DMA ==> DMA
   "MSP430_BSL.out" USB_UBM ==> USB_UBM
   "MSP430_BSL.out" TIMER0_A1 ==> TIMER0_A1
   "MSP430_BSL.out" TIMER0_A0 ==> TIMER0_A0
   "MSP430_BSL.out" ADC12 ==> ADC12
   "MSP430_BSL.out" USCI_B0 ==> USCI_B0
   "MSP430_BSL.out" USCI_A0 ==> USCI_A0
   "MSP430_BSL.out" WDT ==> WDT
   "MSP430_BSL.out" TIMER0_B1 ==> TIMER0_B1
   "MSP430_BSL.out" TIMER0_B0 ==> TIMER0_B0
   "MSP430_BSL.out" COMP_B ==> COMP_B
   "MSP430_BSL.out" UNMI ==> UNMI
   "MSP430_BSL.out" SYSNMI ==> SYSNMI
   "MSP430_BSL.out" .reset ==> .reset

Begging of Hex file:

@1010
00 08 08 04 
@1042
32 D0 10 00 FD 3F 03 43 6A 15 21 83 0E 41 3E 80 
00 1C 3F 40 FE 1B 0F 5E 8F 43 00 00 2F 83 2E 83 
FB 23 82 43 0E 1D B2 40 00 A5 10 1D B2 40 00 1C 
04 1D B2 40 00 1C 06 1D B2 40 41 03 0A 1D B2 40
...

As seen above, no code was allocated to ZAREA (0x1000) section

Linker file may be found here:  

/* ============================================================================ */
/* Copyright (c) 2013, Texas Instruments Incorporated                           */
/*  All rights reserved.                                                        */
/*                                                                              */
/*  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.                          */
/* ============================================================================ */

/******************************************************************************/
/* lnk_msp430f5418a.cmd - LINKER COMMAND FILE FOR LINKING MSP430F5418A PROGRAMS     */
/*                                                                            */
/*   Usage:  lnk430 <obj files...>    -o <out file> -m <map file> lnk.cmd     */
/*           cl430  <src files...> -z -o <out file> -m <map file> lnk.cmd     */
/*                                                                            */
/*----------------------------------------------------------------------------*/
/* These linker options are for command line linking only.  For IDE linking,  */
/* you should set your linker options in Project Properties                   */
/* -c                                               LINK USING C CONVENTIONS  */
/* -stack  0x0100                                   SOFTWARE STACK SIZE       */
/* -heap   0x0100                                   HEAP AREA SIZE            */
/*                                                                            */
/*----------------------------------------------------------------------------*/


/****************************************************************************/
/* SPECIFY THE SYSTEM MEMORY MAP                                            */
/****************************************************************************/

MEMORY
{
    SFR                     : origin = 0x0000, length = 0x0010
    PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0
    PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100
    RAM                     : origin = 0x1C00, length = 0x4000
    INFOA                   : origin = 0x1980, length = 0x0080
    INFOB                   : origin = 0x1900, length = 0x0080
    INFOC                   : origin = 0x1880, length = 0x0080
    INFOD                   : origin = 0x1800, length = 0x0080
    ZAREA                   : origin = 0x1000, length = 0x0010
    BSL430_VERSION_VENDOR   : origin = 0x1010, length = 0x0001
    BSL430_VERSION_CI       : origin = 0x1011, length = 0x0001
    BSL430_VERSION_API      : origin = 0x1012, length = 0x0001
    BSL430_VERSION_PI       : origin = 0x1013, length = 0x0001
    ZAREA_CODE              : origin = 0x1014, length = 0x002E
    FLASH                   : origin = 0x1042, length = 0x07AE
    BSLSIG                  : origin = 0x17F0, length = 0x000C
    JTAGLOCK_KEY            : origin = 0x17FC, length = 0x0004
    FLASH2                  : origin = 0x10000,length = 0x15C00
    INT00                   : origin = 0xFF80, length = 0x0002
    INT01                   : origin = 0xFF82, length = 0x0002
    INT02                   : origin = 0xFF84, length = 0x0002
    INT03                   : origin = 0xFF86, length = 0x0002
    INT04                   : origin = 0xFF88, length = 0x0002
    INT05                   : origin = 0xFF8A, length = 0x0002
    INT06                   : origin = 0xFF8C, length = 0x0002
    INT07                   : origin = 0xFF8E, length = 0x0002
    INT08                   : origin = 0xFF90, length = 0x0002
    INT09                   : origin = 0xFF92, length = 0x0002
    INT10                   : origin = 0xFF94, length = 0x0002
    INT11                   : origin = 0xFF96, length = 0x0002
    INT12                   : origin = 0xFF98, length = 0x0002
    INT13                   : origin = 0xFF9A, length = 0x0002
    INT14                   : origin = 0xFF9C, length = 0x0002
    INT15                   : origin = 0xFF9E, length = 0x0002
    INT16                   : origin = 0xFFA0, length = 0x0002
    INT17                   : origin = 0xFFA2, length = 0x0002
    INT18                   : origin = 0xFFA4, length = 0x0002
    INT19                   : origin = 0xFFA6, length = 0x0002
    INT20                   : origin = 0xFFA8, length = 0x0002
    INT21                   : origin = 0xFFAA, length = 0x0002
    INT22                   : origin = 0xFFAC, length = 0x0002
    INT23                   : origin = 0xFFAE, length = 0x0002
    INT24                   : origin = 0xFFB0, length = 0x0002
    INT25                   : origin = 0xFFB2, length = 0x0002
    INT26                   : origin = 0xFFB4, length = 0x0002
    INT27                   : origin = 0xFFB6, length = 0x0002
    INT28                   : origin = 0xFFB8, length = 0x0002
    INT29                   : origin = 0xFFBA, length = 0x0002
    INT30                   : origin = 0xFFBC, length = 0x0002
    INT31                   : origin = 0xFFBE, length = 0x0002
    INT32                   : origin = 0xFFC0, length = 0x0002
    INT33                   : origin = 0xFFC2, length = 0x0002
    INT34                   : origin = 0xFFC4, length = 0x0002
    INT35                   : origin = 0xFFC6, length = 0x0002
    INT36                   : origin = 0xFFC8, length = 0x0002
    INT37                   : origin = 0xFFCA, length = 0x0002
    INT38                   : origin = 0xFFCC, length = 0x0002
    INT39                   : origin = 0xFFCE, length = 0x0002
    INT40                   : origin = 0xFFD0, length = 0x0002
    INT41                   : origin = 0xFFD2, length = 0x0002
    INT42                   : origin = 0xFFD4, length = 0x0002
    INT43                   : origin = 0xFFD6, length = 0x0002
    INT44                   : origin = 0xFFD8, length = 0x0002
    INT45                   : origin = 0xFFDA, length = 0x0002
    INT46                   : origin = 0xFFDC, length = 0x0002
    INT47                   : origin = 0xFFDE, length = 0x0002
    INT48                   : origin = 0xFFE0, length = 0x0002
    INT49                   : origin = 0xFFE2, length = 0x0002
    INT50                   : origin = 0xFFE4, length = 0x0002
    INT51                   : origin = 0xFFE6, length = 0x0002
    INT52                   : origin = 0xFFE8, length = 0x0002
    INT53                   : origin = 0xFFEA, length = 0x0002
    INT54                   : origin = 0xFFEC, length = 0x0002
    INT55                   : origin = 0xFFEE, length = 0x0002
    INT56                   : origin = 0xFFF0, length = 0x0002
    INT57                   : origin = 0xFFF2, length = 0x0002
    INT58                   : origin = 0xFFF4, length = 0x0002
    INT59                   : origin = 0xFFF6, length = 0x0002
    INT60                   : origin = 0xFFF8, length = 0x0002
    INT61                   : origin = 0xFFFA, length = 0x0002
    INT62                   : origin = 0xFFFC, length = 0x0002
    RESET                   : origin = 0xFFFE, length = 0x0002
}

/****************************************************************************/
/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY                              */
/****************************************************************************/

SECTIONS
{
    .bss        : {} > RAM                /* GLOBAL & STATIC VARS              */
    .data       : {} > RAM                /* GLOBAL & STATIC VARS              */
     .TI.noinit  : {} > RAM                  /* For #pragma noinit                */
    .sysmem     : {} > RAM                /* DYNAMIC MEMORY ALLOCATION AREA    */
    .stack      : {} > RAM (HIGH)         /* SOFTWARE SYSTEM STACK             */

	.ZAREA{
		BSL430_Low_Level_Init.obj(.ZAREA)
	}  > ZAREA
	.BSL430_VERSION_VENDOR : {} > BSL430_VERSION_VENDOR
	.BSL430_VERSION_CI     : {} > BSL430_VERSION_CI
	.BSL430_VERSION_API    : {} > BSL430_VERSION_API
	.BSL430_VERSION_PI     : {} > BSL430_VERSION_PI
	.ZAREA_CODE : {} > ZAREA_CODE
	.BSLSIG     : {} > BSLSIG
	.JTAGLOCK_KEY : {} > JTAGLOCK_KEY

    .text       : {} >> FLASH | FLASH2     /* CODE                              */
    .text:_isr  : {} > FLASH              /* ISR CODE SPACE                    */
#ifdef __LARGE_DATA_MODEL__
    .cinit      : {} > FLASH | FLASH2     /* INITIALIZATION TABLES             */
    .const      : {} > FLASH | FLASH2     /* CONSTANT DATA                     */
#else
    .cinit      : {} > FLASH              /* INITIALIZATION TABLES             */
    .const      : {} > FLASH              /* CONSTANT DATA                     */
#endif
    .cio        : {} > RAM                /* C I/O BUFFER                      */

    .pinit      : {} > FLASH              /* C++ CONSTRUCTOR TABLES            */
    .init_array : {} > FLASH              /* C++ CONSTRUCTOR TABLES            */
    .mspabi.exidx : {} > FLASH            /* C++ CONSTRUCTOR TABLES            */
    .mspabi.extab : {} > FLASH            /* C++ CONSTRUCTOR TABLES            */

    .infoA     : {} > INFOA              /* MSP430 INFO FLASH MEMORY SEGMENTS */
    .infoB     : {} > INFOB
    .infoC     : {} > INFOC
    .infoD     : {} > INFOD

    /* MSP430 INTERRUPT VECTORS          */
    .int00       : {}               > INT00
    .int01       : {}               > INT01
    .int02       : {}               > INT02
    .int03       : {}               > INT03
    .int04       : {}               > INT04
    .int05       : {}               > INT05
    .int06       : {}               > INT06
    .int07       : {}               > INT07
    .int08       : {}               > INT08
    .int09       : {}               > INT09
    .int10       : {}               > INT10
    .int11       : {}               > INT11
    .int12       : {}               > INT12
    .int13       : {}               > INT13
    .int14       : {}               > INT14
    .int15       : {}               > INT15
    .int16       : {}               > INT16
    .int17       : {}               > INT17
    .int18       : {}               > INT18
    .int19       : {}               > INT19
    .int20       : {}               > INT20
    .int21       : {}               > INT21
    .int22       : {}               > INT22
    .int23       : {}               > INT23
    .int24       : {}               > INT24
    .int25       : {}               > INT25
    .int26       : {}               > INT26
    .int27       : {}               > INT27
    .int28       : {}               > INT28
    .int29       : {}               > INT29
    .int30       : {}               > INT30
    .int31       : {}               > INT31
    .int32       : {}               > INT32
    .int33       : {}               > INT33
    .int34       : {}               > INT34
    .int35       : {}               > INT35
    .int36       : {}               > INT36
    .int37       : {}               > INT37
    .int38       : {}               > INT38
    .int39       : {}               > INT39
    .int40       : {}               > INT40
    RTC          : { * ( .int41 ) } > INT41 type = VECT_INIT
    PORT2        : { * ( .int42 ) } > INT42 type = VECT_INIT
    TIMER2_A1    : { * ( .int43 ) } > INT43 type = VECT_INIT
    TIMER2_A0    : { * ( .int44 ) } > INT44 type = VECT_INIT
    USCI_B1      : { * ( .int45 ) } > INT45 type = VECT_INIT
    USCI_A1      : { * ( .int46 ) } > INT46 type = VECT_INIT
    PORT1        : { * ( .int47 ) } > INT47 type = VECT_INIT
    TIMER1_A1    : { * ( .int48 ) } > INT48 type = VECT_INIT
    TIMER1_A0    : { * ( .int49 ) } > INT49 type = VECT_INIT
    DMA          : { * ( .int50 ) } > INT50 type = VECT_INIT
    USB_UBM      : { * ( .int51 ) } > INT51 type = VECT_INIT
    TIMER0_A1    : { * ( .int52 ) } > INT52 type = VECT_INIT
    TIMER0_A0    : { * ( .int53 ) } > INT53 type = VECT_INIT
    ADC12        : { * ( .int54 ) } > INT54 type = VECT_INIT
    USCI_B0      : { * ( .int55 ) } > INT55 type = VECT_INIT
    USCI_A0      : { * ( .int56 ) } > INT56 type = VECT_INIT
    WDT          : { * ( .int57 ) } > INT57 type = VECT_INIT
    TIMER0_B1    : { * ( .int58 ) } > INT58 type = VECT_INIT
    TIMER0_B0    : { * ( .int59 ) } > INT59 type = VECT_INIT
    COMP_B       : { * ( .int60 ) } > INT60 type = VECT_INIT
    UNMI         : { * ( .int61 ) } > INT61 type = VECT_INIT
    SYSNMI       : { * ( .int62 ) } > INT62 type = VECT_INIT
    .reset       : {}               > RESET  /* MSP430 Reset vector         */
}

/****************************************************************************/
/* INCLUDE PERIPHERALS MEMORY MAP                                           */
/****************************************************************************/

-l msp430f5529.cmd

When chaning this section in linker file : 

.ZAREA : {}  > ZAREA

To this:

.ZAREA{
      BSL430_Low_Level_Init.obj(.ZAREA)
}  > ZAREA

Linker returns following warning on line specifing input object : "#10068-D no matching section".

I dumped BSL430_Low_Level_Init.obj using dis430 and sections appear to be created correctly:

Disassembly of BSL430_Low_Level_Init.obj:

TEXT Section .ZAREA, 0x10 bytes at 0x0
000000: .ZAREA:
000000: BSL_Entry_JMP:
000000: 053C JMP (C_Branch)
000002: 8000 BRA #SYSCTL
000004: 0000
000006: FF3F JMP (SBSLSigLoc)
000008: FF3F JMP (0x0008)
00000a: FF3F JMP (BslEntryLoc)
00000c: C_Branch:
00000c: 3040 BR #SYSCTL
00000e: 0000

TEXT Section .ZAREA_CODE, 0x2E bytes at 0x0
000000: .ZAREA_CODE:
000000: BSL_ACTION0:
000000: 3D90 CMP.W #0xdead,R13
000002: ADDE
000004: 0420 JNE (RETURN_ERROR)
000006: 3E90 CMP.W #0xbeef,R14
000008: EFBE
00000a: 0120 JNE (RETURN_ERROR)
00000c: 033C JMP (RETURN_TO_BSL)
00000e: RETURN_ERROR:
00000e: 0C43 CLR.W R12
000010: 0D43 CLR.W R13
000012: 1001 RETA
000014: RETURN_TO_BSL:
000014: 3C41 POP.W R12
000016: 3D41 POP.W R13
000018: 1001 RETA
00001a: BSL_Protect:
00001a: 0C43 CLR.W R12
00001c: B2D0 BIS.W #0x8003,&SYSCTL
00001e: 0380
000020: 0000
000022: B2B0 BIT.W #0x0010,&SYSCTL
000024: 1000
000026: 0000
000028: 0124 JEQ (BCC2BSL)
00002a: 2CD3 BIS.W #2,R12
00002c: BCC2BSL:
00002c: 1001 RETA

DATA Section .BSLSIG, 0xC bytes at 0x0
000000: .BSLSIG:
000000: ffff .word 0xffff
000002: BslProtectVecLoc:
000002: 0000 .word 0x0000
000004: PBSLSigLoc:
000004: 3ca5 .word 0x3ca5
000006: SBSLSigLoc:
000006: c35a .word 0xc35a
000008: ffff .word 0xffff
00000a: BslEntryLoc:
00000a: 0000 .word 0x0000

DATA Section .JTAGLOCK_KEY, 0x4 bytes at 0x0
000000: PJTAGLOCK_KEY:
000000: .JTAGLOCK_KEY:
000000: ffff .word 0xffff
000002: SJTAGLOCK_KEY:
000002: ffff .word 0xffff

Is this problem related to project configuration? When trying to build this project for the first time, environment prompted me to change compiler version, as this used in project was outdated.

Thank you for any help or tips where to look for problem.

Tom