Got the 'blinking led' working on the 5529... tried to test the thing 
with the large model (-mlarge to every msp430-elf-gcc invocation).

Well, nothing happened. It hangs before main. Exactly in frame_dummy, from
crtbegin.o (built from the mess in libgcc/crtstuff.c). I dumped the files from
the compiler build (found in lib/gcc/msp430-elf/4.9.0/430x/large) so it
shouldn't be something from my test program...

The source code has this fragment:

  if (__register_frame_info)
    __register_frame_info (__EH_FRAME_BEGIN__, &object);

In small model the object code is like this:

0000009e <frame_dummy>:
  9e:   3e 40 00 00     mov     #0,     r14     ;
                        a0: R_MSP430_16_BYTE    __register_frame_info
  a2:   0e 93           cmp     #0,     r14     ;r3 As==00
  a4:   00 24           jz      $+2             ;abs 0xa6
                        a4: R_MSP430_10_PCREL   .L32
  a6:   3c 40 00 00     mov     #0,     r12     ;
                        a8: R_MSP430_16_BYTE    .eh_frame
  aa:   3d 40 00 00     mov     #0,     r13     ;
                        ac: R_MSP430_16_BYTE    .bss+0x4
  ae:   8e 12           call    r14             ;

000000b0 <.L32>:

__register_frame_info is a weak external, which is undefined, so the linker
'locates' it to 0. The result is

00004524 <frame_dummy>:
    4524:       3e 40 00 00     mov     #0,     r14     ; <<< HERE IS LOCATED
    4528:       0e 93           cmp     #0,     r14     ;r3 As==00
    452a:       05 24           jz      $+12            ;abs 0x4536
    452c:       3c 40 04 44     mov     #17412, r12     ;#0x4404
    4530:       3d 40 82 24     mov     #9346,  r13     ;#0x2482
    4534:       8e 12           call    r14             ;

00004536 <.L32>:

Here zero is obviously zero, so the call is skipped (as intended:D)

When linking the large model crtbegin.o, the generated code is really different:

0000015e <frame_dummy>:
 15e:   8c 00 00 00     mova    #0,     r12     ;
                        15e: R_MSP430X_ABS20_ADR_SRC    .eh_frame
 162:   8d 00 00 00     mova    #0,     r13     ;
                        162: R_MSP430X_ABS20_ADR_SRC    .bss+0x6
 166:   b0 13 00 00     calla   #0              ;0x00000
                        166: R_MSP430X_ABS20_ADR_DST    __register_frame_info

Where is the condition check? Obviously after location the result is this:

000045fe <frame_dummy>:                                                         
            
    45fe:       8c 00 08 44     mova    #17416, r12     ;0x04408
    4602:       8d 00 f2 24     mova    #9458,  r13     ;0x024f2
    4606:       b0 13 00 00     calla   #0              ;0x00000 << HERE IS 
LOCATED

That calla #0 doesn't seem very legal to me...

So... is this expected, it's a known bug or needs to be reported? (and where) I
know that 20-bit support is beta (I built it from trunk...) so I'm not worrying
too much.

Suggestions appreciated

-- 
Lorenzo Marcantonio
Logos Srl

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to