line info for not-called procedure always at address 0x0 (dwarf and stabs)
Original Reporter info from Mantis: Martin @martin_frb
-
Reporter name: Martin Friebe
Original Reporter info from Mantis: Martin @martin_frb
- Reporter name: Martin Friebe
Description:
See the example code from #0038104
If a function is included (NO smart linking / not smart linkable), but the function is not called, then line info is generated.
- For dwarf the line info will be at 0x0 (for each function / so probably not missing relocation, as that would lead to addresses some bytes above 0x0)
- For stabs there is also line info, but no function info or address for the function.
It appears that the linker (build in, and also -Xe) is removing the code for those functions (at least they do not appear when disassembling, or at least not right after the included procedure (as -al would suggest)).
Actually,
- for stabs line info is removed, except for the nested procedure (the containing outer procedure's lines are omitted)
- for dwarf all line info is kept
If the function is removed line info should be removed too.
Otherwise it should have a correct address.
Steps to reproduce:
The code from issue #0038104
dwarf
CU: unit2.pas:
File name Line number Starting address
unit2.pas 20 0x426180
unit2.pas 21 0x426181
unit2.pas 24 0 // P2
unit2.pas 25 0x1
unit2.pas 33 0 // P3
unit2.pas 34 0x1
unit2.pas 30 0 // P3_1
unit2.pas 31 0x7
stabs
15 FUN 0 19 00424a40 133 P1:F1
16 SOL 0 0 00424a40 139 unit2.pas
17 SLINE 0 20 00000000 0
18 SLINE 0 21 00000001 0
19 LBRAC 0 0 00000000 0
20 RBRAC 0 0 00000003 0
21 RSYM 0 29 00000000 149 parentfp:R2
22 PSYM 0 29 fffffffc 161 parentfp:2
23 SLINE 0 30 00000000 0
24 SLINE 0 31 00000007 0
25 LBRAC 0 0 00000000 0
==There should also be
22 FUN 0 23 00424a50 149 P2:F1
23 SOL 0 0 00424a50 155 unit2.pas
24 SLINE 0 24 00000000 0
25 SLINE 0 25 00000001 0
and more
Additional information:
In the related issue #0038104 GDB only gets the line info wrong, with stabs AND if FPC omits that following lines belong to a new function.
With stabs: Adding a function call, and generating proper info, and gdb will stop correctly.
With dwarf: stepping is not affected, but disassembling will not show line info for the addresses
Mantis conversion info:
- Mantis ID: 38117
- OS: Win
- OS Build: Win 10
- Platform: Win 32 bit
- Version: 3.2.0