Commit Graph

22 Commits

Author SHA1 Message Date
Jonas Maebe
a19deace45 llvmdbg: fix overflows for aggregates > 2^61 bytes
LLVM does not support aggregates larger than that at all, because internally
it stores all sizes in bits in an uint64. Their rationale for not having
special support for that is that there is no hardware with full 64 bit VM
address space anyway. So truncate our size emissions in debug info also to
that.
2022-05-29 13:33:27 +02:00
Jonas Maebe
ccc843f983 llvmdbg: emit uppercase symbol names unless C++-style debug info is selected
Otherwise gdb won't find the symbols unless you use the exact case
2022-05-21 22:32:35 +02:00
Jonas Maebe
9a7a97175e llvmdbg: emit debug information for global variables 2022-05-21 22:32:35 +02:00
Jonas Maebe
1b393c80aa llvmdbg: fix missing initialisation when there are no procedures 2022-05-21 22:32:35 +02:00
Jonas Maebe
d0bf7acc18 llvmdbg: build hashtable to lookup llvmdecl belonging to a global variable
We need to attach the debug info to it
2022-05-21 22:32:35 +02:00
Jonas Maebe
e865ab4c3a llvmdbg: handle nil in more places
"void" is represented as "null" in LLVM debug information, which we represent
by nil
2022-05-21 22:32:35 +02:00
Jonas Maebe
481741c65b llvmdbg: remove some commented dbgdwarf code
Also adjusted some hashtable sizes
2022-05-14 22:38:49 +02:00
Pierre Muller
a0d4cccd87 Fix syntax error for isLocal field for function/procedure type LLVM debug information 2022-05-14 21:05:54 +02:00
Jonas Maebe
cddffbed58 llvmdbg: disable open array data location
Since we don't generate full debug info for parameters yet, this internalerrors
2022-05-14 08:34:38 +02:00
Jonas Maebe
fd125b506e LLVM debug info: LLVM 7.0 support
Also defined some llvm flags in a negative way so they can be removed from
later versions rather than added
2022-05-13 22:49:02 +02:00
Jonas Maebe
edbddec98a llvmdbg: diflags/dispflags fixes
Fix MainSubprogram flag for older LLVM versions, as it was a plain flag rather
than a subprogram flag there.

Added visibility flags for procdefs (public/private/protected)

Write flags as enum rather than integer to avoid issues with changing values
across different LLVM versions
2022-05-13 22:49:02 +02:00
Jonas Maebe
9b280db2b1 dbgllvm: add scopeLine attribute for function debug info
Ensures that breaking on the function correctly sets the breakpoint on the
first source line of the function (rather than potentially in the prologue
without line information)
2022-05-13 22:49:02 +02:00
Jonas Maebe
d1aaeff832 dbgllvm: fix crash for files without procedures/functions 2022-05-13 22:49:02 +02:00
Jonas Maebe
067d96242c dbgllvm: fix crash when generating debug info for procdef of imported struct 2022-05-13 22:49:02 +02:00
Jonas Maebe
8d2d91d505 dbgllvm: fix infinite loop when writing multi-dimensional array info 2022-05-13 22:49:02 +02:00
Jonas Maebe
a75adf542d dbgllvm: handle empty spFlags 2022-05-13 22:49:02 +02:00
Jonas Maebe
91563115c4 dbgllvm: handle array of const (stub) 2022-05-13 22:49:02 +02:00
Jonas Maebe
aec7aefdd5 dbgllvm: create dummy line info for instructions that shouldn't have any
Use line 0 for that, like clang does
2022-05-13 22:49:02 +02:00
Jonas Maebe
20674089bd llvmdbg: add declaration for all DISPFlags 2022-05-13 22:49:02 +02:00
Jonas Maebe
f832444eaa LLVM lineinfo: fix nolineinfo generation
LLVM requires line info metadata for all call instructions that may potentially
be inlined. So attach one to all call instructions in nolineinfo regions, but
set their line number to 0 (same as what clang does)
2022-05-13 22:49:02 +02:00
Jonas Maebe
40418f5b3d dbgllvm: remove restriction to only write struct procdef in context of struct
Does not make a difference for LLVM since all debug info for procdefs is
assigned to the definition instructions for the procdef anyway, and avoids
issues when only generating line info (in that case the structs will never
be processed, but we still have to generate the basic debug info for their
procdefs to provide a scope for their line info)
2022-05-13 22:49:02 +02:00
Jonas Maebe
6cacd9c824 llvmdbg: initial version based on dbgdwarf
Line information is mostly functional, type information not yet (except
for basic procdef info, as that's required for line info)
2022-05-13 22:49:02 +02:00