Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++
12604 Discussions

How to find memory location of static linked variables with equal names

Altera_Forum
Honored Contributor II
1,075 Views

Hi all, 

 

A simple example uses two static variables named "aa": 

static int told=0; ... start_endless_loop: //------------- endless loop if (alt_nticks() > told) { told = alt_nticks() + 1000; static int aa=0; if (aa < 5) { printf("%d ",aa); aa++; for (i=0; i<10; i++) { static int aa=1000; aa++; if (i==9) printf("%d\n",aa); } } } .... goto start_endless_loop; //------- endless Loop 

 

The console shows: 

 

 

--- Quote Start ---  

0 1010 

1 1020 

2 1030 

3 1040 

4 1050 

--- Quote End ---  

 

 

To resolve the adresses of the two "aa"s in the symbol table I used 

the Nios Command Shell with the command "readelf -s" : 

 

 

--- Quote Start ---  

... 

122: 002167a0 4 OBJECT LOCAL DEFAULT 6 aa.5198 

... 

132: 002166f0 4 OBJECT LOCAL DEFAULT 5 aa.5199 

... 

 

--- Quote End ---  

 

It shows that the compiler has generated different variables for each "aa" 

The memory shows:  

 

 

--- Quote Start ---  

0x002167a0: 5 

0x002166f0: 1050 

 

--- Quote End ---  

 

The question is: 

 

How does the compiler/linker generate the internal variables "aa.5198" and "aa.5199" 

and how can I get the location of the variables in the source code from the compiler-added numbers? 

 

 

Kind regards
0 Kudos
3 Replies
Altera_Forum
Honored Contributor II
380 Views

As far as I know, you can't. The numbers are added so that the linker can have unique names to work with. They might change across compiles too. If you want to know the locations, use different names for each variable.

0 Kudos
Altera_Forum
Honored Contributor II
380 Views

 

--- Quote Start ---  

As far as I know, you can't. The numbers are added so that the linker can have unique names to work with. They might change across compiles too. If you want to know the locations, use different names for each variable. 

--- Quote End ---  

 

As far as I understood, the compiler adds the numbers, when producing the .o file. 

 

In this file I found the variables with added numbers but without any hint where the compiler found the declarations. So there might exist an compiler option to output the location of the variable declaration in sourcecode or maybe in preprocessor-generated code. In the latter case I would need an access to the code the preprocessor generates....
0 Kudos
Altera_Forum
Honored Contributor II
380 Views

The best solution is 'don't do it'. 

Reusing a variable name in an inner scope is a very good way to introduce subtle bugs into your code.
0 Kudos
Reply