[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] Strange behaviour in avr-gcc 3.3 with -O3
From: |
Klaus Rudolph |
Subject: |
Re: [avr-gcc-list] Strange behaviour in avr-gcc 3.3 with -O3 |
Date: |
Fri, 23 Aug 2002 18:48:16 +0200 |
ken restivo wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Now, I'm probably on the bleeding edge here, but I needed gcc 3.3 (cvs) to
> get avr-libc to compile from cvs. So if the answer is, "hey, what'd you
> expect?", then, well, I guess I should expect that. ;-)
>
> Still, here's the problem.
>
> With -O2, everything is good.
>
> But with -O3, I get this (disassembled):
> testmut = malloc(sizeof(*testmut));
> ea: 85 e0 ldi r24, 0x05 ; 5
> ec: 90 e0 ldi r25, 0x00 ; 0
> ee: 17 d8 rcall .-4050 ; 0xfffff11e
>
> That's a lotta ffff's! And malloc() is actually in the binary at
> 0000111e <malloc>:
>
This seems not to be a bug, the program should run.
if you calc this your self:
opcode 0xd817 (rjmp->b000) -> Offset is 0x817
calculation for rjump is PC=Offset+1 in Words so
we get: (0x817+1) *2 = 0x1030
the jump comes from 0xee so you will get 0x111e
and hey that is what we want.
There is a bug in the disassembler, not in the compiler.
Bye
Klaus
avr-gcc-list at http://avr1.org