X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-msp430.h;h=86c9117d83497a93b62c86b06c83be104f4d69c0;hb=08dc996fedde9143cda25720961684087b133640;hp=e540124bc82c4aad3ba7cc96586e2893ee0766e8;hpb=2469cfa28442dfd5e08b681dbcfd1ff098c6d420;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-msp430.h b/gas/config/tc-msp430.h index e540124bc8..86c9117d83 100644 --- a/gas/config/tc-msp430.h +++ b/gas/config/tc-msp430.h @@ -1,5 +1,5 @@ /* This file is tc-msp430.h - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002-2016 Free Software Foundation, Inc. Contributed by Dmitry Diky @@ -7,7 +7,7 @@ GAS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) + the Free Software Foundation; either version 3, or (at your option) any later version. GAS is distributed in the hope that it will be useful, @@ -17,12 +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. */ - -#ifndef BFD_ASSEMBLER - #error MSP430 support requires BFD_ASSEMBLER -#endif + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ #define TC_MSP430 /* By convention, you should define this macro in the `.h' file. For @@ -77,6 +73,8 @@ and define `md_create_long_jump' to create a long jump. */ #define MD_APPLY_FIX3 +/* Values passed to md_apply_fix don't include symbol values. */ +#define MD_APPLY_SYM_VALUE(FIX) 0 #define TC_HANDLES_FX_DONE @@ -93,7 +91,7 @@ of a PC relative instruction is the next instruction, so this macro would return the length of an instruction. */ -extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); +extern long md_pcrel_from_section (struct fix *, segT); #define LISTING_WORD_SIZE 2 /* The number of bytes to put into a word in a listing. This affects @@ -101,8 +99,9 @@ extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); example, a value of 2 might print `1234 5678' where a value of 1 would print `12 34 56 78'. The default value is 4. */ -#define LEX_DOLLAR 0 -/* MSP430 port does not use `$' as a logical line separator */ +/* Support symbols like: C$$IO$$. */ +#undef LEX_DOLLAR +#define LEX_DOLLAR 1 #define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) (P2VAR) = 0 /* An `.lcomm' directive with no explicit alignment parameter will @@ -112,3 +111,65 @@ extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); should do nothing. Some targets define a `.bss' directive that is also affected by this macro. The default definition will set P2VAR to the truncated power of two of sizes up to eight bytes. */ + +#define md_relax_frag(SEG, FRAGP, STRETCH) \ + msp430_relax_frag (SEG, FRAGP, STRETCH) +extern long msp430_relax_frag (segT, fragS *, long); + +#define TC_FORCE_RELOCATION_LOCAL(FIX) \ + msp430_force_relocation_local (FIX) +extern int msp430_force_relocation_local (struct fix *); + +/* We need to add reference symbols for .data/.bss. */ +#define tc_frob_section(sec) msp430_frob_section (sec) +extern void msp430_frob_section (asection *); + +extern int msp430_enable_relax; +extern int msp430_enable_polys; + +#define tc_fix_adjustable(FIX) msp430_fix_adjustable (FIX) +extern bfd_boolean msp430_fix_adjustable (struct fix *); + +/* Allow hexadeciaml numbers with 'h' suffix. Note that if the number + starts with a letter it will be interpreted as a symbol name not a + constant. Thus "beach" is a symbol not the hex value 0xbeac. So + is A5A5h... */ +#define NUMBERS_WITH_SUFFIX 1 + +#define md_end msp430_md_end +extern void msp430_md_end (void); + +/* Do not allow call frame debug info optimization as otherwise we could + generate the DWARF directives without the relocs necessary to patch + them up. */ +#define md_allow_eh_opt 0 + +/* The difference between same-section symbols may be affected by linker + relaxation, so do not resolve such expressions in the assembler. */ +#define md_allow_local_subtract(l,r,s) msp430_allow_local_subtract (l, r, s) +extern bfd_boolean msp430_allow_local_subtract (expressionS *, expressionS *, segT); + +#define RELOC_EXPANSION_POSSIBLE +#define MAX_RELOC_EXPANSION 2 + +#define DIFF_EXPR_OK + +/* Do not adjust relocations involving symbols in code sections, + because it breaks linker relaxations. This could be fixed in the + linker, but this fix is simpler, and it pretty much only affects + object size a little bit. */ +#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEC) \ + ( ((SEC)->flags & SEC_CODE) != 0 \ + || ((SEC)->flags & SEC_DEBUGGING) != 0 \ + || ! SEG_NORMAL (SEC) \ + || TC_FORCE_RELOCATION (FIX)) + +/* We validate subtract arguments within tc_gen_reloc(), + so don't report errors at this point. */ +#define TC_VALIDATE_FIX_SUB(FIX, SEG) 1 + +#define DWARF2_USE_FIXED_ADVANCE_PC 1 + +#define TC_LINKRELAX_FIXUP(seg) ((seg->flags & SEC_CODE) || (seg->flags & SEC_DEBUGGING)) + +#define DWARF2_ADDR_SIZE(bfd) 4