From 9f6eb05d6980e06938cd4611f4b31f60c25162d0 Mon Sep 17 00:00:00 2001 Message-Id: <9f6eb05d6980e06938cd4611f4b31f60c25162d0.1716379730.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 26 May 2016 09:26:09 +0100 Subject: [PATCH] base/asm-common.h: Add some slightly cheesy Thumb support. Organization: Straylight/Edgeware From: Mark Wooding --- base/asm-common.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/base/asm-common.h b/base/asm-common.h index 9c2dfb30..bcfa7352 100644 --- a/base/asm-common.h +++ b/base/asm-common.h @@ -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 -- [mdw]