In the map entries you provide the bss start is word-aligned and has a
value of 0x029e, as it's supposed to have.  There's that one-byte static
that's placed at 0x029e.  Then there's a fill byte at 0x029f so the common
section is aligned.  The length of the BSS section happens to include the
fill, so the unused byte at the end of the section is unnecessarily
zeroed.  Is that what you're worried about?

I'm not seeing where there's a bug here.  There's an infelicity, in that
the bss section is zeroed one byte at a time while the values for start and
size would permit it to be zeroed one word at a time, but I can't work up
much concern about that since it doesn't clobber any data.

At any rate, getting excerpts from map files without context or source
doesn't seem to be working.  If you think there's a bug create a complete
and minimal reproducing test case and add it as a tracker ticket on the SF
project along with a description of exactly what you see, how you got what
you see, and why you think it's wrong.  Include any custom linker scripts
you might be using.

Peter

On Fri, Feb 22, 2013 at 12:20 PM, Robert Henig <rhe...@redwoodsys.com>wrote:

> I think I understand what is going on with this and I think there is a bug
> in the linker. I will try to create a small example program with this
> problem to submit when I get a chance but will describe it here.
>
> In the file fixture_wall_switch.c there is a function that declares a
> local static unit8_t. The linker reserves space for this in bss. That is
> why there is a one byte allocation for the file as shown below with no
> associated symbol. __bss_size includes this bytes. However, the PROVIDE for
> __bss_start happens after the value of . is incremented for the local
> static variable in the file. This causes the byte after the .bss section to
> get incorrectly zeroed.
>
> The .bss section from the map file is below.
>
> Bob.
>
> .bss            0x0000029e      0x11c load address 0x0000dec4
>                 0x0000029e                PROVIDE (__bss_start, .)
>  *(.bss .bss.*)
>  .bss           0x0000029e        0x0
> /usr/local/lib/gcc/msp430/4.6.3/crt0ivtbl16.o
>  .bss           0x0000029e        0x0 src/cmd_proc.o
>  .bss           0x0000029e        0x0 src/diagnostics.o
>  .bss           0x0000029e        0x0 src/direct_input_handler.o
>  .bss           0x0000029e        0x0 src/escape_seq.o
>  .bss           0x0000029e        0x1 src/fixture_wall_switch.o
>  .bss           0x0000029f        0x0 src/i2c.o
>  .bss           0x0000029f        0x0 src/isr-common.o
>  .bss           0x0000029f        0x0 src/isr-g2.o
>  .bss           0x0000029f        0x0 src/powercoms.o
>  .bss           0x0000029f        0x0 src/rx_frame_fsm.o
>  .bss           0x0000029f        0x0 src/tx_frame_fsm.o
>  .bss           0x0000029f        0x0 src/utils.o
>  .bss           0x0000029f        0x0 src/SingleChannel.o
>  .bss           0x0000029f        0x0 src/NonOffModeDevice.o
>  .bss           0x0000029f        0x0 src/noMotion.o
>  .bss           0x0000029f        0x0 src/SceneController.o
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libgcc.a(_mulqi3.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(_reset_vector__.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(__watchdog_support.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(__init_stack.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(__low_level_init.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(_copy_data.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(_clear_bss.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(__stop_progExec__.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(_endless_loop__.o)
>  .bss           0x0000029f        0x0
> /usr/local/lib/gcc/msp430/4.6.3/libcrt0.a(_unexpected_.o)
>  *(COMMON)
>  *fill*         0x0000029f        0x1 00
>  COMMON         0x000002a0        0x5 src/cmd_proc.o
>                 0x000002a0                gCmdProcTxMaxRetry
>                 0x000002a2                gCmdProcFixtureDiscRateLimit
>                 0x000002a4                gCmdProcReplyMsgBuffer
>  *fill*         0x000002a5        0x1 00
>  COMMON         0x000002a6       0x16 src/diagnostics.o
>                 0x000002a6                gDiagnosticsReplyMsgBuffer
>                 0x000002a8                gDiagnosticsDispatchActive
>                 0x000002aa                gSlaDiagsCrcFsm
>                 0x000002b4                gSlaDiagsI2cFsm
>  COMMON         0x000002bc        0xd src/escape_seq.o
>                 0x000002bc                gEscapeWordTxBuffer
>                 0x000002c2                gEscSeqIntAckBitList
>                 0x000002c4                gEscSeqIntAckBitListII
>                 0x000002c6                gEmptyIndex
>                 0x000002c7                gCurrentWordIndex
>                 0x000002c8                gTxBufferEmpty
>  *fill*         0x000002c9        0x1 00
>  COMMON         0x000002ca        0x4 src/isr-common.o
>                 0x000002ca                gSecondsCounter
>                 0x000002cc                gJiffiesCounter
>  COMMON         0x000002ce       0x40 src/powercoms.o
>                 0x000002ce                gBoardVer
>                 0x000002d0                gTaskBitList
>                 0x000002d2                gSlaCommsMode
>                 0x000002da                gBoardId
>                 0x000002dc                gSlaRxWordComms
>                 0x000002e4                gSlaCommsCal
>                 0x000002f8                gTimers
>                 0x00000304                gSlaTxWordComms
>  COMMON         0x0000030e       0x1c src/rx_frame_fsm.o
>                 0x0000030e                gWordTimeoutFlag
>                 0x00000310                gRxFrameStateDispatchError
>                 0x00000312                gRxFrameEventDispatchError
>                 0x00000314                gSlaRxFrame
>  COMMON         0x0000032a       0x58 src/tx_frame_fsm.o
>                 0x0000032a                gTxFrameStateDispatchError
>                 0x0000032c                gTxFrameEventDispatchError
>                 0x0000032e                gSlaTxFrame
>                 0x0000033a                gTxFrameFsmBusy
>                 0x0000033c                gTxReplyMsgBuffer
>                 0x0000033e                wc
>                 0x00000340                gSlaTxMsgBuffer
>  COMMON         0x00000382       0x37 src/SceneController.o
>                 0x00000382                gHybridPid
>                 0x00000384                gSystemHealthAlert
>                 0x00000385                gFluorescentFixture
>                 0x00000386                gSwitch
>                 0x000003a6                escapeWordTimers
>                 0x000003b8                gSystemHealthMonitor
>                 0x000003ba                . = ALIGN (0x2)
>  *fill*         0x000003b9        0x1 00
>                 0x000003ba                PROVIDE (__bss_end, .)
>                 0x0000011c                PROVIDE (__bss_size, SIZEOF
> (.bss))
>
> On Feb 21, 2013, at 1:29 PM, Peter Bigot <big...@acm.org> wrote:
>
> In the standard linker script __bss_start gets the value of . at the start
> of .bss, which immediately follows .data.  .data ends with a 2-byte
> alignment instruction.  I don't see how __bss_start would end up at an odd
> address in that situation.
>
> Peter
>
> On Thu, Feb 21, 2013 at 1:56 PM, Robert Henig <rhe...@redwoodsys.com>wrote:
>
>> It looks like the bss init loop is starting one byte ahead of where it
>> should. I suspect the problem is from the "src/fixture_wall_switch.o" entry
>> in the map file shown below.
>>
>>  .bss           0x0000029e        0x0 src/escape_seq.o
>>  .bss           0x0000029e        0x1 src/fixture_wall_switch.o
>>  .bss           0x0000029f        0x0 src/i2c.o
>>
>> Later I get:
>>
>>                 0x0000029f                PROVIDE (__bss_start, .)
>>
>> But __bss_start should be 0x0000029e.
>>
>> The net result is that the first byte in .data is zero instead of its
>> correct initialized value.
>>
>> I confirmed that __bss_start is 0x029f and __bss_size is correct in the
>> debugger.
>>
>> Why would "src/fixture_wall_switch.o" be allocated one byte but not show
>> any symbol for that allocation?
>>
>> Any help? I can provide more details but I think this is the crux of the
>> situation.
>>
>> Thanks,
>> Bob.
>>
>> ------------------------------------------------------------------------------
>> Everyone hates slow websites. So do we.
>> Make your web apps faster with AppDynamics
>> Download AppDynamics Lite for free today:
>> http://p.sf.net/sfu/appdyn_d2d_feb
>> _______________________________________________
>> Mspgcc-users mailing list
>> Mspgcc-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>>
>
>
>
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to