Defining Absolute Symbols
The following example shows how two absolute symbol
definitions can be defined. These definitions are then used
to resolve the references from the input file
main.c
.
$ cat main.c #include <stdio.h> extern int foo(); extern int bar; void main() { (void) printf("&foo = 0x%p\n", &foo); (void) printf("&bar = 0x%p\n", &bar); } $ cat mapfile $mapfile_version 2 SYMBOL_SCOPE { global: foo { TYPE=FUNCTION; VALUE=0x400 }; bar { TYPE=DATA; VALUE=0x800 }; }; $ cc -o prog -M mapfile main.c $ prog &foo = 0x400 &bar = 0x800 $ elfdump -sN.symtab prog | egrep 'foo$|bar$' [45] 0x800 0 OBJT GLOB D 0 ABS bar [69] 0x400 0 FUNC GLOB D 0 ABS foo
When obtained from an input file, symbol definitions for
functions or data items are usually associated with elements
of data storage. A mapfile
definition
is insufficient to be able to construct this data storage,
so these symbols must remain as absolute values. A simple
mapfile
definition that is
associated with a size
, but
no
value
results in the creation of data
storage. In this case, the symbol definition is accompanied
with a section index. However, a
mapfile
definition that is
accompanied with a value
results in the
creation of an absolute symbol. If a symbol is defined in a
shared object, an absolute definition should be avoided. See
Augmenting a Symbol Definition.