From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12960 invoked by alias); 16 Feb 2004 21:24:08 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 12948 invoked from network); 16 Feb 2004 21:24:06 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 16 Feb 2004 21:24:06 -0000 Received: from drow by nevyn.them.org with local (Exim 4.30 #1 (Debian)) id 1AsqDm-0004VI-DZ for ; Mon, 16 Feb 2004 16:24:06 -0500 Date: Mon, 16 Feb 2004 21:24:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: [rfa] Add SYMBOL_SET_LINKAGE_NAME Message-ID: <20040216212406.GC17141@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.1i X-SW-Source: 2004-02/txt/msg00437.txt.bz2 This patch adds a macro, SYMBOL_SET_LINKAGE_NAME, which is used to set a symbol's name when the name should not be demangled. Used for things like typedefs whose name comes from debug info. I did not change anything related to memory allocation when I did this - though in hpread I found a few inconsistencies. After this patch and my others from today there are no direct assignments to the symbol name. In addition to the cleanup value, I'm testing an approach which would change the storage of symbol names, which prompted me to do this. This patch has a trivial dependency on the previous hpread patch (introduction of a local variable in hpread_process_one_debug_symbol) but otherwise they can be applied in any order. OK? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2004-02-16 Daniel Jacobowitz * symtab.h (SYMBOL_SET_LINKAGE_NAME): Define. * ada-lang.c (add_symbols_from_enclosing_procs): Use SYMBOL_SET_LINKAGE_NAME. * dwarfread.c (enum_type, synthesize_typedef): Likewise. * jv-lang.c (add_class_symbol): Likewise. * stabsread.c (patch_block_stabs, define_symbol, read_enum_type) (common_block_end): Likewise. * xcoffread.c (process_xcoff_symbol): Likewise. * hpread.c (hpread_read_enum_type, hpread_read_function_type) (hpread_read_doc_function_type): Use SYMBOL_SET_LINKAGE_NAME. (hpread_process_one_debug_symbol): Likewise. --- hpread.c 7 Feb 2004 23:13:47 -0000 1.45 +++ hpread.c 15 Feb 2004 23:56:30 -0000 @@ -5101,7 +5098,8 @@ hpread_process_one_debug_symbol (union d sym = (struct symbol *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol)); memset (sym, 0, sizeof (struct symbol)); - DEPRECATED_SYMBOL_NAME (sym) = obsavestring (name, strlen (name), &objfile->objfile_obstack); + set_name = obsavestring (name, strlen (name), &objfile->objfile_obstack); + SYMBOL_SET_LINKAGE_NAME (sym, set_name); SYMBOL_LANGUAGE (sym) = language_auto; SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_LINE (sym) = 0; @@ -5889,7 +5867,7 @@ hpread_process_one_debug_symbol (union d newsym = (struct symbol *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol)); memset (newsym, 0, sizeof (struct symbol)); - DEPRECATED_SYMBOL_NAME (newsym) = name; + SYMBOL_SET_LINKAGE_NAME (newsym, name); SYMBOL_LANGUAGE (newsym) = language_auto; SYMBOL_DOMAIN (newsym) = VAR_DOMAIN; SYMBOL_LINE (newsym) = 0; --- ada-lang.c 23 Jan 2004 23:03:28 -0000 1.35 +++ ada-lang.c 15 Feb 2004 23:56:24 -0000 @@ -3533,7 +3533,7 @@ add_symbols_from_enclosing_procs (const /* Initialize the local variable symbol that stands for the * static link (when it exists). */ static_link = &static_link_sym; - DEPRECATED_SYMBOL_NAME (static_link) = ""; + SYMBOL_SET_LINKAGE_NAME (static_link, ""); SYMBOL_LANGUAGE (static_link) = language_unknown; SYMBOL_CLASS (static_link) = LOC_LOCAL; SYMBOL_DOMAIN (static_link) = VAR_DOMAIN; --- jv-lang.c 7 Feb 2004 23:13:47 -0000 1.29 +++ jv-lang.c 15 Feb 2004 23:56:30 -0000 @@ -142,7 +142,7 @@ add_class_symbol (struct type *type, COR obstack_alloc (&dynamics_objfile->objfile_obstack, sizeof (struct symbol)); memset (sym, 0, sizeof (struct symbol)); SYMBOL_LANGUAGE (sym) = language_java; - DEPRECATED_SYMBOL_NAME (sym) = TYPE_TAG_NAME (type); + SYMBOL_SET_LINKAGE_NAME (sym, TYPE_TAG_NAME (type)); SYMBOL_CLASS (sym) = LOC_TYPEDEF; /* SYMBOL_VALUE (sym) = valu; */ SYMBOL_TYPE (sym) = type; --- stabsread.c 7 Feb 2004 23:13:47 -0000 1.74 +++ stabsread.c 15 Feb 2004 23:56:34 -0000 @@ -367,6 +367,8 @@ patch_block_stabs (struct pending *symbo sym = find_symbol_in_list (symbols, name, pp - name); if (!sym) { + char *sym_name; + /* FIXME-maybe: it would be nice if we noticed whether the variable was defined *anywhere*, not just whether it is defined in this compilation unit. But neither @@ -385,8 +387,9 @@ patch_block_stabs (struct pending *symbo memset (sym, 0, sizeof (struct symbol)); SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT; - DEPRECATED_SYMBOL_NAME (sym) = - obsavestring (name, pp - name, &objfile->objfile_obstack); + sym_name = obsavestring (name, pp - name, + &objfile->objfile_obstack); + SYMBOL_SET_LINKAGE_NAME (sym, sym_name); pp += 2; if (*(pp - 1) == 'F' || *(pp - 1) == 'f') { @@ -641,12 +644,15 @@ define_symbol (CORE_ADDR valu, char *str if (is_cplus_marker (string[0])) { + char *sym_name; + /* Special GNU C++ names. */ switch (string[1]) { case 't': - DEPRECATED_SYMBOL_NAME (sym) = obsavestring ("this", strlen ("this"), - &objfile->objfile_obstack); + sym_name = obsavestring ("this", strlen ("this"), + &objfile->objfile_obstack); + SYMBOL_SET_LINKAGE_NAME (sym, sym_name); break; case 'v': /* $vtbl_ptr_type */ @@ -654,8 +660,9 @@ define_symbol (CORE_ADDR valu, char *str goto normal; case 'e': - DEPRECATED_SYMBOL_NAME (sym) = obsavestring ("eh_throw", strlen ("eh_throw"), - &objfile->objfile_obstack); + sym_name = obsavestring ("eh_throw", strlen ("eh_throw"), + &objfile->objfile_obstack); + SYMBOL_SET_LINKAGE_NAME (sym, sym_name); break; case '_': @@ -1130,13 +1137,15 @@ define_symbol (CORE_ADDR valu, char *str SYMBOL_CLASS (sym) = LOC_STATIC; SYMBOL_VALUE_ADDRESS (sym) = valu; #ifdef STATIC_TRANSFORM_NAME - if (IS_STATIC_TRANSFORM_NAME (DEPRECATED_SYMBOL_NAME (sym))) + if (IS_STATIC_TRANSFORM_NAME (SYMBOL_LINKAGE_NAME (sym))) { struct minimal_symbol *msym; - msym = lookup_minimal_symbol (DEPRECATED_SYMBOL_NAME (sym), NULL, objfile); + msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), NULL, objfile); if (msym != NULL) { - DEPRECATED_SYMBOL_NAME (sym) = STATIC_TRANSFORM_NAME (DEPRECATED_SYMBOL_NAME (sym)); + char *sym_name + = STATIC_TRANSFORM_NAME (SYMBOL_LINKAGE_NAME (sym)); + SYMBOL_SET_LINKAGE_NAME (sym, sym_name); SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym); } } @@ -1276,13 +1285,16 @@ define_symbol (CORE_ADDR valu, char *str SYMBOL_CLASS (sym) = LOC_STATIC; SYMBOL_VALUE_ADDRESS (sym) = valu; #ifdef STATIC_TRANSFORM_NAME - if (IS_STATIC_TRANSFORM_NAME (DEPRECATED_SYMBOL_NAME (sym))) + } + if (IS_STATIC_TRANSFORM_NAME (SYMBOL_LINKAGE_NAME (sym))) { struct minimal_symbol *msym; - msym = lookup_minimal_symbol (DEPRECATED_SYMBOL_NAME (sym), NULL, objfile); + msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), NULL, objfile); if (msym != NULL) { - DEPRECATED_SYMBOL_NAME (sym) = STATIC_TRANSFORM_NAME (DEPRECATED_SYMBOL_NAME (sym)); + char *sym_name + = STATIC_TRANSFORM_NAME (SYMBOL_LINKAGE_NAME (sym)); + SYMBOL_SET_LINKAGE_NAME (sym, sym_name); SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym); } } @@ -3493,7 +3505,7 @@ read_enum_type (char **pp, struct type * sym = (struct symbol *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol)); memset (sym, 0, sizeof (struct symbol)); - DEPRECATED_SYMBOL_NAME (sym) = name; + SYMBOL_SET_LINKAGE_NAME (sym, name); SYMBOL_LANGUAGE (sym) = current_subfile->language; SYMBOL_CLASS (sym) = LOC_CONST; SYMBOL_DOMAIN (sym) = VAR_DOMAIN; @@ -4068,7 +4080,7 @@ common_block_end (struct objfile *objfil obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol)); memset (sym, 0, sizeof (struct symbol)); /* Note: common_block_name already saved on objfile_obstack */ - DEPRECATED_SYMBOL_NAME (sym) = common_block_name; + SYMBOL_SET_LINKAGE_NAME (sym, common_block_name); SYMBOL_CLASS (sym) = LOC_BLOCK; /* Now we copy all the symbols which have been defined since the BCOMM. */ --- dwarfread.c 14 Feb 2004 15:46:32 -0000 1.37 +++ dwarfread.c 15 Feb 2004 23:56:27 -0000 @@ -1710,8 +1710,9 @@ enum_type (struct dieinfo *dip, struct o sym = (struct symbol *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol)); memset (sym, 0, sizeof (struct symbol)); - DEPRECATED_SYMBOL_NAME (sym) = create_name (list->field.name, - &objfile->objfile_obstack); + SYMBOL_SET_LINKAGE_NAME (sym, + create_name (list->field.name, + &objfile->objfile_obstack)); SYMBOL_INIT_LANGUAGE_SPECIFIC (sym, cu_language); SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_CLASS (sym) = LOC_CONST; @@ -3013,8 +3014,8 @@ synthesize_typedef (struct dieinfo *dip, obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol)); OBJSTAT (objfile, n_syms++); memset (sym, 0, sizeof (struct symbol)); - DEPRECATED_SYMBOL_NAME (sym) = create_name (dip->at_name, - &objfile->objfile_obstack); + SYMBOL_SET_LINKAGE_NAME (sym, create_name (dip->at_name, + &objfile->objfile_obstack)); SYMBOL_INIT_LANGUAGE_SPECIFIC (sym, cu_language); SYMBOL_TYPE (sym) = type; SYMBOL_CLASS (sym) = LOC_TYPEDEF; --- symtab.h 7 Feb 2004 23:13:47 -0000 1.87 +++ symtab.h 15 Feb 2004 23:56:37 -0000 @@ -195,6 +195,11 @@ extern void symbol_set_names (struct gen const char *linkage_name, int len, struct objfile *objfile); +#define SYMBOL_SET_LINKAGE_NAME(symbol,linkage_name) \ + do { \ + (symbol)->ginfo.name = (linkage_name); \ + } while (0) + /* Now come lots of name accessor macros. Short version as to when to use which: Use SYMBOL_NATURAL_NAME to refer to the name of the symbol in the original source code. Use SYMBOL_LINKAGE_NAME if you --- xcoffread.c 14 Feb 2004 15:46:33 -0000 1.40 +++ xcoffread.c 15 Feb 2004 23:56:38 -0000 @@ -1477,7 +1477,8 @@ process_xcoff_symbol (struct coff_symbol will be patched with the type from its stab entry later on in patch_block_stabs (), unless the file was compiled without -g. */ - DEPRECATED_SYMBOL_NAME (sym) = SYMNAME_ALLOC (name, symname_alloced); + SYMBOL_SET_LINKAGE_NAME (sym, + SYMNAME_ALLOC (name, symname_alloced)); SYMBOL_TYPE (sym) = func_symbol_type; SYMBOL_CLASS (sym) = LOC_BLOCK;