Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
d0882d54
Commit
d0882d54
authored
Feb 19, 2003
by
Eric Pouech
Committed by
Alexandre Julliard
Feb 19, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- removed unused function: SetSymbolValue
- enhanced a bit AddSymbol regarding invalid symbol management (and enhanced its traces) - now printing type information in 'info sym'
parent
0607e083
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
65 deletions
+48
-65
debugger.h
programs/winedbg/debugger.h
+0
-2
hash.c
programs/winedbg/hash.c
+48
-63
No files found.
programs/winedbg/debugger.h
View file @
d0882d54
...
...
@@ -330,7 +330,6 @@ extern int DEBUG_ReadLine(const char* pfx, char* buffer, int size);
/* debugger/display.c */
extern
int
DEBUG_DoDisplay
(
void
);
extern
int
DEBUG_AddDisplay
(
struct
expr
*
exp
,
int
count
,
char
format
);
extern
int
DEBUG_DoDisplay
(
void
);
extern
int
DEBUG_DelDisplay
(
int
displaynum
);
extern
int
DEBUG_InfoDisplay
(
void
);
...
...
@@ -361,7 +360,6 @@ extern struct name_hash * DEBUG_AddSymbol( const char *name,
const
char
*
sourcefile
,
int
flags
);
extern
enum
get_sym_val
DEBUG_GetSymbolValue
(
const
char
*
name
,
const
int
lineno
,
DBG_VALUE
*
addr
,
int
);
extern
BOOL
DEBUG_SetSymbolValue
(
const
char
*
name
,
const
DBG_VALUE
*
addr
);
extern
const
char
*
DEBUG_FindNearestSymbol
(
const
DBG_ADDR
*
addr
,
int
flag
,
struct
name_hash
**
rtn
,
unsigned
int
ebp
,
...
...
programs/winedbg/hash.c
View file @
d0882d54
...
...
@@ -160,8 +160,9 @@ DEBUG_ResortSymbols(void)
if
(
(
nh
->
flags
&
SYM_INVALID
)
==
0
)
nsym
++
;
else
DEBUG_Printf
(
DBG_CHN_MESG
,
"Symbol %s is invalid
\n
"
,
nh
->
name
);
}
DEBUG_Printf
(
DBG_CHN_MESG
,
"Symbol %s (%04lx:%08lx) is invalid
\n
"
,
nh
->
name
,
nh
->
value
.
addr
.
seg
,
nh
->
value
.
addr
.
off
);
}
}
sorttab_nsym
=
nsym
;
...
...
@@ -209,39 +210,53 @@ DEBUG_AddSymbol( const char * name, const DBG_VALUE *value,
hash
=
name_hash
(
name
);
for
(
nh
=
name_hash_table
[
hash
];
nh
;
nh
=
nh
->
next
)
{
if
(
((
nh
->
flags
&
SYM_INVALID
)
!=
0
)
&&
strcmp
(
name
,
nh
->
name
)
==
0
)
if
(
name
[
0
]
==
nh
->
name
[
0
]
&&
strcmp
(
name
,
nh
->
name
)
==
0
)
{
int
c
=
memcmp
(
&
nh
->
value
.
addr
,
&
value
->
addr
,
sizeof
(
value
->
addr
));
if
((
nh
->
flags
&
SYM_INVALID
)
!=
0
)
{
/* this case happens in ELF files, where we don't get the
* address of a symbol for the stabs part, but rather from
* the ELF sections. in this case, we'll call this function
* twice:
* - a first time while parsing the stabs, with a NULL
* address
* - a second time with the correct address
* SYM_INVALID is set for the first pass, and cleared in the second
* the code below gets most of information for both passes
* latest GCC version seem to provide correct address in first pass,
*/
if
(
nh
->
value
.
addr
.
seg
==
0
&&
nh
->
value
.
addr
.
off
==
0
&&
c
!=
0
)
{
#if 0
DEBUG_Printf(DBG_CHN_MESG, "Changing address for symbol %s (%08lx:%08lx => %08
lx:%08lx)\n",
name, nh->value.addr.seg, nh->value.addr.off, value->addr.seg, value->addr.off);
DEBUG_Printf(DBG_CHN_MESG, "Changing address for symbol %s (%04lx:%08lx => %04
lx:%08lx)\n",
name, nh->value.addr.seg, nh->value.addr.off, value->addr.seg, value->addr.off);
#endif
nh
->
value
.
addr
=
value
->
addr
;
if
(
nh
->
value
.
type
==
NULL
&&
value
->
type
!=
NULL
)
{
nh
->
value
.
type
=
value
->
type
;
nh
->
value
.
cookie
=
value
->
cookie
;
nh
->
value
.
addr
=
value
->
addr
;
}
if
(
nh
->
value
.
type
==
NULL
&&
value
->
type
!=
NULL
)
{
nh
->
value
.
type
=
value
->
type
;
nh
->
value
.
cookie
=
value
->
cookie
;
}
/* it may happen that the same symbol is defined in several compilation
* units, but the linker decides to merge it into a single instance.
* in that case, we don't clear the invalid flag for all the compilation
* units (N_GSYM), and wait to get the symbol from the symtab
*/
if
((
flags
&
SYM_INVALID
)
==
0
)
nh
->
flags
&=
~
SYM_INVALID
;
return
nh
;
}
/* it may happen that the same symbol is defined in several compilation
* units, but the linker decides to merge it into a single instance.
* in that case, we don't clear the invalid flag for all the compilation
* units (N_GSYM), and wait to get the symbol from the symtab
*/
if
((
flags
&
SYM_INVALID
)
==
0
)
nh
->
flags
&=
~
SYM_INVALID
;
return
nh
;
}
if
(
nh
->
value
.
addr
.
seg
==
value
->
addr
.
seg
&&
nh
->
value
.
addr
.
off
==
value
->
addr
.
off
&&
strcmp
(
name
,
nh
->
name
)
==
0
)
{
return
nh
;
/* don't define a symbol twice */
if
(
c
==
0
&&
(
flags
&
SYM_INVALID
)
==
0
)
return
nh
;
}
}
#if 0
DEBUG_Printf(DBG_CHN_TRACE, "adding
symbol (%s) from file '%s' at 0x
%04lx:%08lx\n",
name, source, value->addr.seg, value->addr.off);
DEBUG_Printf(DBG_CHN_TRACE, "adding
%s symbol (%s) from file '%s' at
%04lx:%08lx\n",
(flags & SYM_INVALID) ? "invalid" : " valid",
name, source, value->addr.seg, value->addr.off);
#endif
/*
...
...
@@ -499,42 +514,6 @@ BOOL DEBUG_GetLineNumberAddr( const struct name_hash * nh, const int lineno,
return
TRUE
;
}
/***********************************************************************
* DEBUG_SetSymbolValue
*
* Set the address of a named symbol.
*/
BOOL
DEBUG_SetSymbolValue
(
const
char
*
name
,
const
DBG_VALUE
*
value
)
{
char
buffer
[
256
];
struct
name_hash
*
nh
;
assert
(
value
->
cookie
==
DV_TARGET
||
value
->
cookie
==
DV_HOST
);
for
(
nh
=
name_hash_table
[
name_hash
(
name
)];
nh
;
nh
=
nh
->
next
)
if
(
!
strcmp
(
nh
->
name
,
name
))
break
;
if
(
!
nh
&&
(
name
[
0
]
!=
'_'
))
{
buffer
[
0
]
=
'_'
;
strcpy
(
buffer
+
1
,
name
);
for
(
nh
=
name_hash_table
[
name_hash
(
buffer
)];
nh
;
nh
=
nh
->
next
)
if
(
!
strcmp
(
nh
->
name
,
buffer
))
break
;
}
if
(
!
nh
)
return
FALSE
;
nh
->
value
=
*
value
;
nh
->
flags
&=
~
SYM_INVALID
;
#ifdef __i386__
DEBUG_FixAddress
(
&
nh
->
value
.
addr
,
DEBUG_context
.
SegDs
);
#endif
return
TRUE
;
}
/***********************************************************************
* DEBUG_FindNearestSymbol
*
...
...
@@ -1394,6 +1373,12 @@ void DEBUG_InfoSymbols(const char* str)
array
[
i
]
->
value
.
addr
.
off
);
else
DEBUG_Printf
(
DBG_CHN_MESG
,
"%08lx :"
,
array
[
i
]
->
value
.
addr
.
off
);
if
(
array
[
i
]
->
value
.
type
)
{
DEBUG_Printf
(
DBG_CHN_MESG
,
" ("
);
DEBUG_PrintTypeCast
(
array
[
i
]
->
value
.
type
);
DEBUG_Printf
(
DBG_CHN_MESG
,
")"
);
}
if
(
name
)
DEBUG_Printf
(
DBG_CHN_MESG
,
" %s
\n
"
,
name
);
}
HeapFree
(
GetProcessHeap
(),
0
,
array
);
...
...
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