|
1 | 1 | ..
|
2 |
| - Copyright (c) 2010, 2013, 2018, 2020-2023, Arm Limited and its affiliates. All rights reserved. |
| 2 | + Copyright (c) 2010, 2013, 2018, 2020-2024, Arm Limited and its affiliates. All rights reserved. |
3 | 3 | CC-BY-SA-4.0 AND Apache-Patent-License
|
4 | 4 | See LICENSE file for details
|
5 | 5 |
|
6 |
| -.. |release| replace:: 2023Q3 |
7 |
| -.. |date-of-issue| replace:: 6\ :sup:`th` October 2023 |
8 |
| -.. |copyright-date| replace:: 2010, 2013, 2018, 2020-2023 |
| 6 | +.. |release| replace:: 2024Q3 |
| 7 | +.. |date-of-issue| replace:: 5\ :sup:`th` September 2024 |
| 8 | +.. |copyright-date| replace:: 2010, 2013, 2018, 2020-2024 |
9 | 9 | .. |footer| replace:: Copyright © |copyright-date|, Arm Limited and its
|
10 | 10 | affiliates. All rights reserved.
|
11 | 11 |
|
@@ -229,6 +229,11 @@ changes to the content of the document for that release.
|
229 | 229 | | 2022Q3 | 20\ :sup:`th` October 2022 | - Added `Changes in vector length`_ at |
|
230 | 230 | | | | **Alpha** quality. |
|
231 | 231 | +--------+-----------------------------+----------------------------------------+
|
| 232 | + | 2024Q3 | 5\ :sup:`th` September 2024 | In `DWARF register names_` and | |
| 233 | + | | | `Call frame instructions`_, add Dwarf | |
| 234 | + | | | support for unwinding with | |
| 235 | + | | | FEAT_PAuth_LR enabled. | |
| 236 | + +--------+-----------------------------+----------------------------------------+ |
232 | 237 |
|
233 | 238 |
|
234 | 239 | References
|
@@ -470,11 +475,31 @@ integers.
|
470 | 475 | .. _Note 8:
|
471 | 476 |
|
472 | 477 | 8. The RA_SIGN_STATE pseudo-register records whether the return address has
|
473 |
| - been signed with a PAC. This information can be used when unwinding. It |
474 |
| - is an unsigned integer with the same size as a general register. Only |
475 |
| - bit[0] is meaningful and is initialized to zero. A value of 0 indicates |
476 |
| - the return address has not been signed. A value of 1 indicates the return |
477 |
| - address has been signed. |
| 478 | + been signed with a PAC, and whether the value of PC has been used as a |
| 479 | + diversifier for the return address signing. This information can be used |
| 480 | + when unwinding. It is an unsigned integer with the same size as a general |
| 481 | + register. Only bit[0] and bit[1] are meaningful and are initialized to zero. |
| 482 | + |
| 483 | + Bit[0] indicates whether the return address has been signed. A value of 0 |
| 484 | + indicates the return address has not been signed. A value of 1 indicates |
| 485 | + the return address has been signed. |
| 486 | + |
| 487 | + Bit[1] indicates whether the value of PC has been used as a diversifier for |
| 488 | + signing the return address. A value of 0 indicates the value of PC has not |
| 489 | + been used for return address signing. A value of 1 indicates the value of PC |
| 490 | + has been used for return address signing. |
| 491 | + |
| 492 | + +--------+--------+----------------------------------+ |
| 493 | + | Bit[1] | Bit[0] | State | |
| 494 | + +========+========+==================================+ |
| 495 | + | 0 | 0 | Return address not signed | |
| 496 | + +--------+--------+----------------------------------+ |
| 497 | + | 0 | 1 | Return address signed with SP | |
| 498 | + +--------+--------+----------------------------------+ |
| 499 | + | 1 | 1 | Return address signed with SP+PC | |
| 500 | + +--------+--------+----------------------------------+ |
| 501 | + | 1 | 0 | Invalid state | |
| 502 | + +--------+--------+----------------------------------+ |
478 | 503 |
|
479 | 504 | .. _Note 9:
|
480 | 505 |
|
@@ -574,25 +599,37 @@ a CIE augmentation string.
|
574 | 599 | Call frame instructions
|
575 | 600 | -----------------------
|
576 | 601 |
|
577 |
| -This ABI defines one vendor call frame instruction |
578 |
| -``DW_CFA_AARCH64_negate_ra_state``. |
| 602 | +This ABI defines the following vendor call frame instructions: |
| 603 | +``DW_CFA_AARCH64_negate_ra_state`` and ``DW_CFA_AARCH64_negate_ra_state_with_pc``. |
579 | 604 |
|
580 | 605 | .. class:: aadwarf64-vendor-cfa-operations
|
581 | 606 |
|
582 | 607 | .. table:: AArch64 vendor CFA operations
|
583 | 608 |
|
584 |
| - +------------------------------------+-------------+------------+-----------+-----------+ |
585 |
| - | Instruction | High 2 bits | Low 6 bits | Operand 1 | Operand 2 | |
586 |
| - +====================================+=============+============+===========+===========+ |
587 |
| - | ``DW_CFA_AARCH64_negate_ra_state`` | 0 | ``0x2D`` | \- | \- | |
588 |
| - +------------------------------------+-------------+------------+-----------+-----------+ |
| 609 | + +--------------------------------------------+-------------+------------+-----------+-----------+ |
| 610 | + | Instruction | High 2 bits | Low 6 bits | Operand 1 | Operand 2 | |
| 611 | + +============================================+=============+============+===========+===========+ |
| 612 | + | ``DW_CFA_AARCH64_negate_ra_state`` | 0 | ``0x2D`` | \- | \- | |
| 613 | + +--------------------------------------------+-------------+------------+-----------+-----------+ |
| 614 | + | ``DW_CFA_AARCH64_negate_ra_state_with_pc`` | 0 | ``0x2C`` | \- | \- | |
| 615 | + +--------------------------------------------+-------------+------------+-----------+-----------+ |
589 | 616 |
|
590 | 617 | The ``DW_CFA_AARCH64_negate_ra_state`` operation negates bit[0] of the
|
591 | 618 | RA_SIGN_STATE pseudo-register. It does not take any operands.
|
592 |
| -The ``DW_CFA_AARCH64_negate_ra_state`` must not be mixed with other DWARF |
593 |
| -Register Rule Instructions (GDWARF_, §6.4.2.3) on the RA_SIGN_STATE |
594 |
| -pseudo-register in one Common Information Entry (CIE) and Frame Descriptor |
595 |
| -Entry (FDE) program sequence. |
| 619 | + |
| 620 | +The ``DW_CFA_AARCH64_negate_ra_state_with_pc`` operation negates bit[0] and |
| 621 | +bit[1] of the RA_SIGN_STATE pseudo-register, and instructs the unwinder to |
| 622 | +capture the current code location. The code location information can be used |
| 623 | +for authenticating the return address. |
| 624 | + |
| 625 | +The ``DW_CFA_AARCH64_negate_ra_state_with_pc`` instruction must be placed within |
| 626 | +the debug frame in a position that refers to the exact code location of the |
| 627 | +signing/authenticating PAC instructions. |
| 628 | + |
| 629 | +The ``DW_CFA_AARCH64_negate_ra_state`` and ``DW_CFA_AARCH64_negate_ra_state_with_pc`` |
| 630 | +instructions must not be mixed with other DWARF Register Rule Instructions |
| 631 | +(GDWARF_, §6.4.2.3) on the RA_SIGN_STATE pseudo-register in one Common |
| 632 | +Information Entry (CIE) and Frame Descriptor Entry (FDE) program sequence. |
596 | 633 |
|
597 | 634 | .. _DWARF expression operations:
|
598 | 635 |
|
|
0 commit comments