Hi!

To answer the question for myself. :)

The bug is in the gputils package. (I have recently upgraded to latest
svn version:573.)
The linker (gplink) somehow doubles the address of a referenced label.

To be on the safe side, I prefer using svn version 571. This is the
latest, which is not affected by this bug.

Theblond


Theblond írta:
> Hi!
> 
> I have earlier made a project for a pic16f690 micro controller and two
> days ago, I had to add some new features to it. Usually this is not a
> problem. But my friend, who use the electronics reported that the new is
> not working anymore. I made several recompile and sent them, but all failed.
> 
> I use linux box for almost everything (coding + svn), and a virtual
> WinXP to check the sw with MPLAB.
> Whenever I recompile the project under WinXP, it works perfectly, but if
> I compile it under linux there are differences in the generated hex
> file, and it fails.
> The project contains several source files and compiled with makefile,
> the c files are compiled to asm with sdcc and then with gpasm; finally
> all object files linked with gplink.
> 
> I use local tools:
> SDCC : pic16/pic14 2.9.7 #5873 (Jul 10 2010) (Linux)
> gpasm-0.13.7 beta
> 
> I figured out, that the problem might be at switch statements. The
> address to the goto field is somehow multiplied by two. Thus the
> generated code points to somewhere else.
> E.g. the address of label _00113_DS_ is not 0x00e5 but 0x01ca (= 2 *
> 0x00e5)!
> See the code snippet below.
> 
> It seems that sdcc compiles well(?), but I don't know how to check the
> object files against this to be sure.
> 
> Can somebody offer me a solution? Nobody meet this?
> 
> I have attached a small code with that produces this.
> 
> Theblond
> 
> 
> Code snippet from switch.lst:
> 
>                                            ;  .line   11; "switch.c"  
> switch(a)
> 0000da   3001     movlw       0x1                     MOVLW   HIGH(_00113_DS_)
> 0000db   008a     movwf       0xa                     MOVWF   PCLATH
> 0000dc   30ca     movlw       0xca                    MOVLW   _00113_DS_
> 0000dd   1283     bcf 0x3, 0x5                BANKSEL _a
> 0000de   1303     bcf 0x3, 0x6
> 0000df   072c     addwf       0x2c, w                 ADDWF   _a,W
> 0000e0   1803     btfsc       0x3, 0                  BTFSC   STATUS,0
> 0000e1   0a8a     incf        0xa, f                  INCF    PCLATH,F
> 0000e2   1283     bcf 0x3, 0x5                BANKSEL PCL
> 0000e3   1303     bcf 0x3, 0x6
> 0000e4   0082     movwf       0x2                     MOVWF   PCL
>                                            _00113_DS_
> 0000e5   28e9     goto        0xe9                    GOTO    _00105_DS_
> 0000e6   28ed     goto        0xed                    GOTO    _00106_DS_
> 0000e7   28f1     goto        0xf1                    GOTO    _00107_DS_
> 0000e8   28f5     goto        0xf5                    GOTO    _00108_DS_
> 
> 
> ------------------------------------------------------------------------
> 
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Sdcc-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/sdcc-user


------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Sdcc-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to