OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gdb/] [gdb-6.8/] [gdb-6.8.openrisc-2.1/] [gdb/] [testsuite/] [gdb.base/] [restore.c] - Diff between revs 24 and 33

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 24 Rev 33
/* This testcase is part of GDB, the GNU debugger.
/* This testcase is part of GDB, the GNU debugger.
 
 
   Copyright 1998, 1999, 2001, 2003, 2004, Free Software Foundation, Inc.
   Copyright 1998, 1999, 2001, 2003, 2004, Free Software Foundation, Inc.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
   */
   */
 
 
/* Test GDB's ability to restore saved registers from stack frames
/* Test GDB's ability to restore saved registers from stack frames
   when using the `return' command.
   when using the `return' command.
   Jim Blandy <jimb@cygnus.com> --- December 1998 */
   Jim Blandy <jimb@cygnus.com> --- December 1998 */
 
 
#include <stdio.h>
#include <stdio.h>
 
 
/* This is the Emacs Lisp expression I used to generate the functions
/* This is the Emacs Lisp expression I used to generate the functions
   in this file.  If people modify the functions manually, instead of
   in this file.  If people modify the functions manually, instead of
   changing this expression and re-running it, then evaluating this
   changing this expression and re-running it, then evaluating this
   expression could wipe out their work, so you probably shouldn't
   expression could wipe out their work, so you probably shouldn't
   re-run it.  But I leave it here for reference.
   re-run it.  But I leave it here for reference.
 
 
   (defun callee (n) (format "callee%d" n))
   (defun callee (n) (format "callee%d" n))
   (defun caller (n) (format "caller%d" n))
   (defun caller (n) (format "caller%d" n))
   (defun local  (n) (format "l%d"  n))
   (defun local  (n) (format "l%d"  n))
   (defun local-sum (n)
   (defun local-sum (n)
     (if (zerop n) (insert "0")
     (if (zerop n) (insert "0")
       (let ((j 1))
       (let ((j 1))
         (while (<= j n)
         (while (<= j n)
           (insert (local j))
           (insert (local j))
           (if (< j n) (insert "+"))
           (if (< j n) (insert "+"))
           (setq j (1+ j))))))
           (setq j (1+ j))))))
   (defun local-chain (n previous first-end)
   (defun local-chain (n previous first-end)
     (let ((j 1))
     (let ((j 1))
       (while (<= j n)
       (while (<= j n)
         (insert "  register int " (local j)
         (insert "  register int " (local j)
                 " = increment (" previous  ");")
                 " = increment (" previous  ");")
         (if first-end
         (if first-end
           (progn
           (progn
             (insert "  /" "* " first-end " prologue *" "/")
             (insert "  /" "* " first-end " prologue *" "/")
             (setq first-end nil)))
             (setq first-end nil)))
         (insert "\n")
         (insert "\n")
         (setq previous (local j))
         (setq previous (local j))
         (setq j (1+ j))))
         (setq j (1+ j))))
     previous)
     previous)
 
 
   (save-excursion
   (save-excursion
     (let ((limit 5))
     (let ((limit 5))
       (goto-char (point-max))
       (goto-char (point-max))
       (search-backward "generated code starts here")
       (search-backward "generated code starts here")
       (forward-line 1)
       (forward-line 1)
       (let ((start (point)))
       (let ((start (point)))
         (search-forward "generated code ends here")
         (search-forward "generated code ends here")
         (forward-line 0)
         (forward-line 0)
         (delete-region start (point)))
         (delete-region start (point)))
 
 
       ;; Generate callee functions.
       ;; Generate callee functions.
       (let ((i 0))
       (let ((i 0))
         (while (<= i limit)
         (while (<= i limit)
           (insert (format "/%s Returns n * %d + %d %s/\n"
           (insert (format "/%s Returns n * %d + %d %s/\n"
                           "*" i (/ (+ i (* i i)) 2) "*"))
                           "*" i (/ (+ i (* i i)) 2) "*"))
           (insert "int\n")
           (insert "int\n")
           (insert (callee i) " (int n)\n")
           (insert (callee i) " (int n)\n")
           (insert "{\n")
           (insert "{\n")
           (local-chain i "n" (callee i))
           (local-chain i "n" (callee i))
           (insert "  return ")
           (insert "  return ")
           (local-sum i)
           (local-sum i)
           (insert ";\n")
           (insert ";\n")
           (insert "}\n\n")
           (insert "}\n\n")
           (setq i (1+ i))))
           (setq i (1+ i))))
 
 
       ;; Generate caller functions.
       ;; Generate caller functions.
       (let ((i 1))
       (let ((i 1))
         (while (<= i limit)
         (while (<= i limit)
           (insert "int\n")
           (insert "int\n")
           (insert (caller i) " (void)\n")
           (insert (caller i) " (void)\n")
           (insert "{\n")
           (insert "{\n")
           (let ((last (local-chain i "0x7eeb" (caller i))))
           (let ((last (local-chain i "0x7eeb" (caller i))))
             (insert "  register int n;\n")
             (insert "  register int n;\n")
             (let ((j 0))
             (let ((j 0))
               (while (<= j limit)
               (while (<= j limit)
                 (insert "  n = " (callee j) " ("
                 (insert "  n = " (callee j) " ("
                         (if (> j 0) "n + " "")
                         (if (> j 0) "n + " "")
                         last ");\n")
                         last ");\n")
                 (setq j (1+ j)))))
                 (setq j (1+ j)))))
           (insert "  return n+")
           (insert "  return n+")
           (local-sum i)
           (local-sum i)
           (insert ";\n")
           (insert ";\n")
           (insert "}\n\n")
           (insert "}\n\n")
           (setq i (1+ i))))
           (setq i (1+ i))))
 
 
       ;; Generate driver function.
       ;; Generate driver function.
       (insert "void\n")
       (insert "void\n")
       (insert "driver (void)\n")
       (insert "driver (void)\n")
       (insert "{\n")
       (insert "{\n")
       (let ((i 1))
       (let ((i 1))
         (while (<= i limit)
         (while (<= i limit)
           (insert "  printf (\"" (caller i) " () => %d\\n\", "
           (insert "  printf (\"" (caller i) " () => %d\\n\", "
                   (caller i) " ());\n")
                   (caller i) " ());\n")
           (setq i (1+ i))))
           (setq i (1+ i))))
       (insert "}\n\n")))
       (insert "}\n\n")))
 
 
         */
         */
 
 
int
int
increment (int n)
increment (int n)
{
{
  return n + 1;
  return n + 1;
}
}
 
 
/* generated code starts here */
/* generated code starts here */
/* Returns n * 0 + 0 */
/* Returns n * 0 + 0 */
int
int
callee0 (int n)
callee0 (int n)
{
{
  return 0;
  return 0;
}
}
 
 
/* Returns n * 1 + 1 */
/* Returns n * 1 + 1 */
int
int
callee1 (int n)
callee1 (int n)
{
{
  register int l1 = increment (n);  /* callee1 prologue */
  register int l1 = increment (n);  /* callee1 prologue */
  return l1;
  return l1;
}
}
 
 
/* Returns n * 2 + 3 */
/* Returns n * 2 + 3 */
int
int
callee2 (int n)
callee2 (int n)
{
{
  register int l1 = increment (n);  /* callee2 prologue */
  register int l1 = increment (n);  /* callee2 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  return l1+l2;
  return l1+l2;
}
}
 
 
/* Returns n * 3 + 6 */
/* Returns n * 3 + 6 */
int
int
callee3 (int n)
callee3 (int n)
{
{
  register int l1 = increment (n);  /* callee3 prologue */
  register int l1 = increment (n);  /* callee3 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  register int l3 = increment (l2);
  register int l3 = increment (l2);
  return l1+l2+l3;
  return l1+l2+l3;
}
}
 
 
/* Returns n * 4 + 10 */
/* Returns n * 4 + 10 */
int
int
callee4 (int n)
callee4 (int n)
{
{
  register int l1 = increment (n);  /* callee4 prologue */
  register int l1 = increment (n);  /* callee4 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  register int l3 = increment (l2);
  register int l3 = increment (l2);
  register int l4 = increment (l3);
  register int l4 = increment (l3);
  return l1+l2+l3+l4;
  return l1+l2+l3+l4;
}
}
 
 
/* Returns n * 5 + 15 */
/* Returns n * 5 + 15 */
int
int
callee5 (int n)
callee5 (int n)
{
{
  register int l1 = increment (n);  /* callee5 prologue */
  register int l1 = increment (n);  /* callee5 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  register int l3 = increment (l2);
  register int l3 = increment (l2);
  register int l4 = increment (l3);
  register int l4 = increment (l3);
  register int l5 = increment (l4);
  register int l5 = increment (l4);
  return l1+l2+l3+l4+l5;
  return l1+l2+l3+l4+l5;
}
}
 
 
int
int
caller1 (void)
caller1 (void)
{
{
  register int l1 = increment (0x7eeb);  /* caller1 prologue */
  register int l1 = increment (0x7eeb);  /* caller1 prologue */
  register int n;
  register int n;
  n = callee0 (l1);
  n = callee0 (l1);
  n = callee1 (n + l1);
  n = callee1 (n + l1);
  n = callee2 (n + l1);
  n = callee2 (n + l1);
  n = callee3 (n + l1);
  n = callee3 (n + l1);
  n = callee4 (n + l1);
  n = callee4 (n + l1);
  n = callee5 (n + l1);
  n = callee5 (n + l1);
  return n+l1;
  return n+l1;
}
}
 
 
int
int
caller2 (void)
caller2 (void)
{
{
  register int l1 = increment (0x7eeb);  /* caller2 prologue */
  register int l1 = increment (0x7eeb);  /* caller2 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  register int n;
  register int n;
  n = callee0 (l2);
  n = callee0 (l2);
  n = callee1 (n + l2);
  n = callee1 (n + l2);
  n = callee2 (n + l2);
  n = callee2 (n + l2);
  n = callee3 (n + l2);
  n = callee3 (n + l2);
  n = callee4 (n + l2);
  n = callee4 (n + l2);
  n = callee5 (n + l2);
  n = callee5 (n + l2);
  return n+l1+l2;
  return n+l1+l2;
}
}
 
 
int
int
caller3 (void)
caller3 (void)
{
{
  register int l1 = increment (0x7eeb);  /* caller3 prologue */
  register int l1 = increment (0x7eeb);  /* caller3 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  register int l3 = increment (l2);
  register int l3 = increment (l2);
  register int n;
  register int n;
  n = callee0 (l3);
  n = callee0 (l3);
  n = callee1 (n + l3);
  n = callee1 (n + l3);
  n = callee2 (n + l3);
  n = callee2 (n + l3);
  n = callee3 (n + l3);
  n = callee3 (n + l3);
  n = callee4 (n + l3);
  n = callee4 (n + l3);
  n = callee5 (n + l3);
  n = callee5 (n + l3);
  return n+l1+l2+l3;
  return n+l1+l2+l3;
}
}
 
 
int
int
caller4 (void)
caller4 (void)
{
{
  register int l1 = increment (0x7eeb);  /* caller4 prologue */
  register int l1 = increment (0x7eeb);  /* caller4 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  register int l3 = increment (l2);
  register int l3 = increment (l2);
  register int l4 = increment (l3);
  register int l4 = increment (l3);
  register int n;
  register int n;
  n = callee0 (l4);
  n = callee0 (l4);
  n = callee1 (n + l4);
  n = callee1 (n + l4);
  n = callee2 (n + l4);
  n = callee2 (n + l4);
  n = callee3 (n + l4);
  n = callee3 (n + l4);
  n = callee4 (n + l4);
  n = callee4 (n + l4);
  n = callee5 (n + l4);
  n = callee5 (n + l4);
  return n+l1+l2+l3+l4;
  return n+l1+l2+l3+l4;
}
}
 
 
int
int
caller5 (void)
caller5 (void)
{
{
  register int l1 = increment (0x7eeb);  /* caller5 prologue */
  register int l1 = increment (0x7eeb);  /* caller5 prologue */
  register int l2 = increment (l1);
  register int l2 = increment (l1);
  register int l3 = increment (l2);
  register int l3 = increment (l2);
  register int l4 = increment (l3);
  register int l4 = increment (l3);
  register int l5 = increment (l4);
  register int l5 = increment (l4);
  register int n;
  register int n;
  n = callee0 (l5);
  n = callee0 (l5);
  n = callee1 (n + l5);
  n = callee1 (n + l5);
  n = callee2 (n + l5);
  n = callee2 (n + l5);
  n = callee3 (n + l5);
  n = callee3 (n + l5);
  n = callee4 (n + l5);
  n = callee4 (n + l5);
  n = callee5 (n + l5);
  n = callee5 (n + l5);
  return n+l1+l2+l3+l4+l5;
  return n+l1+l2+l3+l4+l5;
}
}
 
 
void
void
driver (void)
driver (void)
{
{
  printf ("caller1 () => %d\n", caller1 ());
  printf ("caller1 () => %d\n", caller1 ());
  printf ("caller2 () => %d\n", caller2 ());
  printf ("caller2 () => %d\n", caller2 ());
  printf ("caller3 () => %d\n", caller3 ());
  printf ("caller3 () => %d\n", caller3 ());
  printf ("caller4 () => %d\n", caller4 ());
  printf ("caller4 () => %d\n", caller4 ());
  printf ("caller5 () => %d\n", caller5 ());
  printf ("caller5 () => %d\n", caller5 ());
}
}
 
 
/* generated code ends here */
/* generated code ends here */
 
 
int main ()
int main ()
{
{
  register int local;
  register int local;
#ifdef usestubs
#ifdef usestubs
  set_debug_traps();
  set_debug_traps();
  breakpoint();
  breakpoint();
#endif
#endif
  driver ();
  driver ();
  printf("exiting\n");
  printf("exiting\n");
  return 0;
  return 0;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.