libyasm
|
YASM symbol table interface. More...
Go to the source code of this file.
Typedefs | |
typedef enum yasm_sym_status | yasm_sym_status |
Symbol status. More... | |
typedef enum yasm_sym_vis | yasm_sym_vis |
Symbol record visibility. More... | |
typedef int(* | yasm_symtab_traverse_callback )(yasm_symrec *sym, void *d) |
Callback function for yasm_symrec_traverse(). More... | |
typedef struct yasm_symtab_iter | yasm_symtab_iter |
Symbol table iterator (opaque type). More... | |
typedef yasm_bytecode * | yasm_symrec_get_label_bytecodep |
Dependent pointer to a bytecode. More... | |
Enumerations | |
enum | yasm_sym_status { YASM_SYM_NOSTATUS = 0, YASM_SYM_USED = 1 << 0, YASM_SYM_DEFINED = 1 << 1, YASM_SYM_VALUED = 1 << 2, YASM_SYM_NOTINTABLE = 1 << 3 } |
Symbol status. More... | |
enum | yasm_sym_vis { YASM_SYM_LOCAL = 0, YASM_SYM_GLOBAL = 1 << 0, YASM_SYM_COMMON = 1 << 1, YASM_SYM_EXTERN = 1 << 2, YASM_SYM_DLOCAL = 1 << 3 } |
Symbol record visibility. More... | |
Functions | |
YASM_LIB_DECL yasm_symtab * | yasm_symtab_create (void) |
Create a new symbol table. More... | |
YASM_LIB_DECL void | yasm_symtab_destroy (yasm_symtab *symtab) |
Destroy a symbol table and all internal symbols. More... | |
YASM_LIB_DECL void | yasm_symtab_set_case_sensitive (yasm_symtab *symtab, int sensitive) |
Set the symbol table to be case sensitive or not. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_abs_sym (yasm_symtab *symtab) |
Get a reference to the symbol table's "absolute" symbol. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_use (yasm_symtab *symtab, const char *name, unsigned long line) |
Get a reference to (use) a symbol. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_get (yasm_symtab *symtab, const char *name) |
Get a reference to a symbol, without "using" it. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_equ (yasm_symtab *symtab, const char *name, yasm_expr *e, unsigned long line) |
Define a symbol as an EQU value. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_label (yasm_symtab *symtab, const char *name, yasm_bytecode *precbc, int in_table, unsigned long line) |
Define a symbol as a label. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_curpos (yasm_symtab *symtab, const char *name, yasm_bytecode *precbc, unsigned long line) |
Define a symbol as a label representing the current assembly position. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_special (yasm_symtab *symtab, const char *name, yasm_sym_vis vis) |
Define a special symbol that will appear in the symbol table and have a defined name, but have no other data associated with it within the standard symrec. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_declare (yasm_symtab *symtab, const char *name, yasm_sym_vis vis, unsigned long line) |
Declare external visibility of a symbol. More... | |
YASM_LIB_DECL void | yasm_symrec_declare (yasm_symrec *symrec, yasm_sym_vis vis, unsigned long line) |
Declare external visibility of a symbol. More... | |
YASM_LIB_DECL int | yasm_symtab_traverse (yasm_symtab *symtab, void *d, yasm_symtab_traverse_callback func) |
Traverse all symbols in the symbol table. More... | |
YASM_LIB_DECL const yasm_symtab_iter * | yasm_symtab_first (const yasm_symtab *symtab) |
Get an iterator pointing to the first symbol in the symbol table. More... | |
YASM_LIB_DECL const yasm_symtab_iter * | yasm_symtab_next (const yasm_symtab_iter *prev) |
Move a symbol table iterator to the next symbol in the symbol table. More... | |
YASM_LIB_DECL yasm_symrec * | yasm_symtab_iter_value (const yasm_symtab_iter *cur) |
Get the symbol corresponding to the current symbol table iterator value. More... | |
YASM_LIB_DECL void | yasm_symtab_parser_finalize (yasm_symtab *symtab, int undef_extern, yasm_errwarns *errwarns) |
Finalize symbol table after parsing stage. More... | |
YASM_LIB_DECL void | yasm_symtab_print (yasm_symtab *symtab, FILE *f, int indent_level) |
Print the symbol table. More... | |
YASM_LIB_DECL const char * | yasm_symrec_get_name (const yasm_symrec *sym) |
Get the name of a symbol. More... | |
YASM_LIB_DECL char * | yasm_symrec_get_global_name (const yasm_symrec *sym, const yasm_object *object) |
Get the externally-visible (global) name of a symbol. More... | |
YASM_LIB_DECL yasm_sym_vis | yasm_symrec_get_visibility (const yasm_symrec *sym) |
Get the visibility of a symbol. More... | |
YASM_LIB_DECL yasm_sym_status | yasm_symrec_get_status (const yasm_symrec *sym) |
Get the status of a symbol. More... | |
YASM_LIB_DECL unsigned long | yasm_symrec_get_def_line (const yasm_symrec *sym) |
Get the virtual line of where a symbol was first defined. More... | |
YASM_LIB_DECL unsigned long | yasm_symrec_get_decl_line (const yasm_symrec *sym) |
Get the virtual line of where a symbol was first declared. More... | |
YASM_LIB_DECL unsigned long | yasm_symrec_get_use_line (const yasm_symrec *sym) |
Get the virtual line of where a symbol was first used. More... | |
YASM_LIB_DECL const yasm_expr * | yasm_symrec_get_equ (const yasm_symrec *sym) |
Get EQU value of a symbol. More... | |
YASM_LIB_DECL int | yasm_symrec_get_label (const yasm_symrec *sym, yasm_symrec_get_label_bytecodep *precbc) |
Get the label location of a symbol. More... | |
YASM_LIB_DECL void | yasm_symrec_set_size (yasm_symrec *sym, int size) |
Set the size of a symbol. More... | |
YASM_LIB_DECL int | yasm_symrec_get_size (const yasm_symrec *sym) |
Get the size of a symbol. More... | |
YASM_LIB_DECL void | yasm_symrec_set_segment (yasm_symrec *sym, const char *segment) |
Set the segment of a symbol. More... | |
YASM_LIB_DECL const char * | yasm_symrec_get_segment (const yasm_symrec *sym) |
Get the segment of a symbol. More... | |
YASM_LIB_DECL int | yasm_symrec_is_abs (const yasm_symrec *sym) |
Determine if symbol is the "absolute" symbol created by yasm_symtab_abs_sym(). More... | |
YASM_LIB_DECL int | yasm_symrec_is_special (const yasm_symrec *sym) |
Determine if symbol is a special symbol. More... | |
YASM_LIB_DECL int | yasm_symrec_is_curpos (const yasm_symrec *sym) |
Determine if symbol is a label representing the current assembly position. More... | |
YASM_LIB_DECL void | yasm_symrec_set_objext_valparams (yasm_symrec *sym, yasm_valparamhead *objext_valparams) |
Set object-extended valparams. More... | |
YASM_LIB_DECL yasm_valparamhead * | yasm_symrec_get_objext_valparams (yasm_symrec *sym) |
Get object-extended valparams, if any, associated with symbol's declaration. More... | |
YASM_LIB_DECL void | yasm_symrec_set_common_size (yasm_symrec *sym, yasm_expr *common_size) |
Set common size of symbol. More... | |
YASM_LIB_DECL yasm_expr ** | yasm_symrec_get_common_size (yasm_symrec *sym) |
Get common size of symbol, if symbol is declared COMMON and a size was set for it. More... | |
YASM_LIB_DECL void * | yasm_symrec_get_data (yasm_symrec *sym, const yasm_assoc_data_callback *callback) |
Get associated data for a symbol and data callback. More... | |
YASM_LIB_DECL void | yasm_symrec_add_data (yasm_symrec *sym, const yasm_assoc_data_callback *callback, void *data) |
Add associated data to a symbol. More... | |
YASM_LIB_DECL void | yasm_symrec_print (const yasm_symrec *sym, FILE *f, int indent_level) |
Print a symbol. More... | |
YASM symbol table interface.
Definition in file symrec.h.
typedef enum yasm_sym_status yasm_sym_status |
Symbol status.
YASM_SYM_DEFINED is set by yasm_symtab_define_label(), yasm_symtab_define_equ(), or yasm_symtab_declare()/yasm_symrec_declare() with a visibility of YASM_SYM_EXTERN or YASM_SYM_COMMON.
typedef enum yasm_sym_vis yasm_sym_vis |
Symbol record visibility.
typedef struct yasm_symtab_iter yasm_symtab_iter |
typedef int(* yasm_symtab_traverse_callback)(yasm_symrec *sym,void *d) |
enum yasm_sym_status |
Symbol status.
YASM_SYM_DEFINED is set by yasm_symtab_define_label(), yasm_symtab_define_equ(), or yasm_symtab_declare()/yasm_symrec_declare() with a visibility of YASM_SYM_EXTERN or YASM_SYM_COMMON.
enum yasm_sym_vis |
Symbol record visibility.
YASM_LIB_DECL void yasm_symrec_add_data | ( | yasm_symrec * | sym, |
const yasm_assoc_data_callback * | callback, | ||
void * | data | ||
) |
Add associated data to a symbol.
sym | symbol |
callback | callback |
data | data to associate |
YASM_LIB_DECL void yasm_symrec_declare | ( | yasm_symrec * | symrec, |
yasm_sym_vis | vis, | ||
unsigned long | line | ||
) |
Declare external visibility of a symbol.
symrec | symbol |
vis | visibility |
line | virtual line of visibility-setting |
YASM_LIB_DECL yasm_expr** yasm_symrec_get_common_size | ( | yasm_symrec * | sym | ) |
Get common size of symbol, if symbol is declared COMMON and a size was set for it.
sym | symbol |
YASM_LIB_DECL void* yasm_symrec_get_data | ( | yasm_symrec * | sym, |
const yasm_assoc_data_callback * | callback | ||
) |
Get associated data for a symbol and data callback.
sym | symbol |
callback | callback used when adding data |
YASM_LIB_DECL unsigned long yasm_symrec_get_decl_line | ( | const yasm_symrec * | sym | ) |
Get the virtual line of where a symbol was first declared.
sym | symbol |
YASM_LIB_DECL unsigned long yasm_symrec_get_def_line | ( | const yasm_symrec * | sym | ) |
Get the virtual line of where a symbol was first defined.
sym | symbol |
YASM_LIB_DECL const yasm_expr* yasm_symrec_get_equ | ( | const yasm_symrec * | sym | ) |
Get EQU value of a symbol.
sym | symbol |
YASM_LIB_DECL char* yasm_symrec_get_global_name | ( | const yasm_symrec * | sym, |
const yasm_object * | object | ||
) |
Get the externally-visible (global) name of a symbol.
sym | symbol |
object | object |
YASM_LIB_DECL int yasm_symrec_get_label | ( | const yasm_symrec * | sym, |
yasm_symrec_get_label_bytecodep * | precbc | ||
) |
Get the label location of a symbol.
sym | symbol |
precbc | bytecode preceding label (output) |
YASM_LIB_DECL const char* yasm_symrec_get_name | ( | const yasm_symrec * | sym | ) |
Get the name of a symbol.
sym | symbol |
YASM_LIB_DECL yasm_valparamhead* yasm_symrec_get_objext_valparams | ( | yasm_symrec * | sym | ) |
Get object-extended valparams, if any, associated with symbol's declaration.
sym | symbol |
YASM_LIB_DECL const char* yasm_symrec_get_segment | ( | const yasm_symrec * | sym | ) |
Get the segment of a symbol.
sym | symbol |
YASM_LIB_DECL int yasm_symrec_get_size | ( | const yasm_symrec * | sym | ) |
Get the size of a symbol.
sym | symbol |
YASM_LIB_DECL yasm_sym_status yasm_symrec_get_status | ( | const yasm_symrec * | sym | ) |
Get the status of a symbol.
sym | symbol |
YASM_LIB_DECL unsigned long yasm_symrec_get_use_line | ( | const yasm_symrec * | sym | ) |
Get the virtual line of where a symbol was first used.
sym | symbol |
YASM_LIB_DECL yasm_sym_vis yasm_symrec_get_visibility | ( | const yasm_symrec * | sym | ) |
Get the visibility of a symbol.
sym | symbol |
YASM_LIB_DECL int yasm_symrec_is_abs | ( | const yasm_symrec * | sym | ) |
Determine if symbol is the "absolute" symbol created by yasm_symtab_abs_sym().
sym | symbol |
YASM_LIB_DECL int yasm_symrec_is_curpos | ( | const yasm_symrec * | sym | ) |
Determine if symbol is a label representing the current assembly position.
sym | symbol |
YASM_LIB_DECL int yasm_symrec_is_special | ( | const yasm_symrec * | sym | ) |
Determine if symbol is a special symbol.
sym | symbol |
YASM_LIB_DECL void yasm_symrec_print | ( | const yasm_symrec * | sym, |
FILE * | f, | ||
int | indent_level | ||
) |
Print a symbol.
For debugging purposes.
f | file |
indent_level | indentation level |
sym | symbol |
YASM_LIB_DECL void yasm_symrec_set_common_size | ( | yasm_symrec * | sym, |
yasm_expr * | common_size | ||
) |
Set common size of symbol.
sym | symbol |
common_size | common size expression |
YASM_LIB_DECL void yasm_symrec_set_objext_valparams | ( | yasm_symrec * | sym, |
yasm_valparamhead * | objext_valparams | ||
) |
Set object-extended valparams.
sym | symbol |
objext_valparams | object-extended valparams |
YASM_LIB_DECL void yasm_symrec_set_segment | ( | yasm_symrec * | sym, |
const char * | segment | ||
) |
Set the segment of a symbol.
sym | symbol |
segment | segment to be set |
YASM_LIB_DECL void yasm_symrec_set_size | ( | yasm_symrec * | sym, |
int | size | ||
) |
Set the size of a symbol.
sym | symbol |
size | size to be set |
YASM_LIB_DECL yasm_symrec* yasm_symtab_abs_sym | ( | yasm_symtab * | symtab | ) |
Get a reference to the symbol table's "absolute" symbol.
This is essentially an EQU with no name and value 0, and is used for relocating absolute current-position-relative values.
symtab | symbol table |
YASM_LIB_DECL yasm_symtab* yasm_symtab_create | ( | void | ) |
Create a new symbol table.
YASM_LIB_DECL yasm_symrec* yasm_symtab_declare | ( | yasm_symtab * | symtab, |
const char * | name, | ||
yasm_sym_vis | vis, | ||
unsigned long | line | ||
) |
Declare external visibility of a symbol.
symtab | symbol table |
name | symbol name |
vis | visibility |
line | virtual line of visibility-setting |
YASM_LIB_DECL yasm_symrec* yasm_symtab_define_curpos | ( | yasm_symtab * | symtab, |
const char * | name, | ||
yasm_bytecode * | precbc, | ||
unsigned long | line | ||
) |
Define a symbol as a label representing the current assembly position.
This should be used for this purpose instead of yasm_symtab_define_label() as value_finalize_scan() looks for usage of this symbol type for special handling. The symbol created is not inserted into the symbol table.
symtab | symbol table |
name | symbol (label) name |
precbc | bytecode preceding label |
line | virtual line of label |
YASM_LIB_DECL yasm_symrec* yasm_symtab_define_equ | ( | yasm_symtab * | symtab, |
const char * | name, | ||
yasm_expr * | e, | ||
unsigned long | line | ||
) |
Define a symbol as an EQU value.
symtab | symbol table |
name | symbol (EQU) name |
e | EQU value (expression) |
line | virtual line of EQU |
YASM_LIB_DECL yasm_symrec* yasm_symtab_define_label | ( | yasm_symtab * | symtab, |
const char * | name, | ||
yasm_bytecode * | precbc, | ||
int | in_table, | ||
unsigned long | line | ||
) |
Define a symbol as a label.
symtab | symbol table |
name | symbol (label) name |
precbc | bytecode preceding label |
in_table | nonzero if the label should be inserted into the symbol table (some specially-generated ones should not be) |
line | virtual line of label |
YASM_LIB_DECL yasm_symrec* yasm_symtab_define_special | ( | yasm_symtab * | symtab, |
const char * | name, | ||
yasm_sym_vis | vis | ||
) |
Define a special symbol that will appear in the symbol table and have a defined name, but have no other data associated with it within the standard symrec.
symtab | symbol table |
name | symbol name |
vis | symbol visibility |
YASM_LIB_DECL void yasm_symtab_destroy | ( | yasm_symtab * | symtab | ) |
Destroy a symbol table and all internal symbols.
symtab | symbol table |
YASM_LIB_DECL const yasm_symtab_iter* yasm_symtab_first | ( | const yasm_symtab * | symtab | ) |
Get an iterator pointing to the first symbol in the symbol table.
symtab | symbol table |
YASM_LIB_DECL yasm_symrec* yasm_symtab_get | ( | yasm_symtab * | symtab, |
const char * | name | ||
) |
Get a reference to a symbol, without "using" it.
Should be used for cases when an internal assembler usage of a symbol shouldn't be treated like a normal user symbol usage.
symtab | symbol table |
name | symbol name |
YASM_LIB_DECL yasm_symrec* yasm_symtab_iter_value | ( | const yasm_symtab_iter * | cur | ) |
Get the symbol corresponding to the current symbol table iterator value.
cur | iterator value |
YASM_LIB_DECL const yasm_symtab_iter* yasm_symtab_next | ( | const yasm_symtab_iter * | prev | ) |
Move a symbol table iterator to the next symbol in the symbol table.
prev | Previous iterator value |
YASM_LIB_DECL void yasm_symtab_parser_finalize | ( | yasm_symtab * | symtab, |
int | undef_extern, | ||
yasm_errwarns * | errwarns | ||
) |
Finalize symbol table after parsing stage.
Checks for symbols that are used but never defined or declared YASM_SYM_EXTERN or YASM_SYM_COMMON.
symtab | symbol table |
undef_extern | if nonzero, all undef syms should be declared extern |
errwarns | error/warning set |
YASM_LIB_DECL void yasm_symtab_print | ( | yasm_symtab * | symtab, |
FILE * | f, | ||
int | indent_level | ||
) |
Print the symbol table.
For debugging purposes.
symtab | symbol table |
f | file |
indent_level | indentation level |
YASM_LIB_DECL void yasm_symtab_set_case_sensitive | ( | yasm_symtab * | symtab, |
int | sensitive | ||
) |
Set the symbol table to be case sensitive or not.
Should be called before adding any symbol.
symtab | symbol table |
sensitive | whether the symbol table should be case sensitive. |
YASM_LIB_DECL int yasm_symtab_traverse | ( | yasm_symtab * | symtab, |
void * | d, | ||
yasm_symtab_traverse_callback | func | ||
) |
Traverse all symbols in the symbol table.
symtab | symbol table |
d | data to pass to each call of callback function |
func | callback function called on each symbol |
YASM_LIB_DECL yasm_symrec* yasm_symtab_use | ( | yasm_symtab * | symtab, |
const char * | name, | ||
unsigned long | line | ||
) |
Get a reference to (use) a symbol.
The symbol does not necessarily need to be defined before it is used.
symtab | symbol table |
name | symbol name |
line | virtual line where referenced |