|
@@ -295,6 +295,11 @@ n:
|
|
* you want to access various offsets within it). On ppc32 this is
|
|
* you want to access various offsets within it). On ppc32 this is
|
|
* identical to LOAD_REG_IMMEDIATE.
|
|
* identical to LOAD_REG_IMMEDIATE.
|
|
*
|
|
*
|
|
|
|
+ * LOAD_REG_ADDR_PIC(rn, name)
|
|
|
|
+ * Loads the address of label 'name' into register 'run'. Use this when
|
|
|
|
+ * the kernel doesn't run at the linked or relocated address. Please
|
|
|
|
+ * note that this macro will clobber the lr register.
|
|
|
|
+ *
|
|
* LOAD_REG_ADDRBASE(rn, name)
|
|
* LOAD_REG_ADDRBASE(rn, name)
|
|
* ADDROFF(name)
|
|
* ADDROFF(name)
|
|
* LOAD_REG_ADDRBASE loads part of the address of label 'name' into
|
|
* LOAD_REG_ADDRBASE loads part of the address of label 'name' into
|
|
@@ -305,6 +310,14 @@ n:
|
|
* LOAD_REG_ADDRBASE(rX, name)
|
|
* LOAD_REG_ADDRBASE(rX, name)
|
|
* ld rY,ADDROFF(name)(rX)
|
|
* ld rY,ADDROFF(name)(rX)
|
|
*/
|
|
*/
|
|
|
|
+
|
|
|
|
+/* Be careful, this will clobber the lr register. */
|
|
|
|
+#define LOAD_REG_ADDR_PIC(reg, name) \
|
|
|
|
+ bl 0f; \
|
|
|
|
+0: mflr reg; \
|
|
|
|
+ addis reg,reg,(name - 0b)@ha; \
|
|
|
|
+ addi reg,reg,(name - 0b)@l;
|
|
|
|
+
|
|
#ifdef __powerpc64__
|
|
#ifdef __powerpc64__
|
|
#define LOAD_REG_IMMEDIATE(reg,expr) \
|
|
#define LOAD_REG_IMMEDIATE(reg,expr) \
|
|
lis reg,(expr)@highest; \
|
|
lis reg,(expr)@highest; \
|