From 766c03c9fa786d42e9252b3003a6ee0874ea10ec Mon Sep 17 00:00:00 2001
From: Alan Modra <amodra@gmail.com>
Date: Thu, 24 May 2001 23:33:00 +0000
Subject: [PATCH] 	* write.c (relax_segment): Don't zap fr_symbol when
 relaxing.

---
 gas/ChangeLog |  4 ++++
 gas/write.c   | 12 ++++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 6ae3422c067..ed64d285430 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,7 @@
+2001-05-25  Alan Modra  <amodra@one.net.au>
+
+	* write.c (relax_segment): Don't zap fr_symbol when relaxing.
+
 2000-05-24  Tom Rix <trix@redhat.com>
 
 	* config/obj-coff.c : (add_lineno) xcoff allows negative line
diff --git a/gas/write.c b/gas/write.c
index 7b9e08039e7..1880e7eccbf 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -2453,18 +2453,22 @@ relax_segment (segment_frag_root, segment)
 	      case rs_space:
 		if (symbolP)
 		  {
-		    growth = S_GET_VALUE (symbolP);
+		    offsetT amount;
+
+		    amount = S_GET_VALUE (symbolP);
 		    if (symbol_get_frag (symbolP) != &zero_address_frag
 			|| S_IS_COMMON (symbolP)
 			|| ! S_IS_DEFINED (symbolP))
 		      as_bad_where (fragP->fr_file, fragP->fr_line,
 				    _(".space specifies non-absolute value"));
-		    fragP->fr_symbol = 0;
-		    if (growth < 0)
+		    if (amount < 0)
 		      {
 			as_warn (_(".space or .fill with negative value, ignored"));
-			growth = 0;
+			amount = 0;
+			fragP->fr_symbol = 0;
 		      }
+		    growth = (fragP->fr_address + amount
+			      - fragP->fr_next->fr_address);
 		  }
 		else
 		  growth = 0;