Hi Jim,
that seems to be a promising solution.
If I keep the prefix "_" for a global variable , there is a problem in accessing it in gdb...let me explain you with an example

Eg: file1.c
int a = 10;
int main()
{
int b =10;
int c;
c = add( a , b);
return 0;
}

file2.c

int add( int x, int y)
{
return x+y ;
}

> mycompiler-gcc -g file1.c file2.c
> mycompiler-gdb a.out
 >> when i print "a" in file1.c , i am able to see value 10;
>> when i print "a" int file2.c, it prints , no symbol defined. Instead I can access it with " print _a"

Thats the problem; guess i am clear this time.

prefixing registers is out of scope for me , as people got used to register names r0, r1......

Regards,
Sumanth G

Jim Wilson wrote:
On Mon, 2009-08-03 at 09:44 +0530, sumanth wrote:
How can i make sure my tool chain knows the difference between global variable r0 and register r0.

The simple solution is to either add a prefix to variable names, or to
add a prefix to register names.  In ELF, the convention is to not add a
prefix to variables names, we add a prefix to register names instead if
we need one, e.g. %eax on i386, or $4 on mips.

You can of course choose to add a prefix to variable names.  It just
isn't the convention.  See for instance how the arm-elf port works when
you use the -fleading-underscore option.

A less simple solution is to have an assembler syntax that avoids
ambiguity between register names and variable names.  If for instance
you have a move instruction that can accept either a register or a
variable as source, then you have an ambiguity.  You could instead have
a load instruction for reading memory, and a move instruction for
reading registers, and then you don't have an ambiguity anymore.  You
can also do things with addressing modes and relocation operators to
reduce ambiguities.

Jim






Reply via email to