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

    <tr>
        <th>Summary</th>
        <td>
            -fno-plt option does not suppress PLT generation in Clang 19 dev, while GCC works as expected
        </td>
    </tr>

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

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

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

<pre>
    #### Environment
- Arch: aarch64
-  Clang Version: Clang 19 dev (e.g., clang version 19.0.0git)
-  GCC Version: (e.g., gcc version 10.3)
-  Compiler Flags: -fno-plt

#### Description:
I encountered an issue with the -fno-plt option in Clang 19 dev (development version) on aarch64. When compiling code with -fno-plt, Clang still generates PLT (Procedure Linkage Table) entries for function calls, whereas GCC behaves correctly and does not generate PLT entries.

This issue affects scenarios where direct GOT-based access is expected, and the presence of PLT entries may lead to unnecessary indirection and performance overhead.

Compile the following code with Clang 19 dev and -fno-plt
```
//  gcc 1.c -shared -fno-plt  -O0 -o libnoplt-clang.so -fPIC
//  clang 1.c -shared -fno-plt  -O0 -o libnoplt-gcc.so -fPIC
int bar(int a) {
  return 10;
}
int foo(int a) {
 return bar(a);
}
```
The Clang-compiled version generates PLT functions, while the GCC version does not.
```
// libnoplt-clang.so
Disassembly of section .plt:

0000000000000440 <.plt>:
 440:   a9bf7bf0        stp     x16, x30, [sp, #-16]!
 444:   f00000f0        adrp    x16, 1f000 <__FRAME_END__+0x1e934>
 448:   f947fe11        ldr     x17, [x16, #4088]
 44c:   913fe210        add     x16, x16, #0xff8
 450:   d61f0220        br      x17
 454:   d503201f        nop
 458:   d503201f        nop
 45c:   d503201f        nop

0000000000000470 <bar@plt>:
 470:   90000110        adrp    x16, 20000 <__cxa_finalize@GLIBC_2.17>
 474:   f9400611        ldr     x17, [x16, #8]
 478:   91002210        add     x16, x16, #0x8
 47c:   d61f0220        br      x17

0000000000000588 <foo>:
 588:   d10083ff        sub     sp, sp, #0x20
 58c:   a9017bfd        stp     x29, x30, [sp, #16]
 590:   910043fd        add     x29, sp, #0x10
 594:   b81fc3a0        stur    w0, [x29, #-4]
 598:   b85fc3a0        ldur    w0, [x29, #-4]
 59c:   97ffffb5        bl      470 <bar@plt>
 5a0:   a9417bfd        ldp     x29, x30, [sp, #16]
 5a4:   910083ff        add     sp, sp, #0x20
 5a8:   d65f03c0        ret

```
```
libnoplt-gcc.so
00000000000005c4 <bar>:
 5c4:   d10043ff        sub     sp, sp, #0x10
 5c8:   b9000fe0        str     w0, [sp, #12]
 5cc:   52800140        mov     w0, #0xa                        // #10
 5d0:   910043ff        add     sp, sp, #0x10
 5d4:   d65f03c0        ret

00000000000005d8 <foo>:
 5d8:   a9be7bfd        stp     x29, x30, [sp, #-32]!
 5dc:   910003fd        mov     x29, sp
 5e0:   b9001fe0        str     w0, [sp, #28]
 5e4:   b9401fe0        ldr     w0, [sp, #28]
 5e8:   f00000e1        adrp    x1, 1f000 <__FRAME_END__+0x1e900>
 5ec:   f947e821        ldr     x1, [x1, #4048]
 5f0:   d63f0020        blr     x1
 5f4:   a8c27bfd        ldp     x29, x30, [sp], #32
 5f8:   d65f03c0        ret
```

relevant issue: (Support fno-plt like gcc)[https://github.com/llvm/llvm-project/issues/78275]
relevant pr: (Implement -fno-plt for SelectionDAG/GlobalISel)[https://github.com/llvm/llvm-project/pull/78890] 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycV91u2zwSfRr6hrBBUZRFXfjCcZogQHe_YhvsXgYUNbS1pUWBlJ1kn37BH8lykybBF7i1IfGcmTk8Q42Ec-2-A9ig4gYVtwtxGg7GbrSCbp-xRW2a1w2i-fTB37pza013hG5AZLvEWysPKN9iIaw8rFm4hndadHv8b7CuNZ2_Gy9kFW7gjBHlsNqvEN1hGa6f40KcVSuyIvt2QLSKRPe73ZxmhtxLecGRVT5BdubYtxosvtNi7zxqqTqz7LXP13_m1dyCk7bth8iPyPYBQyfNqRvAQoNFh1vnToCf2-GAhwNMXNgEEG67N7U1cAZteq_QmCGiFTbdqNEK_-cAHZYh0bbbY2maFGJKle4SrxtarfEeOrBiAId_fH_0QX5YI6E5WcDf2-6X2AN-FLUGHwi6wbbgsDIWq1MnQ55SaO086_MBLAgXlK3hIM7gsDTWghz0KxZdgxsDDndmmIKGmIl1FUV8PLQuSSOUAjk47CR0wrbGxRC4aT0nvv_rcVkL58WUEpxHYXjpQQ7Q-Hx8RC9sb8FBJwEbNY-Hj-IVaxANHgw-dR14DmFfcdvFAL44z9GDVcYeRaA4gz2AaFKyyREhjDJam-dr0a820HPNDbMm6eOdc4foHQ7Wy1YSL91BeJdMnsDLvwheGqzbujO9HpbB3itn8FL9eNjNKKLvv0ayl3JO0XYDroVFlPtfwu84Km8Q2WJsYThZ3w4o9xdQeZvWK2PeWZ-WRzJ_Yw6bF_54gCjSMnoWmqn1ro052i05bRTde20EjO5avS_uG-kQ2d62TjgHx1q_ene4tOsrv0OhaRHZkvkfYwSjfBcXfItrMGMk_KpEVauyVgQjUrmhR6R6ydY-4Zec-C9U3Lg-_KD5Mluj4hbRLDKwyKBClMggGjujyPwtH_vp6e5f2398e_r2z9unJ0RvyEsGVc58OoGJJ6aKlQqyzDPpxgaiMiWRKBHNGeHcpxGQMiKrLFdAs5RDM6tigpEXpXgAFan0Zp0pQmkA1WO0sCBV1hQkpyRTfkFn-niPf3BP_unemz0pgy7ebIxcb0yZsqv8uix7R1ZKJlnli3hSbSd0-z9AjNx_f7jZPdFVVo7SlmySlpD1Z9JOupZ81JUQ-pmuUdVSfqjq7woUnPsSfC9OtRd8FDcjhOcqCOhOtf8_eHByInmhJCLkaGOSlbVqZjam1R9sHF3s0RW5lMnyiE5lRvQsYBYDVknQmmdK5iL1zckX-jxGSmDfMWwKxUdcMeF08wXc6PBSKaXqIsiqEanes5AHiKmx2aSIbr6qiGAXRcYdiIr8aQfEuGfrQpFchsIsjOPF_Eyb_f7tOH9jDsnG2i7mkOxiDvaxOdJeyVFz30sK0l5dSX6RgI4SyKR4QTkhGQuoozlfUD6CwG__EKnSue35YgrNtcM-0nNEsA_0vFapeaeFGj6d6_DVhljm9HKuF428pExSU8T6L03h1wG5qJt9oi4dT5YCxv6p2ISKB9KHKD5_1kB2dSh-_qghZOwOkJdHDXB6dR5Ox-H0oGFTAmp6ZuSKkHS66YQLC1Jdgkv6edt5tUOMnEb0n5to3kFka0HDWXRDHDfTW8DPU98bO-BxaNLtL_BzmR9iipvDMPR-8o_e3LfD4VSvpDkieqf1efxa9tb8F-SA6F2gdojelZyWRVRgitvbFPTh2GsIY_00rPkZ-yfoOJHcbu8RvbvXphb64Sfov5lMf9I6pMIrgopbvGg2eVPllVjAJitzXhFGOFscNjUBLteyyvy_IlvXBefros6p4NybedFuKKEFoaQkrGCMrSrOZFGuCWFCcp5zxAgcRatXPoWVsftFUGKT0XVWrhda1KBdeDWkNAxkiPq-WdhNyLk-7R1iRLducBeKoR00bH5_UZreKtyp97N-HBjT-PjOm9RlgvTT47OxvxwWl1eHxcnqzd_f51TgeUP_HwAA___8cSWS">