diff options
-rw-r--r-- | astartup.asm | 342 |
1 files changed, 341 insertions, 1 deletions
diff --git a/astartup.asm b/astartup.asm index d6545b8..4481e3d 100644 --- a/astartup.asm +++ b/astartup.asm @@ -346,10 +346,16 @@ first_one_bit_table label ptr align(1 shl 3) + ifndef PIC ; public small_integers comm small_integers:33*16 ; public static_characters comm static_characters:256*16 + else + include astartup_chars_and_ints.asm + public __start_address +__start_address dq 0 + endif ; extrn clean_exception_handler:near ; public clean_unwind_info @@ -506,7 +512,9 @@ _DATA ends public print_error ifdef LINUX + ifndef PIC .globl __start + endif else extrn _start:near endif @@ -615,7 +623,7 @@ abc_main: ifdef LINUX ifdef PIC - call __start@PLT + call qword ptr [__start_address[rip]] else call __start endif @@ -3397,6 +3405,15 @@ eval_fill2: mov 16[rcx],rbp ret + ifdef PIC + public eval_upd_0_ +eval_upd_0_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov 8[rdx],rcx + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3411,6 +3428,17 @@ eval_upd_0: mov 8[rdx],rcx jmp rbp + ifdef PIC + public eval_upd_1_ +eval_upd_1_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov rax,8[rdx] + mov 8[rdx],rcx + mov rdx,rax + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3427,6 +3455,17 @@ eval_upd_1: mov rdx,rax jmp rbp + ifdef PIC + public eval_upd_2_ +eval_upd_2_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov r8,8[rdx] + mov 8[rdx],rcx + mov rdx,16[rdx] + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3443,6 +3482,20 @@ eval_upd_2: mov rdx,16[rdx] jmp rbp + ifdef PIC + public eval_upd_3_ +eval_upd_3_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov r8,8[rdx] + mov 8[rdx],rcx + mov [rsi],rcx + mov rcx,24[rdx] + add rsi,8 + mov rdx,16[rdx] + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3462,6 +3515,22 @@ eval_upd_3: mov rdx,16[rdx] jmp rbp + ifdef PIC + public eval_upd_4_ +eval_upd_4_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov r8,8[rdx] + mov 8[rdx],rcx + mov [rsi],rcx + mov rbx,32[rdx] + mov 8[rsi],rbx + mov rcx,24[rdx] + add rsi,16 + mov rdx,16[rdx] + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3483,6 +3552,24 @@ eval_upd_4: mov rdx,16[rdx] jmp rbp + ifdef PIC + public eval_upd_5_ +eval_upd_5_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov r8,8[rdx] + mov [rsi],rcx + mov 8[rdx],rcx + mov rbx,40[rdx] + mov 8[rsi],rbx + mov rbx,32[rdx] + mov 16[rsi],rbx + mov rcx,24[rdx] + add rsi,24 + mov rdx,16[rdx] + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3506,6 +3593,26 @@ eval_upd_5: mov rdx,16[rdx] jmp rbp + ifdef PIC + public eval_upd_6_ +eval_upd_6_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov r8,8[rdx] + mov [rsi],rcx + mov 8[rdx],rcx + mov rbx,48[rdx] + mov 8[rsi],rbx + mov rbx,40[rdx] + mov 16[rsi],rbx + mov rbx,32[rdx] + mov 24[rsi],rbx + mov rcx,24[rdx] + add rsi,32 + mov rdx,16[rdx] + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3531,6 +3638,39 @@ eval_upd_6: mov rdx,16[rdx] jmp rbp + ifdef PIC + public eval_upd_7_ +eval_upd_7_: + mov rax,0 + mov rbx,40 +eval_upd_n_: + lea r8,__indirection+0 + mov qword ptr [rdx],r8 + mov r8,8[rdx] + mov [rsi],rcx + mov 8[rdx],rcx + add rdx,rbx + mov rbx,16[rdx ] + mov 8[rsi],rbx + mov rbx,8[rdx] + mov 16[rsi],rbx + mov rbx,[rdx] + mov 24[rsi],rbx + add rsi,32 + +eval_upd_n_lp_: + mov rbx,(-8)[rdx] + sub rdx,8 + mov [rsi],rbx + add rsi,8 + sub rax,1 + jnc eval_upd_n_lp_ + + mov rcx,(-8)[rdx] + mov rdx,(-16)[rdx ] + ret + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3569,6 +3709,14 @@ eval_upd_n_lp: mov rdx,(-16)[rdx ] jmp rbp + ifdef PIC + public eval_upd_8_ +eval_upd_8_: + mov rax,1 + mov rbx,48 + jmp eval_upd_n + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3578,6 +3726,14 @@ eval_upd_8: mov rbx,48 jmp eval_upd_n + ifdef PIC + public eval_upd_9_ +eval_upd_9_: + mov rax,2 + mov rbx,56 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3587,6 +3743,14 @@ eval_upd_9: mov rbx,56 jmp eval_upd_n + ifdef PIC + public eval_upd_10_ +eval_upd_10_: + mov rax,3 + mov rbx,64 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3596,6 +3760,14 @@ eval_upd_10: mov rbx,64 jmp eval_upd_n + ifdef PIC + public eval_upd_11_ +eval_upd_11_: + mov rax,4 + mov rbx,72 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3605,6 +3777,14 @@ eval_upd_11: mov rbx,72 jmp eval_upd_n + ifdef PIC + public eval_upd_12_ +eval_upd_12_: + mov rax,5 + mov rbx,80 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3614,6 +3794,14 @@ eval_upd_12: mov rbx,80 jmp eval_upd_n + ifdef PIC + public eval_upd_13_ +eval_upd_13_: + mov rax,6 + mov rbx,88 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3623,6 +3811,14 @@ eval_upd_13: mov rbx,88 jmp eval_upd_n + ifdef PIC + public eval_upd_14_ +eval_upd_14_: + mov rax,7 + mov rbx,96 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3632,6 +3828,14 @@ eval_upd_14: mov rbx,96 jmp eval_upd_n + ifdef PIC + public eval_upd_15_ +eval_upd_15_: + mov rax,8 + mov rbx,104 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3641,6 +3845,14 @@ eval_upd_15: mov rbx,104 jmp eval_upd_n + ifdef PIC + public eval_upd_16_ +eval_upd_16_: + mov rax,9 + mov rbx,112 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3650,6 +3862,14 @@ eval_upd_16: mov rbx,112 jmp eval_upd_n + ifdef PIC + public eval_upd_17_ +eval_upd_17_: + mov rax,10 + mov rbx,120 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3659,6 +3879,14 @@ eval_upd_17: mov rbx,120 jmp eval_upd_n + ifdef PIC + public eval_upd_18_ +eval_upd_18_: + mov rax,11 + mov rbx,128 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3668,6 +3896,14 @@ eval_upd_18: mov rbx,128 jmp eval_upd_n + ifdef PIC + public eval_upd_19_ +eval_upd_19_: + mov rax,12 + mov rbx,136 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3677,6 +3913,14 @@ eval_upd_19: mov rbx,136 jmp eval_upd_n + ifdef PIC + public eval_upd_20_ +eval_upd_20_: + mov rax,13 + mov rbx,144 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3686,6 +3930,14 @@ eval_upd_20: mov rbx,144 jmp eval_upd_n + ifdef PIC + public eval_upd_21_ +eval_upd_21_: + mov rax,14 + mov rbx,152 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3695,6 +3947,14 @@ eval_upd_21: mov rbx,152 jmp eval_upd_n + ifdef PIC + public eval_upd_22_ +eval_upd_22_: + mov rax,15 + mov rbx,160 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3704,6 +3964,14 @@ eval_upd_22: mov rbx,160 jmp eval_upd_n + ifdef PIC + public eval_upd_23_ +eval_upd_23_: + mov rax,16 + mov rbx,168 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3713,6 +3981,14 @@ eval_upd_23: mov rbx,168 jmp eval_upd_n + ifdef PIC + public eval_upd_24_ +eval_upd_24_: + mov rax,17 + mov rbx,176 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3722,6 +3998,14 @@ eval_upd_24: mov rbx,176 jmp eval_upd_n + ifdef PIC + public eval_upd_25_ +eval_upd_25_: + mov rax,18 + mov rbx,184 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3731,6 +4015,14 @@ eval_upd_25: mov rbx,184 jmp eval_upd_n + ifdef PIC + public eval_upd_26_ +eval_upd_26_: + mov rax,19 + mov rbx,192 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3740,6 +4032,14 @@ eval_upd_26: mov rbx,192 jmp eval_upd_n + ifdef PIC + public eval_upd_27_ +eval_upd_27_: + mov rax,20 + mov rbx,200 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3749,6 +4049,14 @@ eval_upd_27: mov rbx,200 jmp eval_upd_n + ifdef PIC + public eval_upd_28_ +eval_upd_28_: + mov rax,21 + mov rbx,208 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3758,6 +4066,14 @@ eval_upd_28: mov rbx,208 jmp eval_upd_n + ifdef PIC + public eval_upd_29_ +eval_upd_29_: + mov rax,22 + mov rbx,216 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3767,6 +4083,14 @@ eval_upd_29: mov rbx,216 jmp eval_upd_n + ifdef PIC + public eval_upd_30_ +eval_upd_30_: + mov rax,23 + mov rbx,224 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3776,6 +4100,14 @@ eval_upd_30: mov rbx,224 jmp eval_upd_n + ifdef PIC + public eval_upd_31_ +eval_upd_31_: + mov rax,24 + mov rbx,232 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax @@ -3785,6 +4117,14 @@ eval_upd_31: mov rbx,232 jmp eval_upd_n + ifdef PIC + public eval_upd_32_ +eval_upd_32_: + mov rax,25 + mov rbx,240 + jmp eval_upd_n_ + endif + ifdef PROFILE call profile_n mov rbp,rax |