This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
[RFA/patch] TI COFF0 and COFF1 support for eveyone
- From: "Svein E. Seldal" <Svein dot Seldal at solidas dot com>
- To: binutils at sources dot redhat dot com
- Date: Fri, 30 May 2003 03:26:25 +0200
- Subject: [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