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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [umax-xdep.c] - Blame information for rev 1773

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 104 markom
/* umax host stuff.
2
   Copyright (C) 1986, 1987, 1989, 1991 Free Software Foundation, Inc.
3
 
4
   This file is part of GDB.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 59 Temple Place - Suite 330,
19
   Boston, MA 02111-1307, USA.  */
20
 
21
#include "defs.h"
22
#include "frame.h"
23
#include "inferior.h"
24
 
25
#include <sys/param.h>
26
#include <sys/dir.h>
27
#include <signal.h>
28
#include <sys/ioctl.h>
29
#include <fcntl.h>
30
 
31
#include "gdbcore.h"
32
#include <sys/ptrace.h>
33
#define PTRACE_ATTACH PT_ATTACH
34
#define PTRACE_DETACH PT_FREEPROC
35
 
36
#include <sys/file.h>
37
#include "gdb_stat.h"
38
 
39
/* Work with core dump and executable files, for GDB.
40
   This code would be in corefile.c if it weren't machine-dependent. */
41
 
42
void
43
core_file_command (filename, from_tty)
44
     char *filename;
45
     int from_tty;
46
{
47
  int val;
48
 
49
  /* Discard all vestiges of any previous core file
50
     and mark data and stack spaces as empty.  */
51
 
52
  if (corefile)
53
    free (corefile);
54
  corefile = 0;
55
 
56
  if (corechan >= 0)
57
    close (corechan);
58
  corechan = -1;
59
 
60
  data_start = 0;
61
  data_end = 0;
62
  stack_start = STACK_END_ADDR;
63
  stack_end = STACK_END_ADDR;
64
 
65
  /* Now, if a new core file was specified, open it and digest it.  */
66
 
67
  if (filename)
68
    {
69
      filename = tilde_expand (filename);
70
      make_cleanup (free, filename);
71
 
72
      if (have_inferior_p ())
73
        error ("To look at a core file, you must kill the program with \"kill\".");
74
      corechan = open (filename, O_RDONLY, 0);
75
      if (corechan < 0)
76
        perror_with_name (filename);
77
      /* 4.2-style (and perhaps also sysV-style) core dump file.  */
78
      {
79
        struct ptrace_user u;
80
        int reg_offset;
81
 
82
        val = myread (corechan, &u, sizeof u);
83
        if (val < 0)
84
          perror_with_name (filename);
85
        data_start = exec_data_start;
86
 
87
        data_end = data_start + u.pt_dsize;
88
        stack_start = stack_end - u.pt_ssize;
89
        data_offset = sizeof u;
90
        stack_offset = data_offset + u.pt_dsize;
91
        reg_offset = 0;
92
 
93
        memcpy (&core_aouthdr, &u.pt_aouthdr, sizeof (AOUTHDR));
94
        printf_unfiltered ("Core file is from \"%s\".\n", u.pt_comm);
95
        if (u.pt_signal > 0)
96
          printf_unfiltered ("Program terminated with signal %d, %s.\n",
97
                             u.pt_signal, safe_strsignal (u.pt_signal));
98
 
99
        /* Read the register values out of the core file and store
100
           them where `read_register' will find them.  */
101
 
102
        {
103
          register int regno;
104
 
105
          for (regno = 0; regno < NUM_REGS; regno++)
106
            {
107
              char buf[MAX_REGISTER_RAW_SIZE];
108
 
109
              val = lseek (corechan, register_addr (regno, reg_offset), 0);
110
              if (val < 0)
111
                perror_with_name (filename);
112
 
113
              val = myread (corechan, buf, sizeof buf);
114
              if (val < 0)
115
                perror_with_name (filename);
116
              supply_register (regno, buf);
117
            }
118
        }
119
      }
120
      if (filename[0] == '/')
121
        corefile = savestring (filename, strlen (filename));
122
      else
123
        {
124
          corefile = concat (current_directory, "/", filename, NULL);
125
        }
126
 
127
      flush_cached_frames ();
128
      select_frame (get_current_frame (), 0);
129
      validate_files ();
130
    }
131
  else if (from_tty)
132
    printf_unfiltered ("No core file now.\n");
133
}

powered by: WebSVN 2.1.0

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