From 1bcff65cd748f5c51f5a09976e6b8e57b5bf618b Mon Sep 17 00:00:00 2001 From: John van Groningen Date: Wed, 4 Dec 2013 16:23:13 +0000 Subject: if shared libraries are used on 64 bit linux, the descriptors in _system may be at larger addresses than other descriptors, therefore extra tests are necessary in the garbage collector --- acompact.asm | 8 ++++++++ acopy.asm | 12 +++++++++++- amark.asm | 21 +++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/acompact.asm b/acompact.asm index b42b802..d722faf 100644 --- a/acompact.asm +++ b/acompact.asm @@ -862,6 +862,9 @@ move_hnf_0: cmp rax,offset CHAR+2 endif jbe move_real_int_bool_or_char + ifdef PIC +move_normal_hnf_0: + endif test rsi,rsi jne bsf_and_copy_nodes @@ -887,6 +890,11 @@ cp_s_arg_lp3: jmp find_non_zero_long move_array: + ifdef PIC + lea r9,__ARRAY__+2+0 + cmp rax,r9 + jb move_normal_hnf_0 + endif test rsi,rsi push rcx jne bsf_and_end_array_bit diff --git a/acopy.asm b/acopy.asm index 9410d6a..312bf22 100644 --- a/acopy.asm +++ b/acopy.asm @@ -1235,9 +1235,19 @@ copy_arity_0_node2_: ret copy_string_or_array_2: + ifdef PIC + je copy_string_2 + lea r9,__ARRAY__+2+0 + cmp rcx,r9 + jb copy_normal_hnf_0_2 + mov rcx,rdx + jmp copy_array_2 +copy_string_2: + mov rcx,rdx + else mov rcx,rdx jne copy_array_2 - + endif sub rdx,heap_p1+0 cmp rdx,semi_space_size+0 jae copy_string_or_array_constant diff --git a/amark.asm b/amark.asm index afcc68e..94cb980 100644 --- a/amark.asm +++ b/amark.asm @@ -864,6 +864,11 @@ _mark_real_int_bool_or_char: or dword ptr 4[rdi+rbx*4],1 jmp _mark_next_node + ifdef PIC +_mark_normal_hnf_0_: + or dword ptr [rdi+rbx*4],esi + endif + _mark_normal_hnf_0: inc r14 jmp _mark_next_node @@ -966,6 +971,12 @@ _mark_record_1: _mark_string_or_array: je _mark_string_ + ifdef PIC + lea r9,__ARRAY__+2+0 + cmp rax,r9 + jb _mark_normal_hnf_0_ + endif + _mark_array: mov rbp,qword ptr 16[rcx] test rbp,rbp @@ -1876,6 +1887,10 @@ __no_int_3: __no_char_3: jb __mark_real_bool_or_small_string + ifdef PIC +__mark_normal_hnf_0: + endif + ifdef NEW_DESCRIPTORS lea rcx,((-8)-2)[rax] else @@ -2018,6 +2033,12 @@ __mark_record_1: __mark_string_or_array: je __mark_string_ + ifdef PIC + lea r9,__ARRAY__+2+0 + cmp rax,r9 + jb __mark_normal_hnf_0 + endif + __mark_array: mov rbp,qword ptr 16[rcx] test rbp,rbp -- cgit v1.2.3