From 4ea49053248cb81c7ffc8c1a186f9d0121bcb6b5 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 29 May 1998 19:59:55 +0000 Subject: [PATCH] Based on patch from Klaus Kaempf : * 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. --- gas/ChangeLog | 7 +++++++ gas/read.c | 6 ++++++ gas/write.c | 4 +++- 3 files changed, 16 insertions(+), 1 deletion(-) 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 + Based on patch from Klaus Kaempf : + * 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), -- 2.7.4