Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2002-07-12 19:37:04 +0400
committerJeff Johnston <jjohnstn@redhat.com>2002-07-12 19:37:04 +0400
commit451e452847554155d2bb9867dc00fb204a519f78 (patch)
treea5f6dad32cf2498ab72c4d400d21cf99fdad0a51 /libgloss
parent3191dc1731bef32c3467a2b8cfb9dd62c443a497 (diff)
2002-07-12 Chris Demetriou <cgd@broadcom.com>
* mips/array.ld (hardware_exit_hook, hardware_hazard_hook): New symbols for optionally-provided functions. * mips/ddb-kseg0.ld: Likewise. * mips/ddb.ld: Likewise. * mips/dve.ld: Likewise. * mips/idt.ld: Likewise. * mips/idt32.ld: Likewise. * mips/idt64.ld: Likewise. * mips/idtecoff.ld: Likewise. * mips/jmr3904app-java.ld: Likewise. * mips/jmr3904app.ld: Likewise. * mips/jmr3904dram-java.ld: Likewise. * mips/jmr3904dram.ld: Likewise. * mips/lsi.ld: Likewise. * mips/nullmon.ld: Likewise. * mips/pmon.ld: Likewise. * mips/crt0.S: Invoke hardware_exit_hook and hardware_hazard_hook functions if they are provided. (_exit): Handle __embedded_pic properly.
Diffstat (limited to 'libgloss')
-rw-r--r--libgloss/ChangeLog22
-rw-r--r--libgloss/mips/array.ld2
-rw-r--r--libgloss/mips/crt0.S46
-rw-r--r--libgloss/mips/ddb-kseg0.ld2
-rw-r--r--libgloss/mips/ddb.ld2
-rw-r--r--libgloss/mips/dve.ld2
-rw-r--r--libgloss/mips/idt.ld2
-rw-r--r--libgloss/mips/idt32.ld2
-rw-r--r--libgloss/mips/idt64.ld2
-rw-r--r--libgloss/mips/idtecoff.ld2
-rw-r--r--libgloss/mips/jmr3904app-java.ld2
-rw-r--r--libgloss/mips/jmr3904app.ld2
-rw-r--r--libgloss/mips/jmr3904dram-java.ld2
-rw-r--r--libgloss/mips/jmr3904dram.ld2
-rw-r--r--libgloss/mips/lsi.ld2
-rw-r--r--libgloss/mips/nullmon.ld2
-rw-r--r--libgloss/mips/pmon.ld2
17 files changed, 97 insertions, 1 deletions
diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog
index dfc4becb7..f59249f62 100644
--- a/libgloss/ChangeLog
+++ b/libgloss/ChangeLog
@@ -1,3 +1,25 @@
+2002-07-12 Chris Demetriou <cgd@broadcom.com>
+
+ * mips/array.ld (hardware_exit_hook, hardware_hazard_hook): New
+ symbols for optionally-provided functions.
+ * mips/ddb-kseg0.ld: Likewise.
+ * mips/ddb.ld: Likewise.
+ * mips/dve.ld: Likewise.
+ * mips/idt.ld: Likewise.
+ * mips/idt32.ld: Likewise.
+ * mips/idt64.ld: Likewise.
+ * mips/idtecoff.ld: Likewise.
+ * mips/jmr3904app-java.ld: Likewise.
+ * mips/jmr3904app.ld: Likewise.
+ * mips/jmr3904dram-java.ld: Likewise.
+ * mips/jmr3904dram.ld: Likewise.
+ * mips/lsi.ld: Likewise.
+ * mips/nullmon.ld: Likewise.
+ * mips/pmon.ld: Likewise.
+ * mips/crt0.S: Invoke hardware_exit_hook and hardware_hazard_hook
+ functions if they are provided.
+ (_exit): Handle __embedded_pic properly.
+
2002-06-18 Dave Brolley <brolley@redhat.com>
From Catherine Moore, Michael Meissner, Richard Sandiford:
diff --git a/libgloss/mips/array.ld b/libgloss/mips/array.ld
index 467510597..839062195 100644
--- a/libgloss/mips/array.ld
+++ b/libgloss/mips/array.ld
@@ -74,6 +74,8 @@ PROVIDE (__stack = 1M - 8);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/crt0.S b/libgloss/mips/crt0.S
index 8bd46ebf0..1cc430402 100644
--- a/libgloss/mips/crt0.S
+++ b/libgloss/mips/crt0.S
@@ -54,11 +54,13 @@
*/
nop
+ .globl hardware_hazard_hook .text
.globl _start
.ent _start
_start:
.set noreorder
#ifdef __mips_embedded_pic
+#define PICBASE start_PICBASE
PICBASE = .+8
bal PICBASE
nop
@@ -75,6 +77,14 @@ _start:
mtc0 zero, C0_CAUSE
nop
+ /* Avoid hazard from FPU enable and other SR changes. */
+ LA (t0, hardware_hazard_hook)
+ beq t0,zero,1f
+ nop
+ jal t0
+ nop
+1:
+
/* Check for FPU presence. Don't check if we know that soft_float is
being used. (This also avoids illegal instruction exceptions.) */
@@ -97,6 +107,12 @@ _start:
li v0, (STATUS_MASK-(STATUS_MASK & SR_CU1))
mtc0 v0, C0_SR
nop
+ /* Avoid hazard from FPU disable. */
+ LA (t0, hardware_hazard_hook)
+ beq t0,zero,2f
+ nop
+ jal t0
+ nop
2:
@@ -205,6 +221,11 @@ init:
# destructors
move a0,v0 # pass through the exit code
.end init
+
+/* Assume the PICBASE set up above is no longer valid below here. */
+#ifdef __mips_embedded_pic
+#undef PICBASE
+#endif
/*
* _exit -- Exit from the application. Normally we cause a user trap
@@ -214,14 +235,32 @@ init:
* executables that contain a complete world to be linked with
* just the crt0.o object.
*/
+ .globl hardware_exit_hook .text
.globl _exit
.ent _exit
_exit:
7:
+#ifdef __mips_embedded_pic
+ /* Need to reinit PICBASE, since we might be called via exit()
+ rather than via a return path which would restore old s0. */
+#define PICBASE exit_PICBASE
+ PICBASE = .+8
+ bal PICBASE
+ nop
+ move s0,$31
+#endif
#ifdef GCRT0
- jal _mcleanup
+ LA (t0, _mcleanup)
+ jal t0
nop
#endif
+ LA (t0, hardware_exit_hook)
+ beq t0,zero,1f
+ nop
+ jal t0
+ nop
+1:
+
# break instruction can cope with 0xfffff, but GAS limits the range:
break 1023
nop
@@ -229,4 +268,9 @@ _exit:
nop
.end _exit
+/* Assume the PICBASE set up above is no longer valid below here. */
+#ifdef __mips_embedded_pic
+#undef PICBASE
+#endif
+
/* EOF crt0.S */
diff --git a/libgloss/mips/ddb-kseg0.ld b/libgloss/mips/ddb-kseg0.ld
index 420fb6fe9..86e09659b 100644
--- a/libgloss/mips/ddb-kseg0.ld
+++ b/libgloss/mips/ddb-kseg0.ld
@@ -22,6 +22,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/ddb.ld b/libgloss/mips/ddb.ld
index 73dbad9b5..a433781c2 100644
--- a/libgloss/mips/ddb.ld
+++ b/libgloss/mips/ddb.ld
@@ -22,6 +22,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/dve.ld b/libgloss/mips/dve.ld
index a09eeeec0..c3e63e7cf 100644
--- a/libgloss/mips/dve.ld
+++ b/libgloss/mips/dve.ld
@@ -22,6 +22,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/idt.ld b/libgloss/mips/idt.ld
index 5dd26fac3..6ca3749c6 100644
--- a/libgloss/mips/idt.ld
+++ b/libgloss/mips/idt.ld
@@ -23,6 +23,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/idt32.ld b/libgloss/mips/idt32.ld
index 4214b7bdd..a8f31c373 100644
--- a/libgloss/mips/idt32.ld
+++ b/libgloss/mips/idt32.ld
@@ -25,6 +25,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/idt64.ld b/libgloss/mips/idt64.ld
index 751c0f1c8..aa2f1bab4 100644
--- a/libgloss/mips/idt64.ld
+++ b/libgloss/mips/idt64.ld
@@ -25,6 +25,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/idtecoff.ld b/libgloss/mips/idtecoff.ld
index 08534d2a8..2910db687 100644
--- a/libgloss/mips/idtecoff.ld
+++ b/libgloss/mips/idtecoff.ld
@@ -25,6 +25,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/jmr3904app-java.ld b/libgloss/mips/jmr3904app-java.ld
index b23d8e35f..c5d95151b 100644
--- a/libgloss/mips/jmr3904app-java.ld
+++ b/libgloss/mips/jmr3904app-java.ld
@@ -22,6 +22,8 @@ PROVIDE (_Jv_QthreadsStackSize = 0x10000);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/jmr3904app.ld b/libgloss/mips/jmr3904app.ld
index f5808fd2a..387d38f4b 100644
--- a/libgloss/mips/jmr3904app.ld
+++ b/libgloss/mips/jmr3904app.ld
@@ -19,6 +19,8 @@ PROVIDE (_mem_size = 0x100000); /* JMR3904 comes as standard with 512k of RAM */
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/jmr3904dram-java.ld b/libgloss/mips/jmr3904dram-java.ld
index ce9595d9c..3cd84a4db 100644
--- a/libgloss/mips/jmr3904dram-java.ld
+++ b/libgloss/mips/jmr3904dram-java.ld
@@ -23,6 +23,8 @@ PROVIDE (_Jv_QthreadsStackSize = 0x10000);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/jmr3904dram.ld b/libgloss/mips/jmr3904dram.ld
index cf283641c..4322f6fe8 100644
--- a/libgloss/mips/jmr3904dram.ld
+++ b/libgloss/mips/jmr3904dram.ld
@@ -20,6 +20,8 @@ PROVIDE (_mem_size = 0x100000); /* JMR3904 comes as standard with 512k of RAM */
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/lsi.ld b/libgloss/mips/lsi.ld
index c567157cf..74bc5942c 100644
--- a/libgloss/mips/lsi.ld
+++ b/libgloss/mips/lsi.ld
@@ -23,6 +23,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/nullmon.ld b/libgloss/mips/nullmon.ld
index 82d8016e2..1fc1ae700 100644
--- a/libgloss/mips/nullmon.ld
+++ b/libgloss/mips/nullmon.ld
@@ -23,6 +23,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
diff --git a/libgloss/mips/pmon.ld b/libgloss/mips/pmon.ld
index f8dc54b56..54ce95d2b 100644
--- a/libgloss/mips/pmon.ld
+++ b/libgloss/mips/pmon.ld
@@ -23,6 +23,8 @@ PROVIDE (__stack = 0);
* We have to initalize them twice, so we multiple object file
* formats, as some prepend an underscore.
*/
+PROVIDE (hardware_exit_hook = 0);
+PROVIDE (hardware_hazard_hook = 0);
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);