Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
0693572e
Commit
0693572e
authored
Jan 08, 2011
by
Eric Pouech
Committed by
Alexandre Julliard
Jan 10, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dbghelp: Use new file/debug format framework to allow keeping pdb files opened.
parent
1acbb1c0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
16 deletions
+59
-16
dbghelp_private.h
dlls/dbghelp/dbghelp_private.h
+2
-0
msc.c
dlls/dbghelp/msc.c
+57
-16
No files found.
dlls/dbghelp/dbghelp_private.h
View file @
0693572e
...
...
@@ -326,6 +326,7 @@ enum format_info
DFI_PE
,
DFI_MACHO
,
DFI_DWARF
,
DFI_PDB
,
DFI_LAST
};
...
...
@@ -343,6 +344,7 @@ struct module_format
struct
dwarf2_module_info_s
*
dwarf2_info
;
struct
pe_module_info
*
pe_info
;
struct
macho_module_info
*
macho_info
;
struct
pdb_module_info
*
pdb_info
;
}
u
;
};
...
...
dlls/dbghelp/msc.c
View file @
0693572e
...
...
@@ -81,6 +81,14 @@ struct pdb_file_info
}
u
;
};
/* FIXME: don't make it static */
#define CV_MAX_MODULES 32
struct
pdb_module_info
{
unsigned
used_subfiles
;
struct
pdb_file_info
pdb_files
[
CV_MAX_MODULES
];
};
/*========================================================================
* Debug file access helper routines
*/
...
...
@@ -2167,6 +2175,15 @@ static void pdb_free_file(struct pdb_file_info* pdb_file)
}
}
static
void
pdb_module_remove
(
struct
process
*
pcsn
,
struct
module_format
*
modfmt
)
{
unsigned
i
;
for
(
i
=
0
;
i
<
modfmt
->
u
.
pdb_info
->
used_subfiles
;
i
++
)
pdb_free_file
(
&
modfmt
->
u
.
pdb_info
->
pdb_files
[
i
]);
HeapFree
(
GetProcessHeap
(),
0
,
modfmt
);
}
static
void
pdb_convert_types_header
(
PDB_TYPES
*
types
,
const
BYTE
*
image
)
{
memset
(
types
,
0
,
sizeof
(
PDB_TYPES
));
...
...
@@ -2447,7 +2464,7 @@ static BOOL pdb_init(const struct pdb_lookup* pdb_lookup, struct pdb_file_info*
static
BOOL
pdb_process_internal
(
const
struct
process
*
pcs
,
const
struct
msc_debug_info
*
msc_dbg
,
const
struct
pdb_lookup
*
pdb_lookup
,
struct
pdb_
file_info
*
pdb_file
,
struct
pdb_
module_info
*
pdb_module_info
,
unsigned
module_index
);
static
void
pdb_process_symbol_imports
(
const
struct
process
*
pcs
,
...
...
@@ -2456,6 +2473,7 @@ static void pdb_process_symbol_imports(const struct process* pcs,
const
void
*
symbols_image
,
const
char
*
image
,
const
struct
pdb_lookup
*
pdb_lookup
,
struct
pdb_module_info
*
pdb_module_info
,
unsigned
module_index
)
{
if
(
module_index
==
-
1
&&
symbols
&&
symbols
->
pdbimport_size
)
...
...
@@ -2465,6 +2483,7 @@ static void pdb_process_symbol_imports(const struct process* pcs,
const
void
*
last
;
const
char
*
ptr
;
int
i
=
0
;
struct
pdb_file_info
sf0
=
pdb_module_info
->
pdb_files
[
0
];
imp
=
(
const
PDB_SYMBOL_IMPORT
*
)((
const
char
*
)
symbols_image
+
sizeof
(
PDB_SYMBOLS
)
+
symbols
->
module_size
+
symbols
->
offset_size
+
...
...
@@ -2479,11 +2498,11 @@ static void pdb_process_symbol_imports(const struct process* pcs,
{
if
(
module_index
!=
-
1
)
FIXME
(
"Twice the entry
\n
"
);
else
module_index
=
i
;
pdb_module_info
->
pdb_files
[
i
]
=
sf0
;
}
else
{
struct
pdb_lookup
imp_pdb_lookup
;
struct
pdb_file_info
pdb_file
;
/* FIXME: this is an import of a JG PDB file
* how's a DS PDB handled ?
...
...
@@ -2494,13 +2513,19 @@ static void pdb_process_symbol_imports(const struct process* pcs,
imp_pdb_lookup
.
age
=
imp
->
Age
;
TRACE
(
"got for %s: age=%u ts=%x
\n
"
,
imp
->
filename
,
imp
->
Age
,
imp
->
TimeDateStamp
);
pdb_process_internal
(
pcs
,
msc_dbg
,
&
imp_pdb_lookup
,
&
pdb_file
,
i
);
pdb_process_internal
(
pcs
,
msc_dbg
,
&
imp_pdb_lookup
,
pdb_module_info
,
i
);
}
i
++
;
imp
=
(
const
PDB_SYMBOL_IMPORT
*
)((
const
char
*
)
first
+
((
ptr
-
(
const
char
*
)
first
+
strlen
(
ptr
)
+
1
+
3
)
&
~
3
));
}
pdb_module_info
->
used_subfiles
=
i
;
}
if
(
module_index
==
-
1
)
{
module_index
=
0
;
pdb_module_info
->
used_subfiles
=
1
;
}
cv_current_module
=
&
cv_zmodules
[
(
module_index
==
-
1
)
?
0
:
module_index
];
cv_current_module
=
&
cv_zmodules
[
module_index
];
if
(
cv_current_module
->
allowed
)
FIXME
(
"Already allowed ??
\n
"
);
cv_current_module
->
allowed
=
TRUE
;
}
...
...
@@ -2508,7 +2533,7 @@ static void pdb_process_symbol_imports(const struct process* pcs,
static
BOOL
pdb_process_internal
(
const
struct
process
*
pcs
,
const
struct
msc_debug_info
*
msc_dbg
,
const
struct
pdb_lookup
*
pdb_lookup
,
struct
pdb_
file_info
*
pdb_file
,
struct
pdb_
module_info
*
pdb_module_info
,
unsigned
module_index
)
{
BOOL
ret
=
FALSE
;
...
...
@@ -2518,9 +2543,11 @@ static BOOL pdb_process_internal(const struct process* pcs,
char
*
files_image
=
NULL
;
DWORD
files_size
=
0
;
unsigned
matched
;
struct
pdb_file_info
*
pdb_file
;
TRACE
(
"Processing PDB file %s
\n
"
,
pdb_lookup
->
filename
);
pdb_file
=
&
pdb_module_info
->
pdb_files
[
module_index
==
-
1
?
0
:
module_index
];
/* Open and map() .PDB file */
if
((
hFile
=
open_pdb_file
(
pcs
,
pdb_lookup
,
msc_dbg
->
module
))
==
NULL
||
((
hMap
=
CreateFileMappingW
(
hFile
,
NULL
,
PAGE_READONLY
,
0
,
0
,
NULL
))
==
NULL
)
||
...
...
@@ -2571,7 +2598,8 @@ static BOOL pdb_process_internal(const struct process* pcs,
}
}
pdb_process_symbol_imports
(
pcs
,
msc_dbg
,
&
symbols
,
symbols_image
,
image
,
pdb_lookup
,
module_index
);
pdb_process_symbol_imports
(
pcs
,
msc_dbg
,
&
symbols
,
symbols_image
,
image
,
pdb_lookup
,
pdb_module_info
,
module_index
);
pdb_process_types
(
msc_dbg
,
image
,
pdb_file
);
/* Read global symbol table */
...
...
@@ -2604,7 +2632,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
codeview_snarf_linetab
(
msc_dbg
,
modimage
+
sfile
.
symbol_size
,
sfile
.
lineno_size
,
pdb_
lookup
->
kind
==
PDB_JG
);
pdb_
file
->
kind
==
PDB_JG
);
if
(
files_image
)
codeview_snarf_linetab2
(
msc_dbg
,
modimage
+
sfile
.
symbol_size
+
sfile
.
lineno_size
,
pdb_get_file_size
(
pdb_file
,
sfile
.
file
)
-
sfile
.
symbol_size
-
sfile
.
lineno_size
,
...
...
@@ -2621,13 +2649,12 @@ static BOOL pdb_process_internal(const struct process* pcs,
{
codeview_snarf_public
(
msc_dbg
,
globalimage
,
0
,
pdb_get_file_size
(
pdb_file
,
symbols
.
gsym_file
));
pdb_free
(
globalimage
);
}
}
else
pdb_process_symbol_imports
(
pcs
,
msc_dbg
,
NULL
,
NULL
,
image
,
pdb_lookup
,
module_index
);
pdb_process_symbol_imports
(
pcs
,
msc_dbg
,
NULL
,
NULL
,
image
,
pdb_lookup
,
pdb_module_info
,
module_index
);
ret
=
TRUE
;
leave:
...
...
@@ -2648,20 +2675,34 @@ static BOOL pdb_process_file(const struct process* pcs,
struct
pdb_lookup
*
pdb_lookup
)
{
BOOL
ret
;
struct
pdb_file_info
pdb_file
;
struct
module_format
*
modfmt
;
struct
pdb_module_info
*
pdb_module_info
;
modfmt
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
struct
module_format
)
+
sizeof
(
struct
pdb_module_info
));
if
(
!
modfmt
)
return
FALSE
;
pdb_module_info
=
(
void
*
)(
modfmt
+
1
);
msc_dbg
->
module
->
format_info
[
DFI_PDB
]
=
modfmt
;
modfmt
->
module
=
msc_dbg
->
module
;
modfmt
->
remove
=
pdb_module_remove
;
modfmt
->
loc_compute
=
NULL
;
modfmt
->
u
.
pdb_info
=
pdb_module_info
;
memset
(
cv_zmodules
,
0
,
sizeof
(
cv_zmodules
));
codeview_init_basic_types
(
msc_dbg
->
module
);
ret
=
pdb_process_internal
(
pcs
,
msc_dbg
,
pdb_lookup
,
&
pdb_file
,
-
1
);
ret
=
pdb_process_internal
(
pcs
,
msc_dbg
,
pdb_lookup
,
msc_dbg
->
module
->
format_info
[
DFI_PDB
]
->
u
.
pdb_info
,
-
1
);
codeview_clear_type_table
();
if
(
ret
)
{
struct
pdb_module_info
*
pdb_info
=
msc_dbg
->
module
->
format_info
[
DFI_PDB
]
->
u
.
pdb_info
;
msc_dbg
->
module
->
module
.
SymType
=
SymCv
;
if
(
pdb_
lookup
->
kind
==
PDB_JG
)
msc_dbg
->
module
->
module
.
PdbSig
=
pdb_
file
.
u
.
jg
.
timestamp
;
if
(
pdb_
info
->
pdb_files
[
0
].
kind
==
PDB_JG
)
msc_dbg
->
module
->
module
.
PdbSig
=
pdb_
info
->
pdb_files
[
0
]
.
u
.
jg
.
timestamp
;
else
msc_dbg
->
module
->
module
.
PdbSig70
=
pdb_
file
.
u
.
ds
.
guid
;
msc_dbg
->
module
->
module
.
PdbAge
=
pdb_
file
.
age
;
msc_dbg
->
module
->
module
.
PdbSig70
=
pdb_
info
->
pdb_files
[
0
]
.
u
.
ds
.
guid
;
msc_dbg
->
module
->
module
.
PdbAge
=
pdb_
info
->
pdb_files
[
0
]
.
age
;
MultiByteToWideChar
(
CP_ACP
,
0
,
pdb_lookup
->
filename
,
-
1
,
msc_dbg
->
module
->
module
.
LoadedPdbName
,
sizeof
(
msc_dbg
->
module
->
module
.
LoadedPdbName
)
/
sizeof
(
WCHAR
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment