Mono.Debugger.Backend.Bfd.read_bfd_symbols C# (CSharp) Method

read_bfd_symbols() protected method

protected read_bfd_symbols ( ) : void
return void
        void read_bfd_symbols()
        {
            IntPtr symtab;
            int num_symbols = bfd_glue_get_symbols (bfd, out symtab);

            symbols = new Hashtable ();
            local_symbols = new Hashtable ();
            simple_symbols = new ArrayList ();

            bool is_mach = (bfd_glue_get_target_name (bfd) == "mach-o-le");

            for (int i = 0; i < num_symbols; i++) {
                string name;
                long address;
                int is_function;

                name = bfd_glue_get_symbol (bfd, symtab, i, out is_function, out address);
                if (name == null)
                    continue;

                if(is_mach) {
                    if(name[0] == '_')
                        name = name.Substring(1);
                }

                TargetAddress relocated = new TargetAddress (
                    info.AddressDomain, base_address.Address + address);
                if (is_function != 0 && !symbols.Contains (name))
                    symbols.Add (name, relocated);
                else if (name.StartsWith ("MONO_DEBUGGER__") && !symbols.Contains (name))
                    symbols.Add (name, relocated);
                else if (!local_symbols.Contains (name))
                    local_symbols.Add (name, relocated);

                simple_symbols.Add (new Symbol (name, relocated, 0));
            }

            g_free (symtab);

            num_symbols = bfd_glue_get_dynamic_symbols (bfd, out symtab);

            for (int i = 0; i < num_symbols; i++) {
                string name;
                long address;
                int is_function;

                name = bfd_glue_get_symbol (bfd, symtab, i, out is_function, out address);
                if (name == null)
                    continue;

                TargetAddress relocated = new TargetAddress (
                    info.AddressDomain,
                    base_address.Address + address);
                simple_symbols.Add (new Symbol (name, relocated, 0));
            }

            g_free (symtab);

            simple_symtab = new BfdSymbolTable (this);
        }