From 13a47bd66a97e146afef8b6f92bbbefbbf956a1b Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Thu, 4 Mar 2004 00:35:03 +0000 Subject: [PATCH] 2004-03-03 Stephane Carrez * 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. --- libgloss/ChangeLog | 12 +++++++ libgloss/m68hc11/sci-inout.S | 29 +++++++++++++--- libgloss/m68hc11/sim-valid-m68hc11.ld | 48 +++++++++++++-------------- libgloss/m68hc11/sim-valid-m68hc12.ld | 48 +++++++++++++-------------- 4 files changed, 82 insertions(+), 55 deletions(-) diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index a0cd9a3bd..3ae10552f 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,15 @@ +2004-03-03 Stephane Carrez + + * 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 * m68k/leds.c: remove led_putnum(), zylons() forward diff --git a/libgloss/m68hc11/sci-inout.S b/libgloss/m68hc11/sci-inout.S index 070fd7da2..a8675d270 100644 --- a/libgloss/m68hc11/sci-inout.S +++ b/libgloss/m68hc11/sci-inout.S @@ -1,5 +1,5 @@ /* 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 @@ -12,6 +12,25 @@ * 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 @@ -39,7 +58,7 @@ L1: ldab SC0CR2,x orab #0x8 stab SC0CR2,x - rts + ret .sect .text .globl inbyte @@ -52,7 +71,7 @@ inbyte: bita #0x20 beq inbyte ldab SC0CR2,x - rts + ret .globl _sci_init .sect .text @@ -99,7 +118,7 @@ L1: ldab SCCR2,x orab #0x8 stab SCCR2,x - rts + ret .sect .text .globl inbyte @@ -112,7 +131,7 @@ inbyte: bita #0x20 beq inbyte ldab SCDR,x - rts + ret .globl _sci_init .sect .text diff --git a/libgloss/m68hc11/sim-valid-m68hc11.ld b/libgloss/m68hc11/sim-valid-m68hc11.ld index 86b336eca..904b8d649 100644 --- a/libgloss/m68hc11/sim-valid-m68hc11.ld +++ b/libgloss/m68hc11/sim-valid-m68hc11.ld @@ -146,15 +146,21 @@ SECTIONS { *(.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.*) @@ -162,11 +168,11 @@ SECTIONS *(.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 @@ -174,6 +180,10 @@ SECTIONS { *(.eh_frame) } > text + .gcc_except_table : + { + *(.gcc_except_table) + } > text .rodata : { *(.rodata) @@ -188,25 +198,13 @@ SECTIONS .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. */ @@ -274,7 +272,7 @@ SECTIONS 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) } diff --git a/libgloss/m68hc11/sim-valid-m68hc12.ld b/libgloss/m68hc11/sim-valid-m68hc12.ld index 6b15ed2e5..17dea1d76 100644 --- a/libgloss/m68hc11/sim-valid-m68hc12.ld +++ b/libgloss/m68hc11/sim-valid-m68hc12.ld @@ -145,15 +145,21 @@ SECTIONS { *(.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.*) @@ -161,11 +167,11 @@ SECTIONS *(.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 @@ -173,6 +179,10 @@ SECTIONS { *(.eh_frame) } > text + .gcc_except_table : + { + *(.gcc_except_table) + } > text .rodata : { *(.rodata) @@ -187,25 +197,13 @@ SECTIONS .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. */ @@ -274,7 +272,7 @@ SECTIONS 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) }