return find_pc_sect_partial_function (pc, bfd_section, name, address, endaddr);
mapped_pc = overlay_mapped_address (pc, section);  if (mapped_pc >= cache_pc_function_low && mapped_pc < cache_pc_function_high && section == cache_pc_function_section) goto return_cached_value;  msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section); pst = find_pc_sect_psymtab (mapped_pc, section); if (pst) {  if (endaddr != NULL && !pst->readin) {  target_terminal_ours_for_output (); PSYMTAB_TO_SYMTAB (pst); }  if (pst->readin) {  f = find_pc_sect_function (mapped_pc, section); if (f != NULL && (msymbol == NULL || (BLOCK_START (SYMBOL_BLOCK_VALUE (f)) >= SYMBOL_VALUE_ADDRESS (msymbol)))) { cache_pc_function_low = BLOCK_START (SYMBOL_BLOCK_VALUE (f)); cache_pc_function_high = BLOCK_END (SYMBOL_BLOCK_VALUE (f)); cache_pc_function_name = DEPRECATED_SYMBOL_NAME (f); cache_pc_function_section = section; goto return_cached_value; } } else {  psb = find_pc_sect_psymbol (pst, mapped_pc, section);  if (psb && (msymbol == NULL || (SYMBOL_VALUE_ADDRESS (psb) >= SYMBOL_VALUE_ADDRESS (msymbol)))) {  if (address) *address = SYMBOL_VALUE_ADDRESS (psb); if (name) *name = DEPRECATED_SYMBOL_NAME (psb);  return 1; } } }    osect = find_pc_sect_section (mapped_pc, section);  if (!osect) msymbol = NULL;   if (msymbol == NULL) {  if (name != NULL) *name = 0; if (address != NULL) *address = 0; if (endaddr != NULL) *endaddr = 0; return 0; }  cache_pc_function_low = SYMBOL_VALUE_ADDRESS (msymbol); cache_pc_function_name = DEPRECATED_SYMBOL_NAME (msymbol); cache_pc_function_section = section;      for (i = 1; DEPRECATED_SYMBOL_NAME (msymbol + i) != NULL; i++) { if (SYMBOL_VALUE_ADDRESS (msymbol + i) != SYMBOL_VALUE_ADDRESS (msymbol) && SYMBOL_BFD_SECTION (msymbol + i) == SYMBOL_BFD_SECTION (msymbol)) break; }  if (DEPRECATED_SYMBOL_NAME (msymbol + i) != NULL && SYMBOL_VALUE_ADDRESS (msymbol + i) < osect->endaddr) cache_pc_function_high = SYMBOL_VALUE_ADDRESS (msymbol + i); else  cache_pc_function_high = osect->endaddr;  return_cached_value:  if (address) { if (pc_in_unmapped_range (pc, section)) *address = overlay_unmapped_address (cache_pc_function_low, section); else *address = cache_pc_function_low; }  if (name) *name = cache_pc_function_name;  if (endaddr) { if (pc_in_unmapped_range (pc, section)) {   *endaddr = 1 + overlay_unmapped_address (cache_pc_function_high - 1, section); } else *endaddr = cache_pc_function_high; }  return 1;
find_pc_partial_function (CORE_ADDR pc, char **name, CORE_ADDR *address,			  CORE_ADDR *endaddr){  struct bfd_section *bfd_section;  /* To ensure that the symbol returned belongs to the correct setion     (and that the last [random] symbol from the previous section     isn't returned) try to find the section containing PC.  First try     the overlay code (which by default returns NULL); and second try     the normal section code (which almost always succeeds).  */  bfd_section = find_pc_overlay (pc);  if (bfd_section == NULL)    {      struct obj_section *obj_section = find_pc_section (pc);      if (obj_section == NULL)	bfd_section = NULL;      else	bfd_section = obj_section->the_bfd_section;    }  return find_pc_sect_partial_function (pc, bfd_section, name, address,					endaddr);}