@@ -289,6 +289,27 @@ symbol = value
#define PTRLOG 3
#endif
+#ifdef __ASSEMBLER__
+/*
+ * helpers for writing position independence code
+ * FIXME: only tested on 32 bit system
+ */
+ .macro REL_LA reg lable
+ .set push
+ .set noat
+ .set noreorder
+ move $at, $ra /* preserve ra */
+ bal 888f
+ nop
+888: la \reg, 888b
+ subu \reg, $ra, \reg /* offset store in reg */
+ move $ra, $at /* restroe ra */
+ la $at, \lable
+ addu \reg, $at, \reg
+ .set pop
+ .endm
+#endif
+
/*
* Some cp0 registers were extended to 64bit for MIPS III.
*/
replace PTR_LA in the very begining, e.g. in arch/mips/cpu/start.S arch/mips/lib/cache_init.S to write position independence code. this is helpfull for make single binary can be loaded to different ram/rom addresses. FIXME: only tested on 32 bit system Signed-off-by: Du Huanpeng <dhu@hodcarrier.cn> --- arch/mips/include/asm/asm.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)