Commit 9528946
committed
pulley: trap on null in 8 fused funcref-dispatch handlers
Codex review on the rebeckerspecialties wasmtime fork PR pointed out
that phase-2/3's continuation-block load absorption breaks the
lazy-init slow path's correctness: the slow path's libcall rejoins
`continuation_block` via a block param, and after absorption the
loads are gone — `call_indirect` would see uninitialized
`dst_code`/`dst_vmctx` if the slow path is ever reached.
Fusion is gated on `is_eagerly_initialized_funcref_table` so the
slow path is unreachable at runtime, but the previous handler's
`ControlFlow::Continue(())` on null was advertised as defence-in-
depth and was itself broken. Replace it with `done_trap` in the 8
affected handlers (4 forward + 4 `_not` variants across x64/x32 ×
xfuncref_dispatch/xband_funcref_dispatch). `offset` on the `_not`
variants becomes vestigial; kept for encoding-shape parity.1 parent 062ca89 commit 9528946
19 files changed
Lines changed: 747 additions & 811 deletions
File tree
- crates/cranelift/src
- pulley/src
- tests
- all
- disas
- pulley
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
80 | 74 | | |
81 | 75 | | |
82 | 76 | | |
| |||
85 | 79 | | |
86 | 80 | | |
87 | 81 | | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
101 | 87 | | |
102 | 88 | | |
103 | 89 | | |
| |||
108 | 94 | | |
109 | 95 | | |
110 | 96 | | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
120 | 101 | | |
121 | 102 | | |
122 | 103 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
577 | 577 | | |
578 | 578 | | |
579 | 579 | | |
580 | | - | |
581 | | - | |
582 | | - | |
583 | | - | |
584 | | - | |
585 | | - | |
586 | | - | |
587 | | - | |
588 | | - | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
589 | 585 | | |
590 | 586 | | |
591 | | - | |
592 | | - | |
| 587 | + | |
593 | 588 | | |
594 | | - | |
595 | | - | |
596 | | - | |
| 589 | + | |
597 | 590 | | |
598 | 591 | | |
599 | 592 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
233 | 233 | | |
234 | 234 | | |
235 | 235 | | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
240 | 239 | | |
241 | 240 | | |
242 | 241 | | |
| |||
407 | 406 | | |
408 | 407 | | |
409 | 408 | | |
410 | | - | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
411 | 414 | | |
412 | 415 | | |
413 | 416 | | |
414 | 417 | | |
415 | | - | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
416 | 423 | | |
417 | 424 | | |
418 | 425 | | |
| |||
422 | 429 | | |
423 | 430 | | |
424 | 431 | | |
425 | | - | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
426 | 437 | | |
427 | 438 | | |
428 | 439 | | |
429 | 440 | | |
430 | | - | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
431 | 446 | | |
432 | 447 | | |
433 | 448 | | |
| |||
482 | 497 | | |
483 | 498 | | |
484 | 499 | | |
485 | | - | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
486 | 507 | | |
487 | 508 | | |
488 | 509 | | |
489 | 510 | | |
490 | | - | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
491 | 518 | | |
492 | 519 | | |
493 | 520 | | |
| |||
497 | 524 | | |
498 | 525 | | |
499 | 526 | | |
500 | | - | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
501 | 534 | | |
502 | 535 | | |
503 | 536 | | |
504 | 537 | | |
505 | | - | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
506 | 545 | | |
507 | 546 | | |
508 | 547 | | |
| |||
513 | 552 | | |
514 | 553 | | |
515 | 554 | | |
516 | | - | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | | - | |
521 | | - | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
522 | 561 | | |
523 | 562 | | |
524 | 563 | | |
| |||
559 | 598 | | |
560 | 599 | | |
561 | 600 | | |
562 | | - | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
563 | 609 | | |
564 | 610 | | |
565 | 611 | | |
566 | 612 | | |
567 | | - | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
568 | 621 | | |
569 | 622 | | |
570 | 623 | | |
| |||
574 | 627 | | |
575 | 628 | | |
576 | 629 | | |
577 | | - | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
578 | 638 | | |
579 | 639 | | |
580 | 640 | | |
581 | 641 | | |
582 | | - | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
583 | 650 | | |
584 | 651 | | |
585 | 652 | | |
| |||
589 | 656 | | |
590 | 657 | | |
591 | 658 | | |
592 | | - | |
593 | | - | |
594 | | - | |
595 | | - | |
596 | | - | |
597 | | - | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
598 | 665 | | |
599 | 666 | | |
600 | 667 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
215 | 215 | | |
216 | 216 | | |
217 | 217 | | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
223 | 221 | | |
224 | 222 | | |
225 | 223 | | |
| |||
0 commit comments