<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/124238>124238</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ASan breaks __seg_gs
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
glandium
</td>
</tr>
</table>
<pre>
Take this source:
```
#include <cstdint>
void test(uintptr_t addr) {
__builtin_memcpy((void __seg_gs*)addr, "x", 1);
}
```
It compiles to
```
test(unsigned long):
push rbp
mov rbp, rsp
mov qword ptr [rbp - 8], rdi
mov rax, qword ptr [rbp - 8]
mov byte ptr gs:[rax], 120
pop rbp
ret
```
Or even
```
test(unsigned long):
mov byte ptr gs:[rdi], 120
ret
```
Without ASan, but with ASan:
```
test(unsigned long):
push rbp
mov rbp, rsp
sub rsp, 16
mov qword ptr [rbp - 8], rdi
mov rdi, qword ptr [rbp - 8]
lea rsi, [rip + .str]
mov edx, 1
call __asan_memcpy@PLT
add rsp, 16
pop rbp
ret
```
The `gs:` addressing is gone.
Funnily enough, with `-O` + ASan, it compiles to the same thing as without ASan.
Obligatory godbolt link: https://godbolt.org/z/8hWGxdc3P
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVE1v4zYQ_TWjyyAGTVqWddBBTuqiQIEs0AB7FCiRlthQpMoPx-6vLyjbu4m926IRDNDgmzfzho8c7r3qjZQV5FvInzIew2Bd1WtuhIpj1lpxql74q8QwKI_eRtdJYDWQGtbk8iM1UKZMp6OQCOyx80EoE4D9AqQ-WCUwSB-AbqIyYQquCciFcEBLhGILpEZEbJo2Kh2UaUY5dtMJ6AboZmY3jZd903ugNdDyTH1EoPQIlKa_S6AlsJQJiqcbab8F7Ow4KS09BnsDXnWZ-RQEamv6OVd9UZW-Kfohra6d3u2O9oDXXfqIzv8I_OvNOoFTcAj51rUTPuAG8qeZINSPsvFjAn_G-0hoT0HOQb1PivNtYp-zLyl534Gd8L4DJ8PNcTw7lAdpPnNI1wbuNQn1UdN92a8qDDYGrP_gJgW2MeCbCsN54-6y_bueT7jlY3sG_Qwu1zfE_--iUP_hopb8UnKOTLiaEOgWFz64e6vTJ8XxfNm_Qx3XGpuGe_7t2azIl99f3oVwIX7a3M29uHcGSP0ySIQ1Odu5JvPLld4r06Py2FsjF-fAXTRG6RNKY2M_pFqzh7AmD8-JmJq7Oqw-PEoMg0TPx3nImB65n6nXK3HJ_9xq1fNg3Ql7K1qrA2plXoHVOIQwzfroDujugi6s64Hu_ga62wxffz2Kjn3JRMVEyUqeyWpZsKIgqzwvs6Hq9iLPcyFFsVyJVjBZrFlR8HLP9utyv9xkqqKE5mRJV6RYUVYuSlbmYkP4nnZsv98zWBE5cqUXWh_GVDtT3kdZLemKsk2meSu1n8cspUa-4Yym-ZU_Za5KpIc29h5WRCsf_Pc0QQUtq3QQ2DrJX_23eZhFp6ub3lUYYrvo7Ah0l1JclofJ2T9lF4Du5sIe6O6i7FDRfwIAAP__yQK5cw">