OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [gas/] [config/] [tc-ppc.h] - Diff between revs 156 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 156 Rev 816
/* 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, 2003,
   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
   2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
   2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
   Written by Ian Lance Taylor, Cygnus Support.
   Written by Ian Lance Taylor, Cygnus Support.
 
 
   This file is part of GAS, the GNU Assembler.
   This file is part of GAS, the GNU Assembler.
 
 
   GAS is free software; you can redistribute it and/or modify
   GAS is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   the Free Software Foundation; either version 3, or (at your option)
   any later version.
   any later version.
 
 
   GAS is distributed in the hope that it will be useful,
   GAS is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   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
   along with GAS; see the file COPYING.  If not, write to the Free
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
   02110-1301, USA.  */
   02110-1301, USA.  */
 
 
#define TC_PPC
#define TC_PPC
 
 
struct fix;
struct fix;
 
 
/* Set the endianness we are using.  Default to big endian.  */
/* Set the endianness we are using.  Default to big endian.  */
#ifndef TARGET_BYTES_BIG_ENDIAN
#ifndef TARGET_BYTES_BIG_ENDIAN
#define TARGET_BYTES_BIG_ENDIAN 1
#define TARGET_BYTES_BIG_ENDIAN 1
#endif
#endif
 
 
/* If OBJ_COFF is defined, and TE_PE is not defined, we are assembling
/* 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
   XCOFF for AIX or PowerMac.  If TE_PE is defined, we are assembling
   COFF for Windows NT.  */
   COFF for Windows NT.  */
 
 
#ifdef OBJ_COFF
#ifdef OBJ_COFF
#ifndef TE_PE
#ifndef TE_PE
#define OBJ_XCOFF
#define OBJ_XCOFF
#endif
#endif
#endif
#endif
 
 
/* The target BFD architecture.  */
/* The target BFD architecture.  */
#define TARGET_ARCH (ppc_arch ())
#define TARGET_ARCH (ppc_arch ())
#define TARGET_MACH (ppc_mach ())
#define TARGET_MACH (ppc_mach ())
extern enum bfd_architecture ppc_arch (void);
extern enum bfd_architecture ppc_arch (void);
extern unsigned long ppc_mach (void);
extern unsigned long ppc_mach (void);
 
 
/* Whether or not the target is big endian */
/* Whether or not the target is big endian */
extern int target_big_endian;
extern int target_big_endian;
 
 
/* The target BFD format.  */
/* The target BFD format.  */
#define TARGET_FORMAT (ppc_target_format ())
#define TARGET_FORMAT (ppc_target_format ())
extern char *ppc_target_format (void);
extern char *ppc_target_format (void);
 
 
/* Permit temporary numeric labels.  */
/* Permit temporary numeric labels.  */
#define LOCAL_LABELS_FB 1
#define LOCAL_LABELS_FB 1
 
 
/* $ is used to refer to the current location.  */
/* $ is used to refer to the current location.  */
#define DOLLAR_DOT
#define DOLLAR_DOT
 
 
/* Strings do not use backslash escapes under COFF.  */
/* Strings do not use backslash escapes under COFF.  */
#ifdef OBJ_COFF
#ifdef OBJ_COFF
#define NO_STRING_ESCAPES
#define NO_STRING_ESCAPES
#endif
#endif
 
 
#ifdef OBJ_ELF
#ifdef OBJ_ELF
#define DIFF_EXPR_OK            /* foo-. gets turned into PC relative relocs */
#define DIFF_EXPR_OK            /* foo-. gets turned into PC relative relocs */
#endif
#endif
 
 
#if TARGET_BYTES_BIG_ENDIAN
#if TARGET_BYTES_BIG_ENDIAN
#define PPC_BIG_ENDIAN 1
#define PPC_BIG_ENDIAN 1
#else
#else
#define PPC_BIG_ENDIAN 0
#define PPC_BIG_ENDIAN 0
#endif
#endif
 
 
/* We don't need to handle .word strangely.  */
/* We don't need to handle .word strangely.  */
#define WORKING_DOT_WORD
#define WORKING_DOT_WORD
 
 
#define MAX_MEM_FOR_RS_ALIGN_CODE 4
#define MAX_MEM_FOR_RS_ALIGN_CODE 4
#define HANDLE_ALIGN(FRAGP)                                             \
#define HANDLE_ALIGN(FRAGP)                                             \
  if ((FRAGP)->fr_type == rs_align_code)                                \
  if ((FRAGP)->fr_type == rs_align_code)                                \
    ppc_handle_align (FRAGP);
    ppc_handle_align (FRAGP);
 
 
extern void ppc_handle_align (struct frag *);
extern void ppc_handle_align (struct frag *);
 
 
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
 
 
#define md_frag_check(FRAGP) \
#define md_frag_check(FRAGP) \
  if ((FRAGP)->has_code                                                 \
  if ((FRAGP)->has_code                                                 \
      && (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 3) != 0)          \
      && (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 3) != 0)          \
    as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line,                   \
    as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line,                   \
                  _("instruction address is not a multiple of 4"));
                  _("instruction address is not a multiple of 4"));
 
 
/* Arrange to store the value of ppc_cpu at the site of a fixup
/* Arrange to store the value of ppc_cpu at the site of a fixup
   for later use in md_apply_fix.  */
   for later use in md_apply_fix.  */
struct _ppc_fix_extra
struct _ppc_fix_extra
{
{
  unsigned long ppc_cpu;
  unsigned long ppc_cpu;
};
};
 
 
extern unsigned long ppc_cpu;
extern unsigned long ppc_cpu;
 
 
#define TC_FIX_TYPE struct _ppc_fix_extra
#define TC_FIX_TYPE struct _ppc_fix_extra
#define TC_INIT_FIX_DATA(FIXP) \
#define TC_INIT_FIX_DATA(FIXP) \
  do { (FIXP)->tc_fix_data.ppc_cpu = ppc_cpu; } while (0)
  do { (FIXP)->tc_fix_data.ppc_cpu = ppc_cpu; } while (0)


#ifdef TE_PE
#ifdef TE_PE
 
 
/* Question marks are permitted in symbol names.  */
/* Question marks are permitted in symbol names.  */
#define LEX_QM 1
#define LEX_QM 1
 
 
/* Don't adjust TOC relocs.  */
/* Don't adjust TOC relocs.  */
#define tc_fix_adjustable(FIX) ppc_pe_fix_adjustable (FIX)
#define tc_fix_adjustable(FIX) ppc_pe_fix_adjustable (FIX)
extern int ppc_pe_fix_adjustable (struct fix *);
extern int ppc_pe_fix_adjustable (struct fix *);
 
 
#endif
#endif
 
 
#ifdef OBJ_XCOFF
#ifdef OBJ_XCOFF
 
 
/* Declarations needed when generating XCOFF code.  XCOFF is an
/* Declarations needed when generating XCOFF code.  XCOFF is an
   extension of COFF, used only on the RS/6000.  Rather than create an
   extension of COFF, used only on the RS/6000.  Rather than create an
   obj-xcoff, we just use obj-coff, and handle the extensions here in
   obj-xcoff, we just use obj-coff, and handle the extensions here in
   tc-ppc.  */
   tc-ppc.  */
 
 
/* We need to keep some information for symbols.  */
/* We need to keep some information for symbols.  */
struct ppc_tc_sy
struct ppc_tc_sy
{
{
  /* We keep a few linked lists of symbols.  */
  /* We keep a few linked lists of symbols.  */
  symbolS *next;
  symbolS *next;
  /* Non-zero if the symbol should be output.  The RS/6000 assembler
  /* Non-zero if the symbol should be output.  The RS/6000 assembler
     only outputs symbols that are external or are mentioned in a
     only outputs symbols that are external or are mentioned in a
     .globl or .lglobl statement.  */
     .globl or .lglobl statement.  */
  int output;
  int output;
  /* The symbol class.  */
  /* The symbol class.  */
  int class;
  int class;
  /* The real name, if the symbol was renamed.  */
  /* The real name, if the symbol was renamed.  */
  char *real_name;
  char *real_name;
  /* For a csect symbol, the subsegment we are using.  This is zero
  /* For a csect symbol, the subsegment we are using.  This is zero
     for symbols that are not csects.  */
     for symbols that are not csects.  */
  subsegT subseg;
  subsegT subseg;
  /* For a csect or common symbol, the alignment to use.  */
  /* For a csect or common symbol, the alignment to use.  */
  int align;
  int align;
  /* For a function symbol, a symbol whose value is the size.  The
  /* For a function symbol, a symbol whose value is the size.  The
     field is NULL if there is no size.  */
     field is NULL if there is no size.  */
  symbolS *size;
  symbolS *size;
  /* For a csect symbol, the last symbol which has been defined in
  /* For a csect symbol, the last symbol which has been defined in
     this csect, or NULL if none have been defined so far.  For a .bs
     this csect, or NULL if none have been defined so far.  For a .bs
     symbol, the referenced csect symbol.  */
     symbol, the referenced csect symbol.  */
  symbolS *within;
  symbolS *within;
};
};
 
 
#define TC_SYMFIELD_TYPE struct ppc_tc_sy
#define TC_SYMFIELD_TYPE struct ppc_tc_sy
 
 
/* We need an additional auxent for function symbols.  */
/* We need an additional auxent for function symbols.  */
#define OBJ_COFF_MAX_AUXENTRIES 2
#define OBJ_COFF_MAX_AUXENTRIES 2
 
 
/* Square and curly brackets are permitted in symbol names.  */
/* Square and curly brackets are permitted in symbol names.  */
#define LEX_BR 3
#define LEX_BR 3
 
 
/* Canonicalize the symbol name.  */
/* Canonicalize the symbol name.  */
#define tc_canonicalize_symbol_name(name) ppc_canonicalize_symbol_name (name)
#define tc_canonicalize_symbol_name(name) ppc_canonicalize_symbol_name (name)
extern char *ppc_canonicalize_symbol_name (char *);
extern char *ppc_canonicalize_symbol_name (char *);
 
 
/* Get the symbol class from the name.  */
/* Get the symbol class from the name.  */
#define tc_symbol_new_hook(sym) ppc_symbol_new_hook (sym)
#define tc_symbol_new_hook(sym) ppc_symbol_new_hook (sym)
extern void ppc_symbol_new_hook (symbolS *);
extern void ppc_symbol_new_hook (symbolS *);
 
 
/* Set the symbol class of a label based on the csect.  */
/* Set the symbol class of a label based on the csect.  */
#define tc_frob_label(sym) ppc_frob_label (sym)
#define tc_frob_label(sym) ppc_frob_label (sym)
extern void ppc_frob_label (symbolS *);
extern void ppc_frob_label (symbolS *);
 
 
/* TOC relocs requires special handling.  */
/* TOC relocs requires special handling.  */
#define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
#define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
extern int ppc_fix_adjustable (struct fix *);
extern int ppc_fix_adjustable (struct fix *);
 
 
/* We need to set the section VMA.  */
/* We need to set the section VMA.  */
#define tc_frob_section(sec) ppc_frob_section (sec)
#define tc_frob_section(sec) ppc_frob_section (sec)
extern void ppc_frob_section (asection *);
extern void ppc_frob_section (asection *);
 
 
/* Finish up the symbol.  */
/* Finish up the symbol.  */
#define tc_frob_symbol(sym, punt) punt = ppc_frob_symbol (sym)
#define tc_frob_symbol(sym, punt) punt = ppc_frob_symbol (sym)
extern int ppc_frob_symbol (symbolS *);
extern int ppc_frob_symbol (symbolS *);
 
 
/* Finish up the entire symtab.  */
/* Finish up the entire symtab.  */
#define tc_adjust_symtab() ppc_adjust_symtab ()
#define tc_adjust_symtab() ppc_adjust_symtab ()
extern void ppc_adjust_symtab (void);
extern void ppc_adjust_symtab (void);
 
 
/* We also need to copy, in particular, the class of the symbol,
/* We also need to copy, in particular, the class of the symbol,
   over what obj-coff would otherwise have copied.  */
   over what obj-coff would otherwise have copied.  */
#define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src)                    \
#define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src)                    \
do {                                                            \
do {                                                            \
  if (SF_GET_GET_SEGMENT (dest))                                \
  if (SF_GET_GET_SEGMENT (dest))                                \
    S_SET_SEGMENT (dest, S_GET_SEGMENT (src));                  \
    S_SET_SEGMENT (dest, S_GET_SEGMENT (src));                  \
  symbol_get_tc (dest)->size = symbol_get_tc (src)->size;       \
  symbol_get_tc (dest)->size = symbol_get_tc (src)->size;       \
  symbol_get_tc (dest)->align = symbol_get_tc (src)->align;     \
  symbol_get_tc (dest)->align = symbol_get_tc (src)->align;     \
  symbol_get_tc (dest)->class = symbol_get_tc (src)->class;     \
  symbol_get_tc (dest)->class = symbol_get_tc (src)->class;     \
  symbol_get_tc (dest)->within = symbol_get_tc (src)->within;   \
  symbol_get_tc (dest)->within = symbol_get_tc (src)->within;   \
} while (0)
} while (0)
 
 
#endif /* OBJ_XCOFF */
#endif /* OBJ_XCOFF */
 
 
extern const char       ppc_symbol_chars[];
extern const char       ppc_symbol_chars[];
#define tc_symbol_chars ppc_symbol_chars
#define tc_symbol_chars ppc_symbol_chars
 
 
#ifdef OBJ_ELF
#ifdef OBJ_ELF
 
 
/* Support for SHF_EXCLUDE and SHT_ORDERED */
/* Support for SHF_EXCLUDE and SHT_ORDERED */
extern int ppc_section_letter (int, char **);
extern int ppc_section_letter (int, char **);
extern int ppc_section_type (char *, size_t);
extern int ppc_section_type (char *, size_t);
extern int ppc_section_word (char *, size_t);
extern int ppc_section_word (char *, size_t);
extern int ppc_section_flags (int, int, int);
extern int ppc_section_flags (int, int, int);
 
 
#define md_elf_section_letter(LETTER, PTR_MSG)  ppc_section_letter (LETTER, PTR_MSG)
#define md_elf_section_letter(LETTER, PTR_MSG)  ppc_section_letter (LETTER, PTR_MSG)
#define md_elf_section_type(STR, LEN)           ppc_section_type (STR, LEN)
#define md_elf_section_type(STR, LEN)           ppc_section_type (STR, LEN)
#define md_elf_section_word(STR, LEN)           ppc_section_word (STR, LEN)
#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_flags(FLAGS, ATTR, TYPE) ppc_section_flags (FLAGS, ATTR, TYPE)
 
 
#define tc_comment_chars ppc_comment_chars
#define tc_comment_chars ppc_comment_chars
extern const char *ppc_comment_chars;
extern const char *ppc_comment_chars;
 
 
/* Keep relocations relative to the GOT, or non-PC relative.  */
/* Keep relocations relative to the GOT, or non-PC relative.  */
#define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
#define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
extern int ppc_fix_adjustable (struct fix *);
extern int ppc_fix_adjustable (struct fix *);
 
 
/* Values passed to md_apply_fix don't include symbol values.  */
/* Values passed to md_apply_fix don't include symbol values.  */
#define MD_APPLY_SYM_VALUE(FIX) 0
#define MD_APPLY_SYM_VALUE(FIX) 0
 
 
#define tc_frob_file_before_adjust ppc_frob_file_before_adjust
#define tc_frob_file_before_adjust ppc_frob_file_before_adjust
extern void ppc_frob_file_before_adjust (void);
extern void ppc_frob_file_before_adjust (void);
 
 
#endif /* OBJ_ELF */
#endif /* OBJ_ELF */
 
 
#if defined (OBJ_ELF) || defined (OBJ_XCOFF)
#if defined (OBJ_ELF) || defined (OBJ_XCOFF)
#define TC_FORCE_RELOCATION(FIX) ppc_force_relocation (FIX)
#define TC_FORCE_RELOCATION(FIX) ppc_force_relocation (FIX)
extern int ppc_force_relocation (struct fix *);
extern int ppc_force_relocation (struct fix *);
#endif
#endif
 
 
/* call md_pcrel_from_section, not md_pcrel_from */
/* call md_pcrel_from_section, not md_pcrel_from */
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section(FIX, SEC)
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section(FIX, SEC)
extern long md_pcrel_from_section (struct fix *, segT);
extern long md_pcrel_from_section (struct fix *, segT);
 
 
#define md_parse_name(name, exp, mode, c) ppc_parse_name (name, exp)
#define md_parse_name(name, exp, mode, c) ppc_parse_name (name, exp)
extern int ppc_parse_name (const char *, struct expressionS *);
extern int ppc_parse_name (const char *, struct expressionS *);
 
 
#define md_operand(x)
#define md_operand(x)
 
 
#define md_cleanup() ppc_cleanup ()
#define md_cleanup() ppc_cleanup ()
extern void ppc_cleanup (void);
extern void ppc_cleanup (void);
 
 
#define TARGET_USE_CFIPOP 1
#define TARGET_USE_CFIPOP 1
 
 
#define tc_cfi_frame_initial_instructions ppc_cfi_frame_initial_instructions
#define tc_cfi_frame_initial_instructions ppc_cfi_frame_initial_instructions
extern void ppc_cfi_frame_initial_instructions (void);
extern void ppc_cfi_frame_initial_instructions (void);
 
 
#define tc_regname_to_dw2regnum tc_ppc_regname_to_dw2regnum
#define tc_regname_to_dw2regnum tc_ppc_regname_to_dw2regnum
extern int tc_ppc_regname_to_dw2regnum (char *);
extern int tc_ppc_regname_to_dw2regnum (char *);
 
 
extern int ppc_cie_data_alignment;
extern int ppc_cie_data_alignment;
 
 
#define DWARF2_LINE_MIN_INSN_LENGTH     4
#define DWARF2_LINE_MIN_INSN_LENGTH     4
#define DWARF2_DEFAULT_RETURN_COLUMN    0x41
#define DWARF2_DEFAULT_RETURN_COLUMN    0x41
#define DWARF2_CIE_DATA_ALIGNMENT       ppc_cie_data_alignment
#define DWARF2_CIE_DATA_ALIGNMENT       ppc_cie_data_alignment
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.