<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/66900>66900</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LLD][AArch64] Keep relocation type after relocation relax
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zhusihang
</td>
</tr>
</table>
<pre>
Keeping the relocation type after relocation relax resulted in a mismatch between instructions and relocation items. Humbly ask why the linker does this.
Use examples are as follows:
```
## a.s
.rodata
x:
.word 10
.text
.global _start
_start:
adrp x30, x
add x30, x30, :lo12:x
adrp x1, x
add x1, x1, :lo12:x
adrp x15, x
add x15, x15, :lo12:x
adrp x2, x
add x3, x2, :lo12:x
adrp x2, x
add x2, x3, :lo12:x
```
```
llvm-mc -filetype=obj -triple=aarch64 a.s -o a.o
ld.lld a.o -o a.exe -emit-relocs
objdump -dr a.o > a.dump
```
result is :
```
0000000000210124 <_start>:
210124: d503201f nop
210124: R_AARCH64_ADR_PREL_PG_HI21 .rodata ### nop instruction with R_AARCH64_ADR_PREL_PG_HI21 reloction type
210128: 10f7ffde adr x30, 200120 <x>
210128: R_AARCH64_ADD_ABS_LO12_NC .rodata ### adr instruction with add relocation
21012c: d503201f nop
21012c: R_AARCH64_ADR_PREL_PG_HI21 .rodata
210130: 10f7ff81 adr x1, 200120 <x>
210130: R_AARCH64_ADD_ABS_LO12_NC .rodata
210134: d503201f nop
210134: R_AARCH64_ADR_PREL_PG_HI21 .rodata
210138: 10f7ff4f adr x15, 200120 <x>
210138: R_AARCH64_ADD_ABS_LO12_NC .rodata
21013c: 90ffff82 adrp x2, 200000 <x-0x120>
21013c: R_AARCH64_ADR_PREL_PG_HI21 .rodata
210140: 91048043 add x3, x2, #0x120
210140: R_AARCH64_ADD_ABS_LO12_NC .rodata
210144: 90ffff82 adrp x2, 200000 <x-0x120>
210144: R_AARCH64_ADR_PREL_PG_HI21 .rodata
210148: 91048062 add x2, x3, #0x120
210148: R_AARCH64_ADD_ABS_LO12_NC .rodata
```
It would be greatly appreciated if anyone could help answer this question.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk1v4zYQ_TX0ZWCBX1Ksgw9KHDeLBu0iRc8GJVEWs5SoklSt9NcX-kgt29lN4kUFwxRHHPLN4yNnhHNqX0u5RuEtCjcL0frS2PU_ZetUKer9IjX5y_pXKRtV78GXEqzUJhNemRr8SyNBFF7audVKLTqw0rXayxxUDQIq5SrhsxJS6Q9S1qBq522b9Q4ORJ3PJ1BeVi6Ah7ZK9QsI9w0O5cuwtlb1N2khN9KBL5ULAOENwsmfToLsRNVo6UBYCcJBYbQ2B4fut-j2DsXJOHL6j_D0G7uUIcpABG7sB9bkwoux0yE2eQUHY3Mgk1PgZeen1702qdCwc17YyTa9v_oCiNw2AAAdw4jeQXe05zC3jw1iiTaEIpZ0FxOQt_1HM3nXO_yO-2gfmx9NQL8DfzDTK71HM3vT-3y3Trta_10tqwyWhdKyVyRiG5M-w9Jb1ei-J4TNyoj3-wtLAyIwk2x0HmidD4bxg-wkLGWl_HKQ4yQHkz7nbdXAMrejM7sHEfSmt_EN_6P-QTk4V-DpaPzfQwkmlANid6_auZ_JZ_yKWALjk4eYUUyKqQu1aV6Hvv0cJ3jaJcnT3UPEd8nmaff16f5x9_WX3cMXSsaRk_wBYDwY_dmoTTM_s3BQvvzRRAN_x0viJIrVMQqCi5uiyOUrSJHb-WGgGBOKe0q6no3341udx7fZJbd_7B5_J3T32x2cxXcMr1_3IrxenMdr6SSE7Gc3IvvERsxXZvicvBW5II9cw9048we5O4H0s6pkn1HlycoXSuLFJRnhVWx8RkknmGbSiHFRFMWKzjDNLkE6nPoB0hJ3hOKPAbtWOXymnJhgvsKcHYG9cYlTNqJ6FxK_Vjmc_79c8WuFxVfnXEX0gqt5yvo4V5_X1VnC-OLhYFqdQyphb6XwfY3UNFZmSgz1VgGifjG1hGwYVkrdgKjdQdqhZoK_Wun6Cy1Y5GuWxywWC7kmURxSwlm0WpRrnNGUr9KYZGnIC74iYRSJ8EbQG1JkWUQXak0xZTimmNCQ8lXA4pjIPKM8JPSG8hBxLCuhdNBn58DY_UI518p1FMUYL7RIpXZDyUmp1jmitK897XrI5Wm7d4hjrZx3R3-vvB6q1MfHDQo3KLxNkiGto3AD0BeoH6xMF63V69L7xvXZlW4R3e6VL9s0yEyF6LZfcWqWjTXPMvOIbgf4DtHtEMG_AQAA__9pQ-l4">