From da93f14017d6414250593308f0c79631173ca6d9 Mon Sep 17 00:00:00 2001 From: John van Groningen Date: Thu, 1 Aug 2013 12:36:27 +0000 Subject: use 64 instead of 32 bit address in indirect jump for position independent code on linux --- cgaas.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'cgaas.c') diff --git a/cgaas.c b/cgaas.c index 822fabb..556f82a 100644 --- a/cgaas.c +++ b/cgaas.c @@ -2401,12 +2401,18 @@ static void as_jmp_instruction (struct instruction *instruction) as_branch_label (instruction->instruction_parameters[0].parameter_data.l,JUMP_RELOCATION); break; case P_INDIRECT: - if (instruction->instruction_parameters[0].parameter_offset!=0){ +#ifndef MACH_O64 + if ( +# ifdef LINUX + !pic_flag && +# endif + instruction->instruction_parameters[0].parameter_offset!=0){ as_id_r (0x63,instruction->instruction_parameters[0].parameter_offset, instruction->instruction_parameters[0].parameter_data.reg.r,REGISTER_O0); /* movsxd */ store_c (0377); store_c (0340 | reg_num (REGISTER_O0)); } else +#endif as_id_rex (0377,040,instruction->instruction_parameters[0].parameter_offset, instruction->instruction_parameters[0].parameter_data.reg.r); break; -- cgit v1.2.3