--- ./h/elf64_ppcle_reloc.h.orig 2014-09-06 09:45:30.000000000 -0600
+++ ./h/elf64_ppcle_reloc.h 2014-09-23 12:00:00.000000000 -0600
@@ -22,3 +22,6 @@
case R_PPC64_TOC:
store_val(where,~0L,toc->st_value);
break;
+ case R_PPC64_REL32:
+ store_ival((int *)where,~0L,(s+a-p));
+ break;
--- ./h/elf64_ppcle_reloc_special.h.orig 2014-09-06 09:45:30.000000000 -0600
+++ ./h/elf64_ppcle_reloc_special.h 2014-09-23 12:00:00.000000000 -0600
@@ -63,3 +63,12 @@ label_got_symbols(void *v1,Shdr *sec1,Sh
return 0;
}
+
+static int
+store_ival(int *w,ul m,ul v) {
+
+ *w=(v&m)|(*w&~m);
+
+ return 0;
+
+}
--- ./h/elf64_ppc_reloc.h.orig 2014-09-06 09:45:30.000000000 -0600
+++ ./h/elf64_ppc_reloc.h 2014-09-23 12:00:00.000000000 -0600
@@ -17,3 +17,6 @@
case R_PPC64_TOC:
store_val(where,~0L,toc);
break;
+ case R_PPC64_REL32:
+ store_ival((int *)where,~0L,(s+a-p));
+ break;
--- ./h/elf64_ppc_reloc_special.h.orig 2014-09-06 09:45:30.000000000 -0600
+++ ./h/elf64_ppc_reloc_special.h 2014-09-23 12:00:00.000000000 -0600
@@ -86,3 +86,12 @@ label_got_symbols(void *v1,Shdr *sec1,Sh
return 0;
}
+
+static int
+store_ival(int *w,ul m,ul v) {
+
+ *w=(v&m)|(*w&~m);
+
+ return 0;
+
+}