This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA/patch] TI COFF0 and COFF1 support for eveyone


Hi,

The tic4x target is able to read, in addition to the standard coff2, the coff0 and coff1 fileformats -- both little and big-endian versions. For this to work you will need the coff swap tables for that specific coff format and some small function. All of this is implemented in the tic4x target already (and duplicated in tic54x).

Are there any interest in exporting/moving this code? Because, I can surely export it to another, more global file, if there are interests in having this support.

I guess this applies to the TI targets, but there may be other coff targets that may benefit from this.

I see that the tic4x and the tic54x targets have duplicated code which does exactly the same thing. So I would guess that this is reason enough to move this code from the tagets and into the global trunk.

Attached is my contribution and suggestions. Any comments/objections? Should I go ahead and check it in?


Regards, Svein

bfd/ChangeLog:
2003-05-30  Svein E. Seldal  <Svein.Seldal@solidas.com>

	* coff-tic4x.c: Remove the ticoff0_bad_format_hook() the
	ticoff1_bad_format_hook() functions. Remove the ticoff0_swap_table
	and the ticoff1_swap_table.
	* coff-tic54x.c: Ditto
	* coffcode.h: Added the ticoff0_bad_format_hook(),
	ticoff1_bad_format_hook(), ticoff0_swap_table and
	ticoff1_swap_table.

Index: bfd/coff-tic4x.c
===================================================================
RCS file: /cvs/src/src/bfd/coff-tic4x.c,v
retrieving revision 1.5
diff -c -3 -p -r1.5 coff-tic4x.c
*** bfd/coff-tic4x.c	4 Apr 2003 08:15:13 -0000	1.5
--- bfd/coff-tic4x.c	30 May 2003 01:19:17 -0000
***************
*** 32,41 ****
  #undef  F_LSYMS
  #define	F_LSYMS		F_LSYMS_TICOFF
  
- static bfd_boolean ticoff0_bad_format_hook
-     PARAMS ((bfd *, PTR ));
- static bfd_boolean ticoff1_bad_format_hook
-     PARAMS ((bfd *, PTR ));
  static bfd_boolean ticoff_bfd_is_local_label_name
      PARAMS ((bfd *, const char *));
  static bfd_reloc_status_type tic4x_relocation
--- 32,37 ----
*************** static void tic4x_reloc_processing
*** 50,81 ****
      PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection * ));
  
  
- static bfd_boolean
- ticoff0_bad_format_hook (abfd, filehdr)
-      bfd *abfd ATTRIBUTE_UNUSED;
-      PTR filehdr;
- {
-   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
- 
-   if (COFF0_BADMAG (*internal_f))
-     return FALSE;
- 
-   return TRUE;
- }
- 
- static bfd_boolean
- ticoff1_bad_format_hook (abfd, filehdr)
-      bfd *abfd ATTRIBUTE_UNUSED;
-      PTR filehdr;
- {
-   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
- 
-   if (COFF1_BADMAG (*internal_f))
-     return FALSE;
- 
-   return TRUE;
- }
- 
  /* Replace the stock _bfd_coff_is_local_label_name to recognize TI COFF local
     labels.  */
  static bfd_boolean
--- 46,51 ----
*************** tic4x_reloc_processing (relent, reloc, s
*** 279,366 ****
    /* Fill in the relent->howto field from reloc->r_type.  */
    tic4x_lookup_howto (relent, reloc);
  }
- 
- 
- static const bfd_coff_backend_data ticoff0_swap_table =
- {
-   coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
-   coff_SWAP_aux_out, coff_SWAP_sym_out,
-   coff_SWAP_lineno_out, coff_SWAP_reloc_out,
-   coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
-   coff_SWAP_scnhdr_out,
-   FILHSZ_V0, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ_V0, LINESZ, FILNMLEN,
- #ifdef COFF_LONG_FILENAMES
-   TRUE,
- #else
-   FALSE,
- #endif
- #ifdef COFF_LONG_SECTION_NAMES
-   TRUE,
- #else
-   FALSE,
- #endif
- #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-   TRUE,
- #else
-   FALSE,
- #endif
- #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
-   4,
- #else
-   2,
- #endif
-   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
-   coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
-   coff_SWAP_reloc_in, ticoff0_bad_format_hook, coff_set_arch_mach_hook,
-   coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
-   coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
-   coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
-   coff_classify_symbol, coff_compute_section_file_positions,
-   coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
-   coff_adjust_symndx, coff_link_add_one_symbol,
-   coff_link_output_has_begun, coff_final_link_postscript
- };
- 
- /* COFF1 differs in section header size.  */
- static const bfd_coff_backend_data ticoff1_swap_table =
- {
-   coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
-   coff_SWAP_aux_out, coff_SWAP_sym_out,
-   coff_SWAP_lineno_out, coff_SWAP_reloc_out,
-   coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
-   coff_SWAP_scnhdr_out,
-   FILHSZ, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ, LINESZ, FILNMLEN,
- #ifdef COFF_LONG_FILENAMES
-   TRUE,
- #else
-   FALSE,
- #endif
- #ifdef COFF_LONG_SECTION_NAMES
-   TRUE,
- #else
-   FALSE,
- #endif
- #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-   TRUE,
- #else
-   FALSE,
- #endif
- #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
-   4,
- #else
-   2,
- #endif
-   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
-   coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
-   coff_SWAP_reloc_in, ticoff1_bad_format_hook, coff_set_arch_mach_hook,
-   coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
-   coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
-   coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
-   coff_classify_symbol, coff_compute_section_file_positions,
-   coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
-   coff_adjust_symndx, coff_link_add_one_symbol,
-   coff_link_output_has_begun, coff_final_link_postscript
- };
  
  
  /* TI COFF v0, DOS tools (little-endian headers).  */
--- 249,254 ----
Index: bfd/coff-tic54x.c
===================================================================
RCS file: /cvs/src/src/bfd/coff-tic54x.c,v
retrieving revision 1.12
diff -c -3 -p -r1.12 coff-tic54x.c
*** bfd/coff-tic54x.c	30 Nov 2002 08:39:36 -0000	1.12
--- bfd/coff-tic54x.c	30 May 2003 01:19:17 -0000
*************** static reloc_howto_type * tic54x_coff_re
*** 50,59 ****
    PARAMS ((bfd *, bfd_reloc_code_real_type));
  static void tic54x_lookup_howto
    PARAMS ((arelent *, struct internal_reloc *));
- static bfd_boolean ticoff0_bad_format_hook
-   PARAMS ((bfd *, PTR));
- static bfd_boolean ticoff1_bad_format_hook
-   PARAMS ((bfd *, PTR));
  static bfd_boolean ticoff_bfd_is_local_label_name
    PARAMS ((bfd *, const char *));
  
--- 50,55 ----
*************** coff_tic54x_rtype_to_howto (abfd, sec, r
*** 323,354 ****
    return genrel.howto;
  }
  
- static bfd_boolean
- ticoff0_bad_format_hook (abfd, filehdr)
-      bfd * abfd ATTRIBUTE_UNUSED;
-      PTR filehdr;
- {
-   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
- 
-   if (COFF0_BADMAG (*internal_f))
-     return FALSE;
- 
-   return TRUE;
- }
- 
- static bfd_boolean
- ticoff1_bad_format_hook (abfd, filehdr)
-      bfd * abfd ATTRIBUTE_UNUSED;
-      PTR filehdr;
- {
-   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
- 
-   if (COFF1_BADMAG (*internal_f))
-     return FALSE;
- 
-   return TRUE;
- }
- 
  /* Replace the stock _bfd_coff_is_local_label_name to recognize TI COFF local
     labels.  */
  
--- 319,324 ----
*************** tic54x_reloc_processing (relent, reloc, 
*** 434,521 ****
    /* Fill in the relent->howto field from reloc->r_type.  */
    tic54x_lookup_howto (relent, reloc);
  }
- 
- /* COFF0 differs in file/section header size and relocation entry size.  */
- static const bfd_coff_backend_data ticoff0_swap_table =
-   {
-     coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
-     coff_SWAP_aux_out, coff_SWAP_sym_out,
-     coff_SWAP_lineno_out, coff_SWAP_reloc_out,
-     coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
-     coff_SWAP_scnhdr_out,
-     FILHSZ_V0, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ_V0, LINESZ, FILNMLEN,
- #ifdef COFF_LONG_FILENAMES
-     TRUE,
- #else
-     FALSE,
- #endif
- #ifdef COFF_LONG_SECTION_NAMES
-     TRUE,
- #else
-     FALSE,
- #endif
- #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-     TRUE,
- #else
-     FALSE,
- #endif
- #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
-     4,
- #else
-     2,
- #endif
-     COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
-     coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
-     coff_SWAP_reloc_in, ticoff0_bad_format_hook, coff_set_arch_mach_hook,
-     coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
-     coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
-     coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
-     coff_classify_symbol, coff_compute_section_file_positions,
-     coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
-     coff_adjust_symndx, coff_link_add_one_symbol,
-     coff_link_output_has_begun, coff_final_link_postscript
-   };
- 
- /* COFF1 differs in section header size.  */
- static const bfd_coff_backend_data ticoff1_swap_table =
-   {
-     coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
-     coff_SWAP_aux_out, coff_SWAP_sym_out,
-     coff_SWAP_lineno_out, coff_SWAP_reloc_out,
-     coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
-     coff_SWAP_scnhdr_out,
-     FILHSZ, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ, LINESZ, FILNMLEN,
- #ifdef COFF_LONG_FILENAMES
-     TRUE,
- #else
-     FALSE,
- #endif
- #ifdef COFF_LONG_SECTION_NAMES
-     TRUE,
- #else
-     FALSE,
- #endif
-     COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
- #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-     TRUE,
- #else
-     FALSE,
- #endif
- #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
-     4,
- #else
-     2,
- #endif
-     coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
-     coff_SWAP_reloc_in, ticoff1_bad_format_hook, coff_set_arch_mach_hook,
-     coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
-     coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
-     coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
-     coff_classify_symbol, coff_compute_section_file_positions,
-     coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
-     coff_adjust_symndx, coff_link_add_one_symbol,
-     coff_link_output_has_begun, coff_final_link_postscript
-   };
  
  /* TI COFF v0, DOS tools (little-endian headers).  */
  const bfd_target tic54x_coff0_vec =
--- 404,409 ----
Index: bfd/coffcode.h
===================================================================
RCS file: /cvs/src/src/bfd/coffcode.h,v
retrieving revision 1.90
diff -c -3 -p -r1.90 coffcode.h
*** bfd/coffcode.h	24 Apr 2003 12:36:06 -0000	1.90
--- bfd/coffcode.h	30 May 2003 01:19:18 -0000
*************** static unsigned int coff_compute_checksu
*** 362,367 ****
--- 362,373 ----
  static bfd_boolean coff_apply_checksum
    PARAMS ((bfd *));
  #endif
+ #ifdef TICOFF
+ static bfd_boolean ticoff0_bad_format_hook
+     PARAMS ((bfd *, PTR ));
+ static bfd_boolean ticoff1_bad_format_hook
+     PARAMS ((bfd *, PTR ));
+ #endif
  
  /* void warning(); */
  
*************** coff_bad_format_hook (abfd, filehdr)
*** 1439,1444 ****
--- 1445,1480 ----
    return TRUE;
  }
  
+ #ifdef TICOFF
+ static bfd_boolean
+ ticoff0_bad_format_hook (abfd, filehdr)
+      bfd *abfd ATTRIBUTE_UNUSED;
+      PTR filehdr;
+ {
+   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
+ 
+   if (COFF0_BADMAG (*internal_f))
+     return FALSE;
+ 
+   return TRUE;
+ }
+ #endif
+ 
+ #ifdef TICOFF
+ static bfd_boolean
+ ticoff1_bad_format_hook (abfd, filehdr)
+      bfd *abfd ATTRIBUTE_UNUSED;
+      PTR filehdr;
+ {
+   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
+ 
+   if (COFF1_BADMAG (*internal_f))
+     return FALSE;
+ 
+   return TRUE;
+ }
+ #endif
+ 
  /* Check whether this section uses an alignment other than the
     default.  */
  
*************** static const bfd_coff_backend_data bfd_c
*** 5337,5342 ****
--- 5373,5464 ----
    coff_adjust_symndx, coff_link_add_one_symbol,
    coff_link_output_has_begun, coff_final_link_postscript
  };
+ 
+ #ifdef TICOFF
+ /* COFF0 differs in file/section header size and relocation entry size.  */
+ static const bfd_coff_backend_data ticoff0_swap_table =
+ {
+   coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
+   coff_SWAP_aux_out, coff_SWAP_sym_out,
+   coff_SWAP_lineno_out, coff_SWAP_reloc_out,
+   coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
+   coff_SWAP_scnhdr_out,
+   FILHSZ_V0, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ_V0, LINESZ, FILNMLEN,
+ #ifdef COFF_LONG_FILENAMES
+   TRUE,
+ #else
+   FALSE,
+ #endif
+ #ifdef COFF_LONG_SECTION_NAMES
+   TRUE,
+ #else
+   FALSE,
+ #endif
+   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
+ #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
+   TRUE,
+ #else
+   FALSE,
+ #endif
+ #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
+   4,
+ #else
+   2,
+ #endif
+   coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
+   coff_SWAP_reloc_in, ticoff0_bad_format_hook, coff_set_arch_mach_hook,
+   coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
+   coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
+   coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
+   coff_classify_symbol, coff_compute_section_file_positions,
+   coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
+   coff_adjust_symndx, coff_link_add_one_symbol,
+   coff_link_output_has_begun, coff_final_link_postscript
+ };
+ #endif
+ 
+ #ifdef TICOFF
+ /* COFF1 differs in section header size.  */
+ static const bfd_coff_backend_data ticoff1_swap_table =
+ {
+   coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
+   coff_SWAP_aux_out, coff_SWAP_sym_out,
+   coff_SWAP_lineno_out, coff_SWAP_reloc_out,
+   coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
+   coff_SWAP_scnhdr_out,
+   FILHSZ, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ, LINESZ, FILNMLEN,
+ #ifdef COFF_LONG_FILENAMES
+   TRUE,
+ #else
+   FALSE,
+ #endif
+ #ifdef COFF_LONG_SECTION_NAMES
+   TRUE,
+ #else
+   FALSE,
+ #endif
+   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
+ #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
+   TRUE,
+ #else
+   FALSE,
+ #endif
+ #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
+   4,
+ #else
+   2,
+ #endif
+   coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
+   coff_SWAP_reloc_in, ticoff1_bad_format_hook, coff_set_arch_mach_hook,
+   coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
+   coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
+   coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
+   coff_classify_symbol, coff_compute_section_file_positions,
+   coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
+   coff_adjust_symndx, coff_link_add_one_symbol,
+   coff_link_output_has_begun, coff_final_link_postscript
+ };
+ #endif
  
  #ifndef coff_close_and_cleanup
  #define	coff_close_and_cleanup              _bfd_generic_close_and_cleanup

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]