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); }
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); }