I have been using mspgcc for years and I've never seen gdb say a variable was 
optimised out, it usually displays freaky values and you should then read the 
assembly listing to work out what is going on. Even halfway through functions 
variables can go out of scope and get reused.

The bug here is probably that mspgcc is ignoring your -O0 and performing some 
optimisations anyway.

I think you will find that as soon as your program actually does something, i 
will be where you expect it to be.

- Wayne
Sent via BlackBerry from Vodafone

-----Original Message-----
From: <[email protected]>
Date: Sat, 20 Feb 2010 15:08:15 
To: GCC for MSP430 - http://mspgcc.sf.net<[email protected]>; 
N. Coesel<[email protected]>
Subject: Re: [Mspgcc-users] stack variable in flash?

 I don't think the optimizer is not removing code or variables when -O0. When 
stepping through with gdb if you try to display a variable that is optimized 
out, it notifies you by displaying <optimized out>. This is not happening.

I've tried declaring a global variable it works as expected.

The problem I'm observing is when a variable is on the stack.

The code I'm posting is for example only in trying to illustrate a problem in 
my code where the stack variables are being used but do not have the expected 
values. When stepping through with gdb, the stack variables are is flash. I 
have assert statements in my code that catch this even when not using gdb.

I can post a bigger example if that will help.

Carl


On Sat, 20 Feb 2010 23:49:57 +0100
 "N. Coesel" <[email protected]> wrote:
>Try this first:
>
>volatile int i;
>
>int main()
>{
>    while(1)
>    {
>        i++;
>    }
>}
>
>
>IMHO you are chasing a dead horse because the optimizer is removing code
>that doesn't do anything. Inside main, the scope of the variable is limited
>to main so volatile probably doesn't mean anything.
>
>
>At 14:16 20-2-2010 -0700, Carl wrote:
>>If I declare it as a global it is where I expect at the beginning of RAM
>>(0x1100). But if it is on the stack in the main function, even if I
>>declare it volatile, use asm(""); // __asm__ __volatile__ (""); or pass
>>it to a function, the variable address is in flash at 0x3102. It doesn't
>>make sense.
>>
>>Now if I use the program:
>>
>>#include <io.h>
>>
>>int f1()
>>{
>>    volatile int i = 5;
>>    i += 2;
>>    return i;
>>}
>>
>>int main()
>>{
>>    while(1)
>>    {
>>        f1();
>>    }
>>}
>>
>>The variable i address is on the stack in RAM at 0x30f8 which makes
>>sense. But if I change the compile option to use -02. Then the function
>>stack variable, i, goes back to being located in flash at 0x3102. And
>>it's value is not initialed to 5 nor is 2 added to it. The value of i is
>>constant = 12544 (0x3100.)
>>
>>I noticed at new version of mspgcc4 is out as of Feb 18, 2010. I've
>>tried to install it on both a Fedora 9 and a Ubuntu machine but get the
>>same error:
>>
>>Failed to execute sh do-gcc.sh "/opt/msp430-gcc-4.4.3" "4.4.3"
>>"http://ftp.uni-kl.de"; "build" "gcc-4.x" "4.3.1" "2.4.1"
>>at ./buildgcc.pl line 237, <STDIN> line 9.
>>
>>
>>Carl
>>
>>
>>
>>On Sat, 2010-02-20 at 09:08 +0100, N. Coesel wrote:
>>> Carl,
>>>
>>> Try to declare it outside the function (as a global).
>>>
>>> At 19:43 19-2-2010 -0800, you wrote:
>>> >I tried declaring as volatile and it is at the exact same address.
>>> >
>>> >Carl
>>> >
>>> >On Sat, 20 Feb 2010 01:35:03 +0000
>>> > "Wayne Uroda" <[email protected]> wrote:
>>> >>try declaring i as volatile, or the compiler will probably get rid of it
>>> since it has no effect or side-effect.
>>> >>Sent via BlackBerry from Vodafone
>>> >>
>>> >>-----Original Message-----
>>> >>From: Carl <[email protected]>
>>> >>Date: Fri, 19 Feb 2010 18:29:03
>>> >>To: <[email protected]>
>>> >>Subject: [Mspgcc-users] stack variable in flash?
>>> >>
>>> >>I'm sure that I'm missing some basic here but I'm not sure what. The
>>> >>first variable on the stack is in an unexpected location. I would expect
>>> >>it to be located somewhere on the stack in RAM (0x30ff-0x1100) but it is
>>> >>located in flash memory and it does not get set or incremented.
>>> >>
>>> >>
>>> >>#include <io.h>
>>> >>
>>> >>int main()
>>> >>{
>>> >>    int i=0;
>>> >>    while(1)
>>> >>        i++;
>>> >>}
>>> >>
>>> >
>>
>>
>>
>>---------------------------------------------------------------------------
>---
>>Download Intel&#174; Parallel Studio Eval
>>Try the new software tools for yourself. Speed compiling, find bugs
>>proactively, and fine-tune applications for parallel performance.
>>See why Intel Parallel Studio got high marks during beta.
>>http://p.sf.net/sfu/intel-sw-dev
>>_______________________________________________
>>Mspgcc-users mailing list
>>[email protected]
>>https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>>
>>
>
>------------------------------------------------------------------------------
>Download Intel&#174; Parallel Studio Eval
>Try the new software tools for yourself. Speed compiling, find bugs
>proactively, and fine-tune applications for parallel performance.
>See why Intel Parallel Studio got high marks during beta.
>http://p.sf.net/sfu/intel-sw-dev
>_______________________________________________
>Mspgcc-users mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/mspgcc-users


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Mspgcc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to