Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
November 2021
- 83 participants
- 2620 messages
[PATCH 06/10] tools/winedump/msc: no longer print current function
by Eric Pouech
(it's not really relevant when inline sites are present)
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
tools/winedump/msc.c | 62 ++++++++++++++++++++------------------------------
1 file changed, 25 insertions(+), 37 deletions(-)
diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c
index f058eaf0b36..2fefa36381a 100644
--- a/tools/winedump/msc.c
+++ b/tools/winedump/msc.c
@@ -1307,7 +1307,6 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
{
unsigned int i;
int length;
- char* curr_func = NULL;
int nest_block = 0;
/*
* Loop over the different types of records and whenever we
@@ -1385,7 +1384,6 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
p_string(&sym->thunk_v1.p_name),
sym->thunk_v1.segment, sym->thunk_v1.offset,
sym->thunk_v1.thunk_len, sym->thunk_v1.thtype);
- curr_func = xstrdup(p_string(&sym->thunk_v1.p_name));
break;
case S_THUNK32:
@@ -1393,7 +1391,6 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
sym->thunk_v3.name,
sym->thunk_v3.segment, sym->thunk_v3.offset,
sym->thunk_v3.thunk_len, sym->thunk_v3.thtype);
- curr_func = xstrdup(sym->thunk_v3.name);
break;
/* Global and static functions */
@@ -1409,10 +1406,9 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
sym->proc_v1.debug_start, sym->proc_v1.debug_end);
if (nest_block)
{
- printf(">>> prev func '%s' still has nest_block %u count\n", curr_func, nest_block);
+ printf(">>> prev func still has nest_block %u count\n", nest_block);
nest_block = 0;
}
- curr_func = xstrdup(p_string(&sym->proc_v1.p_name));
/* EPP unsigned int pparent; */
/* EPP unsigned int pend; */
/* EPP unsigned int next; */
@@ -1430,10 +1426,9 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
sym->proc_v2.debug_start, sym->proc_v2.debug_end);
if (nest_block)
{
- printf(">>> prev func '%s' still has nest_block %u count\n", curr_func, nest_block);
+ printf(">>> prev func still has nest_block %u count\n", nest_block);
nest_block = 0;
}
- curr_func = xstrdup(p_string(&sym->proc_v2.p_name));
/* EPP unsigned int pparent; */
/* EPP unsigned int pend; */
/* EPP unsigned int next; */
@@ -1451,10 +1446,9 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
sym->proc_v3.debug_start, sym->proc_v3.debug_end);
if (nest_block)
{
- printf(">>> prev func '%s' still has nest_block %u count\n", curr_func, nest_block);
+ printf(">>> prev func still has nest_block %u count\n", nest_block);
nest_block = 0;
}
- curr_func = xstrdup(sym->proc_v3.name);
/* EPP unsigned int pparent; */
/* EPP unsigned int pend; */
/* EPP unsigned int next; */
@@ -1462,59 +1456,57 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
/* Function parameters and stack variables */
case S_BPREL32_16t:
- printf("BP-relative V1: '%s' @%d type:%x (%s)\n",
+ printf("BP-relative V1: '%s' @%d type:%x\n",
p_string(&sym->stack_v1.p_name),
- sym->stack_v1.offset, sym->stack_v1.symtype, curr_func);
+ sym->stack_v1.offset, sym->stack_v1.symtype);
break;
case S_BPREL32_ST:
- printf("BP-relative V2: '%s' @%d type:%x (%s)\n",
+ printf("BP-relative V2: '%s' @%d type:%x\n",
p_string(&sym->stack_v2.p_name),
- sym->stack_v2.offset, sym->stack_v2.symtype, curr_func);
+ sym->stack_v2.offset, sym->stack_v2.symtype);
break;
case S_BPREL32:
- printf("BP-relative V3: '%s' @%d type:%x (in %s)\n",
+ printf("BP-relative V3: '%s' @%d type:%x\n",
sym->stack_v3.name, sym->stack_v3.offset,
- sym->stack_v3.symtype, curr_func);
+ sym->stack_v3.symtype);
break;
case S_REGREL32:
- printf("Reg-relative V3: '%s' @%d type:%x reg:%x (in %s)\n",
+ printf("Reg-relative V3: '%s' @%d type:%x reg:%x\n",
sym->regrel_v3.name, sym->regrel_v3.offset,
- sym->regrel_v3.symtype, sym->regrel_v3.reg, curr_func);
+ sym->regrel_v3.symtype, sym->regrel_v3.reg);
break;
case S_REGISTER_16t:
- printf("Register V1 '%s' in %s type:%x register:%x\n",
+ printf("Register V1 '%s' type:%x register:%x\n",
p_string(&sym->register_v1.p_name),
- curr_func, sym->register_v1.reg, sym->register_v1.type);
+ sym->register_v1.reg, sym->register_v1.type);
break;
case S_REGISTER_ST:
- printf("Register V2 '%s' in %s type:%x register:%x\n",
+ printf("Register V2 '%s' type:%x register:%x\n",
p_string(&sym->register_v2.p_name),
- curr_func, sym->register_v2.reg, sym->register_v2.type);
+ sym->register_v2.reg, sym->register_v2.type);
break;
case S_REGISTER:
- printf("Register V3 '%s' in %s type:%x register:%x\n",
- sym->register_v3.name,
- curr_func, sym->register_v3.reg, sym->register_v3.type);
+ printf("Register V3 '%s' type:%x register:%x\n",
+ sym->register_v3.name, sym->register_v3.reg, sym->register_v3.type);
break;
case S_BLOCK32_ST:
- printf("Block V1 '%s' in '%s' (%04x:%08x#%08x)\n",
+ printf("Block V1 '%s' (%04x:%08x#%08x)\n",
p_string(&sym->block_v1.p_name),
- curr_func,
sym->block_v1.segment, sym->block_v1.offset,
sym->block_v1.length);
nest_block++;
break;
case S_BLOCK32:
- printf("Block V3 '%s' in '%s' (%04x:%08x#%08x) parent:%u end:%x\n",
- sym->block_v3.name, curr_func,
+ printf("Block V3 '%s' (%04x:%08x#%08x) parent:%u end:%x\n",
+ sym->block_v3.name,
sym->block_v3.segment, sym->block_v3.offset, sym->block_v3.length,
sym->block_v3.parent, sym->block_v3.end);
nest_block++;
@@ -1544,11 +1536,7 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
printf("End-Of block (%u)\n", nest_block);
}
else
- {
- printf("End-Of %s\n", curr_func);
- free(curr_func);
- curr_func = NULL;
- }
+ printf("End-Of function\n");
break;
case S_COMPILE:
@@ -1642,14 +1630,14 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long
break;
case S_LABEL32_ST:
- printf("Label V1 '%s' in '%s' (%04x:%08x)\n",
+ printf("Label V1 '%s' (%04x:%08x)\n",
p_string(&sym->label_v1.p_name),
- curr_func, sym->label_v1.segment, sym->label_v1.offset);
+ sym->label_v1.segment, sym->label_v1.offset);
break;
case S_LABEL32:
- printf("Label V3 '%s' in '%s' (%04x:%08x) flag:%x\n",
- sym->label_v3.name, curr_func, sym->label_v3.segment,
+ printf("Label V3 '%s' (%04x:%08x) flag:%x\n",
+ sym->label_v3.name, sym->label_v3.segment,
sym->label_v3.offset, sym->label_v3.flags);
break;
Nov. 10, 2021
[PATCH 05/10] tools/winedump: pass start offset when dumping symbols
by Eric Pouech
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
tools/winedump/debug.c | 4 ++--
tools/winedump/lib.c | 2 +-
tools/winedump/msc.c | 6 +++---
tools/winedump/pdb.c | 4 ++--
tools/winedump/winedump.h | 2 +-
5 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/tools/winedump/debug.c b/tools/winedump/debug.c
index c2efeb24340..b49c6337494 100644
--- a/tools/winedump/debug.c
+++ b/tools/winedump/debug.c
@@ -135,7 +135,7 @@ static BOOL dump_cv_sst_global_pub(const OMFDirEntry* omfde)
symbols = PRD(fileoffset + sizeof(OMFSymHash), header->cbSymbol);
if (!symbols) {printf("Can't OMF-SymHash details, aborting\n"); return FALSE;}
- codeview_dump_symbols(symbols, header->cbSymbol);
+ codeview_dump_symbols(symbols, 0, header->cbSymbol);
return TRUE;
}
@@ -320,7 +320,7 @@ static BOOL dump_cv_sst_align_sym(const OMFDirEntry* omfde)
if (!rawdata) {printf("Can't get srcAlignSym subsection details, aborting\n");return FALSE;}
if (omfde->cb < sizeof(DWORD)) return TRUE;
- codeview_dump_symbols(rawdata + sizeof(DWORD), omfde->cb - sizeof(DWORD));
+ codeview_dump_symbols(rawdata, sizeof(DWORD), omfde->cb);
return TRUE;
}
diff --git a/tools/winedump/lib.c b/tools/winedump/lib.c
index 430ec2d4de7..4000e8679cf 100644
--- a/tools/winedump/lib.c
+++ b/tools/winedump/lib.c
@@ -97,7 +97,7 @@ static void dump_long_import(const void *base, const IMAGE_SECTION_HEADER *ish,
{
const char *imp_debugS = (const char *)base + ish[i].PointerToRawData;
- codeview_dump_symbols(imp_debugS, ish[i].SizeOfRawData);
+ codeview_dump_symbols(imp_debugS, 0, ish[i].SizeOfRawData);
printf("\n");
}
}
diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c
index cd91ea63634..f058eaf0b36 100644
--- a/tools/winedump/msc.c
+++ b/tools/winedump/msc.c
@@ -1303,7 +1303,7 @@ static void dump_binannot(const unsigned char* ba, const char* last, const char*
}
}
-BOOL codeview_dump_symbols(const void* root, unsigned long size)
+BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long size)
{
unsigned int i;
int length;
@@ -1313,12 +1313,12 @@ BOOL codeview_dump_symbols(const void* root, unsigned long size)
* Loop over the different types of records and whenever we
* find something we are interested in, record it and move on.
*/
- for (i = 0; i < size; i += length)
+ for (i = start; i < size; i += length)
{
const union codeview_symbol* sym = (const union codeview_symbol*)((const char*)root + i);
length = sym->generic.len + 2;
if (!sym->generic.id || length < 4) break;
- printf("\t%04x => ", i + 4); /* ref is made after id and len */
+ printf("\t%04x => ", i);
switch (sym->generic.id)
{
diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c
index 958a13f5e1c..7badc8a32e2 100644
--- a/tools/winedump/pdb.c
+++ b/tools/winedump/pdb.c
@@ -473,7 +473,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
if (modimage)
{
printf("\t------------globals-------------\n");
- codeview_dump_symbols(modimage, pdb_get_file_size(reader, symbols->gsym_file));
+ codeview_dump_symbols(modimage, 0, pdb_get_file_size(reader, symbols->gsym_file));
free(modimage);
}
@@ -588,7 +588,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
int total_size = pdb_get_file_size(reader, file_nr);
if (symbol_size)
- codeview_dump_symbols((const char*)modimage + sizeof(DWORD), symbol_size);
+ codeview_dump_symbols((const char*)modimage, sizeof(DWORD), symbol_size);
/* line number info */
if (lineno_size)
diff --git a/tools/winedump/winedump.h b/tools/winedump/winedump.h
index 236ce6dede3..6013d3caae6 100644
--- a/tools/winedump/winedump.h
+++ b/tools/winedump/winedump.h
@@ -259,7 +259,7 @@ void tlb_dump(void);
enum FileSig get_kind_nls(void);
void nls_dump(void);
-BOOL codeview_dump_symbols(const void* root, unsigned long size);
+BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long size);
BOOL codeview_dump_types_from_offsets(const void* table, const DWORD* offsets, unsigned num_types);
BOOL codeview_dump_types_from_block(const void* table, unsigned long len);
void codeview_dump_linetab(const char* linetab, BOOL pascal_str, const char* pfx);
Nov. 10, 2021
[PATCH 04/10] tools/winedump/msc, include/wine/mscvpdb.h: add some more codeview entries
by Eric Pouech
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
include/wine/mscvpdb.h | 37 +++++++++++++++++++++++++++++++++++++
tools/winedump/msc.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 69 insertions(+)
diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h
index f7dcbcb6625..b0021ed3c25 100644
--- a/include/wine/mscvpdb.h
+++ b/include/wine/mscvpdb.h
@@ -482,6 +482,17 @@ union codeview_reftype
unsigned num;
cv_typ_t drvdcls[1];
} derived_v2;
+
+ struct
+ {
+ unsigned short int len;
+ unsigned short int id;
+ cv_typ_t type;
+ cv_typ_t baseVftable;
+ unsigned offsetInObjectLayout;
+ unsigned cbstr;
+ char names[1]; /* array of len 0-terminated strings (size of cbstr in char:s) */
+ } vftable_v3;
};
union codeview_fieldtype
@@ -1287,6 +1298,7 @@ union codeview_fieldtype
#define LF_METHOD_V3 0x150f
#define LF_NESTTYPE_V3 0x1510
#define LF_ONEMETHOD_V3 0x1511
+#define LF_VFTABLE_V3 0x151d
/* leaves found in second type type (aka IPI)
* for simplicity, stored in the same union as other TPI leaves
@@ -1988,6 +2000,30 @@ union codeview_symbol
unsigned short int id;
char name[1];
} unamespace_v3;
+
+ struct
+ {
+ unsigned short int len;
+ unsigned short int id;
+ unsigned int pParent;
+ unsigned int pEnd;
+ unsigned int length;
+ unsigned int scf; /* CV_SEPCODEFLAGS */
+ unsigned int off;
+ unsigned int offParent;
+ unsigned short int sect;
+ unsigned short int sectParent;
+ } sepcode_v3;
+
+ struct
+ {
+ unsigned short int len;
+ unsigned short int id;
+ unsigned int off;
+ unsigned short int seg;
+ unsigned short int csz; /* number of bytes in following array */
+ char rgsz[1]; /* array of null terminated strings (bounded by csz) */
+ } annotation_v3;
};
enum BinaryAnnotationOpcode
@@ -2061,6 +2097,7 @@ enum BinaryAnnotationOpcode
#define S_GTHREAD32_ST 0x100f
#define S_FRAMEPROC 0x1012
#define S_COMPILE2_ST 0x1013
+#define S_ANNOTATION 0x1019
#define S_UNAMESPACE_ST 0x1029
#define S_OBJNAME 0x1101
diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c
index 40daf4d50d5..cd91ea63634 100644
--- a/tools/winedump/msc.c
+++ b/tools/winedump/msc.c
@@ -1102,6 +1102,20 @@ static void codeview_dump_one_type(unsigned curr_type, const union codeview_type
printf("\n");
break;
+ case LF_VFTABLE_V3:
+ printf("\t%x => VFTable V3 base:%x baseVfTable:%x offset%u\n",
+ curr_type, reftype->vftable_v3.type, reftype->vftable_v3.baseVftable, reftype->vftable_v3.offsetInObjectLayout);
+ {
+ const char* str = reftype->vftable_v3.names;
+ const char* last = str + reftype->vftable_v3.cbstr;
+ while (str < last)
+ {
+ printf("\t\t%s\n", str);
+ str += strlen(str) + 1;
+ }
+ }
+ break;
+
/* types from IPI (aka #4) stream */
case LF_FUNC_ID:
printf("\t%x => FuncId %s scopeId:%04x type:%04x\n",
@@ -1867,6 +1881,24 @@ BOOL codeview_dump_symbols(const void* root, unsigned long size)
printf("UNameSpace V3 '%s'\n", sym->unamespace_v3.name);
break;
+ case S_SEPCODE:
+ printf("SepCode V3 pParent:%x pEnd:%x separated:%04x:%08x (#%u) from %04x:%08x\n",
+ sym->sepcode_v3.pParent, sym->sepcode_v3.pEnd,
+ sym->sepcode_v3.sect, sym->sepcode_v3.off, sym->sepcode_v3.length,
+ sym->sepcode_v3.sectParent, sym->sepcode_v3.offParent);
+ break;
+
+ case S_ANNOTATION:
+ printf("Annotation V3 %04x:%08x\n",
+ sym->annotation_v3.seg, sym->annotation_v3.off);
+ {
+ const char* ptr = sym->annotation_v3.rgsz;
+ const char* last = ptr + sym->annotation_v3.csz;
+ for (; ptr < last; ptr += strlen(ptr) + 1)
+ printf("\t%s\n", ptr);
+ }
+ break;
+
default:
printf("\n\t\t>>> Unsupported symbol-id %x sz=%d\n", sym->generic.id, sym->generic.len + 2);
dump_data((const void*)sym, sym->generic.len + 2, " ");
Nov. 10, 2021
[PATCH 03/10] include/wine/mscvpdb.h: fix string types
by Eric Pouech
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
include/wine/mscvpdb.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h
index 9a733333837..f7dcbcb6625 100644
--- a/include/wine/mscvpdb.h
+++ b/include/wine/mscvpdb.h
@@ -603,7 +603,7 @@ union codeview_fieldtype
cv_typ_t type;
unsigned short int offset; /* numeric leaf */
#if 0
- unsigned char name[1];
+ char name[1];
#endif
}
member_v3;
@@ -1986,7 +1986,7 @@ union codeview_symbol
{
unsigned short int len;
unsigned short int id;
- unsigned char name[1];
+ char name[1];
} unamespace_v3;
};
Nov. 10, 2021
[PATCH 02/10] dbghelp/msc tools/winedump: better detect whether IPI stream is present
by Eric Pouech
Old version of PDB files can have a stream #4 which is not an IPI stream
Available documentation isn't 100% clear about when IPI has been
introduced.
So decide that IPI is present when header of stream looks like a type
stream header.
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
dlls/dbghelp/msc.c | 6 ++++--
tools/winedump/pdb.c | 37 ++++++++++++++++++++++++++++++++-----
2 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c
index c481c762b1d..4e44655deb5 100644
--- a/dlls/dbghelp/msc.c
+++ b/dlls/dbghelp/msc.c
@@ -3047,6 +3047,7 @@ static BOOL pdb_init_type_parse(const struct msc_debug_info* msc_dbg,
break;
default:
ERR("-Unknown type info version %d\n", types.version);
+ return FALSE;
}
ctp->module = msc_dbg->module;
@@ -3324,6 +3325,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
BYTE* file;
int header_size = 0;
PDB_STREAM_INDEXES* psi;
+ BOOL ipi_ok;
pdb_convert_symbols_header(&symbols, &header_size, symbols_image);
switch (symbols.version)
@@ -3363,7 +3365,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
pdb_process_types(msc_dbg, pdb_file);
ipi_image = pdb_read_file(pdb_file, 4);
- pdb_init_type_parse(msc_dbg, &ipi_ctp, ipi_image);
+ ipi_ok = pdb_init_type_parse(msc_dbg, &ipi_ctp, ipi_image);
/* Read global symbol table */
globalimage = pdb_read_file(pdb_file, symbols.gsym_file);
@@ -3387,7 +3389,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
modimage = pdb_read_file(pdb_file, sfile.file);
if (modimage)
{
- struct cv_module_snarf cvmod = {&ipi_ctp, (const void*)(modimage + sfile.symbol_size), sfile.lineno2_size,
+ struct cv_module_snarf cvmod = {ipi_ok ? &ipi_ctp : NULL, (const void*)(modimage + sfile.symbol_size), sfile.lineno2_size,
files_image + 12, files_size};
codeview_snarf(msc_dbg, modimage, sizeof(DWORD), sfile.symbol_size,
&cvmod, TRUE);
diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c
index ed4877cd10a..958a13f5e1c 100644
--- a/tools/winedump/pdb.c
+++ b/tools/winedump/pdb.c
@@ -54,6 +54,21 @@ struct pdb_reader
DWORD file_used[1024];
};
+static inline BOOL has_file_been_read(struct pdb_reader* reader, unsigned file_nr)
+{
+ return reader->file_used[file_nr / 32] & (1 << (file_nr % 32));
+}
+
+static inline void mark_file_been_read(struct pdb_reader* reader, unsigned file_nr)
+{
+ reader->file_used[file_nr / 32] |= 1 << (file_nr % 32);
+}
+
+static inline void clear_file_been_read(struct pdb_reader* reader, unsigned file_nr)
+{
+ reader->file_used[file_nr / 32] &= ~(1 << (file_nr % 32));
+}
+
static void* pdb_jg_read(const struct PDB_JG_HEADER* pdb, const WORD* block_list, int size)
{
int i, nBlocks;
@@ -78,7 +93,7 @@ static void* pdb_jg_read_file(struct pdb_reader* reader, DWORD file_nr)
if (!reader->u.jg.toc || file_nr >= reader->u.jg.toc->num_files) return NULL;
- reader->file_used[file_nr / 32] |= 1 << (file_nr % 32);
+ mark_file_been_read(reader, file_nr);
if (reader->u.jg.toc->file[file_nr].size == 0 ||
reader->u.jg.toc->file[file_nr].size == 0xFFFFFFFF)
return NULL;
@@ -125,7 +140,7 @@ static void pdb_exit(struct pdb_reader* reader)
for (i = 0; i < pdb_get_num_files(reader); i++)
{
- if (reader->file_used[i / 32] & (1 << (i % 32))) continue;
+ if (has_file_been_read(reader, i)) continue;
file = reader->read_file(reader, i);
if (!file) continue;
@@ -615,7 +630,14 @@ static void pdb_dump_types_hash(struct pdb_reader* reader, unsigned file, const
static void pdb_dump_types(struct pdb_reader* reader, unsigned strmidx, const char* strmname)
{
PDB_TYPES* types = NULL;
+ BOOL used = has_file_been_read(reader, strmidx);
+ if (pdb_get_file_size(reader, strmidx) < sizeof(*types))
+ {
+ if (strmidx == 2)
+ printf("-Too small type header\n");
+ return;
+ }
types = reader->read_file(reader, strmidx);
if (!types) return;
@@ -628,7 +650,12 @@ static void pdb_dump_types(struct pdb_reader* reader, unsigned strmidx, const ch
case 20040203: /* VC 8.0 */
break;
default:
- printf("-Unknown type info version %d\n", types->version);
+ /* IPI stream is not always present in older PDB files */
+ if (strmidx == 2)
+ printf("-Unknown type info version %d\n", types->version);
+ free(types);
+ if (used) clear_file_been_read(reader, strmidx);
+ return;
}
/* Read type table */
@@ -870,7 +897,7 @@ static void* pdb_ds_read_file(struct pdb_reader* reader, DWORD file_number)
if (!reader->u.ds.toc || file_number >= reader->u.ds.toc->num_files) return NULL;
- reader->file_used[file_number / 32] |= 1 << (file_number % 32);
+ mark_file_been_read(reader, file_number);
if (reader->u.ds.toc->file_size[file_number] == 0 ||
reader->u.ds.toc->file_size[file_number] == 0xFFFFFFFF)
return NULL;
@@ -932,7 +959,7 @@ static void pdb_ds_dump(void)
* - segments
* - extended FPO data
*/
- reader.file_used[0] |= 1; /* mark stream #0 as read */
+ mark_file_been_read(&reader, 0); /* mark stream #0 as read */
reader.u.ds.root = reader.read_file(&reader, 1);
if (reader.u.ds.root)
{
Nov. 10, 2021
[PATCH 01/10] dbghelp/pdb: fix start adress of block
by Eric Pouech
(another global vs relative-to mismatch)
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
dlls/dbghelp/msc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c
index c0d09b75c56..c481c762b1d 100644
--- a/dlls/dbghelp/msc.c
+++ b/dlls/dbghelp/msc.c
@@ -2246,12 +2246,12 @@ static BOOL codeview_snarf(const struct msc_debug_info* msc_dbg,
case S_BLOCK32_ST:
block = symt_open_func_block(msc_dbg->module, curr_func, block,
- codeview_get_address(msc_dbg, sym->block_v1.segment, sym->block_v1.offset),
+ codeview_get_address(msc_dbg, sym->block_v1.segment, sym->block_v1.offset) - curr_func->address,
sym->block_v1.length);
break;
case S_BLOCK32:
block = symt_open_func_block(msc_dbg->module, curr_func, block,
- codeview_get_address(msc_dbg, sym->block_v3.segment, sym->block_v3.offset),
+ codeview_get_address(msc_dbg, sym->block_v3.segment, sym->block_v3.offset) - curr_func->address,
sym->block_v3.length);
break;
Nov. 10, 2021
Re: [PATCH v5 1/2] mshtml: Implement inline attributes parsing for createElement.
by Jacek Caban
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
Nov. 10, 2021
Re: [PATCH v5 2/2] mshtml: Populate the element props properly.
by Jacek Caban
Hi Gabriel,
On 11/9/21 10:00 PM, Gabriel Ivăncescu wrote:
> --- a/dlls/mshtml/htmlelem.c
> +++ b/dlls/mshtml/htmlelem.c
> @@ -6516,7 +6516,10 @@ static HRESULT HTMLElement_populate_props(DispatchEx *dispex)
> } else
> V_BSTR(&value) = NULL;
>
> - IHTMLElement_setAttribute(&This->IHTMLElement_iface, name, value, 0);
> + hres = IDispatchEx_GetDispID(&dispex->IDispatchEx_iface, name, fdexNameEnsure | fdexNameCaseInsensitive, &id);
> + if(SUCCEEDED(hres))
> + set_elem_attr_value_by_dispid(This, id, &value);
While this is probably the right thing for compat modes <IE9, later
modes should not really need it. They should not expose attributes as JS
properties, see the attached test. I think that entire
HTMLElement_populate_props should be no-op on IE9+. That means that
current attributes collection will not work for those cases, but AFICS
it's already broken. The right fix for attributes collection would be to
have its variant based on something like nsIDOMMozNamedAttrMap.
Thanks,
Jacek
Nov. 10, 2021
Re: [PATCH v2 vkd3d] vkd3d-shader/hlsl: Allocate samplers.
by Matteo Bruni
On Tue, Nov 9, 2021 at 9:50 PM Zebediah Figura (she/her)
<zfigura(a)codeweavers.com> wrote:
>
> On 11/9/21 07:26, Matteo Bruni wrote:
> > From: Zebediah Figura <zfigura(a)codeweavers.com>
> >
> > Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com>
> > ---
> > Now it should actually apply on top of 219117.
> >
> > libs/vkd3d-shader/hlsl_codegen.c | 59 ++++++++++++++++++++++++--------
> > 1 file changed, 44 insertions(+), 15 deletions(-)
> >
>
> Yeah, this does look better; I guess I didn't try hard enough. Note
> however there are a couple problems:
>
> * this can't be used as-is for UAVs, because allocation doesn't start at
> zero;
>
> * this complicates tbuffers as well, for similar reasons. (Actually
> things get worse with tbuffers, because now if you want to preserve that
> "already bound" message you need a way of checking for *both* kinds of
> objects.)
>
> Neither one is particularly hard to solve, I guess, but I'm curious if
> you have a plan for them.
No, I admit I had a super quick skim to your branch for UAVs just to
make sure that it didn't go entirely in the opposite direction and
that's it.
> > +static void allocate_objects(struct hlsl_ctx *ctx, enum hlsl_base_type type)
> > +{
> > + const struct object_type_info *type_info = get_object_type_info(type);
> > struct hlsl_ir_var *var;
> > uint32_t index = 0;
> >
> > LIST_FOR_EACH_ENTRY(var, &ctx->extern_vars, struct hlsl_ir_var, extern_entry)
> > {
> > if (!var->last_read || var->data_type->type != HLSL_CLASS_OBJECT
> > - || var->data_type->base_type != HLSL_TYPE_TEXTURE)
> > + || var->data_type->base_type != type)
> > continue;
> >
> > - if (var->reg_reservation.type == 't')
> > + if (var->reg_reservation.type == type_info->reg_name)
> > {
> > - const struct hlsl_ir_var *reserved_texture = get_reserved_texture(ctx, var->reg_reservation.index);
> > + const struct hlsl_ir_var *reserved_object = get_reserved_object(ctx, type_info->reg_name,
> > + var->reg_reservation.index);
> >
> > - if (reserved_texture && reserved_texture != var)
> > + if (reserved_object && reserved_object != var)
> > {
> > hlsl_error(ctx, var->loc, VKD3D_SHADER_ERROR_HLSL_OVERLAPPING_RESERVATIONS,
> > - "Multiple textures bound to t%u.", var->reg_reservation.index);
> > - hlsl_note(ctx, reserved_texture->loc, VKD3D_SHADER_LOG_ERROR,
> > - "Texture '%s' is already bound to t%u.", reserved_texture->name,
> > + "Multiple %ss bound to %c%u.", type_info->name, type_info->reg_name,
> > var->reg_reservation.index);
>
> At this rate I would just say "multiple objects", since it's not like
> there's extra semantic value in specifying the object type...
>
> > + hlsl_note(ctx, reserved_object->loc, VKD3D_SHADER_LOG_ERROR,
> > + "Object '%s' is already bound to %c%u.", reserved_object->name,
> > + type_info->reg_name, var->reg_reservation.index);
> > }
> >
> > var->reg.id = var->reg_reservation.index;
> > var->reg.allocated = true;
> > - TRACE("Allocated reserved %s to t%u.\n", var->name, var->reg_reservation.index);
> > + TRACE("Allocated reserved %s to %c%u.\n", var->name, type_info->reg_name, var->reg_reservation.index);
> > }
> > else if (!var->reg_reservation.type)
> > {
> > - while (get_reserved_texture(ctx, index))
> > + while (get_reserved_object(ctx, type_info->reg_name, index))
> > ++index;
> >
> > var->reg.id = index;
> > var->reg.allocated = true;
> > - TRACE("Allocated %s to t%u.\n", var->name, index);
> > + TRACE("Allocated %s to %c%u.\n", var->name, type_info->reg_name, index);
> > ++index;
> > }
> > else
> > {
> > hlsl_error(ctx, var->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_RESERVATION,
> > - "Textures must be bound to register type 't'.");
> > + "Object of type '%s' must be bound to register type '%c'.",
> > + type_info->name, type_info->reg_name);
>
> ...and use hlsl_type_to_string() here, and then you don't need
> type_info->name anymore.
Indeed, I'll make the change.
Nov. 10, 2021
Re: [PATCH vkd3d 1/5] vkd3d-shader/hlsl: Use "false" instead of "0" as a bool immediate.
by Matteo Bruni
Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com>
Nov. 10, 2021