|
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 |
1.8.3.1