home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / linux / backup / star-1.3.1.tar.gz / star-1.3.1.tar / star-1.3.1 / lib / getfp.c < prev    next >
C/C++ Source or Header  |  2000-05-07  |  2KB  |  67 lines

  1. /* @(#)getfp.c    1.10 00/05/07 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.  
  23. #include <mconfig.h>
  24. #include <standard.h>
  25. #include <schily.h>
  26.  
  27. #ifdef    NO_SCANSTACK
  28. #    ifdef    HAVE_SCANSTACK
  29. #    undef    HAVE_SCANSTACK
  30. #    endif
  31. #endif
  32.  
  33. #ifdef    HAVE_SCANSTACK
  34. #include <stkframe.h>
  35.  
  36. #define    MAXWINDOWS    32
  37. #define    NWINDOWS    7
  38.  
  39. #if defined(sparc) && defined(__GNUC__)
  40. #    define    IDX        3    /* some strange things on sparc gcc */
  41. #else
  42. #    define    IDX        1
  43. #endif
  44.  
  45. void **getfp()
  46. {
  47.         long    **dummy[1];
  48.     static    int    idx = IDX;    /* fool optimizer in c compiler */
  49.  
  50. #ifdef    sparc
  51.     flush_reg_windows(MAXWINDOWS-2);
  52. #endif
  53.     return ((void **)((struct frame *)&dummy[idx])->fr_savfp);
  54. }
  55.  
  56. #ifdef    sparc
  57. int flush_reg_windows(n)
  58.     int    n;
  59. {
  60.     if (--n > 0)
  61.         flush_reg_windows(n);
  62.     return (0);
  63. }
  64. #endif
  65.  
  66. #endif    /* HAVE_SCANSTACK */
  67.