[PATCH] Fix ColdFire support for GCC 3.4 in libgloss

Bernardo Innocenti bernie@develer.com
Tue Oct 28 12:00:00 GMT 2003


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__ */
+

-- 
  // Bernardo Innocenti - Develer S.r.l., R&D dept.
\X/  http://www.develer.com/

Please don't send Word attachments - http://www.gnu.org/philosophy/no-word-attachments.html





More information about the Newlib mailing list