summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2012-04-16 09:38:20 +0000
committerAndrew Turner <andrew@FreeBSD.org>2012-04-16 09:38:20 +0000
commit0b898a9ef15aad38ba442209203a31fc9840a0f3 (patch)
tree75b2b5c6b4bfff9017ff33d83926a3dab51dca1c
parentc277658f24ec52af2ecd43e466916283df679878 (diff)
Notes
-rw-r--r--lib/libc/arm/gen/Makefile.inc2
-rw-r--r--lib/libc/arm/gen/__aeabi_read_tp.S (renamed from lib/libc/arm/gen/__aeabi_read_tp.c)21
-rw-r--r--sys/arm/include/armreg.h5
-rw-r--r--sys/arm/include/sysarch.h2
4 files changed, 16 insertions, 14 deletions
diff --git a/lib/libc/arm/gen/Makefile.inc b/lib/libc/arm/gen/Makefile.inc
index e0ebd988846ff..a78cbb94260d9 100644
--- a/lib/libc/arm/gen/Makefile.inc
+++ b/lib/libc/arm/gen/Makefile.inc
@@ -3,4 +3,4 @@
SRCS+= _ctx_start.S _setjmp.S _set_tp.c alloca.S fabs.c \
getcontextx.c infinity.c ldexp.c makecontext.c \
- __aeabi_read_tp.c setjmp.S signalcontext.c sigsetjmp.S divsi3.S flt_rounds.c
+ __aeabi_read_tp.S setjmp.S signalcontext.c sigsetjmp.S divsi3.S flt_rounds.c
diff --git a/lib/libc/arm/gen/__aeabi_read_tp.c b/lib/libc/arm/gen/__aeabi_read_tp.S
index c2dd9789ef54b..228acff9dbf01 100644
--- a/lib/libc/arm/gen/__aeabi_read_tp.c
+++ b/lib/libc/arm/gen/__aeabi_read_tp.S
@@ -23,23 +23,18 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
- * $FreeBSD$
*/
-#include <sys/cdefs.h>
+#include <machine/asm.h>
__FBSDID("$FreeBSD$");
-#include <sys/types.h>
-
-#include "machine/sysarch.h"
+#include <machine/sysarch.h>
-void *
-__aeabi_read_tp()
-{
- void *_tp;
+ENTRY(__aeabi_read_tp)
+ ldr r0, .Larm_tp_address
+ ldr r0, [r0]
+ RET
- asm("ldr %0, [%1]\n" : "=r"(_tp) : "r"(ARM_TP_ADDRESS));
+.Larm_tp_address:
+ .word ARM_TP_ADDRESS
- return _tp;
-}
diff --git a/sys/arm/include/armreg.h b/sys/arm/include/armreg.h
index 0d42ae4cd5ac7..4867692dd31e7 100644
--- a/sys/arm/include/armreg.h
+++ b/sys/arm/include/armreg.h
@@ -316,8 +316,13 @@
/*
* Address of the vector page, low and high versions.
*/
+#ifndef __ASSEMBLER__
#define ARM_VECTORS_LOW 0x00000000U
#define ARM_VECTORS_HIGH 0xffff0000U
+#else
+#define ARM_VECTORS_LOW 0
+#define ARM_VECTORS_HIGH 0xffff0000
+#endif
/*
* ARM Instructions
diff --git a/sys/arm/include/sysarch.h b/sys/arm/include/sysarch.h
index ba337bd4eb271..138e91f0af59b 100644
--- a/sys/arm/include/sysarch.h
+++ b/sys/arm/include/sysarch.h
@@ -55,6 +55,7 @@
#define ARM_RAS_END (ARM_TP_ADDRESS + 8)
#ifndef LOCORE
+#ifndef __ASSEMBLER__
#include <sys/cdefs.h>
@@ -85,6 +86,7 @@ int sysarch(int, void *);
__END_DECLS
#endif
+#endif /* __ASSEMBLER__ */
#endif /* LOCORE */
#endif /* !_ARM_SYSARCH_H_ */