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

    <tr>
        <th>Summary</th>
        <td>
            [BUG][RISCV][BOLT] Incorrect GOT Relocation Handling in some case
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            BOLT
      </td>
    </tr>

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

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

<pre>
    I use the newest version clang and gcc(main branch ) to complie mysql-8.0.33. And bolt failed to deal with mysql. When I run this command:

> llvm-bolt mysqld  -o mysqld.test

It occuers that:

> Segmentation fault

After use gdb to debug , I found that R_RISCV_GOT_HI20 Relocation Handling failed .
Bolt think when occur GOT relocation infomation , always find 2 instruction to get imm, and transform the symbole to __BOLT_got_zero + offset  , the code  is in  `bolt\lib\Core\BinaryFunction.cpp` and `bolt\lib\Core\Relocation.cpp.` To deal with this case:

>  2242d12:       01620797                auipc   a5,0x1620
                        2242d12: R_RISCV_GOT_HI20       _ITM_deregisterTMCloneTable
                        2242d12: R_RISCV_RELAX  *ABS*
 2242d16:       7de7b783                ld      a5,2014(a5) # 38634f0 <_ITM_deregisterTMCloneTable@Base>


but the mysqld binary which is compiled by newest clang and gcc , will occur this case:

>  0000000002244c08 <.Lpcrel_hi153>:

 2244c08:       01621617                auipc   a2,0x1621
                        2244c08: R_RISCV_GOT_HI20       connection_events_loop_aborted_flag
 2244c0c:       66a1                    **lui     a3,0x8**
 0000000002244c0e <.Lpcrel_hi154>:
 2244c0e:       01621717                auipc   a4,0x1621
                        2244c0e: R_RISCV_GOT_HI20       log_output_options
0000000002244c12 <.Lpcrel_hi155>:
 2244c12:       01621797                auipc   a5,0x1621
                        2244c12: R_RISCV_GOT_HI20       query_logger
 2244c16:       f2a50b93                addi    s7,a0,-214 # 3c09b28 <.L_MergedGlobals.1012>
                        2244c16: R_RISCV_PCREL_LO12_I   .Lpcrel_hi151
                        2244c16: R_RISCV_RELAX  *ABS*
 2244c1a:       d2458d93                addi    s11,a1,-732 # fb9928 <.LJTI30_0>
                        2244c1a: R_RISCV_PCREL_LO12_I   .Lpcrel_hi152
                        2244c1a: R_RISCV_RELAX  *ABS*

I try to fix it by find auipc+ld pattern when the relocation is about GOT in  `bolt\lib\Core\BinaryFunction.cpp` ,but failed.  Now I need some help to fix this bug.  Could someone help me?
And I want to use `bolt/utils/bughunter.sh` on RISCV , but failed. It couldn't work because `createRelocation` and `encodeValueRISCV` not implemented. Are there any way to trace the bug?

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVm9z2j4S_jTizU48smzz5wUvgIb8uEkvNynXu3ce2VrbugqJSnIo9-lvJMNBaJOmmkzQwGr1PPvsapc7J1uNOCfFkhSfRrz3nbFzIfXxOKqMOM430DsE3yFoPKDz8ILWSaOhVly3wLWAtq4Jm-641FBZrusOCJuBN1Cb3V5JhN3RfVd304QmWZbAQguojPLQcKlQBEOBXMFB-m4wTeBfHWrYgO01-E664GnHtSDZgtD4l92DUi-7u-goHhIAd-a0TTw6P1huPJi67tE68B335H5Nlisyu_LzBdsdas99YNXwXp1OLhqPNrJvRTWgrPoWCFvBBhrTaxE9wnP5vPmy-lo-PG3LvzaMwjMqUw_u_uJaKKnbM9eE0MUyQPad1N_gEGgGeBYenrZgLwelbsxu2IYLuTrwo4NGagEMpHbe9nX81Rto0YPc7aJdAGW5do2xu6iaO-4qozDYleXy6XFbtsaX_0VrgLAlmKZx6CFeEsxrIxBAOpAagIxpiC8pVkpWpFitjEVSrJZSc3tc9zoiSOr9noxpvPqNA5eABOMkWG-vRR8k5g5f6QuM5UykjGQLGBZNx4xOZhO4WbyX-zp8FoSt6I9gReji1uq8rtz-JN2wys32cynQYiudR7v9vFJG45ZXCv_M7_P94-LfIbiLxfILYYHZyWx8YTUROKkm0-zWX8hoOLNiNM0Jm4b9DAjLIJuOs7yhQLLVe3BzuoxxvT_FlS6q3kelT0VTRTHh0Mm6g6HS9jFVq-O54l9VesyUg1TqlLdvaEfPi7E8r-k04Ewe97VFVXYyLbIA6XwCTkavlU7H6dtKs7PS6fuKnN2-oXRttMaYxiW-oPauVMbsS14Z61GUjeLtBV99wTce8_RXNwaN2UL1ckCbRZTT4dvg6CYseBuW_P9hOd2JNzGZvBOT_OMxwXdiokxbmt7ve1-afQiNI3TxGnjKboEXN8Bvyzb9UNn-Fvi7Zfu9R3sslWlbtBcgV5XWMF7QavZTpXEhomBuQtiKU8JWdyzNhzKr6axip_QtP6NtUTwoU3HlkpQGOPe_xTy-xvyP1fP9Y_n4lLJyAwDXMfw9-_EHHpe8TvmFsmB5MRXvUE7TwDn8u5tkLHJuqtnsTPlv201GS_oRmvyDNNmfefoFzdDWwdtjaGqN_AHSh9cqNseYU4QtlYA99x6tHppsePGu26sDXpnex7b7x63uNERMV-EtHTp7AvB3c4ANaEQBzuwQOlT7M8L4SlZ9mwCsTK8GC6NPRjsk2TpMHFrABg5c-3AuTB5nWGzde6kcYeuqb7tee7SJ6wIWoyHGKb7L13g2HupwlSZs4uFg7DeosOYnr7VF7vHSmK86OOowBHzlqsfoOfykTRgx9grDpBS8L2wcCi0C10c48KiFt7weZsWqb8-TViA2EvNMzLIZH-E8nRRpNmXpNB9182w2rqspEywXWVNPJjOcZAUKkVE6mzTNbCTnjLKCTmiaFjSjeVLlnHGOtajqWV5UDckp7rhUSRgHE2PbkXSux3maj4ucjRSvULk43jIWxh_CWBh07XwYH_vWkZwq6by7ePDSqzgSL__5QIpPpFgOgYjb6KT4BBtdG2uxHnLoVzOf1EMihO446q2ad97vXXgl2ZqwdSt911dJbXaErcPdp4-7vTX_wTqIHqkE1U9sXubsfwEAAP__8H5SIg">