OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [testsuite/] [gdb.base/] [restore.c] - Diff between revs 107 and 1765

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

Rev 107 Rev 1765
/* 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)
     (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 " *" "/")
             (insert "  /" "* " first-end " *" "/")
             (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 ")
           (if (<= i 0) (insert "n")
           (if (<= i 0) (insert "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 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 n;
  return n;
}
}
 
 
/* Returns n * 1 + 1 */
/* Returns n * 1 + 1 */
int
int
callee1 (int n)
callee1 (int n)
{
{
  register int l1 = increment (n);  /* callee1 */
  register int l1 = increment (n);  /* callee1 */
  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 */
  register int l1 = increment (n);  /* callee2 */
  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 */
  register int l1 = increment (n);  /* callee3 */
  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 */
  register int l1 = increment (n);  /* callee4 */
  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 */
  register int l1 = increment (n);  /* callee5 */
  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 */
  register int l1 = increment (0x7eeb);  /* caller1 */
  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 */
  register int l1 = increment (0x7eeb);  /* caller2 */
  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 */
  register int l1 = increment (0x7eeb);  /* caller3 */
  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 */
  register int l1 = increment (0x7eeb);  /* caller4 */
  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 */
  register int l1 = increment (0x7eeb);  /* caller5 */
  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");
}
}
 
 

powered by: WebSVN 2.1.0

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