Commit 2a50190
authored
x64: Fix possible overflow in
* x64: Fix possible overflow in `Amode::offset`
This commit fixes an issue in the x64 backend of Cranelift where the
`Amode::offset` method contained unchecked arithmetic meaning that it
could possibly overflow. This in turn could lead to a miscompile of
loading/storing 128-bit integers where this method is used to generate
an `Amode` that is 8 bytes beyond the based address to load the upper
bits. This miscompile isn't reachable from WebAssembly but is
nonetheless still a good bugfix to have for Cranelift.
The fix here is to switch the `Amode::offset` method to being fallible,
returning `None` on overflow. This then propagates up into ISLE where
the `amode_offset` helper now has a separate case for when the addition
fails, using `lea` to generate a register with an address in it. This
then subsequently also needed fixing for various `Atomic128*` operations
where instead of storing just a single `SyntheticAmode` they now store
two, one for the address of the low bits and one for the address of the
high bits.
* Fix tests
Notably package up all the arguments into a boxed structure for the
atomic128 ops to avoid making `Inst` too large.
* Fix clippyAmode::offset (#12949)1 parent e9e1665 commit 2a50190
9 files changed
Lines changed: 303 additions & 169 deletions
File tree
- cranelift
- codegen/src/isa/x64
- inst
- lower
- filetests/filetests/isa/x64
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
236 | 236 | | |
237 | 237 | | |
238 | 238 | | |
| 239 | + | |
| 240 | + | |
239 | 241 | | |
240 | | - | |
| 242 | + | |
241 | 243 | | |
242 | 244 | | |
243 | 245 | | |
244 | 246 | | |
245 | | - | |
246 | | - | |
247 | | - | |
248 | | - | |
249 | | - | |
250 | | - | |
251 | | - | |
252 | | - | |
| 247 | + | |
253 | 248 | | |
254 | 249 | | |
255 | 250 | | |
| |||
258 | 253 | | |
259 | 254 | | |
260 | 255 | | |
| 256 | + | |
| 257 | + | |
261 | 258 | | |
262 | | - | |
| 259 | + | |
263 | 260 | | |
264 | 261 | | |
265 | 262 | | |
266 | | - | |
267 | | - | |
268 | | - | |
269 | | - | |
270 | | - | |
| 263 | + | |
271 | 264 | | |
272 | 265 | | |
273 | 266 | | |
| |||
338 | 331 | | |
339 | 332 | | |
340 | 333 | | |
341 | | - | |
342 | | - | |
343 | | - | |
344 | | - | |
345 | | - | |
| 334 | + | |
| 335 | + | |
346 | 336 | | |
347 | 337 | | |
348 | 338 | | |
| |||
352 | 342 | | |
353 | 343 | | |
354 | 344 | | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
355 | 355 | | |
356 | 356 | | |
357 | 357 | | |
| |||
588 | 588 | | |
589 | 589 | | |
590 | 590 | | |
591 | | - | |
592 | | - | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
593 | 604 | | |
594 | 605 | | |
595 | 606 | | |
| |||
3693 | 3704 | | |
3694 | 3705 | | |
3695 | 3706 | | |
3696 | | - | |
3697 | | - | |
| 3707 | + | |
| 3708 | + | |
3698 | 3709 | | |
3699 | 3710 | | |
3700 | 3711 | | |
3701 | 3712 | | |
3702 | 3713 | | |
3703 | 3714 | | |
3704 | | - | |
| 3715 | + | |
| 3716 | + | |
| 3717 | + | |
3705 | 3718 | | |
3706 | 3719 | | |
3707 | | - | |
| 3720 | + | |
3708 | 3721 | | |
3709 | 3722 | | |
3710 | 3723 | | |
3711 | 3724 | | |
3712 | | - | |
| 3725 | + | |
| 3726 | + | |
| 3727 | + | |
3713 | 3728 | | |
3714 | 3729 | | |
3715 | | - | |
3716 | | - | |
| 3730 | + | |
| 3731 | + | |
3717 | 3732 | | |
3718 | 3733 | | |
3719 | 3734 | | |
3720 | | - | |
3721 | | - | |
| 3735 | + | |
| 3736 | + | |
| 3737 | + | |
| 3738 | + | |
3722 | 3739 | | |
3723 | 3740 | | |
3724 | 3741 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
439 | 439 | | |
440 | 440 | | |
441 | 441 | | |
442 | | - | |
| 442 | + | |
443 | 443 | | |
444 | | - | |
445 | | - | |
446 | | - | |
| 444 | + | |
| 445 | + | |
447 | 446 | | |
448 | | - | |
449 | | - | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
450 | 450 | | |
451 | 451 | | |
452 | 452 | | |
| |||
575 | 575 | | |
576 | 576 | | |
577 | 577 | | |
578 | | - | |
| 578 | + | |
579 | 579 | | |
580 | 580 | | |
581 | | - | |
582 | | - | |
| 581 | + | |
| 582 | + | |
583 | 583 | | |
584 | 584 | | |
585 | 585 | | |
586 | 586 | | |
587 | 587 | | |
588 | 588 | | |
589 | | - | |
| 589 | + | |
590 | 590 | | |
591 | 591 | | |
592 | 592 | | |
| |||
1061 | 1061 | | |
1062 | 1062 | | |
1063 | 1063 | | |
| 1064 | + | |
| 1065 | + | |
| 1066 | + | |
| 1067 | + | |
| 1068 | + | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| 1073 | + | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1544 | 1544 | | |
1545 | 1545 | | |
1546 | 1546 | | |
1547 | | - | |
1548 | | - | |
1549 | | - | |
1550 | | - | |
1551 | | - | |
1552 | | - | |
1553 | | - | |
1554 | | - | |
1555 | | - | |
1556 | | - | |
| 1547 | + | |
| 1548 | + | |
| 1549 | + | |
| 1550 | + | |
| 1551 | + | |
| 1552 | + | |
| 1553 | + | |
| 1554 | + | |
| 1555 | + | |
| 1556 | + | |
| 1557 | + | |
| 1558 | + | |
1557 | 1559 | | |
1558 | 1560 | | |
1559 | 1561 | | |
| |||
1564 | 1566 | | |
1565 | 1567 | | |
1566 | 1568 | | |
1567 | | - | |
| 1569 | + | |
| 1570 | + | |
1568 | 1571 | | |
1569 | 1572 | | |
1570 | 1573 | | |
1571 | 1574 | | |
1572 | | - | |
1573 | | - | |
| 1575 | + | |
| 1576 | + | |
1574 | 1577 | | |
1575 | 1578 | | |
1576 | 1579 | | |
| |||
1656 | 1659 | | |
1657 | 1660 | | |
1658 | 1661 | | |
1659 | | - | |
| 1662 | + | |
1660 | 1663 | | |
1661 | 1664 | | |
1662 | 1665 | | |
1663 | 1666 | | |
1664 | 1667 | | |
1665 | 1668 | | |
1666 | 1669 | | |
1667 | | - | |
1668 | | - | |
1669 | | - | |
1670 | | - | |
1671 | | - | |
1672 | | - | |
1673 | | - | |
| 1670 | + | |
| 1671 | + | |
| 1672 | + | |
| 1673 | + | |
| 1674 | + | |
| 1675 | + | |
| 1676 | + | |
| 1677 | + | |
| 1678 | + | |
1674 | 1679 | | |
1675 | 1680 | | |
1676 | 1681 | | |
| |||
1679 | 1684 | | |
1680 | 1685 | | |
1681 | 1686 | | |
1682 | | - | |
| 1687 | + | |
| 1688 | + | |
1683 | 1689 | | |
1684 | 1690 | | |
1685 | 1691 | | |
1686 | 1692 | | |
1687 | | - | |
1688 | | - | |
| 1693 | + | |
| 1694 | + | |
1689 | 1695 | | |
1690 | 1696 | | |
1691 | 1697 | | |
| |||
1696 | 1702 | | |
1697 | 1703 | | |
1698 | 1704 | | |
1699 | | - | |
| 1705 | + | |
1700 | 1706 | | |
1701 | 1707 | | |
1702 | 1708 | | |
| |||
0 commit comments