[CRIU] [PATCH] compel: Add R_X86_64{,_REX}_GOTPCRELX relocs
Dmitry Safonov
dima at arista.com
Wed Oct 18 00:38:34 MSK 2017
Add handeling of R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX.
They are not that old, so I provided ifdef-guards for them.
According to x86-64 ABI specification paper, they should be
generated instead of R_X86_64_GOTPCREL for cases when relaxation
is possible.
At this moment we can handle them the same way like R_X86_64_GOTPCREL.
[0] https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r249.pdf
Fixes: #397
Cc: Cyrill Gorcunov <gorcunov at openvz.org>
Reported-by: Adrian Reber <areber at redhat.com>
Signed-off-by: Dmitry Safonov <dima at arista.com>
---
compel/arch/x86/src/lib/include/handle-elf.h | 8 ++++++++
compel/src/lib/handle-elf.c | 2 ++
2 files changed, 10 insertions(+)
diff --git a/compel/arch/x86/src/lib/include/handle-elf.h b/compel/arch/x86/src/lib/include/handle-elf.h
index 08de8363..e68fe3bc 100644
--- a/compel/arch/x86/src/lib/include/handle-elf.h
+++ b/compel/arch/x86/src/lib/include/handle-elf.h
@@ -5,6 +5,14 @@
#define ELF_X86_64
+#ifndef R_X86_64_GOTPCRELX
+# define R_X86_64_GOTPCRELX 41
+#endif
+
+#ifndef R_X86_64_REX_GOTPCRELX
+# define R_X86_64_REX_GOTPCRELX 42
+#endif
+
#define __handle_elf handle_elf_x86_64
#define arch_is_machine_supported(e_machine) (e_machine == EM_X86_64)
diff --git a/compel/src/lib/handle-elf.c b/compel/src/lib/handle-elf.c
index bf94d93b..f1cf74ff 100644
--- a/compel/src/lib/handle-elf.c
+++ b/compel/src/lib/handle-elf.c
@@ -517,6 +517,8 @@ int __handle_elf(void *mem, size_t size)
*/
*((int32_t *)where) = value32 + addend32 - place;
break;
+ case R_X86_64_GOTPCRELX:
+ case R_X86_64_REX_GOTPCRELX:
case R_X86_64_GOTPCREL: /* SymbolOffsetInGot + GOT + Addend - Place (4 bytes) */
pr_debug("\t\t\t\tR_X86_64_GOTPCREL at 0x%-4lx val 0x%x\n", place, value32);
pr_out(" { .offset = 0x%-8x, .type = COMPEL_TYPE_LONG | COMPEL_TYPE_GOTPCREL, "
--
2.13.6
More information about the CRIU
mailing list