gas/
[deliverable/binutils-gdb.git] / gas / config / tc-ppc.h
index 3612f43d66abe8bb464ad405028c97e2063f1334..f7c2da619cbc8311d67f7c2b9186f39e715e9639 100644 (file)
@@ -1,6 +1,6 @@
 /* tc-ppc.h -- Header file for tc-ppc.c.
 /* tc-ppc.h -- Header file for tc-ppc.c.
-   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
-   Free Software Foundation, Inc.
+   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+   2004, 2005 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GAS, the GNU Assembler.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GAS, the GNU Assembler.
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #define TC_PPC
 
 
 #define TC_PPC
 
-#ifdef ANSI_PROTOTYPES
 struct fix;
 struct fix;
-#endif
 
 /* Set the endianness we are using.  Default to big endian.  */
 #ifndef TARGET_BYTES_BIG_ENDIAN
 #define TARGET_BYTES_BIG_ENDIAN 1
 #endif
 
 
 /* Set the endianness we are using.  Default to big endian.  */
 #ifndef TARGET_BYTES_BIG_ENDIAN
 #define TARGET_BYTES_BIG_ENDIAN 1
 #endif
 
-#ifndef BFD_ASSEMBLER
- #error PowerPC support requires BFD_ASSEMBLER
-#endif
-
 /* If OBJ_COFF is defined, and TE_PE is not defined, we are assembling
    XCOFF for AIX or PowerMac.  If TE_PE is defined, we are assembling
    COFF for Windows NT.  */
 /* If OBJ_COFF is defined, and TE_PE is not defined, we are assembling
    XCOFF for AIX or PowerMac.  If TE_PE is defined, we are assembling
    COFF for Windows NT.  */
@@ -90,7 +84,7 @@ extern char *ppc_target_format PARAMS ((void));
                      - ((FRAGP)->fr_address + (FRAGP)->fr_fix));       \
       if (count != 0 && (count & 3) == 0)                              \
        {                                                               \
                      - ((FRAGP)->fr_address + (FRAGP)->fr_fix));       \
       if (count != 0 && (count & 3) == 0)                              \
        {                                                               \
-         unsigned char *dest = (FRAGP)->fr_literal + (FRAGP)->fr_fix;  \
+         char *dest = (FRAGP)->fr_literal + (FRAGP)->fr_fix;           \
                                                                        \
          (FRAGP)->fr_var = 4;                                          \
          if (target_big_endian)                                        \
                                                                        \
          (FRAGP)->fr_var = 4;                                          \
          if (target_big_endian)                                        \
@@ -110,6 +104,11 @@ extern char *ppc_target_format PARAMS ((void));
        }                                                               \
     }
 
        }                                                               \
     }
 
+#define md_frag_check(FRAGP) \
+  if ((FRAGP)->has_code                                                        \
+      && (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 3) != 0)                \
+    as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line,                  \
+                 _("instruction address is not a multiple of 4"));
 \f
 #ifdef TE_PE
 
 \f
 #ifdef TE_PE
 
@@ -222,22 +221,6 @@ extern int ppc_section_flags PARAMS ((int, int, int));
 #define md_elf_section_word(STR, LEN)          ppc_section_word (STR, LEN)
 #define md_elf_section_flags(FLAGS, ATTR, TYPE)        ppc_section_flags (FLAGS, ATTR, TYPE)
 
 #define md_elf_section_word(STR, LEN)          ppc_section_word (STR, LEN)
 #define md_elf_section_flags(FLAGS, ATTR, TYPE)        ppc_section_flags (FLAGS, ATTR, TYPE)
 
-/* Add extra PPC sections -- Note, for now, make .sbss2 and .PPC.EMB.sbss0 a
-   normal section, and not a bss section so that the linker doesn't crater
-   when trying to make more than 2 sections.  */
-#define ELF_TC_SPECIAL_SECTIONS \
-  { ".tags",           SHT_ORDERED,    SHF_ALLOC },                    \
-  { ".sdata",          SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE },        \
-  { ".sbss",           SHT_NOBITS,     SHF_ALLOC + SHF_WRITE },        \
-  { ".sdata2",         SHT_PROGBITS,   SHF_ALLOC },                    \
-  { ".sbss2",          SHT_PROGBITS,   SHF_ALLOC },                    \
-  { ".PPC.EMB.apuinfo",       SHT_NOTE,       0 }, \
-  { ".PPC.EMB.sdata0", SHT_PROGBITS,   SHF_ALLOC },                    \
-  { ".PPC.EMB.sbss0",  SHT_PROGBITS,   SHF_ALLOC },                    \
-  /* Extra sections for 64-bit ELF PPC.  */                            \
-  { ".toc",            SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE},         \
-  { ".tocbss",         SHT_NOBITS,     SHF_ALLOC + SHF_WRITE},
-
 #define tc_comment_chars ppc_comment_chars
 extern const char *ppc_comment_chars;
 
 #define tc_comment_chars ppc_comment_chars
 extern const char *ppc_comment_chars;
 
@@ -245,7 +228,7 @@ extern const char *ppc_comment_chars;
 #define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
 extern int ppc_fix_adjustable PARAMS ((struct fix *));
 
 #define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
 extern int ppc_fix_adjustable PARAMS ((struct fix *));
 
-/* Values passed to md_apply_fix3 don't include symbol values.  */
+/* Values passed to md_apply_fix don't include symbol values.  */
 #define MD_APPLY_SYM_VALUE(FIX) 0
 
 #define tc_frob_file_before_adjust ppc_frob_file_before_adjust
 #define MD_APPLY_SYM_VALUE(FIX) 0
 
 #define tc_frob_file_before_adjust ppc_frob_file_before_adjust
@@ -253,14 +236,16 @@ extern void ppc_frob_file_before_adjust PARAMS ((void));
 
 #endif /* OBJ_ELF */
 
 
 #endif /* OBJ_ELF */
 
+#if defined (OBJ_ELF) || defined (OBJ_XCOFF)
 #define TC_FORCE_RELOCATION(FIX) ppc_force_relocation (FIX)
 extern int ppc_force_relocation PARAMS ((struct fix *));
 #define TC_FORCE_RELOCATION(FIX) ppc_force_relocation (FIX)
 extern int ppc_force_relocation PARAMS ((struct fix *));
+#endif
 
 /* call md_pcrel_from_section, not md_pcrel_from */
 #define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section(FIX, SEC)
 extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
 
 
 /* call md_pcrel_from_section, not md_pcrel_from */
 #define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section(FIX, SEC)
 extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
 
-#define md_parse_name(name, exp, c) ppc_parse_name (name, exp)
+#define md_parse_name(name, exp, mode, c) ppc_parse_name (name, exp)
 extern int ppc_parse_name PARAMS ((const char *, struct expressionS *));
 
 #define md_operand(x)
 extern int ppc_parse_name PARAMS ((const char *, struct expressionS *));
 
 #define md_operand(x)
This page took 0.028925 seconds and 4 git commands to generate.