[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