Hi Kees,

> I noticed that _after linking_ the jump offsets are correctly
> calculated and placed...........
>
> Any clue?

In a word: relocations.

Try disassembling your object file with "-dr" specified.  You should see 
something like this:

00000000 <intern1>:
    0:   1f 43           mov     #1,     r15     ;r3 As==01
    2:   1e 83           dec     r14             ;
    4:   00 24           jz      $+2             ;abs 0x6
                         4: R_MSP430X_10_PCREL   lab1
    6:   03 43           nop
    8:   00 3c           jmp     $+2             ;abs 0xa
                         8: R_MSP430X_10_PCREL   lab2

What this means is that the JZ instruction at offset 4 and the JMP 
instruction at offset 8 both have unresolved relocations against them. 
At link time the linker will resolve the relocations and store the 
correct values into the instructions.

The reason why the assembler generates these relocations, rather than 
just resolving the jumps directly is because the linker also performs 
"relaxations" where it can replace some instructions with shorter 
versions.  So it is possible that the distance between a jump 
instruction and its destination label will change at link time.  Hence 
the assembler cannot know for sure exactly what value to put into the 
offset field, and hence it must use a relocation instead.

Cheers
   Nick


------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to