diff options
Diffstat (limited to 'linux')
-rwxr-xr-x | linux/pack | bin | 59445 -> 59507 bytes | |||
-rw-r--r-- | linux/pack.subx | 31 | ||||
-rwxr-xr-x | linux/survey_baremetal | bin | 53229 -> 53128 bytes | |||
-rw-r--r-- | linux/survey_baremetal.subx | 14 | ||||
-rwxr-xr-x | linux/survey_elf | bin | 56434 -> 56331 bytes | |||
-rw-r--r-- | linux/survey_elf.subx | 14 |
6 files changed, 28 insertions, 31 deletions
diff --git a/linux/pack b/linux/pack index c46ca06b..557b1c0c 100755 --- a/linux/pack +++ b/linux/pack Binary files differdiff --git a/linux/pack.subx b/linux/pack.subx index 85b86511..b619712a 100644 --- a/linux/pack.subx +++ b/linux/pack.subx @@ -915,7 +915,8 @@ convert-data: # line: (addr stream byte), out: (addr buffered-file) # return # if has-metadata?(word-slice, "imm32") # emit(out, word-slice, 4) - # # disp32 is not permitted in data segments, and anything else is only a byte long + # else if has-metadata?(word-slice, "imm16") + # emit(out, word-slice, 2) # else # emit(out, word-slice, 1) # write-buffered(out, "\n") @@ -1059,7 +1060,7 @@ $convert-data:label: # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # return - 75/jump-if-!= $convert-data:end/disp8 + 0f 85/jump-if-!= $convert-data:end/disp32 $convert-data:check-for-imm32: # if (has-metadata?(word-slice, "imm32")) # . eax = has-metadata?(ecx, "imm32") @@ -1072,7 +1073,7 @@ $convert-data:check-for-imm32: 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # . if (eax == false) process as a single byte 3d/compare-eax-and 0/imm32/false - 74/jump-if-= $convert-data:single-byte/disp8 + 74/jump-if-= $convert-data:check-for-imm16/disp8 $convert-data:imm32: # emit(out, word-slice, 4) # . . push args @@ -1084,6 +1085,30 @@ $convert-data:imm32: # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp e9/jump $convert-data:loop/disp32 +$convert-data:check-for-imm16: + # if (has-metadata?(word-slice, "imm16")) + # . eax = has-metadata?(ecx, "imm16") + # . . push args + 68/push "imm16"/imm32 + 51/push-ecx + # . . call + e8/call has-metadata?/disp32 + # . . discard args + 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp + # . if (eax == false) process as a single byte + 3d/compare-eax-and 0/imm32/false + 74/jump-if-= $convert-data:single-byte/disp8 +$convert-data:imm16: + # emit(out, word-slice, 2) + # . . push args + 68/push 2/imm32 + 51/push-ecx + ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) + # . . call + e8/call emit/disp32 + # . . discard args + 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp + e9/jump $convert-data:loop/disp32 $convert-data:single-byte: # emit(out, word-slice, 1) # . . push args diff --git a/linux/survey_baremetal b/linux/survey_baremetal index c5aaf0c2..74ff0852 100755 --- a/linux/survey_baremetal +++ b/linux/survey_baremetal Binary files differdiff --git a/linux/survey_baremetal.subx b/linux/survey_baremetal.subx index 7097701b..a8a44ec4 100644 --- a/linux/survey_baremetal.subx +++ b/linux/survey_baremetal.subx @@ -1601,20 +1601,6 @@ $emit-output:end: 5d/pop-to-ebp c3/return -$emit-output:global-variable-abort: - # . _write(2/stderr, error) - # . . push args - 68/push "emit-output: must refer to global variables with /disp32 or /imm32"/imm32 - 68/push 2/imm32/stderr - # . . call - e8/call _write/disp32 - # . . discard args - 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp - # . syscall(exit, 1) - bb/copy-to-ebx 1/imm32 - e8/call syscall_exit/disp32 - # never gets here - $emit-output:imm8-abort: # . _write(2/stderr, error) # . . push args diff --git a/linux/survey_elf b/linux/survey_elf index 0b8f6969..87eba506 100755 --- a/linux/survey_elf +++ b/linux/survey_elf Binary files differdiff --git a/linux/survey_elf.subx b/linux/survey_elf.subx index 3df7a121..f1d1bc96 100644 --- a/linux/survey_elf.subx +++ b/linux/survey_elf.subx @@ -2327,20 +2327,6 @@ $emit-segments:end: 5d/pop-to-ebp c3/return -$emit-segments:global-variable-abort: - # . _write(2/stderr, error) - # . . push args - 68/push "emit-segments: must refer to global variables with /disp32 or /imm32"/imm32 - 68/push 2/imm32/stderr - # . . call - e8/call _write/disp32 - # . . discard args - 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp - # . syscall(exit, 1) - bb/copy-to-ebx 1/imm32 - e8/call syscall_exit/disp32 - # never gets here - $emit-segments:imm8-abort: # . _write(2/stderr, error) # . . push args |