* config/tc-i386.c (tc_i386_fix_adjustable): Don't adjust PLT or

GOT relocs either.
This commit is contained in:
Ian Lance Taylor
1995-02-28 20:35:41 +00:00
parent afbc1a16b3
commit 0877841d73
2 changed files with 19 additions and 5 deletions

View File

@ -1,3 +1,8 @@
Tue Feb 28 15:34:14 1995 Ian Lance Taylor <ian@cygnus.com>
* config/tc-i386.c (tc_i386_fix_adjustable): Don't adjust PLT or
GOT relocs either.
Mon Feb 27 13:03:41 1995 Kung Hsu <kung@mexican.cygnus.com> Mon Feb 27 13:03:41 1995 Kung Hsu <kung@mexican.cygnus.com>
* configure.in: add a29k-*-vxworks configuration. * configure.in: add a29k-*-vxworks configuration.

View File

@ -27,6 +27,7 @@
#include <ctype.h> #include <ctype.h>
#include "as.h" #include "as.h"
#include "subsegs.h"
#include "obstack.h" #include "obstack.h"
#include "opcode/i386.h" #include "opcode/i386.h"
@ -686,15 +687,20 @@ reloc (size, pcrel, other)
* to make sure that the dynamic relocations are done correctly, so in * to make sure that the dynamic relocations are done correctly, so in
* some cases we force the original symbol to be used. * some cases we force the original symbol to be used.
*/ */
int
tc_i386_fix_adjustable(fixP) tc_i386_fix_adjustable(fixP)
fixS * fixP; fixS * fixP;
{ {
#ifndef OBJ_AOUT
/* Prevent all adjustments to global symbols. */ /* Prevent all adjustments to global symbols. */
if (!S_IS_LOCAL (fixP->fx_addsy)) if (S_IS_EXTERN (fixP->fx_addsy))
return 0; return 0;
#endif
#ifdef BFD_ASSEMBLER #ifdef BFD_ASSEMBLER
/* adjust_reloc_syms doesn't know about the GOT */ /* adjust_reloc_syms doesn't know about the GOT */
if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF) if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
|| fixP->fx_r_type == BFD_RELOC_386_PLT32
|| fixP->fx_r_type == BFD_RELOC_386_GOT32)
return 0; return 0;
#endif #endif
return 1; return 1;
@ -1788,9 +1794,12 @@ md_assemble (line)
insn_size += size; insn_size += size;
#ifdef BFD_ASSEMBLER #ifdef BFD_ASSEMBLER
if (r_type == BFD_RELOC_32 if (r_type == BFD_RELOC_32
&& i.imms[n]->X_op == O_symbol
&& GOT_symbol && GOT_symbol
&& GOT_symbol == i.imms[n]->X_add_symbol) && GOT_symbol == i.imms[n]->X_add_symbol
&& (i.imms[n]->X_op == O_symbol
|| (i.imms[n]->X_op == O_add
&& (i.imms[n]->X_op_symbol->sy_value.X_op
== O_subtract))))
{ {
r_type = BFD_RELOC_386_GOTPC; r_type = BFD_RELOC_386_GOTPC;
i.imms[n]->X_add_number += 3; i.imms[n]->X_add_number += 3;
@ -2158,7 +2167,7 @@ i386_operand (operand_string)
* into a temporary buffer... * into a temporary buffer...
*/ */
register char *cp; register char *cp;
if (cp = strchr(input_line_pointer,'@')) { if ((cp = strchr (input_line_pointer,'@')) != NULL) {
char tmpbuf[BUFSIZ]; char tmpbuf[BUFSIZ];
if(!GOT_symbol) if(!GOT_symbol)