diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2010-10-19 21:13:25 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2010-10-19 21:13:25 +0000 |
commit | 7a815afd9b5121ee0f65dc1e1de1c0de6de97679 (patch) | |
tree | f61b968a46c92e81f6de581582cb064bf9dca27d /gas/config/tc-ia64.h | |
parent | 42f6b9ffef1927d55d15075d9e810435c590c404 (diff) |
Notes
Diffstat (limited to 'gas/config/tc-ia64.h')
-rw-r--r-- | gas/config/tc-ia64.h | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/gas/config/tc-ia64.h b/gas/config/tc-ia64.h index dcc2c299602dc..c17494beb16bd 100644 --- a/gas/config/tc-ia64.h +++ b/gas/config/tc-ia64.h @@ -1,5 +1,6 @@ /* tc-ia64.h -- Header file for tc-ia64.c. - Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 + Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of GAS, the GNU Assembler. @@ -16,8 +17,8 @@ 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. */ + the Free Software Foundation, 51 Franklin Street - Fifth Floor, + Boston, MA 02110-1301, USA. */ #include "opcode/ia64.h" #include "elf/ia64.h" @@ -74,10 +75,13 @@ extern const char *ia64_target_format PARAMS ((void)); #define NEED_INDEX_OPERATOR /* [ ] is index operator */ #define QUOTES_IN_INSN /* allow `string "foo;bar"' */ -#define LEX_AT LEX_NAME /* allow `@' inside name */ -#define LEX_QM LEX_NAME /* allow `?' inside name */ +#define LEX_AT (LEX_NAME|LEX_BEGIN_NAME) /* allow `@' inside name */ +#define LEX_QM (LEX_NAME|LEX_BEGIN_NAME) /* allow `?' inside name */ #define LEX_HASH LEX_END_NAME /* allow `#' ending a name */ +extern const char ia64_symbol_chars[]; +#define tc_symbol_chars ia64_symbol_chars + #define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0 struct ia64_fix @@ -94,7 +98,7 @@ extern void ia64_frob_label PARAMS((struct symbol *sym)); extern int ia64_frob_symbol PARAMS((struct symbol *sym)); #endif extern void ia64_flush_pending_output PARAMS((void)); -extern int ia64_parse_name (char *name, expressionS *e); +extern int ia64_parse_name PARAMS((char *name, expressionS *e, char *nextP)); extern int ia64_optimize_expr PARAMS((expressionS *l, operatorT op, expressionS *r)); extern void ia64_cons_align PARAMS((int)); @@ -125,7 +129,7 @@ extern void ia64_convert_frag (fragS *); #define tc_frob_symbol(s,p) p |= ia64_frob_symbol (s) #endif /* TE_HPUX */ #define md_flush_pending_output() ia64_flush_pending_output () -#define md_parse_name(s,e,c) ia64_parse_name (s, e) +#define md_parse_name(s,e,m,c) ia64_parse_name (s, e, c) #define tc_canonicalize_symbol_name(s) ia64_canonicalize_symbol_name (s) #define tc_canonicalize_section_name(s) ia64_canonicalize_symbol_name (s) #define md_optimize_expr(l,o,r) ia64_optimize_expr (l, o, r) @@ -158,6 +162,14 @@ extern void ia64_convert_frag (fragS *); #define TC_FRAG_TYPE int #define TC_FRAG_INIT(FRAGP) do {(FRAGP)->tc_frag_data = 0;}while (0) +/* Give an error if a frag containing code is not aligned to a 16 byte + boundary. */ +#define md_frag_check(FRAGP) \ + if ((FRAGP)->has_code \ + && (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 15) != 0) \ + as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line, \ + _("instruction address is not a multiple of 16")); + #define MAX_MEM_FOR_RS_ALIGN_CODE (15 + 16) #define WORKING_DOT_WORD /* don't do broken word processing for now */ @@ -229,7 +241,7 @@ typedef struct unw_r_record struct { unsigned char *i; - unsigned long fr_mem; + unsigned int fr_mem; unsigned char gr_mem; unsigned char br_mem; } mask; @@ -237,17 +249,22 @@ typedef struct unw_r_record typedef struct unw_p_record { - void *imask; + struct unw_rec_list *next; unsigned long t; unsigned long size; - unsigned long spoff; - unsigned long br; - unsigned long pspoff; - unsigned short gr; - unsigned short rmask; - unsigned short grmask; - unsigned long frmask; - unsigned short brmask; + union + { + unsigned long sp; + unsigned long psp; + } off; + union + { + unsigned short gr; + unsigned short br; + } r; + unsigned char grmask; + unsigned char brmask; + unsigned int frmask; unsigned char abi; unsigned char context; } unw_p_record; @@ -262,10 +279,13 @@ typedef struct unw_b_record typedef struct unw_x_record { unsigned long t; - unsigned long spoff; - unsigned long pspoff; + union + { + unsigned long spoff; + unsigned long pspoff; + unsigned int reg; + } where; unsigned short reg; - unsigned short treg; unsigned short qp; unsigned short ab; /* Value of the AB field.. */ unsigned short xy; /* Value of the XY field.. */ |