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

    <tr>
        <th>Summary</th>
        <td>
            Clang 17.0.4 ignores -fPIC in certain cases 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    ``
clang version 17.0.4
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\dev\llvm\bin``

Target is a simple static library,  contents: two functions one __weak_symbol __attribute__((naked)) containing assembly in intel format that calls a static global address in the same file (set by the second function).

The generated objects are not position independent code, using R_X86_64_32S for relocations of the functions containing asm blocks declared as weak.

tested TARGET list `{ x86_64-pc-freebsd12-elf, x86_64-pc-unknown-elf, x86_64-pc-linux-gnu }`

--
reproduction:
``
clang-17.0.4 --target=%TARGET% --sysroot=C:/tc_sysroot/%TARGET%/  -fPIC -fPIE -fasm-blocks -MD -MT syscalls.c.o -MF syscalls.c.o.d -o syscalls.c.o -c syscalls.c
``

objects relocations were tested via readelf and custom tooling,  all cases produce:

``> readelf -r syscalls.c.o``
``
Relocation section '.rela.text' at offset 0x120 contains 2 entries:
    Offset             Info             Type Symbol's Value  Symbol's Name + Addend
000000000000000f 0000000300000002 R_X86_64_PC32          0000000000000000 .bss - 4
000000000000002f  000000030000000b R_X86_64_32S 0000000000000000 .bss + 0
``

rebuilding the same file/params with a previous version (clang-15.0.7):

``> readelf -r syscalls.c.o``
``
Relocation section '.rela.text' at offset 0x128 contains 2 entries:
    Offset             Info             Type Symbol's Value  Symbol's Name + Addend
000000000000000f 0000000300000002 R_X86_64_PC32          0000000000000000 .bss - 4
000000000000002e  0000000300000002 R_X86_64_PC32 0000000000000000 .bss - 4
``

source:

```c
#include <stdint.h>
#include <sys/types.h>

static uint64_t syscall_addr = 0;

int syscalls_init(uint64_t addr) {
    syscall_addr = addr;
 return 0;
}

__weak_symbol 
__attribute__((naked)) 
ssize_t read(int fd, void* buf, size_t nbytes)  {
    __asm {
            push rbp
            mov rbp, rsp
            mov eax, 3
            mov r10, rcx
            call syscall_addr
            pop rbp
 ret
    }
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcVk-P4jYU_zTm8pQoOGSAA4cZGKo9bLvaHVW9RU78Au44duTnMEM_feUkQDLMtsdKjVAc_P745_dfEKmDQdyw7Illu5lo_dG6jayV1ugWPJ0VVp437CEJv2THksdSC3OAEzpS1sB8GSfxoqe8CHdAz9JHeF895A-LqCmjN2WkfaOoplM5cB0dCgm1lagDb2NJvfekL4a80BrlTrlA2rL0kWVbiSeWbbU-1SzbFsqM0YxPBkUggFTdaATywqsStCqccGfGtwClNR6Np6Dav1moWlN6ZQ2BNQh5_obiNadzXVgNeS68d6poPeY54yvGV0a8omR8zfi6UyWUUeYAggjrQp9BGVDGo4bKulp48EfhoRRad6h6OAdtC6FBSOmQKIj4IwKJGqFSGoHxFaGH4tzvY2mNvOJkfB1Pbn1EOKBBJzxKsMWfWHoC4RCM9Z1dgxQoI7FBI9F4KK3EYIuWAvTv-R-do_KU_wiowaG2pRhsUnUYbkaa3LmGQtvylUBiqYVDCYIgGHCC0CMFaC-P3395fgGtyEPw3PJpFCGVQyxIznmEugrYbqTWvBr7Zu4JWpn2PTqYFthy9yEWoqhfHTbOyra3XDoQ7wI56gMYosgP0btjPOsBM55BFNGZnLWB0IUj3_syv-zx_ZiZ8T1AVH37su3ezxBVgupoMFT0dQfR1xegM3VBEZexhejrfrIRS4jsB5Zy9P_-Fv374vyxA9_QIQweOCkBIe1QVyCMhLIlb2vw1mplDl12CK2hFIQEvd3wZrTxoenzVVHkJkgnqEbf36-YQkB3K-PL2KEWscd3z_gShAdbVSH0k_c5Ty6xRsABjXcK6YoGAOC3nnf8fDGVnWy8nBuEH102M74k-F3oFmG882tIO8af4FFKNLJXn0yfCoaPdFj5LWu-bVN-O--DYAJxQQQRLD7Tyyv4qLiYpuPn6gLaT0x8ifiiVVqGBJ1UFcb3jXCiJnhT_ggCGocnZVu6VnHGV0M2ZHESL0OR-8-cv_r_Ox_vnP9R8b_ou_c92db9LGUfkkvd4KkypW4lAku35KUyPj6y9PlT8plCsTs3SGOe_rS-m7XK-IdF7i-RkIe-BizdQcLSp7GAMlcmypVRnvHVVTpIhabKlk83L9-p7LguWsGhb50Zn7PcjQ-cdvPL3j_29OFqpP7C3HdxzvgqAK9kKJAnqyTjj1C0XTMa2Exx9khBfAo_z0OPnGxdnqalI7iiuafU9tQR-BYc_YSO4j3Q059Iz5NOuny_pwdzTsz6CTTbjJA59DeWm32vH5fomslNKtfpWsxwM18mSbZeJYv57LjJqmyRZYvFQpZrkVXr5UOBaZbItZCiWpfpTG14wtP5nM95wpPFPE7XuFwXqcByLirO12yRYC2UjsP0F1t3mCmiFjfLNEnTmRYFaupmV867AsY4D2Os2wT-qGgPxBZJmDvopsErr3Gz7cbYofurg7EOaWjeykCJLpSgoSHOWqc3R-8b6icAxvcH5Y9tEZe2Znzfjab9EjXOhlbM-L5DGnKoA_t3AAAA__9HXlDx">