* core.c, eval.c, exec.c, inftarg.c, remote-adapt.c, remote-eb.c,
authorJohn Gilmore <gnu@cygnus>
Fri, 21 Feb 1992 01:34:46 +0000 (01:34 +0000)
committerJohn Gilmore <gnu@cygnus>
Fri, 21 Feb 1992 01:34:46 +0000 (01:34 +0000)
remote-hms.c, remote-mm.c, remote-nindy.c, remote-vx.c, remote.c,
target.c, target.h, valarith.c, valops.c, value.h, xcoffexec.c:
Remove to_call_function and target_call_function, since it
always calls the same thing (call_function_by_hand).

13 files changed:
gdb/eval.c
gdb/remote-adapt.c
gdb/remote-eb.c
gdb/remote-hms.c
gdb/remote-mm.c
gdb/remote-nindy.c
gdb/remote-vx.68.c
gdb/remote-vx.c
gdb/target.c
gdb/valarith.c
gdb/valops.c
gdb/value.h
gdb/xcoffexec.c

index 110a129fea5ab41a4c64c7b1f1377641ac85bbd2..aff3a3a1c1ef105ba44c1541768257849aef91cc 100644 (file)
@@ -1,5 +1,5 @@
 /* Evaluate expressions for GDB.
-   Copyright (C) 1986, 1987, 1989, 1991 Free Software Foundation, Inc.
+   Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -406,7 +406,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
          else
            error ("Expression of type other than \"Function returning ...\" used as function");
        }
-      return target_call_function (argvec[0], nargs, argvec + 1);
+      return call_function_by_hand (argvec[0], nargs, argvec + 1);
 
     case STRUCTOP_STRUCT:
       tem = strlen (&exp->elts[pc + 1].string);
@@ -924,6 +924,7 @@ evaluate_subexp_for_address (exp, pos, noside)
 {
   enum exp_opcode op;
   register int pc;
+  struct symbol *var;
 
   pc = (*pos);
   op = exp->elts[pc].opcode;
@@ -940,13 +941,19 @@ evaluate_subexp_for_address (exp, pos, noside)
                         evaluate_subexp (NULL_TYPE, exp, pos, noside));
 
     case OP_VAR_VALUE:
+      var = exp->elts[pc + 1].symbol;
+
+      /* C++: The "address" of a reference should yield the address
+       * of the object pointed to. Let value_addr() deal with it. */
+      if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_REF)
+        goto default_case;
+
       (*pos) += 3;
       if (noside == EVAL_AVOID_SIDE_EFFECTS)
        {
          struct type *type =
-           lookup_pointer_type (SYMBOL_TYPE (exp->elts[pc + 1].symbol));
-         enum address_class sym_class =
-           SYMBOL_CLASS (exp->elts[pc + 1].symbol);
+           lookup_pointer_type (SYMBOL_TYPE (var));
+         enum address_class sym_class = SYMBOL_CLASS (var);
 
          if (sym_class == LOC_CONST
              || sym_class == LOC_CONST_BYTES
@@ -958,9 +965,10 @@ evaluate_subexp_for_address (exp, pos, noside)
          value_zero (type, not_lval);
        }
       else
-       return locate_var_value (exp->elts[pc + 1].symbol, (FRAME) 0);
+       return locate_var_value (var, (FRAME) 0);
 
     default:
+    default_case:
       if (noside == EVAL_AVOID_SIDE_EFFECTS)
        {
          value x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
@@ -988,6 +996,7 @@ evaluate_subexp_with_coercion (exp, pos, noside)
   register enum exp_opcode op;
   register int pc;
   register value val;
+  struct symbol *var;
 
   pc = (*pos);
   op = exp->elts[pc].opcode;
@@ -995,11 +1004,12 @@ evaluate_subexp_with_coercion (exp, pos, noside)
   switch (op)
     {
     case OP_VAR_VALUE:
-      if (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 1].symbol)) == TYPE_CODE_ARRAY)
+      var = exp->elts[pc + 1].symbol;
+      if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_ARRAY)
        {
          (*pos) += 3;
-         val = locate_var_value (exp->elts[pc + 1].symbol, (FRAME) 0);
-         return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (SYMBOL_TYPE (exp->elts[pc + 1].symbol))),
+         val = locate_var_value (var, (FRAME) 0);
+         return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (SYMBOL_TYPE (var))),
                             val);
        }
       default:
index 34abe7622259737d407c5f230daa7f7901c5e358..b102d034714db645c3421b0d79c15f668509cfa5 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote debugging interface for AMD 290*0 Adapt Monitor Version 2.1d18. 
-   Copyright 1990, 1991 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
    Contributed by David Wood at New York University (wood@lab.ultra.nyu.edu).
    Adapted from work done at Cygnus Support in remote-eb.c.
 
@@ -46,9 +46,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* External data declarations */
 extern int stop_soon_quietly;           /* for wait_for_inferior */
 
-/* External function declarations */
-extern struct value *call_function_by_hand();
-
 /* Forward data declarations */
 extern struct target_ops adapt_ops;            /* Forward declaration */
 
@@ -1427,7 +1424,6 @@ struct target_ops adapt_ops = {
        0, 0, 0, 0, 0,          /* Terminal handling */
        adapt_kill,             /* FIXME, kill */
        adapt_load, 
-       call_function_by_hand,
        0,                      /* lookup_symbol */
        adapt_create_inferior,  /* create_inferior */ 
        adapt_mourn,            /* mourn_inferior FIXME */
index 9609b65eb54f94f265106099b2d816751928b8d8..01df861396a9d1775fe2af915e5e2f1bb85ca2da 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote debugging interface for AMD 29000 EBMON on IBM PC, for GDB.
-   Copyright 1990, 1991 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
    Contributed by Cygnus Support.  Written by Jim Kingdon for Cygnus.
 
 This file is part of GDB.
@@ -43,8 +43,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "target.h"
 #include "gdbcore.h"
 
-extern struct value *call_function_by_hand();
-
 extern struct target_ops eb_ops;               /* Forward declaration */
 
 static void eb_close();
@@ -989,7 +987,6 @@ executable as it exists on the remote computer.  For example,\n\
        0, 0, 0, 0, 0,  /* Terminal handling */
        eb_kill,
        0,      /* load */
-       call_function_by_hand,
        0, /* lookup_symbol */
        eb_create_inferior,
        eb_mourn_inferior,
index 48df7a7bfaa925cf0f2c998525ac138b88916b7a..4e4e3498ab3be84ef8e8be497483332131d620ed 100644 (file)
@@ -1,9 +1,7 @@
 /* Remote debugging interface for Hitachi HMS Monitor Version 1.0
-
    Copyright 1992 Free Software Foundation, Inc.
-
-   Contributed by Steve Chamberlain sac@cygnus.com
-
+   Contributed by Cygnus Support.  Written by Steve Chamberlain
+   (sac@cygnus.com).
 
 This file is part of GDB.
 
@@ -21,14 +19,12 @@ You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
-
-
 #include <stdio.h>
-#include <string.h>
 #include "defs.h"
 #include "inferior.h"
 #include "wait.h"
 #include "value.h"
+#include <string.h>
 #include <ctype.h>
 #include <fcntl.h>
 #include <signal.h>
@@ -41,9 +37,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* External data declarations */
 extern int stop_soon_quietly;           /* for wait_for_inferior */
 
-/* External function declarations */
-extern struct value *call_function_by_hand();
-
 /* Forward data declarations */
 extern struct target_ops hms_ops;              /* Forward declaration */
 
@@ -1604,7 +1597,6 @@ by a serial line.",
        0, 0, 0, 0, 0,          /* Terminal handling */
        hms_kill,               /* FIXME, kill */
        hms_load, 
-       call_function_by_hand,
        0,                      /* lookup_symbol */
        hms_create_inferior,    /* create_inferior */ 
        hms_mourn,              /* mourn_inferior FIXME */
index d89840243565178e6b1e79aec6de176a149d3038..87270f7d6b47d960ea19a9d62a586a3a977cdfad 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote debugging interface for Am290*0 running MiniMON monitor, for GDB.
-   Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
    Originally written by Daniel Mann at AMD.
 
 This file is part of GDB.
@@ -59,8 +59,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 extern int stop_soon_quietly;           /* for wait_for_inferior */
 
-extern struct value *call_function_by_hand();
-
 static void mm_resume();
 static void mm_fetch_registers ();
 static int fetch_register ();
@@ -1681,7 +1679,6 @@ struct target_ops mm_ops = {
         0, 0, 0, 0, 0,          /* Terminal handling */
         mm_kill,               /* FIXME, kill */
         mm_load, 
-        call_function_by_hand,
         0,                      /* lookup_symbol */
         mm_create_inferior,  /* create_inferior */
         mm_mourn,            /* mourn_inferior FIXME */
index 9751d143ff51674ddf7ecc2678927589078f22eb..d7f807e9900083eb0dc5e6a52720f7dc959b50fd 100644 (file)
@@ -1,5 +1,5 @@
 /* Memory-access and commands for remote NINDY process, for GDB.
-   Copyright (C) 1990-1991 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
    Contributed by Intel Corporation.  Modified from remote.c by Chris Benenati.
 
 GDB is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -123,7 +123,6 @@ extern char *getenv();
 extern char *mktemp();
 
 extern char *coffstrip();
-extern value call_function_by_hand ();
 extern void generic_mourn_inferior ();
 
 extern struct target_ops nindy_ops;
@@ -941,7 +940,6 @@ specified when you started GDB.",
        0, 0, 0, 0, 0,  /* Terminal crud */
        nindy_kill,
        nindy_load,
-       call_function_by_hand,
        0, /* lookup_symbol */
        nindy_create_inferior,
        nindy_mourn_inferior,
index 3a46d213561c63c9ffa7feae31f9b87974a42185..c7b7058c400a5716a06b7f5b1c2341f806159d57 100644 (file)
@@ -52,7 +52,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include <value.h>
 #include <symtab.h>
  
-extern value call_function_by_hand ();
 extern void symbol_file_command ();
 extern int stop_soon_quietly;          /* for wait_for_inferior */
 
@@ -187,7 +186,7 @@ vx_remove_breakpoint (addr)
 #ifdef FIXME
 /* FIXME, function calls are really fried.  GO back to manual method. */
 value
-vx_call_function (function, nargs, args)
+call_function (function, nargs, args)
      value function;
      int nargs;
      value *args;
@@ -269,7 +268,7 @@ vx_call_function (function, nargs, args)
     start_sp = text_end;
     errcode = target_write_memory (start_sp, dummy1, sizeof dummy);
     if (errcode != 0)
-      error ("Cannot write text segment -- call_function failed");
+      error ("Cannot write text segment -- vx_call_function failed");
   }
 #endif /* After text_end.  */
 #endif /* Not on stack.  */
@@ -1504,7 +1503,6 @@ Specify the name of the machine to connect to.",
        0, 0, 0, 0, 0,  /* terminal stuff */
        0, /* vx_kill, */
        vx_add_file_command,
-       call_function_by_hand,  /* FIXME, calling fns is maybe botched? */
        vx_lookup_symbol,
        vx_create_inferior, 0,  /* mourn_inferior */
        core_stratum, 0, /* next */
@@ -1526,7 +1524,6 @@ struct target_ops vx_run_ops = {
        0, 0, 0, 0, 0,  /* terminal stuff */
        0, /* vx_kill, */
        vx_add_file_command,
-       call_function_by_hand,  /* FIXME, calling fns is maybe botched? */
        vx_lookup_symbol,
        vx_create_inferior, vx_mourn_inferior,
        process_stratum, 0, /* next */
index e63798756e415b5079f11d0a28635a8d75bcc087..991bc97a77e0e69f65c2031d0f56da1644dcc575 100644 (file)
@@ -1,5 +1,5 @@
 /* Memory-access and commands for remote VxWorks processes, for GDB.
-   Copyright (C) 1990-1991  Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
    Contributed by Wind River Systems and Cygnus Support.
 
 This file is part of GDB.
@@ -51,7 +51,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include <value.h>
 #include <symtab.h>
  
-extern value call_function_by_hand ();
 extern void symbol_file_command ();
 extern int stop_soon_quietly;          /* for wait_for_inferior */
 
@@ -1434,7 +1433,6 @@ Specify the name of the machine to connect to.",
        0, 0, 0, 0, 0,  /* terminal stuff */
        0, /* vx_kill, */
        vx_load_command,
-       0,  /* call_function */
        vx_lookup_symbol,
        vx_create_inferior, 0,  /* mourn_inferior */
        core_stratum, 0, /* next */
@@ -1457,7 +1455,6 @@ struct target_ops vx_run_ops = {
        0, 0, 0, 0, 0,  /* terminal stuff */
        vx_kill,
        vx_load_command,
-       call_function_by_hand,  /* FIXME, calling fns is maybe botched? */
        vx_lookup_symbol,
        0, vx_mourn_inferior,
        process_stratum, 0, /* next */
index a23c910944c319c2befcbc01758d231e5e231400..eefdbea26491eada005a8c3f7a2d6000436a103f 100644 (file)
@@ -1,22 +1,22 @@
 /* Select target systems and architectures at runtime for GDB.
-   Copyright (C) 1990 Free Software Foundation, Inc.
+   Copyright 1990, 1992 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
 
 This file is part of GDB.
 
-GDB 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
-the Free Software Foundation; either version 1, or (at your option)
-any later version.
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
 
-GDB 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
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GDB; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include <stdio.h>
 #include <errno.h>
@@ -29,9 +29,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "bfd.h"
 #include "symfile.h"
 
+extern int errno;
+
 extern int memory_insert_breakpoint(), memory_remove_breakpoint();
 extern void host_convert_to_virtual(), host_convert_from_virtual();
-extern void add_syms_addr_command();
 
 static void cleanup_target ();
 
@@ -55,11 +56,11 @@ struct target_ops dummy_target = {"None", "None", "",
     0, 0,              /* bkpts */
     0, 0, 0, 0, 0,     /* terminal */
     0, 0,              /* kill, load */
-    add_syms_addr_command,     /* add_syms */
-    0, 0,              /* call_function, lookup_symbol */
+    0,                         /* lookup_symbol */
     0, 0,              /* create_inferior, mourn_inferior */
     dummy_stratum, 0,  /* stratum, next */
     0, 0, 0, 0, 0,     /* all mem, mem, stack, regs, exec */
+    0, 0,              /* section pointers */
     OPS_MAGIC,
 };
 
@@ -213,16 +214,12 @@ static void
 kill_or_be_killed (from_tty)
      int from_tty;
 {
-  /* FIXME: What is savecur for?  Why isn't it used?  */
-  struct target_ops *savecur;
-
   if (target_has_execution)
     {
       printf ("You are already running a program:\n");
       target_files_info ();
       if (query ("Kill it? ")) {
-       savecur = current_target;
-       target_kill (0, from_tty);
+       target_kill ();
        if (target_has_execution)
          error ("Killing the program did not help.");
        return;
@@ -280,8 +277,8 @@ cleanup_target (t)
   de_fault (to_detach,                         (void (*)())ignore);
   de_fault (to_resume,                         (void (*)())noprocess);
   de_fault (to_wait,                   noprocess);
-  de_fault (to_fetch_registers,        noprocess);
-  de_fault (to_store_registers,                noprocess);
+  de_fault (to_fetch_registers,        ignore);
+  de_fault (to_store_registers,                (void (*)())noprocess);
   de_fault (to_prepare_to_store,       (void (*)())noprocess);
   de_fault (to_convert_to_virtual,     host_convert_to_virtual);
   de_fault (to_convert_from_virtual,   host_convert_from_virtual);
@@ -296,8 +293,6 @@ cleanup_target (t)
   de_fault (to_terminal_info,          default_terminal_info);
   de_fault (to_kill,                   (void (*)())noprocess);
   de_fault (to_load,                   tcomplain);
-  de_fault (to_add_syms,               tcomplain);
-  de_fault (to_call_function,          (struct value *(*)())noprocess);
   de_fault (to_lookup_symbol,          nosymbol);
   de_fault (to_create_inferior,                maybe_kill_then_create_inferior);
   de_fault (to_mourn_inferior,         (void (*)())noprocess);
@@ -390,6 +385,48 @@ pop_target ()
     push_target (&dummy_target);
 }
 
+#define MIN(A, B) (((A) <= (B)) ? (A) : (B))
+
+/* target_read_string -- read a null terminated string from MEMADDR in target.
+   The read may also be terminated early by getting an error from target_xfer_
+   memory.
+   LEN is the size of the buffer pointed to by MYADDR.  Note that a terminating
+   null will only be written if there is sufficient room.  The return value is
+   is the number of bytes (including the null) actually transferred.
+*/
+
+int
+target_read_string (memaddr, myaddr, len)
+     CORE_ADDR memaddr;
+     char *myaddr;
+     int len;
+{
+  int tlen, origlen, offset, i;
+  char buf[4];
+
+  origlen = len;
+
+  while (len > 0)
+    {
+      tlen = MIN (len, 4 - (memaddr & 3));
+      offset = memaddr & 3;
+
+      if (target_xfer_memory (memaddr & ~3, buf, 4, 0))
+       return origlen - len;
+
+      for (i = 0; i < tlen; i++)
+       {
+         *myaddr++ = buf[i + offset];
+         if (buf[i + offset] == '\000')
+           return (origlen - len) + i + 1;
+       }
+
+      memaddr += tlen;
+      len -= tlen;
+    }
+  return origlen;
+}
+
 /* Move memory to or from the targets.  Iterate until all of it has
    been moved, if necessary.  The top target gets priority; anything
    it doesn't want, is offered to the next one down, etc.  Note the
@@ -430,7 +467,8 @@ target_xfer_memory (memaddr, myaddr, len, write)
   struct target_ops *t;
   
   /* The quick case is that the top target does it all.  */
-  res = current_target->to_xfer_memory(memaddr, myaddr, len, write);
+  res = current_target->to_xfer_memory
+                       (memaddr, myaddr, len, write, current_target);
   if (res == len)
     return 0;
 
@@ -445,7 +483,7 @@ target_xfer_memory (memaddr, myaddr, len, write)
           t;
           t = t->to_has_all_memory? 0: t->to_next)
        {
-         res = t->to_xfer_memory(memaddr, myaddr, curlen, write);
+         res = t->to_xfer_memory(memaddr, myaddr, curlen, write, t);
          if (res > 0) break;   /* Handled all or part of xfer */
          if (res == 0) continue;       /* Handled none */
          curlen = -res;        /* Could handle once we get past res bytes */
@@ -456,7 +494,10 @@ target_xfer_memory (memaddr, myaddr, len, write)
             read zeros if reading, or do nothing if writing.  Return error. */
          if (!write)
            bzero (myaddr, len);
-         return EIO;
+         if (errno == 0)
+           return EIO;
+         else
+           return errno;
        }
 bump:
       memaddr += res;
@@ -476,8 +517,8 @@ target_info (args, from_tty)
   struct target_ops *t;
   int has_all_mem = 0;
   
-  if (symfile != 0)
-    printf ("Symbols from \"%s\".\n", symfile);
+  if (symfile_objfile != 0)
+    printf ("Symbols from \"%s\".\n", symfile_objfile->name);
 
 #ifdef FILES_INFO_HOOK
   if (FILES_INFO_HOOK ())
@@ -493,7 +534,7 @@ target_info (args, from_tty)
       if (has_all_mem)
        printf("\tWhile running this, gdb does not access memory from...\n");
       printf("%s:\n", t->to_longname);
-      (t->to_files_info)();
+      (t->to_files_info)(t);
       has_all_mem = t->to_has_all_memory;
     }
 }
@@ -510,7 +551,7 @@ target_preopen (from_tty)
   if (target_has_execution)
     {   
       if (query ("A program is being debugged already.  Kill it? "))
-        target_kill ((char *)0, from_tty);
+        target_kill ();
       else
         error ("Program not killed.");
     }
index aefa1d4de1145997a10a553ebc09ed1f22e72ff1..c52a06e4efd4b10209668f76781bb5b69c0c8084 100644 (file)
@@ -1,5 +1,5 @@
 /* Perform arithmetic and other operations on values, for GDB.
-   Copyright 1986, 1989, 1991 Free Software Foundation, Inc.
+   Copyright 1986, 1989, 1991, 1992 Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -273,11 +273,11 @@ value_x_binop (arg1, arg2, op, otherop)
          argvec[1] = argvec[0];
          argvec++;
        }
-      return target_call_function (argvec[0], 2 - static_memfuncp, argvec + 1);
+      return call_function_by_hand (argvec[0], 2 - static_memfuncp, argvec + 1);
     }
   error ("member function %s not found", tstr);
 #ifdef lint
-  return target_call_function (argvec[0], 2 - static_memfuncp, argvec + 1);
+  return call_function_by_hand (argvec[0], 2 - static_memfuncp, argvec + 1);
 #endif
 }
 
@@ -332,7 +332,7 @@ value_x_unop (arg1, op)
          argvec[1] = argvec[0];
          argvec++;
        }
-      return target_call_function (argvec[0], 1 - static_memfuncp, argvec + 1);
+      return call_function_by_hand (argvec[0], 1 - static_memfuncp, argvec + 1);
     }
   error ("member function %s not found", tstr);
   return 0;  /* For lint -- never reached */
index 0ebc6ef3761ec414c425c3702df49e842eec9ece..c340932a043665f8254588a41613f1584abe8f5b 100644 (file)
@@ -1,5 +1,5 @@
 /* Perform non-arithmetic operations on values, for GDB.
-   Copyright 1986, 1987, 1989, 1991 Free Software Foundation, Inc.
+   Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -239,7 +239,7 @@ value_assign (toval, fromval)
          int v;                /* FIXME, this won't work for large bitfields */
          read_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
                       &v, sizeof v);
-         modify_field (&v, (int) value_as_long (fromval),
+         modify_field ((char *) &v, (int) value_as_long (fromval),
                        VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
          write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
                        (char *)&v, sizeof v);
@@ -258,11 +258,11 @@ value_assign (toval, fromval)
          int v;
 
          read_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
-                              &v, sizeof v);
-         modify_field (&v, (int) value_as_long (fromval),
+                              (char *) &v, sizeof v);
+         modify_field ((char *) &v, (int) value_as_long (fromval),
                        VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
          write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
-                               &v, sizeof v);
+                               (char *) &v, sizeof v);
        }
       else if (use_buffer)
        write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
@@ -450,6 +450,7 @@ value
 value_addr (arg1)
      value arg1;
 {
+  extern value value_copy ();
   struct type *type = VALUE_TYPE (arg1);
   if (TYPE_CODE (type) == TYPE_CODE_REF)
     {
@@ -685,6 +686,9 @@ call_function_by_hand (function, nargs, args)
   CORE_ADDR funaddr;
   int using_gcc;
 
+  if (!target_has_execution)
+    noprocess();
+
   save_inferior_status (&inf_status, 1);
   old_chain = make_cleanup (restore_inferior_status, &inf_status);
 
@@ -949,7 +953,7 @@ value_string (ptr, len)
     }
 
   blocklen = value_from_longest (builtin_type_int, (LONGEST) (len + 1));
-  val = target_call_function (val, 1, &blocklen);
+  val = call_function_by_hand (val, 1, &blocklen);
   if (value_zerop (val))
     error ("No memory available for string constant.");
   write_memory (value_as_pointer (val), copy, len + 1);
index e0cc0d452e08ef559a63ebc7a12684c5a0af2126..a6840d17f79b95f044c5bb0194695a8b4c16a459 100644 (file)
@@ -1,21 +1,21 @@
 /* Definitions for values of C expressions, for GDB.
-   Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
+   Copyright 1986, 1987, 1989, 1992 Free Software Foundation, Inc.
 
 This file is part of GDB.
 
-GDB 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
-the Free Software Foundation; either version 1, or (at your option)
-any later version.
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
 
-GDB 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
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GDB; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #if !defined (VALUE_H)
 #define VALUE_H 1
@@ -38,7 +38,7 @@ enum lval_type {
   /* In a register series in a frame not the current one, which may have been
      partially saved or saved in different places (otherwise would be
      lval_register or lval_memory).  */
-  lval_reg_frame_relative,
+  lval_reg_frame_relative
 };
 
 struct value
@@ -138,7 +138,7 @@ extern int value_fetch_lazy ();
 /* Convert a REF to the object referenced. */
 
 #define COERCE_REF(arg)    \
-{ if (TYPE_CODE ( VALUE_TYPE (arg)) == TYPE_CODE_REF)                  \
+{ if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_REF)                   \
     arg = value_at_lazy (TYPE_TARGET_TYPE (VALUE_TYPE (arg)),          \
                         unpack_long (VALUE_TYPE (arg),                 \
                                      VALUE_CONTENTS (arg)));}
@@ -163,7 +163,7 @@ extern int value_fetch_lazy ();
 /* If ARG is an enum, convert it to an integer.  */
 
 #define COERCE_ENUM(arg)    \
-{ if (TYPE_CODE ( VALUE_TYPE (arg)) == TYPE_CODE_REF)                  \
+{ if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_REF)                   \
     arg = value_ind (arg);                                             \
   if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ENUM)                  \
     arg = value_cast (builtin_type_unsigned_int, arg);                 \
@@ -180,12 +180,38 @@ struct internalvar
 };
 \f
 #include "symtab.h"
-LONGEST value_as_long ();
-double value_as_double ();
-LONGEST unpack_long ();
-double unpack_double ();
+LONGEST value_as_long (
+#ifdef __STDC__
+                      value
+#endif
+                      );
+double value_as_double (
+#ifdef __STDC__
+                       value
+#endif
+                       );
+CORE_ADDR value_as_pointer (
+#ifdef __STDC__
+                           value
+#endif
+                           );
+LONGEST unpack_long (
+#ifdef __STDC__
+                    struct type *, char *
+#endif
+                    );
+double unpack_double (
+#ifdef __STDC__
+                     struct type *, char *, int *
+#endif
+                     );
+CORE_ADDR unpack_pointer (
+#ifdef __STDC__
+                         struct type *, char *
+#endif
+                         );
 long unpack_field_as_long ();
-value value_from_long ();
+value value_from_longest ();
 value value_from_double ();
 value value_at ();
 value value_at_lazy ();
@@ -226,6 +252,7 @@ value evaluate_expression ();
 value evaluate_type ();
 value parse_and_eval ();
 value parse_to_comma_and_eval ();
+struct type *parse_and_eval_type ();
 extern CORE_ADDR parse_and_eval_address ();
 extern CORE_ADDR parse_and_eval_address_1 ();
 
@@ -284,8 +311,12 @@ void print_floating ();
 int value_print ();
 int val_print ();
 void print_variable_value ();
+void typedef_print ();
 char *internalvar_name ();
 void clear_value_history ();
 void clear_internalvars ();
 
+extern value
+call_function_by_hand PARAMS ((value, int value *));
+
 #endif /* value.h not already included.  */
index bba2c5c70c569400619d458bac9d64193ecb0fe9..086f862abb7ce259eb7453d29e0eadd8071ca7ed 100644 (file)
@@ -1,5 +1,5 @@
 /* Execute AIXcoff files, for GDB.
-   Copyright (C) 1988, 1989, 1991 Free Software Foundation, Inc.
+   Copyright 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
    Derived from exec.c.  Modified by IBM Corporation.
    Donated by IBM Corporation and Cygnus Support.
 
@@ -892,7 +892,7 @@ Specify the filename of the executable file.",
        0, 0, /* insert_breakpoint, remove_breakpoint, */
        0, 0, 0, 0, 0, /* terminal stuff */
        0, 0, /* kill, load */
-       0, 0, /* call fn, lookup sym */
+       0, /* lookup sym */
        child_create_inferior,
        0, /* mourn_inferior */
        file_stratum, 0, /* next */