[PATCH] Fix ColdFire support for GCC 3.4 in libgloss
J. Johnston
jjohnstn@redhat.com
Thu Oct 30 11:10:00 GMT 2003
Patch applied. Thanks.
-- Jeff J.
Bernardo Innocenti wrote:
> J. Johnston wrote:
>
>> So do I. Anyway, I have confirmed what you said above with someone
>> here who is more qualified to speak about the GPL; you are allowed to
>> relicense those macros to newlib. I will commit your new patch when
>> it is ready.
>
>
> Sorry, it took a lot because I couldn't bootstrap the
> combined tree for some time. Here is the updated patch:
>
>
> 2003-10-26 Bernardo Innocenti <bernie@develer.com>
>
> * m68k/asm.h: Add macros for -fPIC, -msep-data and
> -mid-shared-library support. * m68k/crt0.S: Use macros for
> -fPIC, -msep-data and
> -mid-shared-library support.
> * m68k/sim-crt0.S: Likewise.
>
> diff -u -3 -p -u -p -r1.1 crt0.S
> --- m68k/crt0.S 17 Mar 2000 22:48:50 -0000 1.1
> +++ m68k/crt0.S 16 Oct 2003 12:19:46 -0000
> @@ -84,7 +84,7 @@ SYM (start):
> subql IMM(1), d0
> 2:
> clrb (a0)+
> -#ifndef __mcf5200__
> +#if !defined(__mcoldfire__) && !defined(__mcf5200__)
> dbra d0, 2b
> clrw d0
> subql IMM(1), d0
> @@ -100,13 +100,13 @@ SYM (start):
> * initialize target specific stuff. Only execute these
> * functions it they exist.
> */
> - lea SYM (hardware_init_hook), a0
> + PICLEA SYM (hardware_init_hook), a0
> cmpl IMM(0),a0
> jbeq 4f
> jsr (a0)
> 4:
>
> - lea SYM (software_init_hook), a0
> + PICLEA SYM (software_init_hook), a0
> cmpl IMM(0),a0
> jbeq 5f
> jsr (a0)
> @@ -121,18 +121,18 @@ SYM (start):
> #ifdef ADD_DTORS
> /* put __do_global_dtors in the atexit list so the destructors get
> run */
> movel IMM (SYM(__do_global_dtors)),(sp)
> - jsr SYM (atexit)
> + PICCALL SYM (atexit)
> #endif
> movel IMM (__FINI_SECTION__),(sp)
> - jsr SYM (atexit)
> + PICCALL SYM (atexit)
>
> - jsr __INIT_SECTION__
> + PICCALL __INIT_SECTION__
>
> pea 0
> - pea SYM (environ)
> + PICPEA SYM (environ),a0
> pea sp@(4)
> pea 0
> - jsr SYM (main)
> + PICCALL SYM (main)
> movel d0, sp@-
>
> /*
> @@ -140,4 +140,4 @@ SYM (start):
> * control back to the ROM monitor, if there is one. This calls the
> * exit() from the C library so the C++ tables get cleaned up right.
> */
> - jsr SYM (exit)
> + PICCALL SYM (exit)
> diff -u -3 -p -u -p -r1.1 sim-crt0.S
> --- m68k/sim-crt0.S 28 Feb 2001 18:41:57 -0000 1.1
> +++ m68k/sim-crt0.S 16 Oct 2003 12:19:46 -0000
> @@ -78,7 +78,7 @@ SYM (start):
> subql IMM(1), d0
> 2:
> clrb (a0)+
> -#ifndef __mcf5200__
> +#if !defined(__mcoldfire__) && !defined(__mcf5200__)
> dbra d0, 2b
> clrw d0
> subql IMM(1), d0
> @@ -99,18 +99,18 @@ SYM (start):
> #ifdef ADD_DTORS
> /* put __do_global_dtors in the atexit list so the destructors get
> run */
> movel IMM (SYM(__do_global_dtors)),(sp)
> - jsr SYM (atexit)
> + PICCALL SYM (atexit)
> #endif
> movel IMM (__FINI_SECTION__),(sp)
> - jsr SYM (atexit)
> + PICCALL SYM (atexit)
>
> - jsr __INIT_SECTION__
> + PICCALL __INIT_SECTION__
>
> pea 0
> - pea SYM (environ)
> + PICPEA SYM (environ),a0
> pea sp@(4)
> pea 0
> - jsr SYM (main)
> + PICCALL SYM (main)
> movel d0, sp@-
>
> /*
> @@ -118,4 +118,4 @@ SYM (start):
> * control back to the ROM monitor, if there is one. This calls the
> * exit() from the C library so the C++ tables get cleaned up right.
> */
> - jsr SYM (exit)
> + PICCALL SYM (exit)
> diff -u -3 -p -u -p -r1.1 asm.h
> --- m68k/asm.h 17 Mar 2000 22:48:50 -0000 1.1
> +++ m68k/asm.h 16 Oct 2003 12:19:46 -0000
> @@ -83,3 +83,72 @@
> #define fpcr REG (fpcr)
> #define fpsr REG (fpsr)
> #define fpi REG (fpi)
> +
> +/* Provide a few macros to allow for PIC code support.
> + * With PIC, data is stored A5 relative so we've got to take a bit of
> special
> + * care to ensure that all loads of global data is via A5. PIC also
> requires
> + * jumps and subroutine calls to be PC relative rather than absolute.
> We cheat
> + * a little on this and in the PIC case, we use short offset branches and
> + * hope that the final object code is within range (which it should be).
> + */
> +#ifndef __PIC__
> +
> + /* Non PIC (absolute/relocatable) versions */
> +
> + .macro PICCALL addr
> + jbsr \addr
> + .endm
> +
> + .macro PICJUMP addr
> + jmp \addr
> + .endm
> +
> + .macro PICLEA sym, reg
> + lea \sym, \reg
> + .endm
> +
> + .macro PICPEA sym, areg
> + pea \sym
> + .endm
> +
> +#else /* __PIC__ */
> +
> + /* Common for -mid-shared-libary and -msep-data */
> +
> + .macro PICCALL addr
> + bsr \addr
> + .endm
> +
> + .macro PICJUMP addr
> + bra \addr
> + .endm
> +
> +# if defined(__ID_SHARED_LIBRARY__)
> +
> + /* -mid-shared-library versions */
> +
> + .macro PICLEA sym, reg
> + movel a5@(_current_shared_library_a5_offset_), \reg
> + movel \sym@GOT(\reg), \reg
> + .endm
> +
> + .macro PICPEA sym, areg
> + movel a5@(_current_shared_library_a5_offset_), \areg
> + movel \sym@GOT(\areg), sp@-
> + .endm
> +
> +# else /* !__ID_SHARED_LIBRARY__ */
> +
> + /* Versions for -msep-data */
> +
> + .macro PICLEA sym, reg
> + movel \sym@GOT(a5), \reg
> + .endm
> +
> + .macro PICPEA sym, areg
> + movel \sym@GOT(a5), sp@-
> + .endm
> +
> +# endif /* !__ID_SHARED_LIBRARY__ */
> +#endif /* __PIC__ */
> +
>
More information about the Newlib
mailing list