diff options
author | John van Groningen | 2013-08-01 12:47:55 +0000 |
---|---|---|
committer | John van Groningen | 2013-08-01 12:47:55 +0000 |
commit | e6b978ad32d9e536d4feaf3c840d1feae1b7bfbb (patch) | |
tree | eb826d28af99f282cd86151a645f5817cf3a2146 /cgaas.c | |
parent | fix offsets in descriptors, for position independent code on linux (diff) |
use 64 instead of 32 bit address in indirect call for position independent code on linux
Diffstat (limited to 'cgaas.c')
-rw-r--r-- | cgaas.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -2502,12 +2502,18 @@ static void as_jsr_instruction (struct instruction *instruction) as_branch_label (instruction->instruction_parameters[0].parameter_data.l,CALL_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 (0320 | reg_num (REGISTER_O0)); } else +#endif as_id_rex (0377,020,instruction->instruction_parameters[0].parameter_offset, instruction->instruction_parameters[0].parameter_data.reg.r); break; |