aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1998-05-29 19:59:55 +0000
committerIan Lance Taylor <ian@airs.com>1998-05-29 19:59:55 +0000
commit4ea49053248cb81c7ffc8c1a186f9d0121bcb6b5 (patch)
tree8fe8497cabb59e1289d2dce3b4057faa41f311a8 /gas
parent05a43d26fe330ec493ec304238c72c7c3c64ebb1 (diff)
downloadgdb-4ea49053248cb81c7ffc8c1a186f9d0121bcb6b5.zip
gdb-4ea49053248cb81c7ffc8c1a186f9d0121bcb6b5.tar.gz
gdb-4ea49053248cb81c7ffc8c1a186f9d0121bcb6b5.tar.bz2
Based on patch from Klaus Kaempf <kkaempf@progis.de>:
* struc-symbol.h (struct broken_word): Add seg and subseg fields. * read.c (emit_expr): Initialize seg and subseg fields of a new broken word. * write.c (write_object_file): Switch to the appropriate segment and subsegment when processing a broken word.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/read.c6
-rw-r--r--gas/write.c4
3 files changed, 16 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index b5b1c98..415b950 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,12 @@
Fri May 29 13:46:07 1998 Ian Lance Taylor <ian@cygnus.com>
+ Based on patch from Klaus Kaempf <kkaempf@progis.de>:
+ * struc-symbol.h (struct broken_word): Add seg and subseg fields.
+ * read.c (emit_expr): Initialize seg and subseg fields of a new
+ broken word.
+ * write.c (write_object_file): Switch to the appropriate segment
+ and subsegment when processing a broken word.
+
* config/tc-m68k.c (mri_assemble): New static function.
(build_mri_control_operand): Call mri_assemble rather than
md_assemble.
diff --git a/gas/read.c b/gas/read.c
index c9e4461..2484ae0 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -2353,6 +2353,10 @@ s_org (ignore)
expressionS exp;
register long temp_fill;
+#ifdef md_flush_pending_output
+ md_flush_pending_output ();
+#endif
+
/* The m68k MRI assembler has a different meaning for .org. It
means to create an absolute section at a given address. We can't
support that--use a linker script instead. */
@@ -3427,6 +3431,8 @@ emit_expr (exp, nbytes)
x = (struct broken_word *) xmalloc (sizeof (struct broken_word));
x->next_broken_word = broken_words;
broken_words = x;
+ x->seg = seg_now;
+ x->subseg = subseg_now;
x->frag = frag_now;
x->word_goes_here = p;
x->dispfrag = 0;
diff --git a/gas/write.c b/gas/write.c
index 80616d6..4bd8078 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -1522,6 +1522,7 @@ write_object_file ()
{
expressionS exp;
+ subseg_change (lie->seg, lie->subseg);
exp.X_op = O_subtract;
exp.X_add_symbol = lie->add;
exp.X_op_symbol = lie->sub;
@@ -1566,6 +1567,7 @@ write_object_file ()
addressT from_addr, to_addr;
int n, m;
+ subseg_change (lie->seg, lie->subseg);
fragP = lie->dispfrag;
/* Find out how many broken_words go here. */
@@ -2550,7 +2552,7 @@ fixup_segment (fixP, this_segment_type)
char buf[50];
sprint_value (buf, fragP->fr_address + where);
as_bad_where (fixP->fx_file, fixP->fx_line,
- _("Subtraction of two symbols in different segments \"%s\" {%s segment} - \"%s\" {%s segment} at file address %s."),
+ _("Subtraction of two symbols in different sections \"%s\" {%s section} - \"%s\" {%s section} at file address %s."),
S_GET_NAME (add_symbolP),
segment_name (S_GET_SEGMENT (add_symbolP)),
S_GET_NAME (sub_symbolP),