mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
Name of symbol missing when printing global variable's address
The build_address_symbolic funnction filters out data symbols if their size is set to zero. But the problem is that the COFF symbol table (for instance) does not provide any size information, leaving the size to its default value of zero, thus always triggering the filter. This shows up when trying to print the address of a global variable when debugging a Windows executable, for instance. gdb/ChangeLog: * symtab.h (struct minimal_symbol) [has_size]: New field. (MSYMBOL_SIZE): Adjust to forbid macro from being used as lvalue. (SET_MSYMBOL_SIZE, MSYMBOL_HAS_SIZE): New macros. * printcmd.c (build_address_symbolic): Only filter out zero-sized minimal symbols if the symbol's size is actually known. * minsyms.c (prim_record_minimal_symbol_full): Adjust setting of msymbol's size field. Add comment. * elfread.c (elf_symtab_read, elf_rel_plt_read): Use SET_MSYMBOL_SIZE to set the minimal symbol size.
This commit is contained in:
14
gdb/symtab.h
14
gdb/symtab.h
@ -348,6 +348,11 @@ struct minimal_symbol
|
||||
unsigned int target_flag_1 : 1;
|
||||
unsigned int target_flag_2 : 1;
|
||||
|
||||
/* Nonzero iff the size of the minimal symbol has been set.
|
||||
Symbol size information can sometimes not be determined, because
|
||||
the object file format may not carry that piece of information. */
|
||||
unsigned int has_size : 1;
|
||||
|
||||
/* Minimal symbols with the same hash key are kept on a linked
|
||||
list. This is the link. */
|
||||
|
||||
@ -361,7 +366,14 @@ struct minimal_symbol
|
||||
|
||||
#define MSYMBOL_TARGET_FLAG_1(msymbol) (msymbol)->target_flag_1
|
||||
#define MSYMBOL_TARGET_FLAG_2(msymbol) (msymbol)->target_flag_2
|
||||
#define MSYMBOL_SIZE(msymbol) (msymbol)->size
|
||||
#define MSYMBOL_SIZE(msymbol) ((msymbol)->size + 0)
|
||||
#define SET_MSYMBOL_SIZE(msymbol, sz) \
|
||||
do \
|
||||
{ \
|
||||
(msymbol)->size = sz; \
|
||||
(msymbol)->has_size = 1; \
|
||||
} while (0)
|
||||
#define MSYMBOL_HAS_SIZE(msymbol) ((msymbol)->has_size + 0)
|
||||
#define MSYMBOL_TYPE(msymbol) (msymbol)->type
|
||||
|
||||
#include "minsyms.h"
|
||||
|
Reference in New Issue
Block a user