From a9cff99018dac2c5d6a8636beb20abd74a107229 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Tue, 8 Feb 1994 00:28:05 +0000 Subject: Renamed hppaosf.em to hppaelf.em --- ld/emultempl/hppaelf.em | 298 ++++++++++++++++++++++++++++++++++++++++++++++++ ld/emultempl/hppaosf.em | 298 ------------------------------------------------ 2 files changed, 298 insertions(+), 298 deletions(-) create mode 100644 ld/emultempl/hppaelf.em delete mode 100644 ld/emultempl/hppaosf.em (limited to 'ld') diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em new file mode 100644 index 0000000..cb01a32 --- /dev/null +++ b/ld/emultempl/hppaelf.em @@ -0,0 +1,298 @@ +# This shell script emits a C file. -*- C -*- +# It does some substitutions. +cat >em_${EMULATION_NAME}.c <next) + { + switch (s->header.type) + { + case lang_constructors_statement_enum: + hppaosf_search_for_padding_statements (constructor_list.head,&constructor_list.head); + break; + case lang_output_section_statement_enum: + hppaosf_search_for_padding_statements + (s->output_section_statement.children.head,&s->output_section_statement.children.head); + break; + case lang_wild_statement_enum: + hppaosf_search_for_padding_statements + (s->wild_statement.children.head,&s->wild_statement.children.head); + break; + case lang_data_statement_enum: + case lang_object_symbols_statement_enum: + case lang_output_statement_enum: + case lang_target_statement_enum: + case lang_input_section_enum: + case lang_input_statement_enum: + case lang_assignment_statement_enum: + case lang_address_statement_enum: + break; + case lang_padding_statement_enum: + if ( sprev ) + { + sprev->header.next = s->header.next; + } + else + { + **prev = *s; + } + break; + default: + FAIL (); + break; + } + sprev = s; + } +} + +static void +hppaosf_finish() +{ + extern asymbol *hppa_look_for_stubs_in_section(); + + if (link_info.relocateable == false) + { + /* check for needed stubs */ + extern lang_statement_list_type file_chain; + lang_input_statement_type *statement; + + for (statement = (lang_input_statement_type *)file_chain.head; + statement != (lang_input_statement_type *)NULL; + statement = (lang_input_statement_type *)statement->next) + { + asection *section; + bfd *abfd = statement->the_bfd; + for (section = abfd->sections; + section != (asection *)NULL; + section = section ->next) + { + int new_sym_cnt = 0; + int i,j; + asymbol *syms; + + syms = hppa_look_for_stubs_in_section (stub_file->the_bfd, + abfd, + output_bfd, + section, + statement->asymbols, + &new_sym_cnt, + &link_info); + + if ( (new_sym_cnt > 0) && syms ) + { + struct symbol_cache_entry **old_asymbols; + + old_asymbols = stub_file->asymbols; + + stub_file->asymbols = xmalloc((stub_file->symbol_count + new_sym_cnt) * sizeof(asymbol *)); + + for ( j = 0; j < stub_file->symbol_count; j++ ) + stub_file->asymbols[j] = old_asymbols[j]; + + for ( j = 0, i = stub_file->symbol_count; j < new_sym_cnt; j++, i++ ) + stub_file->asymbols[i] = &syms[j]; + + stub_file->symbol_count += new_sym_cnt; + } + } + } + /* Add a statement to get the linker stubs included in the output */ + lang_add_wild(".hppa_linker_stubs",NULL); + + /* If we've added stubs,remove the padding_statements because */ + /* they are no longer valid */ + hppaosf_search_for_padding_statements(stat_ptr->head,&(stat_ptr->head)); + } +} + +static void +hppaosf_create_output_section_statements() +{ + asection *stub_sec; + asection *output_text_sec = bfd_make_section_old_way(output_bfd,".text"); + lang_input_section_type *new_input_sec; + + stub_file = lang_add_input_file ("linker stubs", + lang_input_file_is_fake_enum, + (char *) NULL); + stub_file->the_bfd = bfd_create ("linker stubs", output_bfd); + stub_file->symbol_count = 0; + stub_file->the_bfd->sections = 0; + + stub_sec = bfd_make_section_old_way(stub_file->the_bfd,".hppa_linker_stubs"); + stub_sec->output_section = output_text_sec; + bfd_set_section_flags(stub_file->the_bfd, stub_sec, SEC_HAS_CONTENTS | SEC_ALLOC | SEC_CODE | SEC_RELOC ); + + /* The user data of a bfd points to the input statement attached */ + stub_file->the_bfd->usrdata = (void *)stub_file; + stub_file->common_section = + bfd_make_section(stub_file->the_bfd,"COMMON"); + + new_input_sec = (lang_input_section_type *)stat_alloc(sizeof(lang_input_section_type)); + if ( new_input_sec ) + { + lang_output_section_statement_type *text_output_sec; + lang_statement_union_type *stmt; + lang_wild_statement_type *stub_statement; + new_input_sec->section = stub_sec; + new_input_sec->ifile = stub_file; + new_input_sec->header.type = lang_input_section_enum; + new_input_sec->header.next = NULL; + + stub_input_section = new_input_sec; + + /* Find the output_section_statement for .text, */ + /* then find the wild_statement for .hppa_linker_stubs */ + + text_output_sec = lang_output_section_find(".text"); + + stmt = text_output_sec->children.head; + + while (stmt && stmt->header.type != lang_wild_statement_enum) + { + stmt = stmt->header.next; + } + + if ( stmt ) + { + lang_wild_statement_type *wstmt = (lang_wild_statement_type *)stmt; + lang_list_init(&wstmt->children); + lang_statement_append(&wstmt->children, + (lang_statement_union_type *)new_input_sec, + &new_input_sec->header.next); + } + } +} + +static void +hppaosf_set_output_arch() +{ + /* Set the output architecture and machine if possible */ + unsigned long machine = 0; + bfd_set_arch_mach(output_bfd, ldfile_output_architecture, machine); +} + +static char * +hppaosf_get_script(isfile) + int *isfile; +EOF + +if test -n "$COMPILE_IN" +then +# Scripts compiled in. + +# sed commands to quote an ld script as a C string. +sc='s/["\\]/\\&/g +s/$/\\n\\/ +1s/^/"{/ +$s/$/n}"/ +' + +cat >>em_${EMULATION_NAME}.c <>em_${EMULATION_NAME}.c <>em_${EMULATION_NAME}.c <em_${EMULATION_NAME}.c <next) - { - switch (s->header.type) - { - case lang_constructors_statement_enum: - hppaosf_search_for_padding_statements (constructor_list.head,&constructor_list.head); - break; - case lang_output_section_statement_enum: - hppaosf_search_for_padding_statements - (s->output_section_statement.children.head,&s->output_section_statement.children.head); - break; - case lang_wild_statement_enum: - hppaosf_search_for_padding_statements - (s->wild_statement.children.head,&s->wild_statement.children.head); - break; - case lang_data_statement_enum: - case lang_object_symbols_statement_enum: - case lang_output_statement_enum: - case lang_target_statement_enum: - case lang_input_section_enum: - case lang_input_statement_enum: - case lang_assignment_statement_enum: - case lang_address_statement_enum: - break; - case lang_padding_statement_enum: - if ( sprev ) - { - sprev->header.next = s->header.next; - } - else - { - **prev = *s; - } - break; - default: - FAIL (); - break; - } - sprev = s; - } -} - -static void -hppaosf_finish() -{ - extern asymbol *hppa_look_for_stubs_in_section(); - - if (link_info.relocateable == false) - { - /* check for needed stubs */ - extern lang_statement_list_type file_chain; - lang_input_statement_type *statement; - - for (statement = (lang_input_statement_type *)file_chain.head; - statement != (lang_input_statement_type *)NULL; - statement = (lang_input_statement_type *)statement->next) - { - asection *section; - bfd *abfd = statement->the_bfd; - for (section = abfd->sections; - section != (asection *)NULL; - section = section ->next) - { - int new_sym_cnt = 0; - int i,j; - asymbol *syms; - - syms = hppa_look_for_stubs_in_section (stub_file->the_bfd, - abfd, - output_bfd, - section, - statement->asymbols, - &new_sym_cnt, - &link_info); - - if ( (new_sym_cnt > 0) && syms ) - { - struct symbol_cache_entry **old_asymbols; - - old_asymbols = stub_file->asymbols; - - stub_file->asymbols = xmalloc((stub_file->symbol_count + new_sym_cnt) * sizeof(asymbol *)); - - for ( j = 0; j < stub_file->symbol_count; j++ ) - stub_file->asymbols[j] = old_asymbols[j]; - - for ( j = 0, i = stub_file->symbol_count; j < new_sym_cnt; j++, i++ ) - stub_file->asymbols[i] = &syms[j]; - - stub_file->symbol_count += new_sym_cnt; - } - } - } - /* Add a statement to get the linker stubs included in the output */ - lang_add_wild(".hppa_linker_stubs",NULL); - - /* If we've added stubs,remove the padding_statements because */ - /* they are no longer valid */ - hppaosf_search_for_padding_statements(stat_ptr->head,&(stat_ptr->head)); - } -} - -static void -hppaosf_create_output_section_statements() -{ - asection *stub_sec; - asection *output_text_sec = bfd_make_section_old_way(output_bfd,".text"); - lang_input_section_type *new_input_sec; - - stub_file = lang_add_input_file ("linker stubs", - lang_input_file_is_fake_enum, - (char *) NULL); - stub_file->the_bfd = bfd_create ("linker stubs", output_bfd); - stub_file->symbol_count = 0; - stub_file->the_bfd->sections = 0; - - stub_sec = bfd_make_section_old_way(stub_file->the_bfd,".hppa_linker_stubs"); - stub_sec->output_section = output_text_sec; - bfd_set_section_flags(stub_file->the_bfd, stub_sec, SEC_HAS_CONTENTS | SEC_ALLOC | SEC_CODE | SEC_RELOC ); - - /* The user data of a bfd points to the input statement attached */ - stub_file->the_bfd->usrdata = (void *)stub_file; - stub_file->common_section = - bfd_make_section(stub_file->the_bfd,"COMMON"); - - new_input_sec = (lang_input_section_type *)stat_alloc(sizeof(lang_input_section_type)); - if ( new_input_sec ) - { - lang_output_section_statement_type *text_output_sec; - lang_statement_union_type *stmt; - lang_wild_statement_type *stub_statement; - new_input_sec->section = stub_sec; - new_input_sec->ifile = stub_file; - new_input_sec->header.type = lang_input_section_enum; - new_input_sec->header.next = NULL; - - stub_input_section = new_input_sec; - - /* Find the output_section_statement for .text, */ - /* then find the wild_statement for .hppa_linker_stubs */ - - text_output_sec = lang_output_section_find(".text"); - - stmt = text_output_sec->children.head; - - while (stmt && stmt->header.type != lang_wild_statement_enum) - { - stmt = stmt->header.next; - } - - if ( stmt ) - { - lang_wild_statement_type *wstmt = (lang_wild_statement_type *)stmt; - lang_list_init(&wstmt->children); - lang_statement_append(&wstmt->children, - (lang_statement_union_type *)new_input_sec, - &new_input_sec->header.next); - } - } -} - -static void -hppaosf_set_output_arch() -{ - /* Set the output architecture and machine if possible */ - unsigned long machine = 0; - bfd_set_arch_mach(output_bfd, ldfile_output_architecture, machine); -} - -static char * -hppaosf_get_script(isfile) - int *isfile; -EOF - -if test -n "$COMPILE_IN" -then -# Scripts compiled in. - -# sed commands to quote an ld script as a C string. -sc='s/["\\]/\\&/g -s/$/\\n\\/ -1s/^/"{/ -$s/$/n}"/ -' - -cat >>em_${EMULATION_NAME}.c <>em_${EMULATION_NAME}.c <>em_${EMULATION_NAME}.c <