gas: Add md_generic_table_relax_frag

Add md_generic_table_relax_frag for TC_GENERIC_RELAX_TABLE targets so
that a backend can extend relax_frag beyond TC_GENERIC_RELAX_TABLE.

	* write.c (md_generic_table_relax_frag): New.  Defined to
	relax_frag if not defined.
	(relax_segment): Call md_generic_table_relax_frag instead of
	relax_frag.
This commit is contained in:
H.J. Lu
2019-12-12 11:54:31 -08:00
parent 7190276c52
commit b65d68b8d6
3 changed files with 18 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2019-12-12 H.J. Lu <hongjiu.lu@intel.com>
* write.c (md_generic_table_relax_frag): New. Defined to
relax_frag if not defined.
(relax_segment): Call md_generic_table_relax_frag instead of
relax_frag.
2019-12-12 Alan Modra <amodra@gmail.com> 2019-12-12 Alan Modra <amodra@gmail.com>
* config/tc-aarch64.c (get_aarch64_insn): Avoid signed overflow. * config/tc-aarch64.c (get_aarch64_insn): Avoid signed overflow.

View File

@ -1210,6 +1210,11 @@ If you do not define @code{md_relax_frag}, you may define
machine independent code knows how to use such a table to relax PC relative machine independent code knows how to use such a table to relax PC relative
references. See @file{tc-m68k.c} for an example. @xref{Relaxation}. references. See @file{tc-m68k.c} for an example. @xref{Relaxation}.
@item md_generic_table_relax_frag
@cindex md_generic_table_relax_frag
If defined, it is a C statement that is invoked, instead of
the default implementation, to scan @code{TC_GENERIC_RELAX_TABLE}.
@item md_prepare_relax_scan @item md_prepare_relax_scan
@cindex md_prepare_relax_scan @cindex md_prepare_relax_scan
If defined, it is a C statement that is invoked prior to scanning If defined, it is a C statement that is invoked prior to scanning

View File

@ -2481,6 +2481,10 @@ write_object_file (void)
} }
#ifdef TC_GENERIC_RELAX_TABLE #ifdef TC_GENERIC_RELAX_TABLE
#ifndef md_generic_table_relax_frag
#define md_generic_table_relax_frag relax_frag
#endif
/* Relax a fragment by scanning TC_GENERIC_RELAX_TABLE. */ /* Relax a fragment by scanning TC_GENERIC_RELAX_TABLE. */
long long
@ -3031,7 +3035,8 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
#ifdef TC_GENERIC_RELAX_TABLE #ifdef TC_GENERIC_RELAX_TABLE
/* The default way to relax a frag is to look through /* The default way to relax a frag is to look through
TC_GENERIC_RELAX_TABLE. */ TC_GENERIC_RELAX_TABLE. */
growth = relax_frag (segment, fragP, stretch); growth = md_generic_table_relax_frag (segment, fragP,
stretch);
#endif /* TC_GENERIC_RELAX_TABLE */ #endif /* TC_GENERIC_RELAX_TABLE */
#endif #endif
break; break;