inst = read_memory_unsigned_integer (addr - 2, 2);
sh_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc){  CORE_ADDR func_addr = 0, func_end = 0;  if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))    {      ULONGEST inst;      /* The sh epilogue is max. 14 bytes long.  Give another 14 bytes         for a nop and some fixed data (e.g. big offsets) which are         unfortunately also treated as part of the function (which         means, they are below func_end. */      CORE_ADDR addr = func_end - 28;      if (addr < func_addr + 4)	addr = func_addr + 4;      if (pc < addr)	return 0;      /* First search forward until hitting an rts. */      while (addr < func_end	     && !IS_RTS (read_memory_unsigned_integer (addr, 2)))	addr += 2;      if (addr >= func_end)	return 0;      /* At this point we should find a mov.l @r15+,r14 instruction,         either before or after the rts.  If not, then the function has         probably no "normal" epilogue and we bail out here. */      inst = read_memory_unsigned_integer (addr - 2, 2);      if (IS_RESTORE_FP (read_memory_unsigned_integer (addr - 2, 2)))	addr -= 2;      else if (!IS_RESTORE_FP (read_memory_unsigned_integer (addr + 2, 2)))	return 0;      /* Step over possible lds.l @r15+,pr. */      inst = read_memory_unsigned_integer (addr - 2, 2);      if (IS_LDS (inst))	{	  addr -= 2;	  inst = read_memory_unsigned_integer (addr - 2, 2);	}      /* Step over possible mov r14,r15. */      if (IS_MOV_FP_SP (inst))	{	  addr -= 2;	  inst = read_memory_unsigned_integer (addr - 2, 2);	}      /* Now check for FP adjustments, using add #imm,r14 or add rX, r14         instructions. */      while (addr > func_addr + 4	     && (IS_ADD_REG_TO_FP (inst) || IS_ADD_IMM_FP (inst)))	{	  addr -= 2;	  inst = read_memory_unsigned_integer (addr - 2, 2);	}      if (pc >= addr)	return 1;    }  return 0;}