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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [linespec.c] - Blame information for rev 1777

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

Line No. Rev Author Line
1 1181 sfurman
/* Parser for linespec for the GNU debugger, GDB.
2
   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3
   1996, 1997, 1998, 1999, 2000, 2001
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
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 of the License, or
11
   (at your option) 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; if not, write to the Free Software
20
   Foundation, Inc., 59 Temple Place - Suite 330,
21
   Boston, MA 02111-1307, USA.  */
22
 
23
#include "defs.h"
24
#include "symtab.h"
25
#include "frame.h"
26
#include "command.h"
27
#include "symfile.h"
28
#include "objfiles.h"
29
#include "demangle.h"
30
#include "value.h"
31
#include "completer.h"
32
#include "cp-abi.h"
33
 
34
/* Prototype for one function in parser-defs.h,
35
   instead of including that entire file. */
36
 
37
extern char *find_template_name_end (char *);
38
 
39
/* We share this one with symtab.c, but it is not exported widely. */
40
 
41
extern char *operator_chars (char *, char **);
42
 
43
/* Prototypes for local functions */
44
 
45
static void cplusplus_error (const char *name, const char *fmt, ...) ATTR_FORMAT (printf, 2, 3);
46
 
47
static int total_number_of_methods (struct type *type);
48
 
49
static int find_methods (struct type *, char *, struct symbol **);
50
 
51
static void build_canonical_line_spec (struct symtab_and_line *,
52
                                       char *, char ***);
53
 
54
static char *find_toplevel_char (char *s, char c);
55
 
56
static struct symtabs_and_lines decode_line_2 (struct symbol *[],
57
                                               int, int, char ***);
58
 
59
/* Helper functions. */
60
 
61
/* Issue a helpful hint on using the command completion feature on
62
   single quoted demangled C++ symbols as part of the completion
63
   error.  */
64
 
65
static void
66
cplusplus_error (const char *name, const char *fmt, ...)
67
{
68
  struct ui_file *tmp_stream;
69
  tmp_stream = mem_fileopen ();
70
  make_cleanup_ui_file_delete (tmp_stream);
71
 
72
  {
73
    va_list args;
74
    va_start (args, fmt);
75
    vfprintf_unfiltered (tmp_stream, fmt, args);
76
    va_end (args);
77
  }
78
 
79
  while (*name == '\'')
80
    name++;
81
  fprintf_unfiltered (tmp_stream,
82
                      ("Hint: try '%s<TAB> or '%s<ESC-?>\n"
83
                       "(Note leading single quote.)"),
84
                      name, name);
85
  error_stream (tmp_stream);
86
}
87
 
88
/* Return the number of methods described for TYPE, including the
89
   methods from types it derives from. This can't be done in the symbol
90
   reader because the type of the baseclass might still be stubbed
91
   when the definition of the derived class is parsed.  */
92
 
93
static int
94
total_number_of_methods (struct type *type)
95
{
96
  int n;
97
  int count;
98
 
99
  CHECK_TYPEDEF (type);
100
  if (TYPE_CPLUS_SPECIFIC (type) == NULL)
101
    return 0;
102
  count = TYPE_NFN_FIELDS_TOTAL (type);
103
 
104
  for (n = 0; n < TYPE_N_BASECLASSES (type); n++)
105
    count += total_number_of_methods (TYPE_BASECLASS (type, n));
106
 
107
  return count;
108
}
109
 
110
/* Recursive helper function for decode_line_1.
111
   Look for methods named NAME in type T.
112
   Return number of matches.
113
   Put matches in SYM_ARR, which should have been allocated with
114
   a size of total_number_of_methods (T) * sizeof (struct symbol *).
115
   Note that this function is g++ specific.  */
116
 
117
static int
118
find_methods (struct type *t, char *name, struct symbol **sym_arr)
119
{
120
  int i1 = 0;
121
  int ibase;
122
  char *class_name = type_name_no_tag (t);
123
 
124
  /* Ignore this class if it doesn't have a name.  This is ugly, but
125
     unless we figure out how to get the physname without the name of
126
     the class, then the loop can't do any good.  */
127
  if (class_name
128
      && (lookup_symbol (class_name, (struct block *) NULL,
129
                         STRUCT_NAMESPACE, (int *) NULL,
130
                         (struct symtab **) NULL)))
131
    {
132
      int method_counter;
133
      int name_len = strlen (name);
134
 
135
      CHECK_TYPEDEF (t);
136
 
137
      /* Loop over each method name.  At this level, all overloads of a name
138
         are counted as a single name.  There is an inner loop which loops over
139
         each overload.  */
140
 
141
      for (method_counter = TYPE_NFN_FIELDS (t) - 1;
142
           method_counter >= 0;
143
           --method_counter)
144
        {
145
          int field_counter;
146
          char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
147
          char dem_opname[64];
148
 
149
          if (strncmp (method_name, "__", 2) == 0 ||
150
              strncmp (method_name, "op", 2) == 0 ||
151
              strncmp (method_name, "type", 4) == 0)
152
            {
153
              if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
154
                method_name = dem_opname;
155
              else if (cplus_demangle_opname (method_name, dem_opname, 0))
156
                method_name = dem_opname;
157
            }
158
 
159
          if (strcmp_iw (name, method_name) == 0)
160
            /* Find all the overloaded methods with that name.  */
161
            for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
162
                 field_counter >= 0;
163
                 --field_counter)
164
              {
165
                struct fn_field *f;
166
                char *phys_name;
167
 
168
                f = TYPE_FN_FIELDLIST1 (t, method_counter);
169
 
170
                if (TYPE_FN_FIELD_STUB (f, field_counter))
171
                  {
172
                    char *tmp_name;
173
 
174
                    tmp_name = gdb_mangle_name (t,
175
                                                method_counter,
176
                                                field_counter);
177
                    phys_name = alloca (strlen (tmp_name) + 1);
178
                    strcpy (phys_name, tmp_name);
179
                    xfree (tmp_name);
180
                  }
181
                else
182
                  phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
183
 
184
                /* Destructor is handled by caller, dont add it to the list */
185
                if (is_destructor_name (phys_name) != 0)
186
                  continue;
187
 
188
                sym_arr[i1] = lookup_symbol (phys_name,
189
                                             NULL, VAR_NAMESPACE,
190
                                             (int *) NULL,
191
                                             (struct symtab **) NULL);
192
                if (sym_arr[i1])
193
                  i1++;
194
                else
195
                  {
196
                    /* This error message gets printed, but the method
197
                       still seems to be found
198
                       fputs_filtered("(Cannot find method ", gdb_stdout);
199
                       fprintf_symbol_filtered (gdb_stdout, phys_name,
200
                       language_cplus,
201
                       DMGL_PARAMS | DMGL_ANSI);
202
                       fputs_filtered(" - possibly inlined.)\n", gdb_stdout);
203
                     */
204
                  }
205
              }
206
          else if (strncmp (class_name, name, name_len) == 0
207
                   && (class_name[name_len] == '\0'
208
                       || class_name[name_len] == '<'))
209
            {
210
              /* For GCC 3.x and stabs, constructors and destructors have names
211
                 like __base_ctor and __complete_dtor.  Check the physname for now
212
                 if we're looking for a constructor.  */
213
              for (field_counter
214
                     = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
215
                   field_counter >= 0;
216
                   --field_counter)
217
                {
218
                  struct fn_field *f;
219
                  char *phys_name;
220
 
221
                  f = TYPE_FN_FIELDLIST1 (t, method_counter);
222
 
223
                  /* GCC 3.x will never produce stabs stub methods, so we don't need
224
                     to handle this case.  */
225
                  if (TYPE_FN_FIELD_STUB (f, field_counter))
226
                    continue;
227
                  phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
228
                  if (! is_constructor_name (phys_name))
229
                    continue;
230
 
231
                  /* If this method is actually defined, include it in the
232
                     list.  */
233
                  sym_arr[i1] = lookup_symbol (phys_name,
234
                                               NULL, VAR_NAMESPACE,
235
                                               (int *) NULL,
236
                                               (struct symtab **) NULL);
237
                  if (sym_arr[i1])
238
                    i1++;
239
                }
240
            }
241
        }
242
    }
243
 
244
  /* Only search baseclasses if there is no match yet, since names in
245
     derived classes override those in baseclasses.
246
 
247
     FIXME: The above is not true; it is only true of member functions
248
     if they have the same number of arguments (??? - section 13.1 of the
249
     ARM says the function members are not in the same scope but doesn't
250
     really spell out the rules in a way I understand.  In any case, if
251
     the number of arguments differ this is a case in which we can overload
252
     rather than hiding without any problem, and gcc 2.4.5 does overload
253
     rather than hiding in this case).  */
254
 
255
  if (i1 == 0)
256
    for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
257
      i1 += find_methods (TYPE_BASECLASS (t, ibase), name, sym_arr + i1);
258
 
259
  return i1;
260
}
261
 
262
/* Helper function for decode_line_1.
263
   Build a canonical line spec in CANONICAL if it is non-NULL and if
264
   the SAL has a symtab.
265
   If SYMNAME is non-NULL the canonical line spec is `filename:symname'.
266
   If SYMNAME is NULL the line number from SAL is used and the canonical
267
   line spec is `filename:linenum'.  */
268
 
269
static void
270
build_canonical_line_spec (struct symtab_and_line *sal, char *symname,
271
                           char ***canonical)
272
{
273
  char **canonical_arr;
274
  char *canonical_name;
275
  char *filename;
276
  struct symtab *s = sal->symtab;
277
 
278
  if (s == (struct symtab *) NULL
279
      || s->filename == (char *) NULL
280
      || canonical == (char ***) NULL)
281
    return;
282
 
283
  canonical_arr = (char **) xmalloc (sizeof (char *));
284
  *canonical = canonical_arr;
285
 
286
  filename = s->filename;
287
  if (symname != NULL)
288
    {
289
      canonical_name = xmalloc (strlen (filename) + strlen (symname) + 2);
290
      sprintf (canonical_name, "%s:%s", filename, symname);
291
    }
292
  else
293
    {
294
      canonical_name = xmalloc (strlen (filename) + 30);
295
      sprintf (canonical_name, "%s:%d", filename, sal->line);
296
    }
297
  canonical_arr[0] = canonical_name;
298
}
299
 
300
 
301
 
302
/* Find an instance of the character C in the string S that is outside
303
   of all parenthesis pairs, single-quoted strings, and double-quoted
304
   strings.  Also, ignore the char within a template name, like a ','
305
   within foo<int, int>.  */
306
 
307
static char *
308
find_toplevel_char (char *s, char c)
309
{
310
  int quoted = 0;                /* zero if we're not in quotes;
311
                                   '"' if we're in a double-quoted string;
312
                                   '\'' if we're in a single-quoted string.  */
313
  int depth = 0;         /* number of unclosed parens we've seen */
314
  char *scan;
315
 
316
  for (scan = s; *scan; scan++)
317
    {
318
      if (quoted)
319
        {
320
          if (*scan == quoted)
321
            quoted = 0;
322
          else if (*scan == '\\' && *(scan + 1))
323
            scan++;
324
        }
325
      else if (*scan == c && ! quoted && depth == 0)
326
        return scan;
327
      else if (*scan == '"' || *scan == '\'')
328
        quoted = *scan;
329
      else if (*scan == '(' || *scan == '<')
330
        depth++;
331
      else if ((*scan == ')' || *scan == '>') && depth > 0)
332
        depth--;
333
    }
334
 
335
  return 0;
336
}
337
 
338
/* Given a list of NELTS symbols in SYM_ARR, return a list of lines to
339
   operate on (ask user if necessary).
340
   If CANONICAL is non-NULL return a corresponding array of mangled names
341
   as canonical line specs there.  */
342
 
343
static struct symtabs_and_lines
344
decode_line_2 (struct symbol *sym_arr[], int nelts, int funfirstline,
345
               char ***canonical)
346
{
347
  struct symtabs_and_lines values, return_values;
348
  char *args, *arg1;
349
  int i;
350
  char *prompt;
351
  char *symname;
352
  struct cleanup *old_chain;
353
  char **canonical_arr = (char **) NULL;
354
 
355
  values.sals = (struct symtab_and_line *)
356
    alloca (nelts * sizeof (struct symtab_and_line));
357
  return_values.sals = (struct symtab_and_line *)
358
    xmalloc (nelts * sizeof (struct symtab_and_line));
359
  old_chain = make_cleanup (xfree, return_values.sals);
360
 
361
  if (canonical)
362
    {
363
      canonical_arr = (char **) xmalloc (nelts * sizeof (char *));
364
      make_cleanup (xfree, canonical_arr);
365
      memset (canonical_arr, 0, nelts * sizeof (char *));
366
      *canonical = canonical_arr;
367
    }
368
 
369
  i = 0;
370
  printf_unfiltered ("[0] cancel\n[1] all\n");
371
  while (i < nelts)
372
    {
373
      INIT_SAL (&return_values.sals[i]);        /* initialize to zeroes */
374
      INIT_SAL (&values.sals[i]);
375
      if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
376
        {
377
          values.sals[i] = find_function_start_sal (sym_arr[i], funfirstline);
378
          printf_unfiltered ("[%d] %s at %s:%d\n",
379
                             (i + 2),
380
                             SYMBOL_SOURCE_NAME (sym_arr[i]),
381
                             values.sals[i].symtab->filename,
382
                             values.sals[i].line);
383
        }
384
      else
385
        printf_unfiltered ("?HERE\n");
386
      i++;
387
    }
388
 
389
  if ((prompt = getenv ("PS2")) == NULL)
390
    {
391
      prompt = "> ";
392
    }
393
  args = command_line_input (prompt, 0, "overload-choice");
394
 
395
  if (args == 0 || *args == 0)
396
    error_no_arg ("one or more choice numbers");
397
 
398
  i = 0;
399
  while (*args)
400
    {
401
      int num;
402
 
403
      arg1 = args;
404
      while (*arg1 >= '0' && *arg1 <= '9')
405
        arg1++;
406
      if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
407
        error ("Arguments must be choice numbers.");
408
 
409
      num = atoi (args);
410
 
411
      if (num == 0)
412
        error ("canceled");
413
      else if (num == 1)
414
        {
415
          if (canonical_arr)
416
            {
417
              for (i = 0; i < nelts; i++)
418
                {
419
                  if (canonical_arr[i] == NULL)
420
                    {
421
                      symname = SYMBOL_NAME (sym_arr[i]);
422
                      canonical_arr[i] = savestring (symname, strlen (symname));
423
                    }
424
                }
425
            }
426
          memcpy (return_values.sals, values.sals,
427
                  (nelts * sizeof (struct symtab_and_line)));
428
          return_values.nelts = nelts;
429
          discard_cleanups (old_chain);
430
          return return_values;
431
        }
432
 
433
      if (num >= nelts + 2)
434
        {
435
          printf_unfiltered ("No choice number %d.\n", num);
436
        }
437
      else
438
        {
439
          num -= 2;
440
          if (values.sals[num].pc)
441
            {
442
              if (canonical_arr)
443
                {
444
                  symname = SYMBOL_NAME (sym_arr[num]);
445
                  make_cleanup (xfree, symname);
446
                  canonical_arr[i] = savestring (symname, strlen (symname));
447
                }
448
              return_values.sals[i++] = values.sals[num];
449
              values.sals[num].pc = 0;
450
            }
451
          else
452
            {
453
              printf_unfiltered ("duplicate request for %d ignored.\n", num);
454
            }
455
        }
456
 
457
      args = arg1;
458
      while (*args == ' ' || *args == '\t')
459
        args++;
460
    }
461
  return_values.nelts = i;
462
  discard_cleanups (old_chain);
463
  return return_values;
464
}
465
 
466
/* The parser of linespec itself. */
467
 
468
/* Parse a string that specifies a line number.
469
   Pass the address of a char * variable; that variable will be
470
   advanced over the characters actually parsed.
471
 
472
   The string can be:
473
 
474
   LINENUM -- that line number in current file.  PC returned is 0.
475
   FILE:LINENUM -- that line in that file.  PC returned is 0.
476
   FUNCTION -- line number of openbrace of that function.
477
   PC returned is the start of the function.
478
   VARIABLE -- line number of definition of that variable.
479
   PC returned is 0.
480
   FILE:FUNCTION -- likewise, but prefer functions in that file.
481
   *EXPR -- line in which address EXPR appears.
482
 
483
   This may all be followed by an "if EXPR", which we ignore.
484
 
485
   FUNCTION may be an undebuggable function found in minimal symbol table.
486
 
487
   If the argument FUNFIRSTLINE is nonzero, we want the first line
488
   of real code inside a function when a function is specified, and it is
489
   not OK to specify a variable or type to get its line number.
490
 
491
   DEFAULT_SYMTAB specifies the file to use if none is specified.
492
   It defaults to current_source_symtab.
493
   DEFAULT_LINE specifies the line number to use for relative
494
   line numbers (that start with signs).  Defaults to current_source_line.
495
   If CANONICAL is non-NULL, store an array of strings containing the canonical
496
   line specs there if necessary. Currently overloaded member functions and
497
   line numbers or static functions without a filename yield a canonical
498
   line spec. The array and the line spec strings are allocated on the heap,
499
   it is the callers responsibility to free them.
500
 
501
   Note that it is possible to return zero for the symtab
502
   if no file is validly specified.  Callers must check that.
503
   Also, the line number returned may be invalid.  */
504
 
505
/* We allow single quotes in various places.  This is a hideous
506
   kludge, which exists because the completer can't yet deal with the
507
   lack of single quotes.  FIXME: write a linespec_completer which we
508
   can use as appropriate instead of make_symbol_completion_list.  */
509
 
510
struct symtabs_and_lines
511
decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
512
               int default_line, char ***canonical)
513
{
514
  struct symtabs_and_lines values;
515
  struct symtab_and_line val;
516
  register char *p, *p1;
517
  char *q, *pp, *ii, *p2;
518
#if 0
519
  char *q1;
520
#endif
521
  register struct symtab *s;
522
 
523
  register struct symbol *sym;
524
  /* The symtab that SYM was found in.  */
525
  struct symtab *sym_symtab;
526
 
527
  register CORE_ADDR pc;
528
  register struct minimal_symbol *msymbol;
529
  char *copy;
530
  struct symbol *sym_class;
531
  int i1;
532
  int is_quoted;
533
  int is_quote_enclosed;
534
  int has_parens;
535
  int has_if = 0;
536
  int has_comma = 0;
537
  struct symbol **sym_arr;
538
  struct type *t;
539
  char *saved_arg = *argptr;
540
  extern char *gdb_completer_quote_characters;
541
 
542
  INIT_SAL (&val);              /* initialize to zeroes */
543
 
544
  /* Defaults have defaults.  */
545
 
546
  if (default_symtab == 0)
547
    {
548
      default_symtab = current_source_symtab;
549
      default_line = current_source_line;
550
    }
551
 
552
  /* See if arg is *PC */
553
 
554
  if (**argptr == '*')
555
    {
556
      (*argptr)++;
557
      pc = parse_and_eval_address_1 (argptr);
558
 
559
      values.sals = (struct symtab_and_line *)
560
        xmalloc (sizeof (struct symtab_and_line));
561
 
562
      values.nelts = 1;
563
      values.sals[0] = find_pc_line (pc, 0);
564
      values.sals[0].pc = pc;
565
      values.sals[0].section = find_pc_overlay (pc);
566
 
567
      return values;
568
    }
569
 
570
  /* 'has_if' is for the syntax:
571
   *     (gdb) break foo if (a==b)
572
   */
573
  if ((ii = strstr (*argptr, " if ")) != NULL ||
574
      (ii = strstr (*argptr, "\tif ")) != NULL ||
575
      (ii = strstr (*argptr, " if\t")) != NULL ||
576
      (ii = strstr (*argptr, "\tif\t")) != NULL ||
577
      (ii = strstr (*argptr, " if(")) != NULL ||
578
      (ii = strstr (*argptr, "\tif( ")) != NULL)
579
    has_if = 1;
580
  /* Temporarily zap out "if (condition)" to not
581
   * confuse the parenthesis-checking code below.
582
   * This is undone below. Do not change ii!!
583
   */
584
  if (has_if)
585
    {
586
      *ii = '\0';
587
    }
588
 
589
  /* Set various flags.
590
   * 'has_parens' is important for overload checking, where
591
   * we allow things like:
592
   *     (gdb) break c::f(int)
593
   */
594
 
595
  /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
596
 
597
  is_quoted = (**argptr
598
               && strchr (get_gdb_completer_quote_characters (),
599
                          **argptr) != NULL);
600
 
601
  has_parens = ((pp = strchr (*argptr, '(')) != NULL
602
                && (pp = strrchr (pp, ')')) != NULL);
603
 
604
  /* Now that we're safely past the has_parens check,
605
   * put back " if (condition)" so outer layers can see it
606
   */
607
  if (has_if)
608
    *ii = ' ';
609
 
610
  /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
611
     and we must isolate the first half.  Outer layers will call again later
612
     for the second half.
613
 
614
     Don't count commas that appear in argument lists of overloaded
615
     functions, or in quoted strings.  It's stupid to go to this much
616
     trouble when the rest of the function is such an obvious roach hotel.  */
617
  ii = find_toplevel_char (*argptr, ',');
618
  has_comma = (ii != 0);
619
 
620
  /* Temporarily zap out second half to not
621
   * confuse the code below.
622
   * This is undone below. Do not change ii!!
623
   */
624
  if (has_comma)
625
    {
626
      *ii = '\0';
627
    }
628
 
629
  /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
630
  /* May also be CLASS::MEMBER, or NAMESPACE::NAME */
631
  /* Look for ':', but ignore inside of <> */
632
 
633
  s = NULL;
634
  p = *argptr;
635
  if (p[0] == '"')
636
    {
637
      is_quote_enclosed = 1;
638
      (*argptr)++;
639
      p++;
640
    }
641
  else
642
    is_quote_enclosed = 0;
643
  for (; *p; p++)
644
    {
645
      if (p[0] == '<')
646
        {
647
          char *temp_end = find_template_name_end (p);
648
          if (!temp_end)
649
            error ("malformed template specification in command");
650
          p = temp_end;
651
        }
652
      /* Check for the end of the first half of the linespec.  End of line,
653
         a tab, a double colon or the last single colon, or a space.  But
654
         if enclosed in double quotes we do not break on enclosed spaces */
655
      if (!*p
656
          || p[0] == '\t'
657
          || ((p[0] == ':')
658
              && ((p[1] == ':') || (strchr (p + 1, ':') == NULL)))
659
          || ((p[0] == ' ') && !is_quote_enclosed))
660
        break;
661
      if (p[0] == '.' && strchr (p, ':') == NULL)        /* Java qualified method. */
662
        {
663
          /* Find the *last* '.', since the others are package qualifiers. */
664
          for (p1 = p; *p1; p1++)
665
            {
666
              if (*p1 == '.')
667
                p = p1;
668
            }
669
          break;
670
        }
671
    }
672
  while (p[0] == ' ' || p[0] == '\t')
673
    p++;
674
 
675
  /* if the closing double quote was left at the end, remove it */
676
  if (is_quote_enclosed)
677
    {
678
      char *closing_quote = strchr (p - 1, '"');
679
      if (closing_quote && closing_quote[1] == '\0')
680
        *closing_quote = '\0';
681
    }
682
 
683
  /* Now that we've safely parsed the first half,
684
   * put back ',' so outer layers can see it
685
   */
686
  if (has_comma)
687
    *ii = ',';
688
 
689
  if ((p[0] == ':' || p[0] == '.') && !has_parens)
690
    {
691
      /*  C++ */
692
      /*  ... or Java */
693
      if (is_quoted)
694
        *argptr = *argptr + 1;
695
      if (p[0] == '.' || p[1] == ':')
696
        {
697
          char *saved_arg2 = *argptr;
698
          char *temp_end;
699
          /* First check for "global" namespace specification,
700
             of the form "::foo". If found, skip over the colons
701
             and jump to normal symbol processing */
702
          if (p[0] == ':'
703
              && ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
704
            saved_arg2 += 2;
705
 
706
          /* We have what looks like a class or namespace
707
             scope specification (A::B), possibly with many
708
             levels of namespaces or classes (A::B::C::D).
709
 
710
             Some versions of the HP ANSI C++ compiler (as also possibly
711
             other compilers) generate class/function/member names with
712
             embedded double-colons if they are inside namespaces. To
713
             handle this, we loop a few times, considering larger and
714
             larger prefixes of the string as though they were single
715
             symbols.  So, if the initially supplied string is
716
             A::B::C::D::foo, we have to look up "A", then "A::B",
717
             then "A::B::C", then "A::B::C::D", and finally
718
             "A::B::C::D::foo" as single, monolithic symbols, because
719
             A, B, C or D may be namespaces.
720
 
721
             Note that namespaces can nest only inside other
722
             namespaces, and not inside classes.  So we need only
723
             consider *prefixes* of the string; there is no need to look up
724
             "B::C" separately as a symbol in the previous example. */
725
 
726
          p2 = p;               /* save for restart */
727
          while (1)
728
            {
729
              /* Extract the class name.  */
730
              p1 = p;
731
              while (p != *argptr && p[-1] == ' ')
732
                --p;
733
              copy = (char *) alloca (p - *argptr + 1);
734
              memcpy (copy, *argptr, p - *argptr);
735
              copy[p - *argptr] = 0;
736
 
737
              /* Discard the class name from the arg.  */
738
              p = p1 + (p1[0] == ':' ? 2 : 1);
739
              while (*p == ' ' || *p == '\t')
740
                p++;
741
              *argptr = p;
742
 
743
              sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
744
                                         (struct symtab **) NULL);
745
 
746
              if (sym_class &&
747
                  (t = check_typedef (SYMBOL_TYPE (sym_class)),
748
                   (TYPE_CODE (t) == TYPE_CODE_STRUCT
749
                    || TYPE_CODE (t) == TYPE_CODE_UNION)))
750
                {
751
                  /* Arg token is not digits => try it as a function name
752
                     Find the next token(everything up to end or next blank). */
753
                  if (**argptr
754
                      && strchr (get_gdb_completer_quote_characters (),
755
                                 **argptr) != NULL)
756
                    {
757
                      p = skip_quoted (*argptr);
758
                      *argptr = *argptr + 1;
759
                    }
760
                  else
761
                    {
762
                      p = *argptr;
763
                      while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':')
764
                        p++;
765
                    }
766
/*
767
   q = operator_chars (*argptr, &q1);
768
   if (q1 - q)
769
   {
770
   char *opname;
771
   char *tmp = alloca (q1 - q + 1);
772
   memcpy (tmp, q, q1 - q);
773
   tmp[q1 - q] = '\0';
774
   opname = cplus_mangle_opname (tmp, DMGL_ANSI);
775
   if (opname == NULL)
776
   {
777
   cplusplus_error (saved_arg, "no mangling for \"%s\"\n", tmp);
778
   }
779
   copy = (char*) alloca (3 + strlen(opname));
780
   sprintf (copy, "__%s", opname);
781
   p = q1;
782
   }
783
   else
784
 */
785
                  {
786
                    copy = (char *) alloca (p - *argptr + 1);
787
                    memcpy (copy, *argptr, p - *argptr);
788
                    copy[p - *argptr] = '\0';
789
                    if (p != *argptr
790
                        && copy[p - *argptr - 1]
791
                        && strchr (get_gdb_completer_quote_characters (),
792
                                   copy[p - *argptr - 1]) != NULL)
793
                      copy[p - *argptr - 1] = '\0';
794
                  }
795
 
796
                  /* no line number may be specified */
797
                  while (*p == ' ' || *p == '\t')
798
                    p++;
799
                  *argptr = p;
800
 
801
                  sym = 0;
802
                  i1 = 0;        /*  counter for the symbol array */
803
                  sym_arr = (struct symbol **) alloca (total_number_of_methods (t)
804
                                                * sizeof (struct symbol *));
805
 
806
                  if (destructor_name_p (copy, t))
807
                    {
808
                      /* Destructors are a special case.  */
809
                      int m_index, f_index;
810
 
811
                      if (get_destructor_fn_field (t, &m_index, &f_index))
812
                        {
813
                          struct fn_field *f = TYPE_FN_FIELDLIST1 (t, m_index);
814
 
815
                          sym_arr[i1] =
816
                            lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, f_index),
817
                                           NULL, VAR_NAMESPACE, (int *) NULL,
818
                                           (struct symtab **) NULL);
819
                          if (sym_arr[i1])
820
                            i1++;
821
                        }
822
                    }
823
                  else
824
                    i1 = find_methods (t, copy, sym_arr);
825
                  if (i1 == 1)
826
                    {
827
                      /* There is exactly one field with that name.  */
828
                      sym = sym_arr[0];
829
 
830
                      if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
831
                        {
832
                          values.sals = (struct symtab_and_line *)
833
                            xmalloc (sizeof (struct symtab_and_line));
834
                          values.nelts = 1;
835
                          values.sals[0] = find_function_start_sal (sym,
836
                                                              funfirstline);
837
                        }
838
                      else
839
                        {
840
                          values.nelts = 0;
841
                        }
842
                      return values;
843
                    }
844
                  if (i1 > 0)
845
                    {
846
                      /* There is more than one field with that name
847
                         (overloaded).  Ask the user which one to use.  */
848
                      return decode_line_2 (sym_arr, i1, funfirstline, canonical);
849
                    }
850
                  else
851
                    {
852
                      char *tmp;
853
 
854
                      if (is_operator_name (copy))
855
                        {
856
                          tmp = (char *) alloca (strlen (copy + 3) + 9);
857
                          strcpy (tmp, "operator ");
858
                          strcat (tmp, copy + 3);
859
                        }
860
                      else
861
                        tmp = copy;
862
                      if (tmp[0] == '~')
863
                        cplusplus_error (saved_arg,
864
                                         "the class `%s' does not have destructor defined\n",
865
                                         SYMBOL_SOURCE_NAME (sym_class));
866
                      else
867
                        cplusplus_error (saved_arg,
868
                                         "the class %s does not have any method named %s\n",
869
                                         SYMBOL_SOURCE_NAME (sym_class), tmp);
870
                    }
871
                }
872
 
873
              /* Move pointer up to next possible class/namespace token */
874
              p = p2 + 1;       /* restart with old value +1 */
875
              /* Move pointer ahead to next double-colon */
876
              while (*p && (p[0] != ' ') && (p[0] != '\t') && (p[0] != '\''))
877
                {
878
                  if (p[0] == '<')
879
                    {
880
                      temp_end = find_template_name_end (p);
881
                      if (!temp_end)
882
                        error ("malformed template specification in command");
883
                      p = temp_end;
884
                    }
885
                  else if ((p[0] == ':') && (p[1] == ':'))
886
                    break;      /* found double-colon */
887
                  else
888
                    p++;
889
                }
890
 
891
              if (*p != ':')
892
                break;          /* out of the while (1) */
893
 
894
              p2 = p;           /* save restart for next time around */
895
              *argptr = saved_arg2;     /* restore argptr */
896
            }                   /* while (1) */
897
 
898
          /* Last chance attempt -- check entire name as a symbol */
899
          /* Use "copy" in preparation for jumping out of this block,
900
             to be consistent with usage following the jump target */
901
          copy = (char *) alloca (p - saved_arg2 + 1);
902
          memcpy (copy, saved_arg2, p - saved_arg2);
903
          /* Note: if is_quoted should be true, we snuff out quote here anyway */
904
          copy[p - saved_arg2] = '\000';
905
          /* Set argptr to skip over the name */
906
          *argptr = (*p == '\'') ? p + 1 : p;
907
          /* Look up entire name */
908
          sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
909
          s = (struct symtab *) 0;
910
          /* Prepare to jump: restore the " if (condition)" so outer layers see it */
911
          /* Symbol was found --> jump to normal symbol processing.
912
             Code following "symbol_found" expects "copy" to have the
913
             symbol name, "sym" to have the symbol pointer, "s" to be
914
             a specified file's symtab, and sym_symtab to be the symbol's
915
             symtab. */
916
          /* By jumping there we avoid falling through the FILE:LINE and
917
             FILE:FUNC processing stuff below */
918
          if (sym)
919
            goto symbol_found;
920
 
921
          /* Couldn't find any interpretation as classes/namespaces, so give up */
922
          /* The quotes are important if copy is empty.  */
923
          cplusplus_error (saved_arg,
924
                           "Can't find member of namespace, class, struct, or union named \"%s\"\n",
925
                           copy);
926
        }
927
      /*  end of C++  */
928
 
929
 
930
      /* Extract the file name.  */
931
      p1 = p;
932
      while (p != *argptr && p[-1] == ' ')
933
        --p;
934
      if ((*p == '"') && is_quote_enclosed)
935
        --p;
936
      copy = (char *) alloca (p - *argptr + 1);
937
      memcpy (copy, *argptr, p - *argptr);
938
      /* It may have the ending quote right after the file name */
939
      if (is_quote_enclosed && copy[p - *argptr - 1] == '"')
940
        copy[p - *argptr - 1] = 0;
941
      else
942
        copy[p - *argptr] = 0;
943
 
944
      /* Find that file's data.  */
945
      s = lookup_symtab (copy);
946
      if (s == 0)
947
        {
948
          if (!have_full_symbols () && !have_partial_symbols ())
949
            error ("No symbol table is loaded.  Use the \"file\" command.");
950
          error ("No source file named %s.", copy);
951
        }
952
 
953
      /* Discard the file name from the arg.  */
954
      p = p1 + 1;
955
      while (*p == ' ' || *p == '\t')
956
        p++;
957
      *argptr = p;
958
    }
959
#if 0
960
  /* No one really seems to know why this was added. It certainly
961
     breaks the command line, though, whenever the passed
962
     name is of the form ClassName::Method. This bit of code
963
     singles out the class name, and if funfirstline is set (for
964
     example, you are setting a breakpoint at this function),
965
     you get an error. This did not occur with earlier
966
     verions, so I am ifdef'ing this out. 3/29/99 */
967
  else
968
    {
969
      /* Check if what we have till now is a symbol name */
970
 
971
      /* We may be looking at a template instantiation such
972
         as "foo<int>".  Check here whether we know about it,
973
         instead of falling through to the code below which
974
         handles ordinary function names, because that code
975
         doesn't like seeing '<' and '>' in a name -- the
976
         skip_quoted call doesn't go past them.  So see if we
977
         can figure it out right now. */
978
 
979
      copy = (char *) alloca (p - *argptr + 1);
980
      memcpy (copy, *argptr, p - *argptr);
981
      copy[p - *argptr] = '\000';
982
      sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
983
      if (sym)
984
        {
985
          /* Yes, we have a symbol; jump to symbol processing */
986
          /* Code after symbol_found expects S, SYM_SYMTAB, SYM,
987
             and COPY to be set correctly */
988
          *argptr = (*p == '\'') ? p + 1 : p;
989
          s = (struct symtab *) 0;
990
          goto symbol_found;
991
        }
992
      /* Otherwise fall out from here and go to file/line spec
993
         processing, etc. */
994
    }
995
#endif
996
 
997
  /* S is specified file's symtab, or 0 if no file specified.
998
     arg no longer contains the file name.  */
999
 
1000
  /* Check whether arg is all digits (and sign) */
1001
 
1002
  q = *argptr;
1003
  if (*q == '-' || *q == '+')
1004
    q++;
1005
  while (*q >= '0' && *q <= '9')
1006
    q++;
1007
 
1008
  if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ','))
1009
    {
1010
      /* We found a token consisting of all digits -- at least one digit.  */
1011
      enum sign
1012
        {
1013
          none, plus, minus
1014
        }
1015
      sign = none;
1016
 
1017
      /* We might need a canonical line spec if no file was specified.  */
1018
      int need_canonical = (s == 0) ? 1 : 0;
1019
 
1020
      /* This is where we need to make sure that we have good defaults.
1021
         We must guarantee that this section of code is never executed
1022
         when we are called with just a function name, since
1023
         select_source_symtab calls us with such an argument  */
1024
 
1025
      if (s == 0 && default_symtab == 0)
1026
        {
1027
          select_source_symtab (0);
1028
          default_symtab = current_source_symtab;
1029
          default_line = current_source_line;
1030
        }
1031
 
1032
      if (**argptr == '+')
1033
        sign = plus, (*argptr)++;
1034
      else if (**argptr == '-')
1035
        sign = minus, (*argptr)++;
1036
      val.line = atoi (*argptr);
1037
      switch (sign)
1038
        {
1039
        case plus:
1040
          if (q == *argptr)
1041
            val.line = 5;
1042
          if (s == 0)
1043
            val.line = default_line + val.line;
1044
          break;
1045
        case minus:
1046
          if (q == *argptr)
1047
            val.line = 15;
1048
          if (s == 0)
1049
            val.line = default_line - val.line;
1050
          else
1051
            val.line = 1;
1052
          break;
1053
        case none:
1054
          break;                /* No need to adjust val.line.  */
1055
        }
1056
 
1057
      while (*q == ' ' || *q == '\t')
1058
        q++;
1059
      *argptr = q;
1060
      if (s == 0)
1061
        s = default_symtab;
1062
 
1063
      /* It is possible that this source file has more than one symtab,
1064
         and that the new line number specification has moved us from the
1065
         default (in s) to a new one.  */
1066
      val.symtab = find_line_symtab (s, val.line, NULL, NULL);
1067
      if (val.symtab == 0)
1068
        val.symtab = s;
1069
 
1070
      val.pc = 0;
1071
      values.sals = (struct symtab_and_line *)
1072
        xmalloc (sizeof (struct symtab_and_line));
1073
      values.sals[0] = val;
1074
      values.nelts = 1;
1075
      if (need_canonical)
1076
        build_canonical_line_spec (values.sals, NULL, canonical);
1077
      return values;
1078
    }
1079
 
1080
  /* Arg token is not digits => try it as a variable name
1081
     Find the next token (everything up to end or next whitespace).  */
1082
 
1083
  if (**argptr == '$')          /* May be a convenience variable */
1084
    p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));        /* One or two $ chars possible */
1085
  else if (is_quoted)
1086
    {
1087
      p = skip_quoted (*argptr);
1088
      if (p[-1] != '\'')
1089
        error ("Unmatched single quote.");
1090
    }
1091
  else if (has_parens)
1092
    {
1093
      p = pp + 1;
1094
    }
1095
  else
1096
    {
1097
      p = skip_quoted (*argptr);
1098
    }
1099
 
1100
  copy = (char *) alloca (p - *argptr + 1);
1101
  memcpy (copy, *argptr, p - *argptr);
1102
  copy[p - *argptr] = '\0';
1103
  if (p != *argptr
1104
      && copy[0]
1105
      && copy[0] == copy[p - *argptr - 1]
1106
      && strchr (get_gdb_completer_quote_characters (), copy[0]) != NULL)
1107
    {
1108
      copy[p - *argptr - 1] = '\0';
1109
      copy++;
1110
    }
1111
  while (*p == ' ' || *p == '\t')
1112
    p++;
1113
  *argptr = p;
1114
 
1115
  /* If it starts with $: may be a legitimate variable or routine name
1116
     (e.g. HP-UX millicode routines such as $$dyncall), or it may
1117
     be history value, or it may be a convenience variable */
1118
 
1119
  if (*copy == '$')
1120
    {
1121
      struct value *valx;
1122
      int index = 0;
1123
      int need_canonical = 0;
1124
 
1125
      p = (copy[1] == '$') ? copy + 2 : copy + 1;
1126
      while (*p >= '0' && *p <= '9')
1127
        p++;
1128
      if (!*p)                  /* reached end of token without hitting non-digit */
1129
        {
1130
          /* We have a value history reference */
1131
          sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
1132
          valx = access_value_history ((copy[1] == '$') ? -index : index);
1133
          if (TYPE_CODE (VALUE_TYPE (valx)) != TYPE_CODE_INT)
1134
            error ("History values used in line specs must have integer values.");
1135
        }
1136
      else
1137
        {
1138
          /* Not all digits -- may be user variable/function or a
1139
             convenience variable */
1140
 
1141
          /* Look up entire name as a symbol first */
1142
          sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
1143
          s = (struct symtab *) 0;
1144
          need_canonical = 1;
1145
          /* Symbol was found --> jump to normal symbol processing.
1146
             Code following "symbol_found" expects "copy" to have the
1147
             symbol name, "sym" to have the symbol pointer, "s" to be
1148
             a specified file's symtab, and sym_symtab to be the symbol's
1149
             symtab. */
1150
          if (sym)
1151
            goto symbol_found;
1152
 
1153
          /* If symbol was not found, look in minimal symbol tables */
1154
          msymbol = lookup_minimal_symbol (copy, NULL, NULL);
1155
          /* Min symbol was found --> jump to minsym processing. */
1156
          if (msymbol)
1157
            goto minimal_symbol_found;
1158
 
1159
          /* Not a user variable or function -- must be convenience variable */
1160
          need_canonical = (s == 0) ? 1 : 0;
1161
          valx = value_of_internalvar (lookup_internalvar (copy + 1));
1162
          if (TYPE_CODE (VALUE_TYPE (valx)) != TYPE_CODE_INT)
1163
            error ("Convenience variables used in line specs must have integer values.");
1164
        }
1165
 
1166
      /* Either history value or convenience value from above, in valx */
1167
      val.symtab = s ? s : default_symtab;
1168
      val.line = value_as_long (valx);
1169
      val.pc = 0;
1170
 
1171
      values.sals = (struct symtab_and_line *) xmalloc (sizeof val);
1172
      values.sals[0] = val;
1173
      values.nelts = 1;
1174
 
1175
      if (need_canonical)
1176
        build_canonical_line_spec (values.sals, NULL, canonical);
1177
 
1178
      return values;
1179
    }
1180
 
1181
 
1182
  /* Look up that token as a variable.
1183
     If file specified, use that file's per-file block to start with.  */
1184
 
1185
  sym = lookup_symbol (copy,
1186
                       (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
1187
                        : get_selected_block (0)),
1188
                       VAR_NAMESPACE, 0, &sym_symtab);
1189
 
1190
symbol_found:                   /* We also jump here from inside the C++ class/namespace
1191
                                   code on finding a symbol of the form "A::B::C" */
1192
 
1193
  if (sym != NULL)
1194
    {
1195
      if (SYMBOL_CLASS (sym) == LOC_BLOCK)
1196
        {
1197
          /* Arg is the name of a function */
1198
          values.sals = (struct symtab_and_line *)
1199
            xmalloc (sizeof (struct symtab_and_line));
1200
          values.sals[0] = find_function_start_sal (sym, funfirstline);
1201
          values.nelts = 1;
1202
 
1203
          /* Don't use the SYMBOL_LINE; if used at all it points to
1204
             the line containing the parameters or thereabouts, not
1205
             the first line of code.  */
1206
 
1207
          /* We might need a canonical line spec if it is a static
1208
             function.  */
1209
          if (s == 0)
1210
            {
1211
              struct blockvector *bv = BLOCKVECTOR (sym_symtab);
1212
              struct block *b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1213
              if (lookup_block_symbol (b, copy, NULL, VAR_NAMESPACE) != NULL)
1214
                build_canonical_line_spec (values.sals, copy, canonical);
1215
            }
1216
          return values;
1217
        }
1218
      else
1219
        {
1220
          if (funfirstline)
1221
            error ("\"%s\" is not a function", copy);
1222
          else if (SYMBOL_LINE (sym) != 0)
1223
            {
1224
              /* We know its line number.  */
1225
              values.sals = (struct symtab_and_line *)
1226
                xmalloc (sizeof (struct symtab_and_line));
1227
              values.nelts = 1;
1228
              memset (&values.sals[0], 0, sizeof (values.sals[0]));
1229
              values.sals[0].symtab = sym_symtab;
1230
              values.sals[0].line = SYMBOL_LINE (sym);
1231
              return values;
1232
            }
1233
          else
1234
            /* This can happen if it is compiled with a compiler which doesn't
1235
               put out line numbers for variables.  */
1236
            /* FIXME: Shouldn't we just set .line and .symtab to zero
1237
               and return?  For example, "info line foo" could print
1238
               the address.  */
1239
            error ("Line number not known for symbol \"%s\"", copy);
1240
        }
1241
    }
1242
 
1243
  msymbol = lookup_minimal_symbol (copy, NULL, NULL);
1244
 
1245
minimal_symbol_found:           /* We also jump here from the case for variables
1246
                                   that begin with '$' */
1247
 
1248
  if (msymbol != NULL)
1249
    {
1250
      values.sals = (struct symtab_and_line *)
1251
        xmalloc (sizeof (struct symtab_and_line));
1252
      values.sals[0] = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
1253
                                          (struct sec *) 0, 0);
1254
      values.sals[0].section = SYMBOL_BFD_SECTION (msymbol);
1255
      if (funfirstline)
1256
        {
1257
          values.sals[0].pc += FUNCTION_START_OFFSET;
1258
          values.sals[0].pc = SKIP_PROLOGUE (values.sals[0].pc);
1259
        }
1260
      values.nelts = 1;
1261
      return values;
1262
    }
1263
 
1264
  if (!have_full_symbols () &&
1265
      !have_partial_symbols () && !have_minimal_symbols ())
1266
    error ("No symbol table is loaded.  Use the \"file\" command.");
1267
 
1268
  error ("Function \"%s\" not defined.", copy);
1269
  return values;                /* for lint */
1270
}

powered by: WebSVN 2.1.0

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