Add SPARC ELF PIC support.
authorIan Lance Taylor <ian@airs.com>
Fri, 7 Jul 1995 17:03:21 +0000 (17:03 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 7 Jul 1995 17:03:21 +0000 (17:03 +0000)
* write.c (fixup_segment): Pass fixP to TC_RELOC_RTSYM_LOC_FIXUP,
not fixP->fx_r_type.
* config/tc-sparc.c (sparc_pic_code): New global variable.
(md_apply_fix): If generating PIC, adjust fx_addnumber for any non
PC relative reloc.
(tc_gen_reloc): If generating PIC, adjust various reloc types.
Remove fx_pcrel assert, since it is no longer true.
(md_parse_option): Handle -K PIC.
* config/tc-sparc.h (sparc_pic_code): Declare if OBJ_ELF.
(TC_RELOC_RTSYM_LOC_FIXUP): Define if OBJ_ELF.
(tc_fix_adjustable): Don't adjust PC relative relocs if PIC.
* config/tc-i386.h (TC_RELOC_RTSYM_LOC_FIXUP): Take a fixp, not a
reloc type.
PR 7131.

gas/ChangeLog
gas/config/tc-i386.h
gas/write.c

index 50b5dca..e61efb0 100644 (file)
@@ -1,5 +1,20 @@
 Fri Jul  7 11:17:27 1995  Ian Lance Taylor  <ian@cygnus.com>
 
+       Add SPARC ELF PIC support.
+       * write.c (fixup_segment): Pass fixP to TC_RELOC_RTSYM_LOC_FIXUP,
+       not fixP->fx_r_type.
+       * config/tc-sparc.c (sparc_pic_code): New global variable. 
+       (md_apply_fix): If generating PIC, adjust fx_addnumber for any non
+       PC relative reloc.
+       (tc_gen_reloc): If generating PIC, adjust various reloc types.
+       Remove fx_pcrel assert, since it is no longer true.
+       (md_parse_option): Handle -K PIC.
+       * config/tc-sparc.h (sparc_pic_code): Declare if OBJ_ELF.
+       (TC_RELOC_RTSYM_LOC_FIXUP): Define if OBJ_ELF.
+       (tc_fix_adjustable): Don't adjust PC relative relocs if PIC.
+       * config/tc-i386.h (TC_RELOC_RTSYM_LOC_FIXUP): Take a fixp, not a
+       reloc type.
+
        * Makefile.in (Makefile): Add dependency on conf.in, so that conf
        is rebuilt when conf.in changes.
 
index 85fc584..c3e84fb 100644 (file)
@@ -1,5 +1,5 @@
 /* tc-i386.h -- Header file for tc-i386.c
-   Copyright (C) 1989, 1992 Free Software Foundation.
+   Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation.
 
    This file is part of GAS, the GNU Assembler.
 
    checked here.  I am not sure if some of the others are ever used with
    pcrel, but it is easier to be safe than sorry. */
 
-#define TC_RELOC_RTSYM_LOC_FIXUP(X)  \
-             ((X) != BFD_RELOC_386_PLT32 &&  \
-             (X) != BFD_RELOC_386_GOT32 &&  \
-             (X) != BFD_RELOC_386_GOTPC)
+#define TC_RELOC_RTSYM_LOC_FIXUP(FIX)  \
+  ((FIX)->fx_r_type != BFD_RELOC_386_PLT32 \
+   && (FIX)->fx_r_type != BFD_RELOC_386_GOT32 \
+   && (FIX)->fx_r_type != BFD_RELOC_386_GOTPC)
 
 #define TARGET_ARCH            bfd_arch_i386
 #define TARGET_BYTES_BIG_ENDIAN        0
index f74a93e..702aaa2 100644 (file)
@@ -1,5 +1,6 @@
 /* write.c - emit .o file
-   Copyright (C) 1986, 87, 90, 91, 92, 93, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1986, 87, 90, 91, 92, 93, 94, 1995
+   Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -2243,7 +2244,7 @@ fixup_segment (fixP, this_segment_type)
       if (add_symbolP)
        {
          if (add_symbol_segment == this_segment_type && pcrel && !plt
-             && TC_RELOC_RTSYM_LOC_FIXUP (fixP->fx_r_type))
+             && TC_RELOC_RTSYM_LOC_FIXUP (fixP))
            {
              /*
               * This fixup was made when the symbol's segment was