diff options
author | Ting-Wei Lan <lantw44@gmail.com> | 2015-12-31 19:13:50 +0800 |
---|---|---|
committer | Ting-Wei Lan <lantw44@gmail.com> | 2015-12-31 19:13:50 +0800 |
commit | f4f88342f1cda6491bf9f2f06fa859f51d7a4297 (patch) | |
tree | c0a061ce3146210540a1126729bb364b76ef64ef | |
parent | 1342a2cddf984af89bfa554ae9656817b43745a6 (diff) | |
download | compiler2015-f4f88342f1cda6491bf9f2f06fa859f51d7a4297.tar.gz compiler2015-f4f88342f1cda6491bf9f2f06fa859f51d7a4297.tar.zst compiler2015-f4f88342f1cda6491bf9f2f06fa859f51d7a4297.zip |
Export functions and global variables as global symbols
-rw-r--r-- | src/code-generation.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/code-generation.c b/src/code-generation.c index 993c8d7..d193bc0 100644 --- a/src/code-generation.c +++ b/src/code-generation.c @@ -44,8 +44,9 @@ static void generate_global_variable(CcmmcAst *global_decl, CcmmcState *state) } else { assert(false); } - fprintf(state->asm_output, "%s:\n\t.word\t%d\n", - var_sym->name, int_value); + fprintf(state->asm_output, + "\t.global\t%s\n%s:\n\t.word\t%d\n", + var_sym->name, var_sym->name, int_value); } else if (var_sym->type.type_base == CCMMC_AST_VALUE_FLOAT) { float float_value; if (init_value->type_node == CCMMC_AST_NODE_CONST_VALUE) { @@ -58,8 +59,9 @@ static void generate_global_variable(CcmmcAst *global_decl, CcmmcState *state) } else { assert(false); } - fprintf(state->asm_output, "%s:\n\t.float\t%.9g\n", - var_sym->name, float_value); + fprintf(state->asm_output, + "\t.global\t%s\n%s:\n\t.float\t%.9g\n", + var_sym->name, var_sym->name, float_value); } else { assert(false); } @@ -189,6 +191,9 @@ static void generate_block( static void generate_function(CcmmcAst *function, CcmmcState *state) { fputs("\t.text\n\t.align\t2\n", state->asm_output); + fprintf(state->asm_output, "\t.global\t%s\n%s:\n", + function->child->right_sibling->value_id.name, + function->child->right_sibling->value_id.name); CcmmcAst *param_node = function->child->right_sibling->right_sibling; CcmmcAst *block_node = param_node->right_sibling; generate_block(block_node, state, 0); |