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

    <tr>
        <th>Summary</th>
        <td>
            Our default ABI for amdgpu is undocumented and doesn't exist on Debian. The error diagnostics are dreadful.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AMDGPU
      </td>
    </tr>

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

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

<pre>
    If we compile with clang today and run on Debian today, the error message is `HSA_STATUS_ERROR_INVALID_CODE_OBJECT`. I've raised https://github.com/ROCm/ROCR-Runtime/issues/321 in the hope that HSA might produce a more useful diagnostic.

The primary context is https://github.com/llvm/llvm-project/pull/118515, "Use COV6 by default". I think that was premature, partly because Debian is still on 6.1, partly because we seem to be waiting on information on what cov6 actually is relative to cov5. It seems better to not default to six until those change.

AMD's documentation on calling conventions is pretty sparse in general. There isn't a "stable ABI" as such, more a continual drift at the IR level and jumpy changes at the binary level. There's some information at https://llvm.org/docs/AMDGPUUsage.html#amdgpu-amdhsa-code-object-metadata-v5 for previous binary ABI versions. The only references to v6 are in the context of a "generic processor" which refers to a "generic code object version number" but doesn't say what that might be. I've been trying to find information on what changed for v6 and found nothing.

For non-amd-people, the "code object version" nomenclature here means "ABI version", particularly as relates to the boundary between x64 and amdgpu, i.e. the runtime code that calls functions on the gpu from a host ("launches kernels"). Code built for version N and for version M will have some things in common and some things different. Number and order of parameters passed to kernel functions, whether an x64 machine is expected to have allocated a heap or not, how other information is encoded in side channels. Probably more things. This is designed carefully then thrown over the wall. This isn't encoded in the triple or the data layout. I don't seek to change any of that here, merely to ask whether we can roll back to a version that runs on most Linux boxes out there and thus unbreak everyone that was broken by 118515, or at least document what v6 is.

Thanks
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVl1v27gS_TXyyyCCTX_FD35wk_quF9tmkab7GozIkcmGIgV-2NG_vxjKdtqL4gL7ZFsmR4fnnDlDjNEcHdG2Wn6qhIja2GTQVUJUy8cJ5qR92P7p3YOmmCi0hqyaNF4N20MLZwLpu95YgrNJGqRFd4TkFQ6ATkHIDryDR2oMuvF5JR4gaQIKwQfoKEY8EpgI1Wr6x7fd67eX3cv3b6-fn5-fnl8PX__Z_XV4fH14evz8-vTpz88PL9VqWsOhEusTQUATSYFOqY_VfFeJfSX2R5N0bmrpu0rsn58eLh_Pd8_ZJdNRJfYmxkyxEvu5mIFxBY_2PUHSmOCPbzvozFEn6INXWRIgdD4Q5EhttqAMHp2Pyci6mu6q6e5FE_TBdBgGkN4lek98oP8Dy9rT9eOuD_4HyVSJfZ-trcR-NrtfzpbMUyXE90jw8PTPCpoBFLWYbaqEqOEASRv3NiI-Y4Q-UIcpB-KNPYZkB2hIYo505d9EiMlYy5Ks6tlvFp4JIlEHyUNDcEaTjDvycuNaHzpMxhdBz_xW6U8rQJkyWjtw8UAWkzkRb5f-tKzhkEq9CA2lRIH_cD5dD8I_o3kH1sVC0j4SSI3uSBdid18eK7GOoLzMHbl0e79EaxmZ9O5Ejp9GBtAHSmmA2GOIxMIeyVFAW8OLpsAuc5VYJ0BmNiZsLMHu06ESAjBCzFIzJ0VrLEoal9GCCqZNgKn45PAMlk5ki79_5K4fLpjjdUVjHDuhrLq8uZwi-o5-IRLT_3iE_VD7cKzEXnnJBt19efzP39-_c4_UOnW2EnPs1LHPd9gpHfFOekV3vmEH3XWUUGHCu9MSWh-YjpPxOV4R7T4d4EQhMl0FGHhnBwjUUiAnKbIgrGmga1dc7ezbkbRCqJHcGZJi9IG5O2sj9VimlPhlJQOEEeD15eBy11DZ2uQEytNFl4jDaK3i6rEHG7q1e0PkIIXBlIyB1jj1e2MWPVThgI_j-Gt2ir2njTte3LX3AZx3zORdT763dM2mSojfwGa8znfkpC2NBsVTHaGLvOMndjk8L81lZLYY7MAGK_0xslx8wphYl4bSmY_2vloUsKPCXMHUVJe1Ycyukc3CDrdAhDY7Odrfj4Id-wxt8B0gaB8TVOK-EsJidlJThDcKjmwsADc1PHC5JhubRrIu-ny9cPbx5AucOTg0nmj0cSEysk2k7zo2s1O__KNMW2yVavha5C4rfFAU2E09BuwosWN6jJziyV_QfRyKKThrSrrsLvx0KLVxZWDQe08yjTsLMLTWS-QnCJqwhyJw4iran8GXOj8bhos4ppR9BNGoMX-YoRr-Dr7Bxg5jHoyn4q4xJWoUlbGpQGLgqWAHpp81CP7swJ847TRnqLW3XaPLf3olr0jB9JYYK__i_gWLg8-JQ175S2cQvZVYLdYGdAOTWIww5ssDdBSIUXjA-HajjSc0OgjeWmhQvo39eZW1FAh5tE_HfvnLuPwOjX-nCD6XQOM0dAqSzhGyawLhG9CJwuAdfcyfJvg3cjymPuaXD5xxljCmW4aPLXpagYm38YnuLU7Udq428w1OaDtbLxf3i81yM5vo7Wre0GY1bRd0P79frtdrlEIhbeYkcbEmmpitmIrl9H42nd3P5rNZLWixbNrFqllN12Iza6rFlDo0tr7m66RcALazpdjM5xOLDdl4uf8wR-RUNd-N0Xu5B4VtmdVNPsZqMbUmpvhRLZlkafuUw22wcRZw-4ydzH7J7koA29Opn1KP3k1MH9ekMZnH69HHVSOWVFaBULXZ1pMc7PZfXzBu957LyU9b8d8AAAD__5dJdbA">