summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorpk <pk@NetBSD.org>1994-02-04 14:19:33 +0000
committerpk <pk@NetBSD.org>1994-02-04 14:19:33 +0000
commit9fce3345c03a590b32cac0cd751b8cdba2e21241 (patch)
tree150898c62420410a1099cc4cdbfdf97835f41735 /gnu
parentf6276c82f9dbec3833df64056b56e071d83dbdcc (diff)
Do the necessary fixups if no relocation structure is going to be output.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/gas/config/tc-sparc.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/gnu/usr.bin/gas/config/tc-sparc.c b/gnu/usr.bin/gas/config/tc-sparc.c
index c0de3d7f5a1..5274804fc77 100644
--- a/gnu/usr.bin/gas/config/tc-sparc.c
+++ b/gnu/usr.bin/gas/config/tc-sparc.c
@@ -18,7 +18,7 @@
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef lint
-static char rcsid[] = "$Id: tc-sparc.c,v 1.4 1994/02/01 21:49:18 pk Exp $";
+static char rcsid[] = "$Id: tc-sparc.c,v 1.5 1994/02/04 14:19:33 pk Exp $";
#endif
#define cypress 1234
@@ -457,7 +457,8 @@ char *str;
case SPECIAL_CASE_SET:
special_case = 0;
- know(the_insn.reloc == RELOC_HI22);
+ know(the_insn.reloc == RELOC_HI22 ||
+ the_insn.reloc == RELOC_BASE22);
/* See if "set" operand has no low-order bits; skip OR if so. */
if (the_insn.exp.X_seg == SEG_ABSOLUTE
&& ((the_insn.exp.X_add_number & 0x3FF) == 0))
@@ -473,7 +474,7 @@ char *str;
the_insn.exp.X_subtract_symbol,
the_insn.exp.X_add_number,
the_insn.pcrel,
- RELOC_LO10,
+ the_insn.reloc==RELOC_HI22?RELOC_LO10:RELOC_BASE10,
the_insn.exp.X_got_symbol);
return;
@@ -1267,10 +1268,21 @@ long val;
became ( ( 2 * addend ) + adjustment ). [and there should
be no cases that reach here anyway. */
case RELOC_32:
- buf[0] = 0; /* val >> 24; */
- buf[1] = 0; /* val >> 16; */
- buf[2] = 0; /* val >> 8; */
- buf[3] = 0; /* val; */
+ if (fixP->fx_addsy == NULL) {
+ /*
+ * Ok, the remarks above do not hold if the
+ * expression has been reduced to a number.
+ */
+ buf[0] = val >> 24;
+ buf[1] = val >> 16;
+ buf[2] = val >> 8;
+ buf[3] = val;
+ } else {
+ buf[0] = 0;
+ buf[1] = 0;
+ buf[2] = 0;
+ buf[3] = 0;
+ }
break;
case RELOC_JMP_TBL:
@@ -1421,6 +1433,7 @@ relax_addressT segment_address_in_file;
case RELOC_32:
if (!S_IS_EXTERNAL(fixP->fx_addsy))
break;
+ r_extern = 1;
r_index = fixP->fx_addsy->sy_number;
/*kflag = 1;*/
break;