<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/72582>72582</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [libc++abi] Incorrect adjustment of landing pad when LPStart is set to zero
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++abi
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          maksfb
      </td>
    </tr>
</table>

<pre>
    When `LPStart` is set to 0, runtime should use the absolute value of the landing pad field while executing exception-handling code.

However, in `libc++abi` the following adjustment is done to `LPStart` here: https://github.com/llvm/llvm-project/blob/a9cc6fc28078de3e0391b477505c2d3d84f52e4b/libcxxabi/src/cxa_personality.cpp#L665-L666
and later this value is used to calculate the landing pad: https://github.com/llvm/llvm-project/blob/a9cc6fc28078de3e0391b477505c2d3d84f52e4b/libcxxabi/src/cxa_personality.cpp#L713
causing a control transfer to invalid address / landing pad.

Note that semantically omitting `LPStart` by using `DW_EH_PE_omit` encoding should be different from explicitly setting `LPStart` to zero.

Non-PIE binaries optimized by BOLT can fail when run with `libc++abi`: #72363

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVE9v5KgT_TT4UkqLBv_pPviQ_BJrRop-G2lXmmNUQLnNLAYLcLp7Pv0KJ6tNj-ayt73YEhRV7716VZiSPXminjUPrHmscM1TiP2Mf6ZRVSqYa_9tIg-s5c8vv2eMmbUcbIJEGXIAzsT_IK4-25kgTWF1BtZEkCcCVCm4NRO8oVsJwridOvTG-hMsaGC05AycJ-sI6EJ6zeWGLpqWbIO_m9AbV450MLRj_JHx-_fvl3CmN4qlut3QOas0Ew9MPKCyBWOpNQbnwrkkQPN9TXkmnwt4EzwV9LesJorE5D1MOS-JyXsmBiaGk83TqnY6zEwMzr39_btbYvhOOjMxKBcUEwMetW5HLQ68OxiSxOVxr-qua3ijhZHmUI-NoLqEFrSXS0EqhhQ1E4O-4OtCMQWPzubrTi8LE_K5bZu757Zt31mjN-AwU4Q82fShq01FcVP4aHR6LQE_K_1fo9Xt5TsjjWva-gM6-ByDgxzRp7FQDGD9GzprAI2JlBIwMXxmdeOI_4eNNmZINKPPVqNzVwizzZurbnutrvBemLX88dvr05fXl6fXElsuyeuw1fgwtCIwdhwpFvuMMcxAl8VZbbO7lkH4Rf4c4AfF8BNCf_fy9QmU9RgtJQhLtrP9QabAefjt-Q_Q6GFE6-Bchi6uHs42T7_yd-koE7ITsv2QsjK9NEd5xIr6fcf5vqsPjaymvpOtIGkarkZFmgvEY31sceS6U4RCVLYXXMj9ft8KUXdS7o5tved4OBiqZXsgYjWnGa3bFYfsQjxVNqWV-k40B1E5VOTStkGEuMUpRFkqsd-cpdZTYjV3NuX0T6Zss9vWz-3L5hG-eh1iJJ0_T28YbzbIptOH7p_WUtG-WqPr_7XpN2KJiWHj9lcAAAD___PlqnA">