aboutsummaryrefslogtreecommitdiff
path: root/gnu/usr.bin/as/write.c
diff options
context:
space:
mode:
authorNate Williams <nate@FreeBSD.org>1994-12-23 22:37:45 +0000
committerNate Williams <nate@FreeBSD.org>1994-12-23 22:37:45 +0000
commitde761939cfd827dadef4e867ddb4b4e2c61e8322 (patch)
tree45f21795caabc20ce55151304e158c834e2673e1 /gnu/usr.bin/as/write.c
parentd27e9722db9ffe66a070989397c7537427d6b974 (diff)
Notes
Diffstat (limited to 'gnu/usr.bin/as/write.c')
-rw-r--r--gnu/usr.bin/as/write.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/gnu/usr.bin/as/write.c b/gnu/usr.bin/as/write.c
index dd139f7e82dc..33cc8d29bfd9 100644
--- a/gnu/usr.bin/as/write.c
+++ b/gnu/usr.bin/as/write.c
@@ -21,7 +21,7 @@
/* This thing should be set up to do byteordering correctly. But... */
#ifndef lint
-static char rcsid[] = "$Id: write.c,v 1.4 1993/12/12 17:01:24 jkh Exp $";
+static char rcsid[] = "$Id: write.c,v 1.5 1994/02/20 16:06:12 rgrimes Exp $";
#endif
#include "as.h"
@@ -401,7 +401,7 @@ void write_object_file()
lie->add,
lie->sub,
lie->addnum,
- 0, 0, 2, 0, 0);
+ 0, 0, 2, 0, 0, NO_RELOC);
#else /* TC_NS32K */
#ifdef PIC
fix_new(lie->frag, lie->word_goes_here - lie->frag->fr_literal,
@@ -1004,6 +1004,12 @@ segT this_segment_type; /* N_TYPE bits for segment. */
as_bad("callj to difference of 2 symbols");
}
#endif /* TC_I960 */
+#ifdef PIC
+ if (flagseen['k'] &&
+ S_IS_EXTERNAL(add_symbolP)) {
+ as_bad("Can't reduce difference of external symbols in PIC code");
+ }
+#endif
add_number += S_GET_VALUE(add_symbolP) -
S_GET_VALUE(sub_symbolP);
@@ -1075,6 +1081,9 @@ segT this_segment_type; /* N_TYPE bits for segment. */
* even if defined here.
*/
if (!flagseen['k'] ||
+#ifdef TC_NS32K
+ fixP->fx_pcrel ||
+#endif
(fixP->fx_r_type != RELOC_GLOB_DAT &&
#ifdef TC_I386
/* XXX - This must be rationalized */