Hi,

-fdump-lto-list will dump all the symbol list
-fdump-lto-list -demangle will dump all the list with symbol names demangled
-fdump-lto-symbol=foo will dump details of foo

The output(demangled) will be in tabular form like nm:
Symbol Table
        Name         Type         Visibility
              printf            function             default
                   k            variable             default
                main            function             default
                 bar            function             default
                 foo            function             default

I have tried to format the changes according to gnu coding style and
added required methods in symtab_node.

Please find the diff file attached.

Regards,
Hrishikesh

On Mon, Jun 4, 2018 at 2:06 PM, Martin Liška <mli...@suse.cz> wrote:
> On 06/01/2018 08:59 PM, Hrishikesh Kulkarni wrote:
>> Hi,
>> I have pushed the changes to github
>> (https://github.com/hrisearch/gcc). Added a command line option for
>> specific dumps of variables and functions used in IL e.g.
>> -fdump-lto-list=foo will dump:
>> Call Graph:
>>
>> foo/1 (foo)
>>   Type: function
>>  visibility: default
>
> Hi.
>
> Thanks for the next step. I've got some comments about it:
>
> - -fdump-lto-list=foo is wrong option name, I would use -fdump-lto-symbol
>   or something similar.
>
> - for -fdump-lto-list I would really prefer to use a format similar to nm:
>   print a header with column description and then one line for a symbol
>
> - think about mangling/demangling of C++ symbols, you can take a look at
> nm it also has --demangle, --no-demangle
>
> - please learn & try to use an autoformat for your editor in order to
>   fulfill GNU coding style. Following checker will help you:
>
> $ ./contrib/check_GNU_style.py /tmp/p
> === ERROR type #1: dot, space, space, end of comment (6 error(s)) ===
> gcc/lto/lto-dump.c:38:17:/*Dump everything*/
> gcc/lto/lto-dump.c:44:41:/*Dump variables and functions used in IL*/
> gcc/lto/lto-dump.c:73:50:/*Dump specific variables and functions used in IL*/
> gcc/lto/lto.c:3364:19:  /*Dump everything*/
> gcc/lto/lto.c:3368:43:  /*Dump variables and functions used in IL*/
> gcc/lto/lto.c:3372:52:  /*Dump specific variables and functions used in IL*/
>
> === ERROR type #2: lines should not exceed 80 characters (11 error(s)) ===
> gcc/lto/lto-dump.c:51:80:        static const char * const 
> symtab_type_names[] = {"symbol", "function", "variable"};
> gcc/lto/lto-dump.c:56:80:                fprintf (stderr, "\n%s (%s)", 
> cnode->dump_asm_name (), cnode->name ());
> gcc/lto/lto-dump.c:57:80:                fprintf (stderr, "\n  Type: %s", 
> symtab_type_names[cnode->type]);
> gcc/lto/lto-dump.c:66:80:                fprintf (stderr, "\n%s (%s)", 
> vnode->dump_asm_name (), vnode->name ());
> gcc/lto/lto-dump.c:67:80:                fprintf (stderr, "\n  Type: %s", 
> symtab_type_names[vnode->type]);
> gcc/lto/lto-dump.c:80:80:        static const char * const 
> symtab_type_names[] = {"symbol", "function", "variable"};
> gcc/lto/lto-dump.c:87:80:                        fprintf (stderr, "\n%s 
> (%s)", cnode->dump_asm_name (), cnode->name ());
> gcc/lto/lto-dump.c:88:80:                        fprintf (stderr, "\n  Type: 
> %s", symtab_type_names[cnode->type]);
> gcc/lto/lto-dump.c:99:80:                        fprintf (stderr, "\n%s 
> (%s)", vnode->dump_asm_name (), vnode->name ());
> gcc/lto/lto-dump.c:100:80:                        fprintf (stderr, "\n  Type: 
> %s", symtab_type_names[vnode->type]);
> gcc/lto/Make-lang.in:25:80:LTO_OBJS = lto/lto-lang.o lto/lto.o 
> lto/lto-object.o attribs.o lto/lto-partition.o lto/lto-symtab.o lto/lto-dump.o
>
> === ERROR type #3: there should be exactly one space between function name 
> and parenthesis (15 error(s)) ===
> gcc/lto/lto-dump.c:39:9:void dump()
> gcc/lto/lto-dump.c:41:8:        fprintf(stderr, "\nHello World!\n");
> gcc/lto/lto-dump.c:45:14:void dump_list()
> gcc/lto/lto-dump.c:74:15:void dump_list2()
> gcc/lto/lto-dump.c:85:13:               if (!strcmp(flag_lto_dump_list2, 
> cnode->name()))
> gcc/lto/lto-dump.c:97:16:       if (!strcmp(flag_lto_dump_list2, 
> vnode->name()))
> gcc/lto/lto-dump.h:23:9:void dump();
> gcc/lto/lto-dump.h:24:14:void dump_list();
> gcc/lto/lto-dump.h:25:15:void dump_list2();
> gcc/lto/lang.opt:67:7:LTO Var(flag_lto_dump)
> gcc/lto/lang.opt:71:7:LTO Var(flag_lto_dump_list)
> gcc/lto/lang.opt:75:36:LTO Driver RejectNegative Joined 
> Var(flag_lto_dump_list2)
> gcc/lto/lto.c:3366:8:    dump();
> gcc/lto/lto.c:3370:13:    dump_list();
> gcc/lto/lto.c:3374:14:    dump_list2();
>
> === ERROR type #4: there should be no space before a left square bracket (4 
> error(s)) ===
> gcc/lto/lto-dump.c:59:19:               visibility_types [DECL_VISIBILITY 
> (cnode->decl)]);
> gcc/lto/lto-dump.c:69:19:               visibility_types [DECL_VISIBILITY 
> (vnode->decl)]);
> gcc/lto/lto-dump.c:90:20:                       visibility_types 
> [DECL_VISIBILITY (cnode->decl)]);
> gcc/lto/lto-dump.c:102:20:                      visibility_types 
> [DECL_VISIBILITY (vnode->decl)]);
>
> === ERROR type #5: trailing whitespace (5 error(s)) ===
> gcc/lto/lto-dump.c:50:0:█
> gcc/lto/lto-dump.c:79:0:█
> gcc/lto/lto-dump.c:92:2:        }█
> gcc/lto/lto-dump.c:98:3:                {█
> gcc/lto/lto-dump.c:105:1:}█
>
> And please try to avoid adding blank lines / remove blank lines in files 
> which you don't modify.
> Examples: cgraph.c, varpool.c. Note that the checker is not 100% sure, but 
> will help you.
>
>>
>> Regards,
>> Hrishikesh
>>
>> On Tue, May 29, 2018 at 11:13 PM, Martin Liška <mli...@suse.cz> wrote:
>>> On 05/29/2018 07:38 PM, Martin Liška wrote:
>>>> $ nm main.o
>>>> 00000000 T main
>>>> 00000000 T mystring
>>>> 00000000 C pole
>>>
>>> Or we can be inspired by readelf:
>>>
>>> $ readelf -s a.out
>>> [snip]
>>> Symbol table '.symtab' contains 74 entries:
>>>    Num:    Value          Size Type    Bind   Vis      Ndx Name
>>>     66: 0000000000601250     0 NOTYPE  GLOBAL DEFAULT   24 _end
>>>     67: 00000000004004b0    43 FUNC    GLOBAL DEFAULT   13 _start
>>>     68: 0000000000601038     0 NOTYPE  GLOBAL DEFAULT   24 __bss_start
>>>     69: 0000000000400582    70 FUNC    GLOBAL DEFAULT   13 main
>>>     70: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND
>>> fwrite@@GLIBC_2.2.5
>>>
>>> Martin
>>
>> specific-symbols-dump.diff
>>
>>
>> diff --git a/gcc/cgraph.c b/gcc/cgraph.c
>> index 9a7d54d..b868695 100644
>> --- a/gcc/cgraph.c
>> +++ b/gcc/cgraph.c
>> @@ -2234,6 +2234,7 @@ cgraph_node::dump (FILE *f)
>>      fprintf (f, "  Is instrumented version.\n");
>>    else if (instrumented_version)
>>      fprintf (f, "  Has instrumented version.\n");
>> +
>>  }
>>
>>  /* Dump call graph node NODE to stderr.  */
>> diff --git a/gcc/lto/Make-lang.in b/gcc/lto/Make-lang.in
>> index 4695077..465662e 100644
>> --- a/gcc/lto/Make-lang.in
>> +++ b/gcc/lto/Make-lang.in
>> @@ -22,7 +22,7 @@
>>  # The name of the LTO compiler.
>>  LTO_EXE = lto1$(exeext)
>>  # The LTO-specific object files inclued in $(LTO_EXE).
>> -LTO_OBJS = lto/lto-lang.o lto/lto.o lto/lto-object.o attribs.o 
>> lto/lto-partition.o lto/lto-symtab.o
>> +LTO_OBJS = lto/lto-lang.o lto/lto.o lto/lto-object.o attribs.o 
>> lto/lto-partition.o lto/lto-symtab.o lto/lto-dump.o
>>  lto_OBJS = $(LTO_OBJS)
>>
>>  # this is only useful in a LTO bootstrap, but this does not work right
>> diff --git a/gcc/lto/lang.opt b/gcc/lto/lang.opt
>> index 0a408d3..7600840 100644
>> --- a/gcc/lto/lang.opt
>> +++ b/gcc/lto/lang.opt
>> @@ -63,6 +63,18 @@ fwpa=
>>  LTO Driver RejectNegative Joined Var(flag_wpa)
>>  Whole program analysis (WPA) mode with number of parallel jobs specified.
>>
>> +fdump
>> +LTO Var(flag_lto_dump)
>> +Call the dump function.
>> +
>> +fdump-lto-list
>> +LTO Var(flag_lto_dump_list)
>> +Call the dump function for variables and function in IL.
>> +
>> +fdump-lto-list=
>> +LTO Driver RejectNegative Joined Var(flag_lto_dump_list2)
>> +
>> +
>>  fresolution=
>>  LTO Joined
>>  The resolution file.
>> diff --git a/gcc/lto/lto-dump.c b/gcc/lto/lto-dump.c
>> new file mode 100644
>> index 0000000..90976cb
>> --- /dev/null
>> +++ b/gcc/lto/lto-dump.c
>> @@ -0,0 +1,105 @@
>> +/* LTO dump tool
>> +   Copyright (C) 2009-2018 Free Software Foundation, Inc.
>> +
>> +This file is part of GCC.
>> +
>> +GCC is free software; you can redistribute it and/or modify it under
>> +the terms of the GNU General Public License as published by the Free
>> +Software Foundation; either version 3, or (at your option) any later
>> +version.
>> +
>> +GCC is distributed in the hope that it will be useful, but WITHOUT ANY
>> +WARRANTY; without even the implied warranty of MERCHANTABILITY or
>> +FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
>> +for more details.
>> +
>> +You should have received a copy of the GNU General Public License
>> +along with GCC; see the file COPYING3.  If not see
>> +<http://www.gnu.org/licenses/>.  */
>> +
>> +#include "config.h"
>> +#include "system.h"
>> +#include "coretypes.h"
>> +#include "target.h"
>> +#include "function.h"
>> +#include "basic-block.h"
>> +#include "tree.h"
>> +#include "gimple.h"
>> +#include "cgraph.h"
>> +#include "lto-streamer.h"
>> +#include "ipa-utils.h"
>> +#include "builtins.h"
>> +#include "alias.h"
>> +#include "lto-symtab.h"
>> +#include "stringpool.h"
>> +#include "attribs.h"
>> +#include "stdio.h"
>> +
>> +/*Dump everything*/
>> +void dump()
>> +{
>> +     fprintf(stderr, "\nHello World!\n");
>> +}
>> +
>> +/*Dump variables and functions used in IL*/
>> +void dump_list()
>> +{
>> +
>> +     fprintf (stderr, "Call Graph:\n");
>> +     cgraph_node *cnode;
>> +
>> +     static const char * const symtab_type_names[] = {"symbol", "function", 
>> "variable"};
>> +     static const char * const visibility_types[] = {
>> +    "default", "protected", "hidden", "internal" };
>
> We have symbol_node class, this can be refactored into methods.
>
>> +     FOR_EACH_FUNCTION (cnode)
>> +     {
>> +             fprintf (stderr, "\n%s (%s)", cnode->dump_asm_name (), 
>> cnode->name ());
>> +             fprintf (stderr, "\n  Type: %s", 
>> symtab_type_names[cnode->type]);
>> +             fprintf (stderr, "\n visibility: %s\n",
>> +             visibility_types [DECL_VISIBILITY (cnode->decl)]);
>> +     }
>> +
>> +     fprintf (stderr, "\nVarpool:\n");
>> +     varpool_node *vnode;
>> +    FOR_EACH_VARIABLE (vnode)
>> +    {
>> +             fprintf (stderr, "\n%s (%s)", vnode->dump_asm_name (), 
>> vnode->name ());
>> +             fprintf (stderr, "\n  Type: %s", 
>> symtab_type_names[vnode->type]);
>> +             fprintf (stderr, "\n visibility:%s\n",
>> +             visibility_types [DECL_VISIBILITY (vnode->decl)]);
>
> Maybe content of the loop body can be a function that will print. Now it's 
> copy&paste.
>
>> +     }
>> +}
>> +
>> +/*Dump specific variables and functions used in IL*/
>> +void dump_list2()
>> +{
>> +
>> +     fprintf (stderr, "Call Graph:\n");
>> +     cgraph_node *cnode;
>> +
>> +     static const char * const symtab_type_names[] = {"symbol", "function", 
>> "variable"};
>> +     static const char * const visibility_types[] = {
>> +    "default", "protected", "hidden", "internal" };
>> +     FOR_EACH_FUNCTION (cnode)
>> +     {
>> +             if (!strcmp(flag_lto_dump_list2, cnode->name()))
>> +             {
>> +                     fprintf (stderr, "\n%s (%s)", cnode->dump_asm_name (), 
>> cnode->name ());
>> +                     fprintf (stderr, "\n  Type: %s", 
>> symtab_type_names[cnode->type]);
>> +                     fprintf (stderr, "\n visibility: %s\n",
>> +                     visibility_types [DECL_VISIBILITY (cnode->decl)]);
>> +             }
>> +     }
>> +     fprintf (stderr, "\nVarpool:\n");
>> +     varpool_node *vnode;
>> +    FOR_EACH_VARIABLE (vnode)
>> +    {
>> +     if (!strcmp(flag_lto_dump_list2, vnode->name()))
>> +             {
>> +                     fprintf (stderr, "\n%s (%s)", vnode->dump_asm_name (), 
>> vnode->name ());
>> +                     fprintf (stderr, "\n  Type: %s", 
>> symtab_type_names[vnode->type]);
>> +                     fprintf (stderr, "\n visibility:%s\n",
>> +                     visibility_types [DECL_VISIBILITY (vnode->decl)]);
>> +             }
>> +     }
>> +}
>
> The whole function is copy&paste. Please come up with new methods for 
> symtab_node and use it.
>
> You wrote of the mailing list that you're planning to work on CMD options. 
> But please finish
> first dumping of symbols. I would recomment to implement option that will 
> print body
> of a function, which should accept similar dumpflags as we use for dump files:
>
> $ ./xgcc -B. -fdump-tree-optimized-blocks=/dev/stdout 
> ~/Programming/testcases/tmp/main.c -c
>
> ;; Function main (main, funcdef_no=0, decl_uid=2614, cgraph_uid=0, 
> symbol_order=2)
>
> main (int argc, char * * argv)
> {
>   int D.2621;
>   int _1;
>   int _8;
>   int _10;
>
> ;;   basic block 2, loop depth 0
> ;;    pred:       ENTRY
>   foo ();
>   fwrite (0B, 1, 0, 0B);
>   pole[11] = 123;
>   if (argc_7(D) == 1)
>     goto <bb 3>; [INV]
>   else
>     goto <bb 4>; [INV]
> ;;    succ:       3
> ;;                4
> ...
>
> $ ./xgcc -B. -fdump-tree-optimized-gimple=/dev/stdout 
> ~/Programming/testcases/tmp/main.c -c
> int __GIMPLE ()
> main (int argc, char * * argv)
> {
>   int D_2621;
>   int _1;
>   int _8;
>   int _10;
>
>   bb_2:
>   foo ();
>   fwrite (_Literal (const void * restrict) 0, 1ul, 0ul, _Literal (struct FILE 
> * restrict) 0);
>   pole[11] = 123;
>   if (argc_7(D) == 1)
>     goto bb_3;
>   else
>     goto bb_4;
> ...
>
> And I would also do a more verbose symbol dump option that will basically 
> call symbol_node::debug.
>
> Thanks,
> Martin
>
>> \ No newline at end of file
>> diff --git a/gcc/lto/lto-dump.h b/gcc/lto/lto-dump.h
>> new file mode 100644
>> index 0000000..0aef8d1
>> --- /dev/null
>> +++ b/gcc/lto/lto-dump.h
>> @@ -0,0 +1,27 @@
>> +/* LTO dump tool
>> +   Copyright (C) 2009-2018 Free Software Foundation, Inc.
>> +
>> +This file is part of GCC.
>> +
>> +GCC is free software; you can redistribute it and/or modify it under
>> +the terms of the GNU General Public License as published by the Free
>> +Software Foundation; either version 3, or (at your option) any later
>> +version.
>> +
>> +GCC is distributed in the hope that it will be useful, but WITHOUT ANY
>> +WARRANTY; without even the implied warranty of MERCHANTABILITY or
>> +FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
>> +for more details.
>> +
>> +You should have received a copy of the GNU General Public License
>> +along with GCC; see the file COPYING3.  If not see
>> +<http://www.gnu.org/licenses/>.  */
>> +
>> +#ifndef GCC_LTO_DUMP_H_
>> +#define GCC_LTO_DUMP_H_
>> +
>> +void dump();
>> +void dump_list();
>> +void dump_list2();
>> +
>> +#endif
>> \ No newline at end of file
>> diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
>> index d2ccaf6..15a56af 100644
>> --- a/gcc/lto/lto.c
>> +++ b/gcc/lto/lto.c
>> @@ -55,7 +55,7 @@ along with GCC; see the file COPYING3.  If not see
>>  #include "fold-const.h"
>>  #include "attribs.h"
>>  #include "builtins.h"
>> -
>> +#include "lto-dump.h"
>>
>>  /* Number of parallel tasks to run, -1 if we want to use GNU Make 
>> jobserver.  */
>>  static int lto_parallelism;
>> @@ -3361,6 +3361,18 @@ lto_main (void)
>>       command line.  */
>>    read_cgraph_and_symbols (num_in_fnames, in_fnames);
>>
>> +  /*Dump everything*/
>> +  if (flag_lto_dump)
>> +    dump();
>> +
>> +  /*Dump variables and functions used in IL*/
>> +  if (flag_lto_dump_list)
>> +    dump_list();
>> +
>> +  /*Dump specific variables and functions used in IL*/
>> +  if (flag_lto_dump_list2)
>> +    dump_list2();
>> +
>>    timevar_stop (TV_PHASE_STREAM_IN);
>>
>>    if (!seen_error ())
>> diff --git a/gcc/varpool.c b/gcc/varpool.c
>> index 418753c..77f0adb 100644
>> --- a/gcc/varpool.c
>> +++ b/gcc/varpool.c
>> @@ -239,7 +239,6 @@ varpool_node::dump (FILE *f)
>>    fprintf (f, "\n");
>>  }
>>
>> -
>>  /* Dump given varpool node to stderr.  */
>>  void varpool_node::debug (void)
>>  {
>>
>
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index ee7ebb4..ebef347 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -109,6 +109,12 @@ public:
   /* Return dump name with assembler name.  */
   const char *dump_asm_name () const;
 
+  /* Return visibility name.  */
+  const char *dump_visibility () const;
+
+  /* Return type_name name.  */
+  const char *dump_type_name () const;
+
   /* Add node into symbol table.  This function is not used directly, but via
      cgraph/varpool node creation routines.  */
   void register_symbol (void);
diff --git a/gcc/lto/lang.opt b/gcc/lto/lang.opt
index 7600840..a098797 100644
--- a/gcc/lto/lang.opt
+++ b/gcc/lto/lang.opt
@@ -71,9 +71,11 @@ fdump-lto-list
 LTO Var(flag_lto_dump_list)
 Call the dump function for variables and function in IL.
 
-fdump-lto-list=
-LTO Driver RejectNegative Joined Var(flag_lto_dump_list2)
+fdump-lto-symbol=
+LTO Driver RejectNegative Joined Var(flag_lto_dump_symbol)
 
+demangle
+LTO Var(flag_lto_dump_demangle)
 
 fresolution=
 LTO Joined
diff --git a/gcc/lto/lto-dump.c b/gcc/lto/lto-dump.c
index 90976cb..e0becd1 100644
--- a/gcc/lto/lto-dump.c
+++ b/gcc/lto/lto-dump.c
@@ -34,72 +34,46 @@ along with GCC; see the file COPYING3.  If not see
 #include "stringpool.h"
 #include "attribs.h"
 #include "stdio.h"
+#include "lto.h"
 
-/*Dump everything*/
-void dump()
+/* Dump everything.  */
+void 
+dump ()
 {
 	fprintf(stderr, "\nHello World!\n");
 }
 	
-/*Dump variables and functions used in IL*/
-void dump_list()
+/* Dump variables and functions used in IL.  */
+void
+dump_list ()
 {
 
-	fprintf (stderr, "Call Graph:\n");
-	cgraph_node *cnode;
-	
-	static const char * const symtab_type_names[] = {"symbol", "function", "variable"};
-  	static const char * const visibility_types[] = {
-    "default", "protected", "hidden", "internal" };
-	FOR_EACH_FUNCTION (cnode)
+	fprintf (stderr, "Symbol Table\n");
+    symtab_node *node;
+    fprintf (stderr, "\t\tName \t\tType \t\tVisibility\n");
+	FOR_EACH_SYMBOL (node)
 	{
-		fprintf (stderr, "\n%s (%s)", cnode->dump_asm_name (), cnode->name ());
-		fprintf (stderr, "\n  Type: %s", symtab_type_names[cnode->type]);
-		fprintf (stderr, "\n visibility: %s\n",
-		visibility_types [DECL_VISIBILITY (cnode->decl)]);
-	}
-
-	fprintf (stderr, "\nVarpool:\n");
-	varpool_node *vnode;
-    FOR_EACH_VARIABLE (vnode)
-    {
-		fprintf (stderr, "\n%s (%s)", vnode->dump_asm_name (), vnode->name ());
-		fprintf (stderr, "\n  Type: %s", symtab_type_names[vnode->type]);
-		fprintf (stderr, "\n visibility:%s\n",
-		visibility_types [DECL_VISIBILITY (vnode->decl)]);
+		fprintf (stderr, "\n%20s",(flag_lto_dump_demangle) 
+			? node->name (): node->dump_asm_name ());
+		fprintf (stderr, "%20s", node->dump_type_name ());
+		fprintf (stderr, "%20s\n", node->dump_visibility ());
 	}
 }
 
-/*Dump specific variables and functions used in IL*/
-void dump_list2()
+/* Dump specific variables and functions used in IL.  */
+void
+dump_symbol ()
 {
-
-	fprintf (stderr, "Call Graph:\n");
-	cgraph_node *cnode;
-	
-	static const char * const symtab_type_names[] = {"symbol", "function", "variable"};
-  	static const char * const visibility_types[] = {
-    "default", "protected", "hidden", "internal" };
-	FOR_EACH_FUNCTION (cnode)
-	{
-		if (!strcmp(flag_lto_dump_list2, cnode->name()))
-		{
-			fprintf (stderr, "\n%s (%s)", cnode->dump_asm_name (), cnode->name ());
-			fprintf (stderr, "\n  Type: %s", symtab_type_names[cnode->type]);
-			fprintf (stderr, "\n visibility: %s\n",
-			visibility_types [DECL_VISIBILITY (cnode->decl)]);
-		}
-	}	
-	fprintf (stderr, "\nVarpool:\n");
-	varpool_node *vnode;
-    FOR_EACH_VARIABLE (vnode)
+	symtab_node *node;
+    fprintf (stderr, "\t\tName \t\tType \t\tVisibility\n");
+	FOR_EACH_SYMBOL (node)
 	{
-    	if (!strcmp(flag_lto_dump_list2, vnode->name()))
+		if (!strcmp(flag_lto_dump_symbol, node->name()))
 		{
-			fprintf (stderr, "\n%s (%s)", vnode->dump_asm_name (), vnode->name ());
-			fprintf (stderr, "\n  Type: %s", symtab_type_names[vnode->type]);
-			fprintf (stderr, "\n visibility:%s\n",
-			visibility_types [DECL_VISIBILITY (vnode->decl)]);
+			fprintf (stderr, "\n%20s",(flag_lto_dump_demangle) 
+				? node->name (): node->dump_asm_name ());
+		fprintf (stderr, "%20s", node->dump_type_name ());
+		fprintf (stderr, "%20s\n", node->dump_visibility ());
 		}
 	}	
 }	
\ No newline at end of file
diff --git a/gcc/lto/lto-dump.h b/gcc/lto/lto-dump.h
index 0aef8d1..352160c 100644
--- a/gcc/lto/lto-dump.h
+++ b/gcc/lto/lto-dump.h
@@ -20,8 +20,13 @@ along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_LTO_DUMP_H_
 #define GCC_LTO_DUMP_H_
 
-void dump();
-void dump_list();
-void dump_list2();
+/* Dump everything.  */
+void dump ();
+
+/*Dump variables and function names used in IL.  */
+void dump_list ();
+
+/*Dump specific variable or function used in IL.  */
+void dump_symbol ();
 
 #endif
\ No newline at end of file
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index 15a56af..ab1eed3 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -3361,17 +3361,17 @@ lto_main (void)
      command line.  */
   read_cgraph_and_symbols (num_in_fnames, in_fnames);
 
-  /*Dump everything*/
+  /* Dump everything.  */
   if (flag_lto_dump)
-    dump();
+    dump ();
 
-  /*Dump variables and functions used in IL*/
+  /* Dump variables and functions used in IL.  */
   if (flag_lto_dump_list)
-    dump_list();
+    dump_list ();
 
-  /*Dump specific variables and functions used in IL*/
-  if (flag_lto_dump_list2)
-    dump_list2();
+  /* Dump specific variables and functions used in IL.  */
+  if (flag_lto_dump_symbol)
+    dump_symbol ();
 
   timevar_stop (TV_PHASE_STREAM_IN);
 
diff --git a/gcc/symtab.c b/gcc/symtab.c
index c153308..1d2374f 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -808,6 +808,22 @@ symtab_node::dump_referring (FILE *file)
 
 static const char * const symtab_type_names[] = {"symbol", "function", "variable"};
 
+const char *
+symtab_node::dump_visibility () const
+{
+  static const char * const visibility_types[] = {
+    "default", "protected", "hidden", "internal"
+  };
+
+  return visibility_types [DECL_VISIBILITY (decl)];
+}
+
+const char *
+symtab_node::dump_type_name () const
+{
+  return symtab_type_names[type];
+}
+
 /* Dump base fields of symtab nodes to F.  Not to be used directly.  */
 
 void

Reply via email to