diff options
| author | pk <pk@NetBSD.org> | 1994-02-04 14:19:33 +0000 |
|---|---|---|
| committer | pk <pk@NetBSD.org> | 1994-02-04 14:19:33 +0000 |
| commit | 9fce3345c03a590b32cac0cd751b8cdba2e21241 (patch) | |
| tree | 150898c62420410a1099cc4cdbfdf97835f41735 /gnu | |
| parent | f6276c82f9dbec3833df64056b56e071d83dbdcc (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.c | 27 |
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; |
