getfp.c
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:1k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)getfp.c 1.9 99/09/11 Copyright 1988 J. Schilling */
  2. /*
  3.  * Get frame pointer
  4.  *
  5.  * Copyright (c) 1988 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #include <mconfig.h>
  23. #include <standard.h>
  24. #ifdef NO_SCANSTACK
  25. # ifdef HAVE_SCANSTACK
  26. # undef HAVE_SCANSTACK
  27. # endif
  28. #endif
  29. #ifdef HAVE_SCANSTACK
  30. #include <stkframe.h>
  31. #define MAXWINDOWS 32
  32. #define NWINDOWS 7
  33. #if defined(sparc) && defined(__GNUC__)
  34. # define IDX 3 /* some strange things on sparc gcc */
  35. #else
  36. # define IDX 1
  37. #endif
  38. void **getfp()
  39. {
  40. long **dummy[1];
  41. static int idx = IDX; /* fool optimizer in c compiler */
  42. #ifdef sparc
  43. flush_reg_windows(MAXWINDOWS-2);
  44. #endif
  45. return ((void **)((struct frame *)&dummy[idx])->fr_savfp);
  46. }
  47. #ifdef sparc
  48. int flush_reg_windows(n)
  49. int n;
  50. {
  51. if (--n > 0)
  52. flush_reg_windows(n);
  53. return (0);
  54. }
  55. #endif
  56. #endif /* HAVE_SCANSTACK */