Module Name: src
Committed By: matt
Date: Fri Aug 16 17:45:28 UTC 2013
Modified Files:
src/sys/arch/arm/include: asm.h
Log Message:
Don't define RETc if Thumb1
Add REL_SYM(a, b)
Make GOT_INIT* thumb aware.
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/include/asm.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/include/asm.h
diff -u src/sys/arch/arm/include/asm.h:1.20 src/sys/arch/arm/include/asm.h:1.21
--- src/sys/arch/arm/include/asm.h:1.20 Tue Aug 13 00:18:15 2013
+++ src/sys/arch/arm/include/asm.h Fri Aug 16 17:45:28 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: asm.h,v 1.20 2013/08/13 00:18:15 matt Exp $ */
+/* $NetBSD: asm.h,v 1.21 2013/08/16 17:45:28 matt Exp $ */
/*
* Copyright (c) 1990 The Regents of the University of California.
@@ -73,16 +73,20 @@
*/
#define _ASM_TYPE_FUNCTION %function
#define _ASM_TYPE_OBJECT %object
-#define _THUMB_ENTRY(x) \
- .text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; \
+#define _THUMB_ENTRY_NS(x) \
+ _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; \
.thumb_func; .code 16; x:
-#define _ARM_ENTRY(x) \
- .text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; \
+#define _THUMB_ENTRY(x) .text; _THUMB_ENTRY_NS(x)
+#define _ARM_ENTRY_NS(x) \
+ _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; \
.code 32; x:
+#define _ARM_ENTRY(x) .text; _ARM_ENTRY_NS(x)
#ifdef __thumb__
#define _ENTRY(x) _THUMB_ENTRY(x)
+#define _ENTRY_NS(x) _THUMB_ENTRY_NS(x)
#else
#define _ENTRY(x) _ARM_ENTRY(x)
+#define _ENTRY_NS(x) _ARM_ENTRY_NS(x)
#endif
#define _END(x) .size x,.-x
@@ -102,7 +106,8 @@
#define ASMSTR .asciz
-#if defined(PIC)
+#if defined(PIC) || defined(__pic__)
+#define REL_SYM(a, b) ((a) - (b))
#ifdef __thumb__
#define PLT_SYM(x) x
#define GOT_SYM(x) PIC_SYM(x, GOTOFF)
@@ -120,10 +125,16 @@
#define GOT_INIT(got,gotsym,pclabel) \
ldr got, gotsym; \
- add got, got, pc; \
- pclabel:
+ pclabel: add got, got, pc
+#ifdef __thumb__
+#define GOT_INITSYM(gotsym,pclabel) \
+ .align 0; \
+ gotsym: .word _C_LABEL(_GLOBAL_OFFSET_TABLE_) - (pclabel+4)
+#else
#define GOT_INITSYM(gotsym,pclabel) \
- gotsym: .word _C_LABEL(_GLOBAL_OFFSET_TABLE_) + (. - (pclabel+4))
+ .align 0; \
+ gotsym: .word _C_LABEL(_GLOBAL_OFFSET_TABLE_) - (pclabel+8)
+#endif
#ifdef __STDC__
#define PIC_SYM(x,y) x ## ( ## y ## )
@@ -132,6 +143,7 @@
#endif
#else
+#define REL_SYM(a, b) (a)
#define PLT_SYM(x) x
#define GOT_SYM(x) x
#define GOT_GET(x,got,sym) \
@@ -184,7 +196,9 @@
# define RET bx lr
# define RETr(r) bx r
# if defined(__thumb__)
-# define RETc(c) it c; __CONCAT(bx,c) lr
+# if defined(_ARM_ARCH_7)
+# define RETc(c) it c; __CONCAT(bx,c) lr
+# endif
# else
# define RETc(c) __CONCAT(bx,c) lr
# endif