Reputation: 467
In the man page of nm
. It says
“A” The symbol's value is absolute, and will not be changed by further linking.
However, I don't know what that means. How can I define a variable or something else to make its value absolute in C?
If I declare a variable in test.c
in its file scope
int a;
Then in the output of nm
, the entry for a will be the following on my machine
0000000000000004 C a
So I'm wondering what can I do to make the nm
output “A” for a variable. And I don't know what “absolute” means.
Upvotes: 5
Views: 3991
Reputation: 726649
When C compiler compiles your program, it produces a list of symbols in addition to the binary code of your program. The most common types that you are going to see are U
s (for "undefined"), D
s and S
s (for global data), and T
s (for "text" segment, which is where the executable code goes).
A
s, or absolute (un-moveable) symbols are there to support embedded development, where placement of things at absolute addresses in memory is required. Normally you would produce such symbols only when cross-compiling for an embedded system, using C language extensions that let you specify the absolute address. A typical syntax would look like this:
unsigned char buf[128]@0x2000;
This is not a standard C, though, it's an extension for embedded systems. The code like this would produce an absolute symbol buf
set at address 0x2000
, which cannot be moved by linker.
Upvotes: 4