2003-10-27 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.
This commit is contained in:
parent
56a4ceac3d
commit
bfe5ae413f
|
@ -1,3 +1,11 @@
|
||||||
|
2003-10-27 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.
|
||||||
|
|
||||||
2003-10-15 Bernardo Innocenti <bernie@develer.com>
|
2003-10-15 Bernardo Innocenti <bernie@develer.com>
|
||||||
|
|
||||||
* m68k/sim-funcs.c (_XOPEN_SOURCE): Define to get the pid_t
|
* m68k/sim-funcs.c (_XOPEN_SOURCE): Define to get the pid_t
|
||||||
|
|
|
@ -83,3 +83,72 @@
|
||||||
#define fpcr REG (fpcr)
|
#define fpcr REG (fpcr)
|
||||||
#define fpsr REG (fpsr)
|
#define fpsr REG (fpsr)
|
||||||
#define fpi REG (fpi)
|
#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__ */
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ SYM (start):
|
||||||
subql IMM(1), d0
|
subql IMM(1), d0
|
||||||
2:
|
2:
|
||||||
clrb (a0)+
|
clrb (a0)+
|
||||||
#ifndef __mcf5200__
|
#if !defined(__mcoldfire__) && !defined(__mcf5200__)
|
||||||
dbra d0, 2b
|
dbra d0, 2b
|
||||||
clrw d0
|
clrw d0
|
||||||
subql IMM(1), d0
|
subql IMM(1), d0
|
||||||
|
@ -100,13 +100,13 @@ SYM (start):
|
||||||
* initialize target specific stuff. Only execute these
|
* initialize target specific stuff. Only execute these
|
||||||
* functions it they exist.
|
* functions it they exist.
|
||||||
*/
|
*/
|
||||||
lea SYM (hardware_init_hook), a0
|
PICLEA SYM (hardware_init_hook), a0
|
||||||
cmpl IMM(0),a0
|
cmpl IMM(0),a0
|
||||||
jbeq 4f
|
jbeq 4f
|
||||||
jsr (a0)
|
jsr (a0)
|
||||||
4:
|
4:
|
||||||
|
|
||||||
lea SYM (software_init_hook), a0
|
PICLEA SYM (software_init_hook), a0
|
||||||
cmpl IMM(0),a0
|
cmpl IMM(0),a0
|
||||||
jbeq 5f
|
jbeq 5f
|
||||||
jsr (a0)
|
jsr (a0)
|
||||||
|
@ -121,18 +121,18 @@ SYM (start):
|
||||||
#ifdef ADD_DTORS
|
#ifdef ADD_DTORS
|
||||||
/* put __do_global_dtors in the atexit list so the destructors get run */
|
/* put __do_global_dtors in the atexit list so the destructors get run */
|
||||||
movel IMM (SYM(__do_global_dtors)),(sp)
|
movel IMM (SYM(__do_global_dtors)),(sp)
|
||||||
jsr SYM (atexit)
|
PICCALL SYM (atexit)
|
||||||
#endif
|
#endif
|
||||||
movel IMM (__FINI_SECTION__),(sp)
|
movel IMM (__FINI_SECTION__),(sp)
|
||||||
jsr SYM (atexit)
|
PICCALL SYM (atexit)
|
||||||
|
|
||||||
jsr __INIT_SECTION__
|
PICCALL __INIT_SECTION__
|
||||||
|
|
||||||
pea 0
|
pea 0
|
||||||
pea SYM (environ)
|
PICPEA SYM (environ),a0
|
||||||
pea sp@(4)
|
pea sp@(4)
|
||||||
pea 0
|
pea 0
|
||||||
jsr SYM (main)
|
PICCALL SYM (main)
|
||||||
movel d0, sp@-
|
movel d0, sp@-
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -140,4 +140,4 @@ SYM (start):
|
||||||
* control back to the ROM monitor, if there is one. This calls the
|
* 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.
|
* exit() from the C library so the C++ tables get cleaned up right.
|
||||||
*/
|
*/
|
||||||
jsr SYM (exit)
|
PICCALL SYM (exit)
|
||||||
|
|
|
@ -78,7 +78,7 @@ SYM (start):
|
||||||
subql IMM(1), d0
|
subql IMM(1), d0
|
||||||
2:
|
2:
|
||||||
clrb (a0)+
|
clrb (a0)+
|
||||||
#ifndef __mcf5200__
|
#if !defined(__mcoldfire__) && !defined(__mcf5200__)
|
||||||
dbra d0, 2b
|
dbra d0, 2b
|
||||||
clrw d0
|
clrw d0
|
||||||
subql IMM(1), d0
|
subql IMM(1), d0
|
||||||
|
@ -99,18 +99,18 @@ SYM (start):
|
||||||
#ifdef ADD_DTORS
|
#ifdef ADD_DTORS
|
||||||
/* put __do_global_dtors in the atexit list so the destructors get run */
|
/* put __do_global_dtors in the atexit list so the destructors get run */
|
||||||
movel IMM (SYM(__do_global_dtors)),(sp)
|
movel IMM (SYM(__do_global_dtors)),(sp)
|
||||||
jsr SYM (atexit)
|
PICCALL SYM (atexit)
|
||||||
#endif
|
#endif
|
||||||
movel IMM (__FINI_SECTION__),(sp)
|
movel IMM (__FINI_SECTION__),(sp)
|
||||||
jsr SYM (atexit)
|
PICCALL SYM (atexit)
|
||||||
|
|
||||||
jsr __INIT_SECTION__
|
PICCALL __INIT_SECTION__
|
||||||
|
|
||||||
pea 0
|
pea 0
|
||||||
pea SYM (environ)
|
PICPEA SYM (environ),a0
|
||||||
pea sp@(4)
|
pea sp@(4)
|
||||||
pea 0
|
pea 0
|
||||||
jsr SYM (main)
|
PICCALL SYM (main)
|
||||||
movel d0, sp@-
|
movel d0, sp@-
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -118,4 +118,4 @@ SYM (start):
|
||||||
* control back to the ROM monitor, if there is one. This calls the
|
* 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.
|
* exit() from the C library so the C++ tables get cleaned up right.
|
||||||
*/
|
*/
|
||||||
jsr SYM (exit)
|
PICCALL SYM (exit)
|
||||||
|
|
Loading…
Reference in New Issue