Skip to content

Commit 8bc0a9b

Browse files
Using hook_BYTES_length64 instead of hardcoded LENGTH_MASK
1 parent d8749dc commit 8bc0a9b

File tree

1 file changed

+10
-18
lines changed

1 file changed

+10
-18
lines changed

config/llvm_header.inc

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ declare void @buffer_overflow_replace_at(i64, i64, i64)
9191
declare void @buffer_overflow_update(i64, i64)
9292
declare void @error_on_update(i64)
9393
declare i1 @hook_BYTES_mutableBytesEnabled()
94+
declare i64 @hook_BYTES_length64(ptr)
9495
9596
define ptr @copy_if_needed_in_llvm(ptr %b) {
9697
entry:
@@ -101,8 +102,7 @@ return_b:
101102
ret ptr %b
102103
103104
copy_needed:
104-
%hdr = load i64, ptr %b
105-
%len = and i64 %hdr, 1099511627775 ; @LENGTH_MASK@
105+
%len = call i64 @hook_BYTES_length64(ptr %b)
106106
%len_bytes = mul i64 %len, 8 ; 8 bytes per byte
107107
%alloc_size = add i64 %len_bytes, 40 ; 8 bytes for header, rest for data
108108
%alloc = call ptr @kore_alloc(i64 %alloc_size)
@@ -294,8 +294,7 @@ entry:
294294
define i256 @hook_BYTES_get256(ptr %b, i256 %off) {
295295
entry:
296296
; Check for buffer overflow
297-
%hdr = load i64, ptr %b
298-
%len = and i64 %hdr, 1099511627775 ; @LENGTH_MASK@
297+
%len = call i64 @hook_BYTES_length64(ptr %b)
299298
%len_256 = zext i64 %len to i256
300299
%off_lt_len = icmp ult i256 %off, %len_256
301300
br i1 %off_lt_len, label %valid_off, label %overflow
@@ -324,8 +323,7 @@ error:
324323
call void @error_on_start_substr(i64 %start_trunc, i64 %end_trunc)
325324
unreachable
326325
check_length:
327-
%input_hdr = load i64, ptr %input
328-
%input_len = and i64 %input_hdr, 1099511627775 ; @LENGTH_MASK@
326+
%input_len = call i64 @hook_BYTES_length64(ptr %input)
329327
%input_len_256 = zext i64 %input_len to i256
330328
%end_gt_input_len = icmp ugt i256 %end, %input_len_256
331329
br i1 %end_gt_input_len, label %error_length, label %calculate_length
@@ -357,16 +355,14 @@ calculate_length:
357355
358356
define i256 @hook_BYTES_length256(ptr %b) {
359357
entry:
360-
%hdr = load i64, ptr %b
361-
%len = and i64 %hdr, 1099511627775 ; @LENGTH_MASK@
358+
%len = call i64 @hook_BYTES_length64(ptr %b)
362359
%len_256 = zext i64 %len to i256
363360
ret i256 %len_256
364361
}
365362
366363
define ptr @hook_BYTES_padRight256(ptr %b, i256 %length, i256 %v) {
367364
entry:
368-
%hdr = load i64, ptr %b
369-
%len = and i64 %hdr, 1099511627775 ; @LENGTH_MASK@
365+
%len = call i64 @hook_BYTES_length64(ptr %b)
370366
%len_256 = zext i64 %len to i256
371367
%length_gt_len = icmp ugt i256 %length, %len_256
372368
br i1 %length_gt_len, label %pad, label %return_b
@@ -407,8 +403,7 @@ allocate:
407403
408404
define ptr @hook_BYTES_padLeft256(ptr %b, i256 %length, i256 %v) {
409405
entry:
410-
%hdr = load i64, ptr %b
411-
%len = and i64 %hdr, 1099511627775 ; @LENGTH_MASK@
406+
%len = call i64 @hook_BYTES_length64(ptr %b)
412407
%len_256 = zext i64 %len to i256
413408
%length_gt_len = icmp ugt i256 %length, %len_256
414409
br i1 %length_gt_len, label %pad, label %return_b
@@ -451,12 +446,10 @@ define ptr @hook_BYTES_replaceAt256(ptr %dest, i256 %index, ptr %src) {
451446
entry:
452447
call ptr @copy_if_needed_in_llvm(ptr %dest)
453448
454-
%dest_hdr = load i64, ptr %dest
455-
%dest_len = and i64 %dest_hdr, 1099511627775 ; @LENGTH_MASK@
449+
%dest_len = call i64 @hook_BYTES_length64(ptr %dest)
456450
%dest_len_256 = zext i64 %dest_len to i256
457451
458-
%src_hdr = load i64, ptr %src
459-
%src_len = and i64 %src_hdr, 1099511627775 ; @LENGTH_MASK@
452+
%src_len = call i64 @hook_BYTES_length64(ptr %src)
460453
%src_len_256 = zext i64 %src_len to i256
461454
462455
%index_sum_dest_src = add i256 %index, %src_len_256
@@ -538,8 +531,7 @@ define ptr @hook_BYTES_update256(ptr %b, i256 %index, i256 %value) {
538531
entry:
539532
call ptr @copy_if_needed_in_llvm(ptr %b)
540533
541-
%hdr = load i64, ptr %b
542-
%len = and i64 %hdr, 1099511627775 ; @LENGTH_MASK@
534+
%len = call i64 @hook_BYTES_length64(ptr %b)
543535
%len_256 = zext i64 %len to i256
544536
545537
%index_uge_len = icmp uge i256 %index, %len_256

0 commit comments

Comments
 (0)