Apply Nick Clifton's suggestion.
[deliverable/binutils-gdb.git] / gas / config / tc-hppa.h
index 35ec493c702d0a2d070fa03a03957a35ca7182b2..1ea9daa3d4582bf2f23dbf9baf42c6d42f116bd0 100644 (file)
@@ -1,6 +1,6 @@
-/* tc-hppa.h -- Header file for the PA */
-
-/* Copyright (C) 1989, 1993 Free Software Foundation, Inc.
+/* tc-hppa.h -- Header file for the PA
+   Copyright (C) 1989, 93, 94, 95, 96, 97, 98, 99, 2000
+   Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -15,8 +15,9 @@
    GNU General Public License for more details.
 
    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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   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.  */
 
 
 /* HP PA-RISC support was contributed by the Center for Software Science
@@ -31,7 +32,7 @@
    already far too much object file format dependent code in this file.
    In theory this file should contain only exported functions, structures
    and data declarations common to all PA assemblers.  */
-   
+
 #ifndef _TC_HPPA_H
 #define _TC_HPPA_H
 
 #define TC_HPPA        1
 #endif
 
+#define TARGET_BYTES_BIG_ENDIAN 1
+
 #define TARGET_ARCH bfd_arch_hppa
 
-/* FIXME.  The lack of a place to put things which are both target cpu
-   and target format dependent makes hacks like this necessary.  */
+#define WORKING_DOT_WORD
+
 #ifdef OBJ_ELF
-#include "../bfd/elf32-hppa.h"
+#if TARGET_ARCH_SIZE == 64
+#include "bfd/elf64-hppa.h"
+#define TARGET_FORMAT "elf64-hppa"
+#else
+#include "bfd/elf32-hppa.h"
 #define TARGET_FORMAT "elf32-hppa"
 #endif
-  
+#endif
+
 #ifdef OBJ_SOM
-#include "../bfd/som.h"
+#include "bfd/som.h"
 #define TARGET_FORMAT "som"
 #endif
 
+#ifdef TE_LINUX
+/* Define to compile in an extra assembler option, -c, which enables a
+   warning (once per file) when a comment is encountered.
+   The hppa comment char is a `;' which tends to occur in random C asm
+   statements.  A semicolon is a line separator for most assemblers.
+   It's hard to find these lurking semicolons.  Thus...  */
+#define WARN_COMMENTS 1
+#endif
+
 /* FIXME.  Why oh why aren't these defined somewhere globally?  */
 #ifndef FALSE
 #define FALSE   (0)
 #define TRUE    (!FALSE)
 #endif
 
-/* Local labels have an "L$" prefix.  */
-#define LOCAL_LABEL(name) ((name)[0] == 'L' && (name)[1] == '$')
 #define ASEC_NULL (asection *)0
 
-/* sym1 - sym2 is valid on the PA as long as sym2 is $global$.  */
-
-#define SEG_DIFF_ALLOWED
-  
-/* FIXME.  */
-#ifdef OBJ_ELF
-extern void elf_hppa_final_processing PARAMS ((void));
-extern void hppa_tc_symbol PARAMS ((bfd *, elf_symbol_type *, int));
-#endif
-
-extern void hppa_tc_make_sections PARAMS ((bfd *));
+/* pa_define_label gets used outside of tc-hppa.c via tc_frob_label.  */
+extern void pa_define_label PARAMS ((symbolS *));
 
-/* FIXME.  This should be static and declared in tc-hppa.c, but 
-   pa_define_label gets used outside of tc-hppa.c via tc_frob_label.
-   Should also be PARAMized, but symbolS isn't available here.  */
-extern void pa_define_label ();
+extern void parse_cons_expression_hppa PARAMS ((expressionS *));
+extern void cons_fix_new_hppa PARAMS ((fragS *, int, int, expressionS *));
+extern int hppa_force_relocation PARAMS ((struct fix *));
 
-/* FIXME.  Types not available here, so they can't be PARAMized.  */
-extern void parse_cons_expression_hppa ();
-extern void cons_fix_new_hppa ();
+/* This gets called before writing the object file to make sure
+   things like entry/exit and proc/procend pairs match.  */
+extern void pa_check_eof PARAMS ((void));
+#define tc_frob_file pa_check_eof
 
 #define tc_frob_label(sym) pa_define_label (sym)
 
@@ -91,14 +97,14 @@ extern void cons_fix_new_hppa ();
 #define tc_headers_hook(headers) {;}
 
 #define RELOC_EXPANSION_POSSIBLE
-#define MAX_RELOC_EXPANSION 5
+#define MAX_RELOC_EXPANSION 6
 
 /* FIXME.  More things which are both HPPA and ELF specific.  There is 
    nowhere to put such things.  */
 #ifdef OBJ_ELF
-#define elf_tc_symbol          hppa_tc_symbol
-#define elf_tc_make_sections   hppa_tc_make_sections
 #define elf_tc_final_processing        elf_hppa_final_processing
+void elf_hppa_final_processing PARAMS ((void));
+void pa_end_of_source PARAMS ((void));
 #endif
 
 /* The PA needs to parse field selectors in .byte, etc.  */
@@ -116,7 +122,54 @@ extern void cons_fix_new_hppa ();
 /* Similarly for an exclamation point.  It is used in FP comparison
    instructions and as an end of line marker.  When used in an instruction
    it will always follow a comma.  */
-#define TC_EOL_IN_INSN(PTR)    (is_end_of_line[*(PTR)] && (PTR)[-1] == ',')
+#define TC_EOL_IN_INSN(PTR)    (*(PTR) == '!' && (PTR)[-1] == ',')
 
+int hppa_fix_adjustable PARAMS((struct fix *));
 #define tc_fix_adjustable hppa_fix_adjustable
+
+/* Because of the strange PA calling conventions, it is sometimes
+   necessary to emit a relocation for a call even though it would
+   normally appear safe to handle it completely within GAS.  */
+#define TC_FORCE_RELOCATION(FIXP) hppa_force_relocation (FIXP)
+
+#ifdef OBJ_SOM
+/* If a symbol is imported, but never used, then the symbol should
+   *not* end up in the symbol table.  Likewise for absolute symbols
+   with local scope.  */
+#define tc_frob_symbol(sym,punt) \
+    if ((S_GET_SEGMENT (sym) == &bfd_und_section && ! symbol_used_p (sym)) \
+       || (S_GET_SEGMENT (sym) == &bfd_abs_section \
+           && ! S_IS_EXTERNAL (sym))) \
+      punt = 1
+
+/* We need to be able to make relocations involving the difference of
+   two symbols.  This includes the difference of two symbols when
+   one of them is undefined (this comes up in PIC code generation). 
+
+   We don't define DIFF_EXPR_OK because it does the wrong thing if
+   the add symbol is undefined and the sub symbol is a symbol in
+   the same section as the relocation.  We also need some way to
+   specialize some code in adjust_reloc_syms.  */
+#define UNDEFINED_DIFFERENCE_OK
+#endif
+
+#ifdef OBJ_ELF
+#define tc_frob_symbol(sym,punt) \
+  { \
+    if ((S_GET_SEGMENT (sym) == &bfd_und_section && ! symbol_used_p (sym)) \
+       || (S_GET_SEGMENT (sym) == &bfd_abs_section \
+           && ! S_IS_EXTERNAL (sym)) \
+       || strcmp (S_GET_NAME (sym), "$global$") == 0) \
+      punt = 1; \
+  }
+#endif
+
+#define md_operand(x)
+#ifdef OBJ_ELF
+#define md_end() pa_end_of_source ()
+#endif
+
+#define TC_FIX_TYPE PTR
+#define TC_INIT_FIX_DATA(FIXP) ((FIXP)->tc_fix_data = NULL)
+
 #endif /* _TC_HPPA_H */
This page took 0.024865 seconds and 4 git commands to generate.