aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2001-07-03 15:04:19 +0000
committerNick Clifton <nickc@redhat.com>2001-07-03 15:04:19 +0000
commit875488164582218721d98a407d699f57862f63da (patch)
treea2cd5894cfd978d3bbb940863990f4fc9bc2fc44 /gas
parentd81420d2331395583e9b45f51b1bdfc8374dfc12 (diff)
downloadfsf-binutils-gdb-875488164582218721d98a407d699f57862f63da.zip
fsf-binutils-gdb-875488164582218721d98a407d699f57862f63da.tar.gz
fsf-binutils-gdb-875488164582218721d98a407d699f57862f63da.tar.bz2
Fix mips16 testsuite failure by allowing finalize_syms to be set before
size_segs is called.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/doc/internals.texi11
-rw-r--r--gas/write.c16
3 files changed, 34 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index c7c7890..2e69a81 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2001-07-03 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * write.c (TC_FINALIZE_SYMS_BEFORE_SIZE_SEG): Default to 1.
+ (write_object_file): Set finalize_syms to
+ TC_FINALIZE_SYMS_BEFORE_SIZE_SEG just before size_segs is
+ called.
+
+ * doc/internals.texi; Document
+ TC_FINALIZE_SYMS_BEFORE_SIZE_SEG.
+
2001-07-02 Alan Modra <amodra@bigpond.net.au>
* config/tc-ppc.c: Formatting fixes.
diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi
index 3e3e507..1d2313a 100644
--- a/gas/doc/internals.texi
+++ b/gas/doc/internals.texi
@@ -1224,6 +1224,17 @@ The instruction is completed using the data from the relaxation pass.
It may also create any necessary relocations.
@xref{Relaxation}.
+@item TC_FINALIZE_SYMS_BEFORE_SIZE_SEG
+@cindex TC_FINALIZE_SYMS_BEFORE_SIZE_SEG
+Specifies the value to be assigned to @code{finalize_syms} before the function
+@code{size_segs} is called. Since @code{size_segs} calls @code{cvt_frag_to_fill}
+which can call @code{md_convert_frag}, this constant governs whether the symbols
+accessed in @code{md_convert_frag} will be fully resolved. In particular it
+governs whether local symbols will have been resolved, and had their frag
+information removed. Depending upon the processing performed by
+@code{md_convert_frag} the frag information may or may not be necessary, as may
+the resolved values of the symbols. The default value is 1.
+
@item md_apply_fix
@cindex md_apply_fix
GAS will call this for each fixup. It should store the correct value in the
diff --git a/gas/write.c b/gas/write.c
index f17a6fa..4e1e06a 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -52,6 +52,10 @@
#define TC_FIX_ADJUSTABLE(fix) 1
#endif
+#ifndef TC_FINALIZE_SYMS_BEFORE_SIZE_SEG
+#define TC_FINALIZE_SYMS_BEFORE_SIZE_SEG 1
+#endif
+
#ifndef MD_PCREL_FROM_SECTION
#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from(FIXP)
#endif
@@ -1575,9 +1579,15 @@ write_object_file ()
break;
}
- /* Note - we do not set finalize_syms here because some targets
- do not finish sizing all of their frags until after size_seg
- has completed. */
+ /* Note - Most ports will use the default value of
+ TC_FINALIZE_SYMS_BEFORE_SIZE_SEG, which 1. This will force
+ local symbols to be resolved, removing their frag information.
+ Some ports however, will not have finished relaxing all of
+ their frags and will still need the local symbol frag
+ information. These ports can set
+ TC_FINALIZE_SYMS_BEFORE_SIZE_SEG to 0. */
+ finalize_syms = TC_FINALIZE_SYMS_BEFORE_SIZE_SEG;
+
bfd_map_over_sections (stdoutput, size_seg, (char *) 0);
#else
relax_and_size_all_segments ();