diff options
-rw-r--r-- | cgcode.c | 29 | ||||
-rw-r--r-- | cgcodep.h | 1 | ||||
-rw-r--r-- | cginput.c | 1 |
3 files changed, 31 insertions, 0 deletions
@@ -9386,6 +9386,11 @@ void code_export (char *label_name) enter_label (label_name,EXPORT_LABEL); } +#if defined (G_A64) && defined (LINUX) +extern char **sl_mods; +static int pic_sl_mod_import; +#endif + void code_impdesc (char *label_name) { enter_label (label_name,IMPORT_LABEL | DATA_LABEL); @@ -9414,6 +9419,27 @@ void code_implab (char *label_name) /* enter_label (label_name,IMPORT_LABEL); */ } +void code_impmod (char *module_name) +{ +#if defined (G_A64) && defined (LINUX) + if (pic_flag){ + if (!rts_got_flag){ + pic_sl_mod_import = 1; + } else { + char **sl_mod; + + for (sl_mod=sl_mods; *sl_mod!=NULL; ++sl_mod){ + if (!strcmp (module_name,*sl_mod)){ + pic_sl_mod_import = 1; + return; + } + } + pic_sl_mod_import = 0; + } + } +#endif +} + void code_o (int oa,int ob,ULONG vector[]) { offered_a_stack_size=oa; @@ -9991,6 +10017,9 @@ void initialize_coding (VOID) last_instruction=NULL; INT_label=BOOL_label=CHAR_label=REAL_label=FILE_label=_STRING__label=_ARRAY__label=NULL; +#if defined (G_A64) && defined (LINUX) + pic_sl_mod_import=!rts_got_flag; +#endif halt_label=cat_string_label=NULL; cmp_string_label=eqD_label=NULL; @@ -319,6 +319,7 @@ void code_export (char *label_name); void code_impdesc (char *label_name); void code_implab_node_entry (char *label_name,char *ea_label_name); void code_implab (char *label_name); +void code_impmod (char *module_name); void code_keep (int a_offset_1,int a_offset_2); void code_n (int number_of_arguments,char *descriptor_name,char *ea_label_name); void code_nu (int a_size,int b_size,char *descriptor_name,char *ea_label_name); @@ -2587,6 +2587,7 @@ static void put_instructions_in_table2 (void) put_instruction_name (".impdesc", parse_directive_label, code_impdesc ); put_instruction_name (".implab", parse_directive_implab, code_implab ); put_instruction_name (".implib", parse_directive_implib_impobj, code_dummy ); + put_instruction_name (".impmod", parse_instruction_l, code_impmod ); put_instruction_name (".impobj", parse_directive_implib_impobj, code_dummy ); put_instruction_name (".module", parse_directive_module, code_module ); put_instruction_name (".n", parse_directive_n, code_n ); |