* m68hc11/sci-inout.S: Supports -mlong-calls.
* m68hc11/sim-valid-m68hc11.ld (.tramp): New section for trampolines.
(.text): Mark the .installN and .finiN section with KEEP.
(.vectors): Likewise for .vectors.
(.gcc_except_table): New section.
* m68hc11/sim-valid-m68hc12.ld (.tramp): New section for trampolines.
(.text): Mark the .installN and .finiN section with KEEP.
(.vectors): Likewise for .vectors.
(.gcc_except_table): New section.
+2004-03-03 Stephane Carrez <stcarrez@nerim.fr>
+
+ * m68hc11/sci-inout.S: Supports -mlong-calls.
+ * m68hc11/sim-valid-m68hc11.ld (.tramp): New section for trampolines.
+ (.text): Mark the .installN and .finiN section with KEEP.
+ (.vectors): Likewise for .vectors.
+ (.gcc_except_table): New section.
+ * m68hc11/sim-valid-m68hc12.ld (.tramp): New section for trampolines.
+ (.text): Mark the .installN and .finiN section with KEEP.
+ (.vectors): Likewise for .vectors.
+ (.gcc_except_table): New section.
+
2004-01-23 Gábor Lóki <loki@inf.u-szeged.hu>
* m68k/leds.c: remove led_putnum(), zylons() forward
/* M68HC11/M68HC12 serial line operations
- * Copyright (C) 1999, 2001 Stephane Carrez (stcarrez@nerim.fr)
+ * Copyright (C) 1999, 2001, 2003, 2004 Stephane Carrez (stcarrez@nerim.fr)
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* they apply.
*/
+#ifdef __HAVE_SHORT_INT__
+ .mode mshort
+#else
+ .mode mlong
+#endif
+
+#if defined(__USE_RTC__)
+ .macro ret
+#if defined(mc68hc12)
+ rtc
+#else
+ jmp __return_32
+#endif
+ .endm
+#else
+ .macro ret
+ rts
+ .endm
+#endif
#ifdef mc68hc12
SC0CR1 = 0xC2
SC0CR2 = 0xC3
ldab SC0CR2,x
orab #0x8
stab SC0CR2,x
- rts
+ ret
.sect .text
.globl inbyte
bita #0x20
beq inbyte
ldab SC0CR2,x
- rts
+ ret
.globl _sci_init
.sect .text
ldab SCCR2,x
orab #0x8
stab SCCR2,x
- rts
+ ret
.sect .text
.globl inbyte
bita #0x20
beq inbyte
ldab SCDR,x
- rts
+ ret
.globl _sci_init
.sect .text
{
*(.init)
} =0
+ /* Put trampolines at beginning of text at 0x4400 so that they
+ are not in memory bank window. */
+ .tramp :
+ {
+ *(.tramp)
+ } > text
.text :
{
/* Put startup code at beginning so that _start keeps same address. */
/* Startup code. */
- *(.install0) /* Section should setup the stack pointer. */
- *(.install1) /* Place holder for applications. */
- *(.install2) /* Optional installation of data sections in RAM. */
- *(.install3) /* Place holder for applications. */
- *(.install4) /* Section that calls the main. */
+ KEEP (*(.install0)) /* Section should setup the stack pointer. */
+ KEEP (*(.install1)) /* Place holder for applications. */
+ KEEP (*(.install2)) /* Optional installation of data sections in RAM. */
+ KEEP (*(.install3)) /* Place holder for applications. */
+ KEEP (*(.install4)) /* Section that calls the main. */
*(.init)
*(.text)
*(.text.*)
*(.gnu.warning)
*(.gnu.linkonce.t.*)
/* Finish code. */
- *(.fini0) /* Beginning of finish code (_exit symbol). */
- *(.fini1) /* Place holder for applications. */
- *(.fini2) /* C++ destructors. */
- *(.fini3) /* Place holder for applications. */
- *(.fini4) /* Runtime exit. */
+ KEEP (*(.fini0)) /* Beginning of finish code (_exit symbol). */
+ KEEP (*(.fini1)) /* Place holder for applications. */
+ KEEP (*(.fini2)) /* C++ destructors. */
+ KEEP (*(.fini3)) /* Place holder for applications. */
+ KEEP (*(.fini4)) /* Runtime exit. */
_etext = .;
PROVIDE (etext = .);
} > text
{
*(.eh_frame)
} > text
+ .gcc_except_table :
+ {
+ *(.gcc_except_table)
+ } > text
.rodata :
{
*(.rodata)
.ctors :
{
PROVIDE (__CTOR_LIST__ = .);
- *(.ctors)
- /* We don't want to include the .ctor section from
- from the crtend.o file until after the sorted ctors.
- The .ctor section from the crtend file contains the
- end of ctors marker and it must be last
- KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors)) */
+ KEEP (*(.ctors))
PROVIDE(__CTOR_END__ = .);
} > text
.dtors :
{
PROVIDE(__DTOR_LIST__ = .);
- *(.dtors)
- /*
- KEEP (*crtbegin.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors)) */
+ KEEP (*(.dtors))
PROVIDE(__DTOR_END__ = .);
} > text
/* Start of the data section image in ROM. */
PROVIDE (_vectors_addr = DEFINED (vectors_addr) ? vectors_addr : 0xffc0);
.vectors DEFINED (vectors_addr) ? vectors_addr : 0xffc0 :
{
- *(.vectors)
+ KEEP (*(.vectors))
}
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
{
*(.init)
} =0
+ /* Put trampolines at beginning of text at 0x4400 so that they
+ are not in memory bank window. */
+ .tramp :
+ {
+ *(.tramp)
+ } > text
.text :
{
/* Put startup code at beginning so that _start keeps same address. */
/* Startup code. */
- *(.install0) /* Section should setup the stack pointer. */
- *(.install1) /* Place holder for applications. */
- *(.install2) /* Optional installation of data sections in RAM. */
- *(.install3) /* Place holder for applications. */
- *(.install4) /* Section that calls the main. */
+ KEEP (*(.install0)) /* Section should setup the stack pointer. */
+ KEEP (*(.install1)) /* Place holder for applications. */
+ KEEP (*(.install2)) /* Optional installation of data sections in RAM. */
+ KEEP (*(.install3)) /* Place holder for applications. */
+ KEEP (*(.install4)) /* Section that calls the main. */
*(.init)
*(.text)
*(.text.*)
*(.gnu.warning)
*(.gnu.linkonce.t.*)
/* Finish code. */
- *(.fini0) /* Beginning of finish code (_exit symbol). */
- *(.fini1) /* Place holder for applications. */
- *(.fini2) /* C++ destructors. */
- *(.fini3) /* Place holder for applications. */
- *(.fini4) /* Runtime exit. */
+ KEEP (*(.fini0)) /* Beginning of finish code (_exit symbol). */
+ KEEP (*(.fini1)) /* Place holder for applications. */
+ KEEP (*(.fini2)) /* C++ destructors. */
+ KEEP (*(.fini3)) /* Place holder for applications. */
+ KEEP (*(.fini4)) /* Runtime exit. */
_etext = .;
PROVIDE (etext = .);
} > text
{
*(.eh_frame)
} > text
+ .gcc_except_table :
+ {
+ *(.gcc_except_table)
+ } > text
.rodata :
{
*(.rodata)
.ctors :
{
PROVIDE (__CTOR_LIST__ = .);
- *(.ctors)
- /* We don't want to include the .ctor section from
- from the crtend.o file until after the sorted ctors.
- The .ctor section from the crtend file contains the
- end of ctors marker and it must be last
- KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors)) */
+ KEEP (*(.ctors))
PROVIDE(__CTOR_END__ = .);
} > text
.dtors :
{
PROVIDE(__DTOR_LIST__ = .);
- *(.dtors)
- /*
- KEEP (*crtbegin.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors)) */
+ KEEP (*(.dtors))
PROVIDE(__DTOR_END__ = .);
} > text
/* Start of the data section image in ROM. */
PROVIDE (_vectors_addr = DEFINED (vectors_addr) ? vectors_addr : 0xffc0);
.vectors DEFINED (vectors_addr) ? vectors_addr : 0xffc0 :
{
- *(.vectors)
+ KEEP (*(.vectors))
}
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }