chiark / gitweb /
base/asm-common.h: Add some slightly cheesy Thumb support.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 26 May 2016 08:26:09 +0000 (09:26 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 24 Jun 2016 00:17:45 +0000 (01:17 +0100)
base/asm-common.h

index 9c2dfb30a787122f209e7a4ed991559de9bab605..bcfa7352536dec78ab2fa6435199d4ebe60967ca 100644 (file)
@@ -162,6 +162,11 @@ _where_am_i.\got :
 
 #if CPUFAM_ARM
 
+// ARM/Thumb mode things.  Use ARM by default.
+#define ARM .arm; .L$_pcoff = 8
+#define THUMB .thumb; .L$_pcoff = 4
+       ARM
+
 // Set the function hooks.
 #define FUNC_PREHOOK(_) .balign 4
 #define ENDFUNC_HOOK(name) .ltorg
@@ -190,7 +195,7 @@ _where_am_i.\got :
        _LIT
        .balign 4
 .L$_ldgot$\@:
-       .word   _GLOBAL_OFFSET_TABLE_ - .L$_ldgot_pc$\@ - 8
+       .word   _GLOBAL_OFFSET_TABLE_ - .L$_ldgot_pc$\@ - .L$_pcoff
        _ENDLIT
 #endif
        .endm
@@ -215,11 +220,16 @@ _where_am_i.\got :
 #if WANT_PIC
        ldr\cond \reg, .L$_leaextq$\@
 .L$_leaextq_pc$\@:
+       .if     .L$_pcoff == 8
        ldr\cond \reg, [pc, \reg]
+       .else
+       add\cond \reg, pc
+       ldr\cond \reg, [\reg]
+       .endif
        _LIT
        .balign 4
 .L$_leaextq$\@:
-       .word   \addr(GOT_PREL) + (. - .L$_leaextq_pc$\@ - 8)
+       .word   \addr(GOT_PREL) + (. - .L$_leaextq_pc$\@ - .L$_pcoff)
        _ENDLIT
 #else
        ldr\cond \reg, =\addr