From 8cb6bb444a6ee0106807d0a22bbc63323b410bf8 Mon Sep 17 00:00:00 2001 From: Hanhwi Jang Date: Wed, 10 Jan 2018 11:39:38 +0900 Subject: util: Implement PIC version of m5ops for X86. Using m5ops for X86 in shared objects requires PIC for the m5ops. Typically, the PIC version is used to make m5op interfaces to other languages like python and lua. Change-Id: I2463904c13ea8b839d0386d3c743d8dad1e1e6bc Reviewed-on: https://gem5-review.googlesource.com/7261 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- util/m5/m5op_x86.S | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'util') diff --git a/util/m5/m5op_x86.S b/util/m5/m5op_x86.S index 957874122..69995e0ab 100644 --- a/util/m5/m5op_x86.S +++ b/util/m5/m5op_x86.S @@ -32,19 +32,32 @@ #include -#ifdef M5OP_ADDR +#if defined(M5OP_ADDR) && defined(M5OP_PIC) /* Use the memory mapped m5op interface */ #define TWO_BYTE_OP(name, number) \ .globl name; \ .func name; \ name: \ - mov m5_mem, %r11; \ + mov m5_mem@gotpcrel(%rip), %r11; \ + mov (%r11), %r11; \ mov $number, %rax; \ shl $8, %rax; \ mov 0(%r11, %rax, 1), %rax; \ ret; \ .endfunc; +#elif defined(M5OP_ADDR) && !defined(M5OP_PIC) +/* Use the memory mapped m5op interface */ +#define TWO_BYTE_OP(name, number) \ + .globl name; \ + .func name; \ +name: \ + mov m5_mem, %r11; \ + mov $number, %rax; \ + shl $8, %rax; \ + mov 0(%r11, %rax, 1), %rax; \ + ret; \ + .endfunc; #else /* Use the magic instruction based m5op interface. This does not work * in virtualized environments. -- cgit v1.2.3