Commit graph

1314 commits

Author SHA1 Message Date
Eric Pouech
1bcdb17455 dbghelp: Remove symt_close_func_block() stabs's only parameter.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-10-10 11:11:21 +02:00
Eric Pouech
6f8ba8119a dbghelp: Keep compiland's address for Dwarf debug format.
Partly reverting 99eb63bd7a
(it's still needed on Dwarf for blocks with multiple
non-contiguous address ranges).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-10-10 11:11:15 +02:00
Eric Pouech
96c3f58783 dbghelp: Silence some FIXME for SymGetTypeInfo/TI_GET_OFFSET.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-10-10 11:11:15 +02:00
Eric Pouech
106a056c99 dbghelp: No longer use wine_dbgstr_longlong.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-10-10 11:11:15 +02:00
Eric Pouech
b990eaa8a6 dbghelp: Expose local static variables' address.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-30 21:20:19 +02:00
Eric Pouech
99eb63bd7a dbghelp: Remove address field from symt_compiland.
It's mostly always set at 0, and native dbghelp doesn't expose it anyway.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-30 21:20:09 +02:00
Eric Pouech
50dc4ad0bf dbghelp: SymFromName* should first look in local context.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-29 16:02:56 +02:00
Eric Pouech
1c5eadb482 dbghelp: Improve de-duping global symbols information (PDB).
We have dups in global / file static variables definition:
- between compiland stream and global (DBI) stream
  (we need to de-dup these)
- still adding variables only present global DBI stream
- keeping in mind, we need to keep:
  + two variables of different names at same address (aliasing)
  + variables of same name at different addresses
    (MS linker generate those)

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-28 15:28:58 +02:00
Eric Pouech
908004c3a9 dbghelp: Don't load invalid records for global symbol stream.
Only load records that are listed in global hash file when handling
the global symbol stream.
Do the same thing for the public symbols.

When using MS linker in incremental mode:
- old variable definitions are kept in the (DBI) global symbol stream
  along side the new definition
- but only the latest (valid) definition is referenced from the hash
  table

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-28 15:28:56 +02:00
Eric Pouech
108cd66933 dbghelp: Fix variable storage information (Dwarf).
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-28 15:28:56 +02:00
Eric Pouech
0e345d6c43 dbghelp: Fix container for global variables (Dwarf).
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-28 15:28:56 +02:00
Eric Pouech
a523361b10 dbghelp: Add support for static variables at function scope (PDB).
These should be stored in function's children vector.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-28 15:28:53 +02:00
Eric Pouech
805ffc8adb winedump: Dump global hash table out of PDB symbols' stream.
Introduce relevant structures in include/wine/msvcpdb.h.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-27 18:29:27 +02:00
Eric Pouech
25108ba266 dbghelp: Fix local scope reset upon module unloading.
Change strategy for resetting local scope when unloading a module.
Old strategy was keeping the local scoped symbol alive on some code path when
unloading a module.
This caused some bad behavior as we kept a pointer to a deleted object.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-26 21:49:54 +02:00
Eric Pouech
6424b9d6b7 dbghelp: Store all address ranges for inline sites.
Store all the internal address ranges for an inline site
(as we already do in dwarf debug info).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-13 22:07:22 +02:00
Eric Pouech
cffdaabbc9 dbghelp: Support depth relating to top function for inline sites.
When using an inline context which depth points towards the top level function
(so when it's not strictly speaking an inline context), native falls
back to picking information in the top level function.

So we do now in SymSetScopeFromInlineContext() and SymFromInlineContext()
(instead of returning an error).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-13 22:07:22 +02:00
Gijs Vermeulen
4f90e88d0b dbghelp: Add SymSrvGetFileIndexInfo stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48600
2022-09-12 17:28:23 +02:00
Eric Pouech
553798224d dbghelp: Displacements are optional.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-12 17:28:23 +02:00
Eric Pouech
d1f7bc7c05 dbghelp: Support SymGetTypeInfo/TI_GET_LENGTH for variables.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-12 17:28:23 +02:00
Eric Pouech
12f2a1768c dbghelp: Correctly handle the absence of IPI stream.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-12 17:28:23 +02:00
Eric Pouech
1c5491555b dbghelp: Harden reading strings from string table.
Making use of PDB_STRING_TABLE.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-09-12 17:28:23 +02:00
Francois Gouget
b25b2ed31a dbghelp: Fix a couple of spelling errors in a comment. 2022-08-30 22:00:55 +02:00
Francois Gouget
188e8988ab dbghelp: Fix the spelling of a comment.
Signed-off-by: Francois Gouget <fgouget@free.fr>
2022-07-18 19:44:12 +02:00
Eric Pouech
fe52589cdd dbghelp: Set constants lexical parent to module when no compiland is present.
Especially needed for enumeration's values.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-07-12 22:51:29 +02:00
Eric Pouech
9cb69964d6 dbghelp: Member's lexical parent is module (not parent UDT).
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-07-12 22:51:29 +02:00
Eric Pouech
a5c6cd5aef dbghelp: Only reply to offset requests on symt_data in SymGetTypeInfo() for locals and parameters.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-07-12 22:51:29 +02:00
Eric Pouech
d2a5f434c4 dbghelp: Create lexical relationship between global vars and symt_module.
Global (non static) variables are now stored in symt_module.
(static variables are stored in symt_compiland).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-07-12 22:51:29 +02:00
Eric Pouech
87e2b00774 dbghelp: Don't include global & static variables from S_LOCAL* records.
PDB supports description of a global or static variable:
- accessed from a register
- stored as a local variable record inside a function

This likely describes access to a global/static variable where
intermediate computation is kept in a register.

We cannot store this kind of entries in local variable lists
(builtin dbghelp and winedbg are not prepared to handle a global variable)

Note: the global or static Codeview data record is still present (with a
relocatable address), so the variable should still be available from global
access (but could be not up-to-date if temporarly stored in a register).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-07-12 22:51:29 +02:00
Eric Pouech
437e73883b mscvpdb.h: Use bitfield for defrange's variable flag.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-07-12 22:51:29 +02:00
Eric Pouech
bf68ec1f8a dbghelp: Silence a couple of FIXMEs in SymGetTypeInfo().
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-07-12 22:51:29 +02:00
Eric Pouech
bb52ed3532 dbghelp/msc: Support LF_INDEX* in enumeration type definition.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-06-29 23:23:41 +02:00
Eric Pouech
29dd844439 dbghelp: Use remap table from PDB hash stream.
The PDB hash stream from TPI header contains information to force a remap
to a given type record (whatever the order in the bucket hash list).
This is generated by the incremental linker in some occasions.

Use that information to remap the corresponding types.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-06-28 20:30:05 +02:00
Eric Pouech
d12d5c7245 dbghelp: Preserve PDB's partial order for types of same name.
The PDB types can contain several times a type definition with an identical
name. It seems to appear when modifying a type in source (like adding new
fields to a struct):
- as the PDB file (generated from first compilation) is updated (and not
  fully rewritten), the debug information for the old type is not flushed;
  a new record (for the same struct name) is emitted, and inserted
  before the old one in the hash table (bucket list).

Even if dbghelp's hash table is different from PDB's internal one (ie
number of buckets & bucket lists are different), we must maintain the order
of records of identical names (they end up in the same bucket) as a lookup
by name *must* return the first record in PDB's order.
Lookup by name is used:
- when resolving a forward definition (to get the full UDT definition
  including for example a struct/class fields's list)
- when searching by type name from dbghelp APIs, like SymGetTypeFromName()

This patch implements the preservation of that order.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-06-28 20:30:05 +02:00
Eric Pouech
ddbd341bd0 dbghelp: Clearly separate the type loading into two passes.
- create (contentless) UDT & enum in first pass
- fill UDT&enum content and load the rest of types in second pass.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-06-28 20:30:05 +02:00
Eric Pouech
eb14fad72a mscvpdb.h: Redefine property with bitfields.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-06-28 20:30:05 +02:00
Eric Pouech
b7c231c78f dbghelp: Rely on first/last type index from type header.
Code now follows these guidelines:
- define PDB & Codeview internals in cvconst.h and mscvinfo.h (instead
  of having definitions in .c files, some of them being duplicate of .h
  content, and their "duplicate" values eventually diverged over time)
- index of first type comes from PDB type header (instead of always being
  hardcoded as FIRST_DEFINABLE_TYPE)
- use index of last typex from type header (instead of guessing the right
  value while parsing types, which also allows a single allocation
  instead of enlarging buffer while parsing).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-06-28 20:30:05 +02:00
Eric Pouech
ba12b5ae88 winedump: Explore a bit more TPI hash elements.
Rename a couple of fields in PDB structures for clarity.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
2022-06-28 20:24:18 +02:00
Eric Pouech
5aa9340c3d dbghelp: Set correct basic types definition.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-05-13 22:11:41 +02:00
Eric Pouech
d94f4747e8 dbghelp: Fix conversion of dwarf's basic types into dbghelp's basic types.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-05-13 22:11:41 +02:00
Eric Pouech
14462bbeab dbghelp: Let symt_basic be trans-module and nameless.
Rationale:
- native doesn't report names for SymTagBaseType objects
  => so remove typename for sym_basic
- since symt_basic becomes pretty simple, it's possible to share the object
  across all modules loaded in dbghelp (simplicity, memory usage reduction)
- removed dwarf basic types cache in dwarf.c as we now have a generic one

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-05-13 22:11:41 +02:00
Jactry Zeng
22ea4cd29e dbghelp: Use RtlGetVersion() for system version detection instead.
Signed-off-by: Jactry Zeng <jzeng@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-05-13 09:58:26 +02:00
Eric Pouech
99c7818097 dbghelp: Introduce symt_find_symbol_at().
To be used in place of symt_find_nearest().
symt_find_symbol_at() ensures that the address passed is within the
boundaries of the returned symbol (while find_nearest() doesn't).

This fixes erroneous backtraces in debugger like:
$ ./wine winedbg notepad
WineDbg starting on pid 0104
RtlDefaultNpAcl () at Z:\home\eric\work\wine\dlls\ntdll\sec.c:1731
0x00000170054805 ntdll+0x54805 [Z:\home\eric\work\wine\dlls\ntdll\sec.c:1731]: ret
1731    }
Wine-dbg>bt
Backtrace:
=>0 0x00000170054805 RtlDefaultNpAcl+0x2d5(pAcl=<internal error>) [Z:\home\eric\work\wine\dlls\ntdll\sec.c:1731] in ntdll (0x000001700701a4)
  1 0x0000017002d6c4 __wine_pop_frame(pAcl=<internal error>) [Z:\home\eric\work\wine\include\wine\exception.h:273] in ntdll (0x000001700701a4)
  2 0x0000017002d6c4 process_breakpoint+0x84() [Z:\home\eric\work\wine\dlls\ntdll\loader.c:3912] in ntdll (0x000001700701a4)
  3 0x000001700354c9 LdrInitializeThunk+0x509(context=<register R13 not accessible in this frame>, unknown2=<internal error>, unknown3=<internal error>, unknown4=<internal error>) [Z:\home\eric\work\wine\dlls\ntdll\loader.c:4200] in ntdll (0x000001700701a4)

where RtlDefaultNpAcl() has nothing to do here (it's the symbol below RIP
and we don't have a symbol with debug information for that address).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-05-04 21:27:25 +02:00
Eric Pouech
4643bb2852 dbghelp: Properly fail on PDB files generated by MSVC compiler version 14.31.
Some internal bits of PDB files are different, so report & abort loading of
such PDB file until it's properly understood & supported (instead of
crashing).

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-05-03 20:27:42 +02:00
Alexandre Julliard
53ab4c5385 include: Avoid Windows types in CodeView structure definitions.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-22 16:01:54 +02:00
Austin English
8d3ca2130a dbghelp: Downgrade a FIXME to a WARN.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52790
Signed-off-by: Austin English <austinenglish@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-14 09:27:46 +02:00
Eric Pouech
4d7eccd616 dbghelp: Trace 64-bit integers with I64 width modifier.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-08 11:50:06 +02:00
Eric Pouech
56681b5314 dbghelp/tests: Enable compilation with long types.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-24 20:22:21 +01:00
Francois Gouget
9be9c32781 dbghelp: Fix the spelling and tweak the wording of a comment.
Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-18 22:10:47 +01:00
Eric Pouech
a64d157928 dbghelp: Enable compilation with long types.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-09 18:37:32 +01:00
Alex Henrie
950792ae2b dbghelp: Fix memory leak on error path in dwarf2_read_range (cppcheck).
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-02 18:43:10 +01:00