Index: gcc/gcc/config/avr/avr.h |
diff --git a/gcc/gcc/config/avr/avr.h b/gcc/gcc/config/avr/avr.h |
index 54c607a0e04631137eb942eb78b888c7c428f9e5..522f00f45617bfa39e536bcc2b0ec0249adf83a1 100644 |
--- a/gcc/gcc/config/avr/avr.h |
+++ b/gcc/gcc/config/avr/avr.h |
@@ -1,8 +1,9 @@ |
/* Definitions of target machine for GNU compiler, |
for ATMEL AVR at90s8515, ATmega103/103L, ATmega603/603L microcontrollers. |
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, |
- 2008, 2009 Free Software Foundation, Inc. |
- Contributed by Denis Chertykov (denisc@overta.ru) |
+ 2008, 2009, 2010 |
+ Free Software Foundation, Inc. |
+ Contributed by Denis Chertykov (chertykov@gmail.com) |
This file is part of GCC. |
@@ -44,60 +45,67 @@ struct base_arch_s { |
/* Core have 'EICALL' and 'EIJMP' instructions. */ |
int have_eijmp_eicall; |
- /* Reserved. */ |
+ /* Reserved for xmega architecture. */ |
int reserved; |
+ |
+ /* Reserved for xmega architecture. */ |
+ int reserved2; |
+ /* Default start of data section address for architecture. */ |
+ int default_data_section_start; |
+ |
const char *const macro; |
+ |
+ /* Architecture name. */ |
+ const char *const arch_name; |
}; |
-extern const struct base_arch_s *avr_current_arch; |
+/* These names are used as the index into the avr_arch_types[] table |
+ above. */ |
-#define TARGET_CPU_CPP_BUILTINS() \ |
- do \ |
- { \ |
- builtin_define_std ("AVR"); \ |
- if (avr_current_arch->macro) \ |
- builtin_define (avr_current_arch->macro); \ |
- if (avr_extra_arch_macro) \ |
- builtin_define (avr_extra_arch_macro); \ |
- if (avr_current_arch->have_elpm) \ |
- builtin_define ("__AVR_HAVE_RAMPZ__"); \ |
- if (avr_current_arch->have_elpm) \ |
- builtin_define ("__AVR_HAVE_ELPM__"); \ |
- if (avr_current_arch->have_elpmx) \ |
- builtin_define ("__AVR_HAVE_ELPMX__"); \ |
- if (avr_current_arch->have_movw_lpmx) \ |
- { \ |
- builtin_define ("__AVR_HAVE_MOVW__"); \ |
- builtin_define ("__AVR_HAVE_LPMX__"); \ |
- } \ |
- if (avr_current_arch->asm_only) \ |
- builtin_define ("__AVR_ASM_ONLY__"); \ |
- if (avr_current_arch->have_mul) \ |
- { \ |
- builtin_define ("__AVR_ENHANCED__"); \ |
- builtin_define ("__AVR_HAVE_MUL__"); \ |
- } \ |
- if (avr_current_arch->have_jmp_call) \ |
- { \ |
- builtin_define ("__AVR_MEGA__"); \ |
- builtin_define ("__AVR_HAVE_JMP_CALL__"); \ |
- } \ |
- if (avr_current_arch->have_eijmp_eicall) \ |
- { \ |
- builtin_define ("__AVR_HAVE_EIJMP_EICALL__"); \ |
- builtin_define ("__AVR_3_BYTE_PC__"); \ |
- } \ |
- else \ |
- { \ |
- builtin_define ("__AVR_2_BYTE_PC__"); \ |
- } \ |
- if (TARGET_NO_INTERRUPTS) \ |
- builtin_define ("__NO_INTERRUPTS__"); \ |
- } \ |
- while (0) |
+enum avr_arch |
+{ |
+ ARCH_UNKNOWN, |
+ ARCH_AVR1, |
+ ARCH_AVR2, |
+ ARCH_AVR25, |
+ ARCH_AVR3, |
+ ARCH_AVR31, |
+ ARCH_AVR35, |
+ ARCH_AVR4, |
+ ARCH_AVR5, |
+ ARCH_AVR51, |
+ ARCH_AVR6 |
+}; |
+ |
+struct mcu_type_s { |
+ /* Device name. */ |
+ const char *const name; |
+ |
+ /* Index in avr_arch_types[]. */ |
+ int arch; |
+ |
+ /* Must lie outside user's namespace. NULL == no macro. */ |
+ const char *const macro; |
+ |
+ /* Stack pointer have 8 bits width. */ |
+ int short_sp; |
+ |
+ /* Start of data section. */ |
+ int data_section_start; |
+ |
+ /* Name of device library. */ |
+ const char *const library_name; |
+}; |
+/* Preprocessor macros to define depending on MCU type. */ |
extern const char *avr_extra_arch_macro; |
+extern const struct base_arch_s *avr_current_arch; |
+extern const struct mcu_type_s *avr_current_device; |
+extern const struct mcu_type_s avr_mcu_types[]; |
+extern const struct base_arch_s avr_arch_types[]; |
+ |
+#define TARGET_CPU_CPP_BUILTINS() avr_cpu_cpp_builtins (pfile) |
#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) |
extern GTY(()) section *progmem_section; |
@@ -109,6 +117,7 @@ extern GTY(()) section *progmem_section; |
#define AVR_HAVE_LPMX (avr_current_arch->have_movw_lpmx) |
#define AVR_HAVE_RAMPZ (avr_current_arch->have_elpm) |
#define AVR_HAVE_EIJMP_EICALL (avr_current_arch->have_eijmp_eicall) |
+#define AVR_HAVE_8BIT_SP (avr_current_device->short_sp || TARGET_TINY_STACK) |
#define AVR_2_BYTE_PC (!AVR_HAVE_EIJMP_EICALL) |
#define AVR_3_BYTE_PC (AVR_HAVE_EIJMP_EICALL) |
@@ -350,8 +359,6 @@ enum reg_class { |
#define STATIC_CHAIN_REGNUM 2 |
-#define FRAME_POINTER_REQUIRED frame_pointer_required_p() |
- |
/* Offset from the frame pointer register value to the top of the stack. */ |
#define FRAME_POINTER_CFA_OFFSET(FNDECL) 0 |
@@ -360,18 +367,10 @@ enum reg_class { |
{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \ |
,{FRAME_POINTER_REGNUM+1,STACK_POINTER_REGNUM+1}} |
-#define CAN_ELIMINATE(FROM, TO) (((FROM) == ARG_POINTER_REGNUM \ |
- && (TO) == FRAME_POINTER_REGNUM) \ |
- || (((FROM) == FRAME_POINTER_REGNUM \ |
- || (FROM) == FRAME_POINTER_REGNUM+1) \ |
- && ! FRAME_POINTER_REQUIRED \ |
- )) |
- |
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ |
- OFFSET = initial_elimination_offset (FROM, TO) |
+ OFFSET = avr_initial_elimination_offset (FROM, TO) |
-#define RETURN_ADDR_RTX(count, x) \ |
- gen_rtx_MEM (Pmode, memory_address (Pmode, plus_constant (tem, 1))) |
+#define RETURN_ADDR_RTX(count, tem) avr_return_addr_rtx (count, tem) |
/* Don't use Push rounding. expr.c: emit_single_push_insn is broken |
for POST_DEC targets (PR27386). */ |
@@ -409,46 +408,13 @@ extern int avr_reg_order[]; |
#define HAVE_POST_INCREMENT 1 |
#define HAVE_PRE_DECREMENT 1 |
-#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X) |
- |
#define MAX_REGS_PER_ADDRESS 1 |
-#ifdef REG_OK_STRICT |
-# define GO_IF_LEGITIMATE_ADDRESS(mode, operand, ADDR) \ |
-{ \ |
- if (legitimate_address_p (mode, operand, 1)) \ |
- goto ADDR; \ |
-} |
-# else |
-# define GO_IF_LEGITIMATE_ADDRESS(mode, operand, ADDR) \ |
-{ \ |
- if (legitimate_address_p (mode, operand, 0)) \ |
- goto ADDR; \ |
-} |
-#endif |
- |
#define REG_OK_FOR_BASE_NOSTRICT_P(X) \ |
(REGNO (X) >= FIRST_PSEUDO_REGISTER || REG_OK_FOR_BASE_STRICT_P(X)) |
#define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X)) |
-#ifdef REG_OK_STRICT |
-# define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P (X) |
-#else |
-# define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NOSTRICT_P (X) |
-#endif |
- |
-#define REG_OK_FOR_INDEX_P(X) 0 |
- |
-#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \ |
-{ \ |
- (X) = legitimize_address (X, OLDX, MODE); \ |
- if (memory_address_p (MODE, X)) \ |
- goto WIN; \ |
-} |
- |
-#define XEXP_(X,Y) (X) |
- |
/* LEGITIMIZE_RELOAD_ADDRESS will allow register R26/27 to be used, where it |
is no worse than normal base pointers R28/29 and R30/31. For example: |
If base offset is greater than 63 bytes or for R++ or --R addressing. */ |
@@ -494,8 +460,6 @@ do { \ |
} \ |
} while(0) |
-#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) |
- |
#define LEGITIMATE_CONSTANT_P(X) 1 |
#define REGISTER_MOVE_COST(MODE, FROM, TO) ((FROM) == STACK_REG ? 6 \ |
@@ -732,11 +696,10 @@ fprintf (STREAM, "\t.skip %lu,0\n", (unsigned long)(N)) |
fprintf (STREAM, "\t.p2align\t%d\n", POWER); \ |
} while (0) |
-#define CASE_VECTOR_MODE HImode |
+#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ |
+ default_elf_asm_output_external (FILE, DECL, NAME) |
-extern int avr_case_values_threshold; |
- |
-#define CASE_VALUES_THRESHOLD avr_case_values_threshold |
+#define CASE_VECTOR_MODE HImode |
#undef WORD_REGISTER_OPERATIONS |
@@ -752,16 +715,8 @@ extern int avr_case_values_threshold; |
#define NO_DOLLAR_IN_LABEL 1 |
-#define TRAMPOLINE_TEMPLATE(FILE) \ |
- internal_error ("trampolines not supported") |
- |
#define TRAMPOLINE_SIZE 4 |
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ |
-{ \ |
- emit_move_insn (gen_rtx_MEM (HImode, plus_constant ((TRAMP), 2)), CXT); \ |
- emit_move_insn (gen_rtx_MEM (HImode, plus_constant ((TRAMP), 6)), FNADDR); \ |
-} |
/* Store in cc_status the expressions |
that the condition codes will describe |
after execution of an instruction whose pattern is EXP. |
@@ -788,6 +743,17 @@ extern int avr_case_values_threshold; |
#define ADJUST_INSN_LENGTH(INSN, LENGTH) (LENGTH =\ |
adjust_insn_length (INSN, LENGTH)) |
+extern const char *avr_device_to_arch (int argc, const char **argv); |
+extern const char *avr_device_to_data_start (int argc, const char **argv); |
+extern const char *avr_device_to_startfiles (int argc, const char **argv); |
+extern const char *avr_device_to_devicelib (int argc, const char **argv); |
+ |
+#define EXTRA_SPEC_FUNCTIONS \ |
+ { "device_to_arch", avr_device_to_arch }, \ |
+ { "device_to_data_start", avr_device_to_data_start }, \ |
+ { "device_to_startfile", avr_device_to_startfiles }, \ |
+ { "device_to_devicelib", avr_device_to_devicelib }, |
+ |
#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}" |
#define CC1_SPEC "%{profile:-p}" |
@@ -810,106 +776,8 @@ mmcu=*:-mmcu=%*}" |
%{mmcu=atmega64*|\ |
mmcu=at90can64*|\ |
mmcu=at90usb64*:--pmem-wrap-around=64k}}}\ |
-%{!mmcu*: -m avr2}\ |
-%{mmcu=at90s1200|\ |
- mmcu=attiny11|\ |
- mmcu=attiny12|\ |
- mmcu=attiny15|\ |
- mmcu=attiny28: -m avr1}\ |
-%{mmcu=attiny22|\ |
- mmcu=attiny26|\ |
- mmcu=at90s2*|\ |
- mmcu=at90s4*|\ |
- mmcu=at90s8*|\ |
- mmcu=at90c8*|\ |
- mmcu=at86rf401|\ |
- mmcu=ata6289|\ |
- mmcu=attiny13*|\ |
- mmcu=attiny2313|\ |
- mmcu=attiny24|\ |
- mmcu=attiny25|\ |
- mmcu=attiny261|\ |
- mmcu=attiny4*|\ |
- mmcu=attiny8*: -m avr2}\ |
-%{mmcu=atmega103|\ |
- mmcu=at43*|\ |
- mmcu=at76*|\ |
- mmcu=at90usb82|\ |
- mmcu=at90usb162|\ |
- mmcu=attiny16*|\ |
- mmcu=attiny32*: -m avr3}\ |
-%{mmcu=atmega8*|\ |
- mmcu=atmega4*|\ |
- mmcu=at90pwm1|\ |
- mmcu=at90pwm2|\ |
- mmcu=at90pwm2b|\ |
- mmcu=at90pwm3|\ |
- mmcu=at90pwm3b|\ |
- mmcu=at90pwm81: -m avr4}\ |
-%{mmcu=atmega16*|\ |
- mmcu=atmega32*|\ |
- mmcu=atmega406|\ |
- mmcu=atmega64*|\ |
- mmcu=atmega128*|\ |
- mmcu=at90can*|\ |
- mmcu=at90pwm216|\ |
- mmcu=at90pwm316|\ |
- mmcu=at90scr100|\ |
- mmcu=at90usb64*|\ |
- mmcu=at90usb128*|\ |
- mmcu=at94k|\ |
- mmcu=m3000*|\ |
- mmcu=m3001*: -m avr5}\ |
-%{mmcu=atmega256*:-m avr6}\ |
-%{mmcu=atmega324*|\ |
- mmcu=atmega325*|\ |
- mmcu=atmega328p|\ |
- mmcu=atmega329*|\ |
- mmcu=atmega406|\ |
- mmcu=atmega48*|\ |
- mmcu=atmega88*|\ |
- mmcu=atmega64|\ |
- mmcu=atmega644*|\ |
- mmcu=atmega645*|\ |
- mmcu=atmega649*|\ |
- mmcu=atmega128|\ |
- mmcu=atmega1284p|\ |
- mmcu=atmega162|\ |
- mmcu=atmega164*|\ |
- mmcu=atmega165*|\ |
- mmcu=atmega168*|\ |
- mmcu=atmega169*|\ |
- mmcu=atmega4hv*|\ |
- mmcu=atmega8hv*|\ |
- mmcu=atmega16hv*|\ |
- mmcu=atmega32hv*|\ |
- mmcu=attiny48|\ |
- mmcu=attiny88|\ |
- mmcu=attiny87|\ |
- mmcu=attiny167|\ |
- mmcu=attiny327|\ |
- mmcu=at90can*|\ |
- mmcu=at90pwm*|\ |
- mmcu=atmega8c1|\ |
- mmcu=atmega16c1|\ |
- mmcu=atmega32c1|\ |
- mmcu=atmega64c1|\ |
- mmcu=atmega8m1|\ |
- mmcu=atmega16m1|\ |
- mmcu=atmega32m1|\ |
- mmcu=atmega64m1|\ |
- mmcu=atmega16u4|\ |
- mmcu=atmega32u*|\ |
- mmcu=at90scr100|\ |
- mmcu=ata6289|\ |
- mmcu=at90usb*: -Tdata 0x800100}\ |
-%{mmcu=atmega640|\ |
- mmcu=atmega1280|\ |
- mmcu=atmega1281|\ |
- mmcu=atmega256*|\ |
- mmcu=atmega128rfa1: -Tdata 0x800200}\ |
-%{mmcu=m3000*|\ |
- mmcu=m3001*: -Tdata 0x801000}" |
+%:device_to_arch(%{mmcu=*:%*})\ |
+%:device_to_data_start(%{mmcu=*:%*})" |
#define LIB_SPEC \ |
"%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}" |
@@ -920,146 +788,13 @@ mmcu=*:-mmcu=%*}" |
#define LIBGCC_SPEC \ |
"%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lgcc }}}}}" |
-#define STARTFILE_SPEC "%(crt_binutils)" |
+#define STARTFILE_SPEC "%:device_to_startfile(%{mmcu=*:%*})" |
#define ENDFILE_SPEC "" |
-#define CRT_BINUTILS_SPECS "\ |
-%{mmcu=at90s1200|mmcu=avr1:crts1200.o%s} \ |
-%{mmcu=attiny11:crttn11.o%s} \ |
-%{mmcu=attiny12:crttn12.o%s} \ |
-%{mmcu=attiny15:crttn15.o%s} \ |
-%{mmcu=attiny28:crttn28.o%s} \ |
-%{!mmcu*|mmcu=at90s8515|mmcu=avr2:crts8515.o%s} \ |
-%{mmcu=at90s2313:crts2313.o%s} \ |
-%{mmcu=at90s2323:crts2323.o%s} \ |
-%{mmcu=at90s2333:crts2333.o%s} \ |
-%{mmcu=at90s2343:crts2343.o%s} \ |
-%{mmcu=attiny22:crttn22.o%s} \ |
-%{mmcu=attiny26:crttn26.o%s} \ |
-%{mmcu=at90s4433:crts4433.o%s} \ |
-%{mmcu=at90s4414:crts4414.o%s} \ |
-%{mmcu=at90s4434:crts4434.o%s} \ |
-%{mmcu=at90c8534:crtc8534.o%s} \ |
-%{mmcu=at90s8535:crts8535.o%s} \ |
-%{mmcu=at86rf401:crt86401.o%s} \ |
-%{mmcu=attiny13:crttn13.o%s} \ |
-%{mmcu=attiny13a:crttn13a.o%s} \ |
-%{mmcu=attiny2313|mmcu=avr25:crttn2313.o%s} \ |
-%{mmcu=attiny24:crttn24.o%s} \ |
-%{mmcu=attiny44:crttn44.o%s} \ |
-%{mmcu=attiny84:crttn84.o%s} \ |
-%{mmcu=attiny25:crttn25.o%s} \ |
-%{mmcu=attiny45:crttn45.o%s} \ |
-%{mmcu=attiny85:crttn85.o%s} \ |
-%{mmcu=attiny261:crttn261.o%s} \ |
-%{mmcu=attiny461:crttn461.o%s} \ |
-%{mmcu=attiny861:crttn861.o%s} \ |
-%{mmcu=attiny43u:crttn43u.o%s} \ |
-%{mmcu=attiny87:crttn87.o%s} \ |
-%{mmcu=attiny48:crttn48.o%s} \ |
-%{mmcu=attiny88:crttn88.o%s} \ |
-%{mmcu=ata6289:crta6289.o%s} \ |
-%{mmcu=at43usb355|mmcu=avr3:crt43355.o%s} \ |
-%{mmcu=at76c711:crt76711.o%s} \ |
-%{mmcu=atmega103|mmcu=avr31:crtm103.o%s} \ |
-%{mmcu=at43usb320:crt43320.o%s} \ |
-%{mmcu=at90usb162|mmcu=avr35:crtusb162.o%s} \ |
-%{mmcu=at90usb82:crtusb82.o%s} \ |
-%{mmcu=attiny167:crttn167.o%s} \ |
-%{mmcu=attiny327:crttn327.o%s} \ |
-%{mmcu=atmega8|mmcu=avr4:crtm8.o%s} \ |
-%{mmcu=atmega48:crtm48.o%s} \ |
-%{mmcu=atmega48p:crtm48p.o%s} \ |
-%{mmcu=atmega88:crtm88.o%s} \ |
-%{mmcu=atmega88p:crtm88p.o%s} \ |
-%{mmcu=atmega8515:crtm8515.o%s} \ |
-%{mmcu=atmega8535:crtm8535.o%s} \ |
-%{mmcu=atmega8c1:crtm8c1.o%s} \ |
-%{mmcu=atmega8m1:crtm8m1.o%s} \ |
-%{mmcu=at90pwm1:crt90pwm1.o%s} \ |
-%{mmcu=at90pwm2:crt90pwm2.o%s} \ |
-%{mmcu=at90pwm2b:crt90pwm2b.o%s} \ |
-%{mmcu=at90pwm3:crt90pwm3.o%s} \ |
-%{mmcu=at90pwm3b:crt90pwm3b.o%s} \ |
-%{mmcu=at90pwm81:crt90pwm81.o%s} \ |
-%{mmcu=atmega16:crtm16.o%s} \ |
-%{mmcu=atmega161|mmcu=avr5:crtm161.o%s} \ |
-%{mmcu=atmega162:crtm162.o%s} \ |
-%{mmcu=atmega163:crtm163.o%s} \ |
-%{mmcu=atmega164p:crtm164p.o%s} \ |
-%{mmcu=atmega165:crtm165.o%s} \ |
-%{mmcu=atmega165p:crtm165p.o%s} \ |
-%{mmcu=atmega168:crtm168.o%s} \ |
-%{mmcu=atmega168p:crtm168p.o%s} \ |
-%{mmcu=atmega169:crtm169.o%s} \ |
-%{mmcu=atmega169p:crtm169p.o%s} \ |
-%{mmcu=atmega32:crtm32.o%s} \ |
-%{mmcu=atmega323:crtm323.o%s} \ |
-%{mmcu=atmega324p:crtm324p.o%s} \ |
-%{mmcu=atmega325:crtm325.o%s} \ |
-%{mmcu=atmega325p:crtm325p.o%s} \ |
-%{mmcu=atmega3250:crtm3250.o%s} \ |
-%{mmcu=atmega3250p:crtm3250p.o%s} \ |
-%{mmcu=atmega328p:crtm328p.o%s} \ |
-%{mmcu=atmega329:crtm329.o%s} \ |
-%{mmcu=atmega329p:crtm329p.o%s} \ |
-%{mmcu=atmega3290:crtm3290.o%s} \ |
-%{mmcu=atmega3290p:crtm3290p.o%s} \ |
-%{mmcu=atmega406:crtm406.o%s} \ |
-%{mmcu=atmega64:crtm64.o%s} \ |
-%{mmcu=atmega640:crtm640.o%s} \ |
-%{mmcu=atmega644:crtm644.o%s} \ |
-%{mmcu=atmega644p:crtm644p.o%s} \ |
-%{mmcu=atmega645:crtm645.o%s} \ |
-%{mmcu=atmega6450:crtm6450.o%s} \ |
-%{mmcu=atmega649:crtm649.o%s} \ |
-%{mmcu=atmega6490:crtm6490.o%s} \ |
-%{mmcu=atmega8hva:crtm8hva.o%s} \ |
-%{mmcu=atmega16hva:crtm16hva.o%s} \ |
-%{mmcu=atmega16hvb:crtm16hvb.o%s} \ |
-%{mmcu=atmega32hvb:crtm32hvb.o%s} \ |
-%{mmcu=atmega4hvd:crtm4hvd.o%s} \ |
-%{mmcu=atmega8hvd:crtm8hvd.o%s} \ |
-%{mmcu=at90can32:crtcan32.o%s} \ |
-%{mmcu=at90can64:crtcan64.o%s} \ |
-%{mmcu=at90pwm216:crt90pwm216.o%s} \ |
-%{mmcu=at90pwm316:crt90pwm316.o%s} \ |
-%{mmcu=atmega16c1:crtm16c1.o%s} \ |
-%{mmcu=atmega32c1:crtm32c1.o%s} \ |
-%{mmcu=atmega64c1:crtm64c1.o%s} \ |
-%{mmcu=atmega16m1:crtm16m1.o%s} \ |
-%{mmcu=atmega32m1:crtm32m1.o%s} \ |
-%{mmcu=atmega64m1:crtm64m1.o%s} \ |
-%{mmcu=atmega16u4:crtm16u4.o%s} \ |
-%{mmcu=atmega32u4:crtm32u4.o%s} \ |
-%{mmcu=atmega32u6:crtm32u6.o%s} \ |
-%{mmcu=at90scr100:crt90scr100.o%s} \ |
-%{mmcu=at90usb646:crtusb646.o%s} \ |
-%{mmcu=at90usb647:crtusb647.o%s} \ |
-%{mmcu=at94k:crtat94k.o%s} \ |
-%{mmcu=atmega128|mmcu=avr51:crtm128.o%s} \ |
-%{mmcu=atmega1280:crtm1280.o%s} \ |
-%{mmcu=atmega1281:crtm1281.o%s} \ |
-%{mmcu=atmega1284p:crtm1284p.o%s} \ |
-%{mmcu=at90can128:crtcan128.o%s} \ |
-%{mmcu=atmega128rfa1:crtm128rfa1.o%s} \ |
-%{mmcu=at90usb1286:crtusb1286.o%s} \ |
-%{mmcu=at90usb1287:crtusb1287.o%s} \ |
-%{mmcu=m3000f:crtm3000f.o%s} \ |
-%{mmcu=m3000s:crtm3000s.o%s} \ |
-%{mmcu=m3001b:crtm3001b.o%s} \ |
-%{mmcu=atmega2560|mmcu=avr6:crtm2560.o%s} \ |
-%{mmcu=atmega2561:crtm2561.o%s}" |
- |
-#define EXTRA_SPECS {"crt_binutils", CRT_BINUTILS_SPECS}, |
- |
/* This is the default without any -mmcu=* option (AT90S*). */ |
#define MULTILIB_DEFAULTS { "mmcu=avr2" } |
-/* This is undefined macro for collect2 disabling */ |
-#define LINKER_NAME "ld" |
- |
#define TEST_HARD_REG_CLASS(CLASS, REGNO) \ |
TEST_HARD_REG_BIT (reg_class_contents[ (int) (CLASS)], REGNO) |
@@ -1094,11 +829,8 @@ mmcu=*:-mmcu=%*}" |
/* A C structure for machine-specific, per-function data. |
This is added to the cfun structure. */ |
-struct machine_function GTY(()) |
+struct GTY(()) machine_function |
{ |
- /* 'true' - if the current function is a leaf function. */ |
- int is_leaf; |
- |
/* 'true' - if current function is a naked function. */ |
int is_naked; |
@@ -1117,4 +849,7 @@ struct machine_function GTY(()) |
/* 'true' - if current function is a 'main' function |
as specified by the "OS_main" attribute. */ |
int is_OS_main; |
+ |
+ /* Current function stack size. */ |
+ int stack_usage; |
}; |