gas: Add md_generic_table_relax_frag
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 12 Dec 2019 19:54:31 +0000 (11:54 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 12 Dec 2019 20:03:45 +0000 (12:03 -0800)
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.

gas/ChangeLog
gas/doc/internals.texi
gas/write.c

index a65b7d37a2898e5864507e7fbc671ea72e7c9f73..ef7369cee9efa04192ee82522cdd74292423cdb0 100644 (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>
 
        * config/tc-aarch64.c (get_aarch64_insn): Avoid signed overflow.
index a50880d635ff44293dfaedf908895c8b1b57a98f..cb86b5b3629ec64a48b3b2d21bd464e49b73fa4f 100644 (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
 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
 @cindex md_prepare_relax_scan
 If defined, it is a C statement that is invoked prior to scanning
index d5da41850cc428bb4f716f079de339b7dbb1f8ff..d2bdb7acdf731aa343fb84f3a1dced524164f406 100644 (file)
@@ -2481,6 +2481,10 @@ write_object_file (void)
 }
 
 #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.  */
 
 long
@@ -3031,7 +3035,8 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
 #ifdef TC_GENERIC_RELAX_TABLE
                /* The default way to relax a frag is to look through
                   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
                break;