Wrong jump/branch-offsets with assembler startup

Jens Mehler jens.mehler@mni.thm.de
Sat Mar 16 09:52:00 GMT 2013

Am 16.03.2013 03:02, schrieb Alan Modra:
> On Fri, Mar 15, 2013 at 06:50:25PM +0100, Jens Mehler wrote:
>> Whenever I try assemble with two files let's call them start.s (that
>> handles setting the stack poiner and jumping to main) and hello.s (that
>> contains code to emit a string) the jump/branch offsets are off by one.
>> This is not the case for jumping to main, it is however everywhere
>> starting from main i.e. in main in a jump to foo this jump is off by one
>> (negative one) while the offset from start to main is spot on.
>> The problem vanishes when I put the stuff from start.s into hello.s
>> Could someone please give me a pointer on how to solve this problem?
> First examine your object files.  Are the relocations correct?  If
> not, you have an assembler problem rather than a linker problem.
The object files are correct.
I tried to reproduce the problem and as it turns out. Whenever I use GCC
to controll assembler and linker stuff gets messed up.
I was able to assembler and link the files with as and ld myself. I even
got it running in a simulator.
Now the question remains:
    What is GCC doing wrong?

More information about the Binutils mailing list