<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/94986>94986</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DWARF5][clang] Not all formal_parameters are listed as call_site_parameters
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
spevnev
</td>
</tr>
</table>
<pre>
When compiling a C (I haven't tested other languages) function with more than 6 parameters on x86_64 (I haven't tested other architectures), its call_site will have at most 6 parameters, while the rest, which is stored on the stack (their DW_AT_location is DW_OP_fbreg), can only be seen as formal_parameters in the subprogram DIE.
I believe that this is a bug, since I can't find anything about this limitation in [DWARF5 format](https://dwarfstd.org/doc/DWARF5.pdf).
Minimum example:
```c
__attribute__((noinline)) void test(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
printf("%d %d %d %d %d %d %d %d\n", a1, a2, a3, a4, a5, a6, a7, a8);
}
int main(void) {
test(1,2,3,4,5,6,7,8);
return 0;
}
```
```console
$ clang -O2 -g3 example.c
$ llvm-dwarfdump ./a.out
```
DWARF dump of subprogram:
```
0x00000027: DW_TAG_subprogram
DW_AT_low_pc (0x0000000000001140)
DW_AT_high_pc (0x0000000000001176)
DW_AT_frame_base (DW_OP_reg7 RSP)
DW_AT_call_all_calls (true)
DW_AT_name ("test")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_prototyped (true)
DW_AT_external (true)
0x00000032: DW_TAG_formal_parameter
DW_AT_location (indexed (0x0) loclist = 0x0000002c:
[0x0000000000001140, 0x0000000000001164): DW_OP_reg5 RDI
[0x0000000000001164, 0x0000000000001170): DW_OP_reg4 RSI
[0x0000000000001170, 0x0000000000001176): DW_OP_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value)
DW_AT_name ("a1")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
0x0000003b: DW_TAG_formal_parameter
DW_AT_location (indexed (0x1) loclist = 0x0000003f:
[0x0000000000001140, 0x0000000000001150): DW_OP_reg4 RSI
[0x0000000000001150, 0x0000000000001170): DW_OP_reg1 RDX
[0x0000000000001170, 0x0000000000001176): DW_OP_entry_value(DW_OP_reg4 RSI), DW_OP_stack_value)
DW_AT_name ("a2")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
0x00000044: DW_TAG_formal_parameter
DW_AT_location (indexed (0x2) loclist = 0x00000052:
[0x0000000000001140, 0x000000000000114e): DW_OP_reg1 RDX
[0x000000000000114e, 0x0000000000001170): DW_OP_reg2 RCX
[0x0000000000001170, 0x0000000000001176): DW_OP_entry_value(DW_OP_reg1 RDX), DW_OP_stack_value)
DW_AT_name ("a3")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
0x0000004d: DW_TAG_formal_parameter
DW_AT_location (indexed (0x3) loclist = 0x00000065:
[0x0000000000001140, 0x000000000000114c): DW_OP_reg2 RCX
[0x000000000000114c, 0x0000000000001170): DW_OP_reg8 R8
[0x0000000000001170, 0x0000000000001176): DW_OP_entry_value(DW_OP_reg2 RCX), DW_OP_stack_value)
DW_AT_name ("a4")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
0x00000056: DW_TAG_formal_parameter
DW_AT_location (indexed (0x4) loclist = 0x00000078:
[0x0000000000001140, 0x000000000000114a): DW_OP_reg8 R8
[0x000000000000114a, 0x0000000000001170): DW_OP_reg9 R9
[0x0000000000001170, 0x0000000000001176): DW_OP_entry_value(DW_OP_reg8 R8), DW_OP_stack_value)
DW_AT_name ("a5")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
0x0000005f: DW_TAG_formal_parameter
DW_AT_location (indexed (0x5) loclist = 0x0000008b:
[0x0000000000001140, 0x0000000000001147): DW_OP_reg9 R9
[0x0000000000001147, 0x0000000000001170): DW_OP_reg10 R10
[0x0000000000001170, 0x0000000000001176): DW_OP_entry_value(DW_OP_reg9 R9), DW_OP_stack_value)
DW_AT_name ("a6")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
0x00000068: DW_TAG_formal_parameter
DW_AT_location (indexed (0x6) loclist = 0x0000009e:
[0x0000000000001141, 0x000000000000115d): DW_OP_breg7 RSP+16)
DW_AT_name ("a7")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
0x00000071: DW_TAG_formal_parameter
DW_AT_location (indexed (0x7) loclist = 0x000000a5:
[0x0000000000001141, 0x000000000000115d): DW_OP_breg7 RSP+24)
DW_AT_name ("a8")
DW_AT_decl_file ("/app/examples/min.c")
DW_AT_decl_line (3)
DW_AT_type (0x000000b0 "int")
```
Dump of call site:
```
0x0000008a: DW_TAG_call_site
DW_AT_call_origin (0x00000027)
DW_AT_call_return_pc (0x00000000000011aa)
0x00000090: DW_TAG_call_site_parameter
DW_AT_location (DW_OP_reg9 R9)
DW_AT_call_value (DW_OP_lit6)
0x00000095: DW_TAG_call_site_parameter
DW_AT_location (DW_OP_reg8 R8)
DW_AT_call_value (DW_OP_lit5)
0x0000009a: DW_TAG_call_site_parameter
DW_AT_location (DW_OP_reg2 RCX)
DW_AT_call_value (DW_OP_lit4)
0x0000009f: DW_TAG_call_site_parameter
DW_AT_location (DW_OP_reg1 RDX)
DW_AT_call_value (DW_OP_lit3)
0x000000a4: DW_TAG_call_site_parameter
DW_AT_location (DW_OP_reg4 RSI)
DW_AT_call_value (DW_OP_lit2)
0x000000a9: DW_TAG_call_site_parameter
DW_AT_location (DW_OP_reg5 RDI)
DW_AT_call_value (DW_OP_lit1)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWV1vozgX_jXOzVEjMN8XuWibN696sTujzEizd8iACd41BoFJ23-_sk1oPqBNM8lKM2gmNcTnnMfnPH5MbNK2bCMoXSDvAXnLGelkUTWLtqZbQbezpMpeFz8KKiCtyppxJjZA4BEQDp-gIFsqEA4kSNpKmkElC9oAJ2LTkQ1tEY4g70QqWSXgmckCyqqhIAsiwIeaNKSkkjYtVAJeQj_23Xf9kiYtmKSp7BrtG-FHYLKFlHAet0xSeGaca2sgEsqqlQdhVP_ngnGFgEJDW9k_SQtgLbSyalQsob9uJUn_UXBkQVkDyx_x_feYVynRg2GtevLla5wnDd30WFIioBL8FRIKLaUCSAt51ZSEx3tjZb3_LqmbatOQEpZP_5sja4mse_P5BAnljG51piTIgrUqIIGk26g4LRMphScVTycpZyIDIl5loauTVF1vxFnJZA9YAPIelj_u1yvPgJLIWyIcFlLWLXLuEV4hvMqeSZO3MptXzUbdVinCK2M1r7Mc4egA6R9MsLIrgb6QsuZUuTHf-pb5l5r7OCZSNizpJI1jhEOEQ1ExwZmgOncRbCuW6WojHDIhgdi6uqqFh5YztNyh5Q0tf2gFQytUvlHwYGAAANQNEzLXGDDCXgYffyDvUejejz0sA8nAMVAMDAPBhNehkdNHRsFyP28KW0mYQDhUAz8B2SdCBVOhVCAVRgVRIVSAA_fKpqGyawRYIzF31TguTiXaitP-KXYhVTMX7r5guNs4u6LO07cOnG_LO82RrCtrmCO8IvOqk-Nx9KcmD-juVb7H-lOumFvrxdIXDpBzrybZ9_v_x3tmw3j3r93sfI7rVN0jHO78mMu2XUslzFib7gXbFKb_SPfAP-6eqxkcJ6Slu6gIh0YEGroJYP3t67GJFib1XzXa3kQ2HX3rODoQQUoKhqKGCfgDg4ymPM6Vsu2IvSJ1jfCqr2GL8KpkYp4euNqzVTNR2TofBKqbSlbytabZmUOhL5I2gvDToR-W28F75T4WzfEAcCzKb2VhIqMvBqP1ogoPvEo5ayUgZwkDxVIVc8q58uQ9jNHoEY6f-q6ejfcw8MGD9fKpdz3ixnfH3ATWsRsX1t_ecROMojHcHdxQIZvXeEu4Sn54hNCsXOahXvJ2HSeqekBRk2yEsZLFcWJpUg51uZiag4dpgu6QKXbC4aROLEAYM3Ewk474l6iE9V7e4eB5lLOnKOfke5Q7m17eZ3nhjfPixI0N6-Vft6GXQfghvUbZhN9TvJ_TvPecTTLtZ4jlujcTNjzFMg9fS9hc-knKKINzmIdh_Xgj5hmEVxI251cXNje7prA5U5TzvUuEzU0_yQtlcA69QliHt2GXAXiZrrm_ka55_s10zZ0iWRBeTdfI5xij-p_DuwjW0W14p_FdSdS8X13UvPyaouZN8S1MLhK14HOscIMzX9YsWNvWbdilEV4mav5vJGp-eDNR86dIFtELRM0e_ZmQHZQ6eduWeLD98zSir2nwG9U0sG9W02CqpsT7D2qK3U_VNPy1a3q4S7js9xNTwjm0TI5sPR-yICRHK8ZwaHC6Y1c1bMMEHMHCwYcD1tZmHzau07FtRUImWBpZO3ynCM9a1sbU_GRkWs8PenMm_SlI3t7EmQYzch3hG3uN-cB2D-0-VG8KKrli9oY3_PPS505hym-QvuG37WX5cyawEveK-Rt2fs7L35Ruk-gG-Rs2PS_Ln32qR7Ns4WSRE5EZXdiBHVqOeo2YFYucBGniOrlDceBHqU-IF_hZFjmZRagdpDO2wBZ2Ld-2bNdxcTj3HeIQn0Y58e08jxzkWrQkjM8535bzqtnMWNt2dBG5UejPOEkob_WxLcb65EbppbecNQt9TJN0mxa5llqb2jcPkkmuz3rNoR7ylsh7MNbeEv6sJChFPT21JA0F5YpmQPZOXPe6zLqGLw5PEzdMFl0yT6sS4ZWC0P-5q5vqb5pKhFd6RGpVMYPaLvC_AQAA__8iGA1H">