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

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [gdb/] [linespec.c] - Blame information for rev 522

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

Line No. Rev Author Line
1 330 jeremybenn
/* Parser for linespec for the GNU debugger, GDB.
2
 
3
   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4
   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
5
   2009, 2010 Free Software Foundation, Inc.
6
 
7
   This file is part of GDB.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 3 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
 
22
#include "defs.h"
23
#include "symtab.h"
24
#include "frame.h"
25
#include "command.h"
26
#include "symfile.h"
27
#include "objfiles.h"
28
#include "source.h"
29
#include "demangle.h"
30
#include "value.h"
31
#include "completer.h"
32
#include "cp-abi.h"
33
#include "cp-support.h"
34
#include "parser-defs.h"
35
#include "block.h"
36
#include "objc-lang.h"
37
#include "linespec.h"
38
#include "exceptions.h"
39
#include "language.h"
40
#include "interps.h"
41
#include "mi/mi-cmds.h"
42
#include "target.h"
43
#include "arch-utils.h"
44
 
45
/* We share this one with symtab.c, but it is not exported widely. */
46
 
47
extern char *operator_chars (char *, char **);
48
 
49
/* Prototypes for local functions */
50
 
51
static void initialize_defaults (struct symtab **default_symtab,
52
                                 int *default_line);
53
 
54
static struct symtabs_and_lines decode_indirect (char **argptr);
55
 
56
static char *locate_first_half (char **argptr, int *is_quote_enclosed);
57
 
58
static struct symtabs_and_lines decode_objc (char **argptr,
59
                                             int funfirstline,
60
                                             struct symtab *file_symtab,
61
                                             char ***canonical,
62
                                             char *saved_arg);
63
 
64
static struct symtabs_and_lines decode_compound (char **argptr,
65
                                                 int funfirstline,
66
                                                 char ***canonical,
67
                                                 char *saved_arg,
68
                                                 char *p,
69
                                                 int *not_found_ptr);
70
 
71
static struct symbol *lookup_prefix_sym (char **argptr, char *p);
72
 
73
static struct symtabs_and_lines find_method (int funfirstline,
74
                                             char ***canonical,
75
                                             char *saved_arg,
76
                                             char *copy,
77
                                             struct type *t,
78
                                             struct symbol *sym_class,
79
                                             int *not_found_ptr);
80
 
81
static void cplusplus_error (const char *name, const char *fmt, ...)
82
     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3);
83
 
84
static int total_number_of_methods (struct type *type);
85
 
86
static int find_methods (struct type *, char *,
87
                         enum language, struct symbol **);
88
 
89
static int add_matching_methods (int method_counter, struct type *t,
90
                                 enum language language,
91
                                 struct symbol **sym_arr);
92
 
93
static int add_constructors (int method_counter, struct type *t,
94
                             enum language language,
95
                             struct symbol **sym_arr);
96
 
97
static void build_canonical_line_spec (struct symtab_and_line *,
98
                                       char *, char ***);
99
 
100
static char *find_toplevel_char (char *s, char c);
101
 
102
static int is_objc_method_format (const char *s);
103
 
104
static struct symtabs_and_lines decode_line_2 (struct symbol *[],
105
                                               int, int, char ***);
106
 
107
static struct symtab *symtab_from_filename (char **argptr,
108
                                            char *p, int is_quote_enclosed,
109
                                            int *not_found_ptr);
110
 
111
static struct
112
symtabs_and_lines decode_all_digits (char **argptr,
113
                                     struct symtab *default_symtab,
114
                                     int default_line,
115
                                     char ***canonical,
116
                                     struct symtab *file_symtab,
117
                                     char *q);
118
 
119
static struct symtabs_and_lines decode_dollar (char *copy,
120
                                               int funfirstline,
121
                                               struct symtab *default_symtab,
122
                                               char ***canonical,
123
                                               struct symtab *file_symtab);
124
 
125
static struct symtabs_and_lines decode_variable (char *copy,
126
                                                 int funfirstline,
127
                                                 char ***canonical,
128
                                                 struct symtab *file_symtab,
129
                                                 int *not_found_ptr);
130
 
131
static struct
132
symtabs_and_lines symbol_found (int funfirstline,
133
                                char ***canonical,
134
                                char *copy,
135
                                struct symbol *sym,
136
                                struct symtab *file_symtab);
137
 
138
static struct
139
symtabs_and_lines minsym_found (int funfirstline,
140
                                struct minimal_symbol *msymbol);
141
 
142
/* Helper functions. */
143
 
144
/* Issue a helpful hint on using the command completion feature on
145
   single quoted demangled C++ symbols as part of the completion
146
   error.  */
147
 
148
static void
149
cplusplus_error (const char *name, const char *fmt, ...)
150
{
151
  struct ui_file *tmp_stream;
152
  char *message;
153
 
154
  tmp_stream = mem_fileopen ();
155
  make_cleanup_ui_file_delete (tmp_stream);
156
 
157
  {
158
    va_list args;
159
 
160
    va_start (args, fmt);
161
    vfprintf_unfiltered (tmp_stream, fmt, args);
162
    va_end (args);
163
  }
164
 
165
  while (*name == '\'')
166
    name++;
167
  fprintf_unfiltered (tmp_stream,
168
                      ("Hint: try '%s<TAB> or '%s<ESC-?>\n"
169
                       "(Note leading single quote.)"),
170
                      name, name);
171
 
172
  message = ui_file_xstrdup (tmp_stream, NULL);
173
  make_cleanup (xfree, message);
174
  throw_error (NOT_FOUND_ERROR, "%s", message);
175
}
176
 
177
/* Return the number of methods described for TYPE, including the
178
   methods from types it derives from. This can't be done in the symbol
179
   reader because the type of the baseclass might still be stubbed
180
   when the definition of the derived class is parsed.  */
181
 
182
static int
183
total_number_of_methods (struct type *type)
184
{
185
  int n;
186
  int count;
187
 
188
  CHECK_TYPEDEF (type);
189
  if (! HAVE_CPLUS_STRUCT (type))
190
    return 0;
191
  count = TYPE_NFN_FIELDS_TOTAL (type);
192
 
193
  for (n = 0; n < TYPE_N_BASECLASSES (type); n++)
194
    count += total_number_of_methods (TYPE_BASECLASS (type, n));
195
 
196
  return count;
197
}
198
 
199
/* Recursive helper function for decode_line_1.
200
   Look for methods named NAME in type T.
201
   Return number of matches.
202
   Put matches in SYM_ARR, which should have been allocated with
203
   a size of total_number_of_methods (T) * sizeof (struct symbol *).
204
   Note that this function is g++ specific.  */
205
 
206
static int
207
find_methods (struct type *t, char *name, enum language language,
208
              struct symbol **sym_arr)
209
{
210
  int i1 = 0;
211
  int ibase;
212
  char *class_name = type_name_no_tag (t);
213
 
214
  /* Ignore this class if it doesn't have a name.  This is ugly, but
215
     unless we figure out how to get the physname without the name of
216
     the class, then the loop can't do any good.  */
217
  if (class_name
218
      && (lookup_symbol_in_language (class_name, (struct block *) NULL,
219
                         STRUCT_DOMAIN, language, (int *) NULL)))
220
    {
221
      int method_counter;
222
      int name_len = strlen (name);
223
 
224
      CHECK_TYPEDEF (t);
225
 
226
      /* Loop over each method name.  At this level, all overloads of a name
227
         are counted as a single name.  There is an inner loop which loops over
228
         each overload.  */
229
 
230
      for (method_counter = TYPE_NFN_FIELDS (t) - 1;
231
           method_counter >= 0;
232
           --method_counter)
233
        {
234
          char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
235
          char dem_opname[64];
236
 
237
          if (strncmp (method_name, "__", 2) == 0 ||
238
              strncmp (method_name, "op", 2) == 0 ||
239
              strncmp (method_name, "type", 4) == 0)
240
            {
241
              if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
242
                method_name = dem_opname;
243
              else if (cplus_demangle_opname (method_name, dem_opname, 0))
244
                method_name = dem_opname;
245
            }
246
 
247
          if (strcmp_iw (name, method_name) == 0)
248
            /* Find all the overloaded methods with that name.  */
249
            i1 += add_matching_methods (method_counter, t, language,
250
                                        sym_arr + i1);
251
          else if (strncmp (class_name, name, name_len) == 0
252
                   && (class_name[name_len] == '\0'
253
                       || class_name[name_len] == '<'))
254
            i1 += add_constructors (method_counter, t, language,
255
                                    sym_arr + i1);
256
        }
257
    }
258
 
259
  /* Only search baseclasses if there is no match yet, since names in
260
     derived classes override those in baseclasses.
261
 
262
     FIXME: The above is not true; it is only true of member functions
263
     if they have the same number of arguments (??? - section 13.1 of the
264
     ARM says the function members are not in the same scope but doesn't
265
     really spell out the rules in a way I understand.  In any case, if
266
     the number of arguments differ this is a case in which we can overload
267
     rather than hiding without any problem, and gcc 2.4.5 does overload
268
     rather than hiding in this case).  */
269
 
270
  if (i1 == 0)
271
    for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
272
      i1 += find_methods (TYPE_BASECLASS (t, ibase), name,
273
                          language, sym_arr + i1);
274
 
275
  return i1;
276
}
277
 
278
/* Add the symbols associated to methods of the class whose type is T
279
   and whose name matches the method indexed by METHOD_COUNTER in the
280
   array SYM_ARR.  Return the number of methods added.  */
281
 
282
static int
283
add_matching_methods (int method_counter, struct type *t,
284
                      enum language language, struct symbol **sym_arr)
285
{
286
  int field_counter;
287
  int i1 = 0;
288
 
289
  for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
290
       field_counter >= 0;
291
       --field_counter)
292
    {
293
      struct fn_field *f;
294
      char *phys_name;
295
 
296
      f = TYPE_FN_FIELDLIST1 (t, method_counter);
297
 
298
      if (TYPE_FN_FIELD_STUB (f, field_counter))
299
        {
300
          char *tmp_name;
301
 
302
          tmp_name = gdb_mangle_name (t,
303
                                      method_counter,
304
                                      field_counter);
305
          phys_name = alloca (strlen (tmp_name) + 1);
306
          strcpy (phys_name, tmp_name);
307
          xfree (tmp_name);
308
        }
309
      else
310
        phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
311
 
312
      sym_arr[i1] = lookup_symbol_in_language (phys_name,
313
                                   NULL, VAR_DOMAIN,
314
                                   language,
315
                                   (int *) NULL);
316
      if (sym_arr[i1])
317
        i1++;
318
      else
319
        {
320
          /* This error message gets printed, but the method
321
             still seems to be found
322
             fputs_filtered("(Cannot find method ", gdb_stdout);
323
             fprintf_symbol_filtered (gdb_stdout, phys_name,
324
             language_cplus,
325
             DMGL_PARAMS | DMGL_ANSI);
326
             fputs_filtered(" - possibly inlined.)\n", gdb_stdout);
327
          */
328
        }
329
    }
330
 
331
  return i1;
332
}
333
 
334
/* Add the symbols associated to constructors of the class whose type
335
   is CLASS_TYPE and which are indexed by by METHOD_COUNTER to the
336
   array SYM_ARR.  Return the number of methods added.  */
337
 
338
static int
339
add_constructors (int method_counter, struct type *t,
340
                  enum language language, struct symbol **sym_arr)
341
{
342
  int field_counter;
343
  int i1 = 0;
344
 
345
  /* For GCC 3.x and stabs, constructors and destructors
346
     have names like __base_ctor and __complete_dtor.
347
     Check the physname for now if we're looking for a
348
     constructor.  */
349
  for (field_counter
350
         = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
351
       field_counter >= 0;
352
       --field_counter)
353
    {
354
      struct fn_field *f;
355
      char *phys_name;
356
 
357
      f = TYPE_FN_FIELDLIST1 (t, method_counter);
358
 
359
      /* GCC 3.x will never produce stabs stub methods, so
360
         we don't need to handle this case.  */
361
      if (TYPE_FN_FIELD_STUB (f, field_counter))
362
        continue;
363
      phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
364
      if (! is_constructor_name (phys_name))
365
        continue;
366
 
367
      /* If this method is actually defined, include it in the
368
         list.  */
369
      sym_arr[i1] = lookup_symbol_in_language (phys_name,
370
                                   NULL, VAR_DOMAIN,
371
                                   language,
372
                                   (int *) NULL);
373
      if (sym_arr[i1])
374
        i1++;
375
    }
376
 
377
  return i1;
378
}
379
 
380
/* Helper function for decode_line_1.
381
   Build a canonical line spec in CANONICAL if it is non-NULL and if
382
   the SAL has a symtab.
383
   If SYMNAME is non-NULL the canonical line spec is `filename:symname'.
384
   If SYMNAME is NULL the line number from SAL is used and the canonical
385
   line spec is `filename:linenum'.  */
386
 
387
static void
388
build_canonical_line_spec (struct symtab_and_line *sal, char *symname,
389
                           char ***canonical)
390
{
391
  char **canonical_arr;
392
  char *canonical_name;
393
  char *filename;
394
  struct symtab *s = sal->symtab;
395
 
396
  if (s == (struct symtab *) NULL
397
      || s->filename == (char *) NULL
398
      || canonical == (char ***) NULL)
399
    return;
400
 
401
  canonical_arr = (char **) xmalloc (sizeof (char *));
402
  *canonical = canonical_arr;
403
 
404
  filename = s->filename;
405
  if (symname != NULL)
406
    {
407
      canonical_name = xmalloc (strlen (filename) + strlen (symname) + 2);
408
      sprintf (canonical_name, "%s:%s", filename, symname);
409
    }
410
  else
411
    {
412
      canonical_name = xmalloc (strlen (filename) + 30);
413
      sprintf (canonical_name, "%s:%d", filename, sal->line);
414
    }
415
  canonical_arr[0] = canonical_name;
416
}
417
 
418
 
419
 
420
/* Find an instance of the character C in the string S that is outside
421
   of all parenthesis pairs, single-quoted strings, and double-quoted
422
   strings.  Also, ignore the char within a template name, like a ','
423
   within foo<int, int>.  */
424
 
425
static char *
426
find_toplevel_char (char *s, char c)
427
{
428
  int quoted = 0;                /* zero if we're not in quotes;
429
                                   '"' if we're in a double-quoted string;
430
                                   '\'' if we're in a single-quoted string.  */
431
  int depth = 0;         /* Number of unclosed parens we've seen.  */
432
  char *scan;
433
 
434
  for (scan = s; *scan; scan++)
435
    {
436
      if (quoted)
437
        {
438
          if (*scan == quoted)
439
            quoted = 0;
440
          else if (*scan == '\\' && *(scan + 1))
441
            scan++;
442
        }
443
      else if (*scan == c && ! quoted && depth == 0)
444
        return scan;
445
      else if (*scan == '"' || *scan == '\'')
446
        quoted = *scan;
447
      else if (*scan == '(' || *scan == '<')
448
        depth++;
449
      else if ((*scan == ')' || *scan == '>') && depth > 0)
450
        depth--;
451
    }
452
 
453
  return 0;
454
}
455
 
456
/* Determines if the gives string corresponds to an Objective-C method
457
   representation, such as -[Foo bar:] or +[Foo bar]. Objective-C symbols
458
   are allowed to have spaces and parentheses in them.  */
459
 
460
static int
461
is_objc_method_format (const char *s)
462
{
463
  if (s == NULL || *s == '\0')
464
    return 0;
465
  /* Handle arguments with the format FILENAME:SYMBOL.  */
466
  if ((s[0] == ':') && (strchr ("+-", s[1]) != NULL)
467
      && (s[2] == '[') && strchr(s, ']'))
468
    return 1;
469
  /* Handle arguments that are just SYMBOL.  */
470
  else if ((strchr ("+-", s[0]) != NULL) && (s[1] == '[') && strchr(s, ']'))
471
    return 1;
472
  return 0;
473
}
474
 
475
/* Given a list of NELTS symbols in SYM_ARR, return a list of lines to
476
   operate on (ask user if necessary).
477
   If CANONICAL is non-NULL return a corresponding array of mangled names
478
   as canonical line specs there.  */
479
 
480
static struct symtabs_and_lines
481
decode_line_2 (struct symbol *sym_arr[], int nelts, int funfirstline,
482
               char ***canonical)
483
{
484
  struct symtabs_and_lines values, return_values;
485
  char *args, *arg1;
486
  int i;
487
  char *prompt;
488
  char *symname;
489
  struct cleanup *old_chain;
490
  char **canonical_arr = (char **) NULL;
491
  const char *select_mode = multiple_symbols_select_mode ();
492
 
493
  if (select_mode == multiple_symbols_cancel)
494
    error (_("\
495
canceled because the command is ambiguous\n\
496
See set/show multiple-symbol."));
497
 
498
  values.sals = (struct symtab_and_line *)
499
    alloca (nelts * sizeof (struct symtab_and_line));
500
  return_values.sals = (struct symtab_and_line *)
501
    xmalloc (nelts * sizeof (struct symtab_and_line));
502
  old_chain = make_cleanup (xfree, return_values.sals);
503
 
504
  if (canonical)
505
    {
506
      canonical_arr = (char **) xmalloc (nelts * sizeof (char *));
507
      make_cleanup (xfree, canonical_arr);
508
      memset (canonical_arr, 0, nelts * sizeof (char *));
509
      *canonical = canonical_arr;
510
    }
511
 
512
  i = 0;
513
  while (i < nelts)
514
    {
515
      init_sal (&return_values.sals[i]);        /* Initialize to zeroes.  */
516
      init_sal (&values.sals[i]);
517
      if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
518
        values.sals[i] = find_function_start_sal (sym_arr[i], funfirstline);
519
      i++;
520
    }
521
 
522
  /* If select_mode is "all", then do not print the multiple-choice
523
     menu and act as if the user had chosen choice "1" (all).  */
524
  if (select_mode == multiple_symbols_all
525
      || ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
526
    args = "1";
527
  else
528
    {
529
      i = 0;
530
      printf_unfiltered (_("[0] cancel\n[1] all\n"));
531
      while (i < nelts)
532
        {
533
          if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
534
            {
535
              if (values.sals[i].symtab)
536
                printf_unfiltered ("[%d] %s at %s:%d\n",
537
                                   (i + 2),
538
                                   SYMBOL_PRINT_NAME (sym_arr[i]),
539
                                   values.sals[i].symtab->filename,
540
                                   values.sals[i].line);
541
              else
542
                printf_unfiltered (_("[%d] %s at ?FILE:%d [No symtab? Probably broken debug info...]\n"),
543
                                   (i + 2),
544
                                   SYMBOL_PRINT_NAME (sym_arr[i]),
545
                                   values.sals[i].line);
546
 
547
            }
548
          else
549
            printf_unfiltered (_("?HERE\n"));
550
          i++;
551
        }
552
 
553
      prompt = getenv ("PS2");
554
      if (prompt == NULL)
555
        {
556
          prompt = "> ";
557
        }
558
      args = command_line_input (prompt, 0, "overload-choice");
559
    }
560
 
561
  if (args == 0 || *args == 0)
562
    error_no_arg (_("one or more choice numbers"));
563
 
564
  i = 0;
565
  while (*args)
566
    {
567
      int num;
568
 
569
      arg1 = args;
570
      while (*arg1 >= '0' && *arg1 <= '9')
571
        arg1++;
572
      if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
573
        error (_("Arguments must be choice numbers."));
574
 
575
      num = atoi (args);
576
 
577
      if (num == 0)
578
        error (_("canceled"));
579
      else if (num == 1)
580
        {
581
          if (canonical_arr)
582
            {
583
              for (i = 0; i < nelts; i++)
584
                {
585
                  if (canonical_arr[i] == NULL)
586
                    {
587
                      symname = SYMBOL_LINKAGE_NAME (sym_arr[i]);
588
                      canonical_arr[i] = xstrdup (symname);
589
                    }
590
                }
591
            }
592
          memcpy (return_values.sals, values.sals,
593
                  (nelts * sizeof (struct symtab_and_line)));
594
          return_values.nelts = nelts;
595
          discard_cleanups (old_chain);
596
          return return_values;
597
        }
598
 
599
      if (num >= nelts + 2)
600
        {
601
          printf_unfiltered (_("No choice number %d.\n"), num);
602
        }
603
      else
604
        {
605
          num -= 2;
606
          if (values.sals[num].pc)
607
            {
608
              if (canonical_arr)
609
                {
610
                  symname = SYMBOL_LINKAGE_NAME (sym_arr[num]);
611
                  make_cleanup (xfree, symname);
612
                  canonical_arr[i] = xstrdup (symname);
613
                }
614
              return_values.sals[i++] = values.sals[num];
615
              values.sals[num].pc = 0;
616
            }
617
          else
618
            {
619
              printf_unfiltered (_("duplicate request for %d ignored.\n"), num);
620
            }
621
        }
622
 
623
      args = arg1;
624
      while (*args == ' ' || *args == '\t')
625
        args++;
626
    }
627
  return_values.nelts = i;
628
  discard_cleanups (old_chain);
629
  return return_values;
630
}
631
 
632
/* A helper function for decode_line_1 and friends which skips P
633
   past any method overload information at the beginning of P, e.g.,
634
   "(const struct foo *)".
635
 
636
   This function assumes that P has already been validated to contain
637
   overload information, and it will assert if *P != '('.  */
638
static char *
639
find_method_overload_end (char *p)
640
{
641
  int depth = 0;
642
 
643
  gdb_assert (*p == '(');
644
 
645
  while (*p)
646
    {
647
      if (*p == '(')
648
        ++depth;
649
      else if (*p == ')')
650
        {
651
          if (--depth == 0)
652
            {
653
              ++p;
654
              break;
655
            }
656
        }
657
      ++p;
658
    }
659
 
660
  return p;
661
}
662
 
663
/* The parser of linespec itself. */
664
 
665
/* Parse a string that specifies a line number.
666
   Pass the address of a char * variable; that variable will be
667
   advanced over the characters actually parsed.
668
 
669
   The string can be:
670
 
671
   LINENUM -- that line number in current file.  PC returned is 0.
672
   FILE:LINENUM -- that line in that file.  PC returned is 0.
673
   FUNCTION -- line number of openbrace of that function.
674
   PC returned is the start of the function.
675
   VARIABLE -- line number of definition of that variable.
676
   PC returned is 0.
677
   FILE:FUNCTION -- likewise, but prefer functions in that file.
678
   *EXPR -- line in which address EXPR appears.
679
 
680
   This may all be followed by an "if EXPR", which we ignore.
681
 
682
   FUNCTION may be an undebuggable function found in minimal symbol table.
683
 
684
   If the argument FUNFIRSTLINE is nonzero, we want the first line
685
   of real code inside a function when a function is specified, and it is
686
   not OK to specify a variable or type to get its line number.
687
 
688
   DEFAULT_SYMTAB specifies the file to use if none is specified.
689
   It defaults to current_source_symtab.
690
   DEFAULT_LINE specifies the line number to use for relative
691
   line numbers (that start with signs).  Defaults to current_source_line.
692
   If CANONICAL is non-NULL, store an array of strings containing the canonical
693
   line specs there if necessary. Currently overloaded member functions and
694
   line numbers or static functions without a filename yield a canonical
695
   line spec. The array and the line spec strings are allocated on the heap,
696
   it is the callers responsibility to free them.
697
 
698
   Note that it is possible to return zero for the symtab
699
   if no file is validly specified.  Callers must check that.
700
   Also, the line number returned may be invalid.
701
 
702
   If NOT_FOUND_PTR is not null, store a boolean true/false value at the location, based
703
   on whether or not failure occurs due to an unknown function or file.  In the case
704
   where failure does occur due to an unknown function or file, do not issue an error
705
   message.  */
706
 
707
/* We allow single quotes in various places.  This is a hideous
708
   kludge, which exists because the completer can't yet deal with the
709
   lack of single quotes.  FIXME: write a linespec_completer which we
710
   can use as appropriate instead of make_symbol_completion_list.  */
711
 
712
struct symtabs_and_lines
713
decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
714
               int default_line, char ***canonical, int *not_found_ptr)
715
{
716
  char *p;
717
  char *q;
718
  /* If a file name is specified, this is its symtab.  */
719
  struct symtab *file_symtab = NULL;
720
 
721
  char *copy;
722
  /* This says whether or not something in *ARGPTR is quoted with
723
     completer_quotes (i.e. with single quotes).  */
724
  int is_quoted;
725
  /* Is *ARGPTR is enclosed in double quotes?  */
726
  int is_quote_enclosed;
727
  int is_objc_method = 0;
728
  char *saved_arg = *argptr;
729
  /* If IS_QUOTED, the end of the quoted bit.  */
730
  char *end_quote = NULL;
731
  /* The "first half" of the linespec.  */
732
  char *first_half;
733
 
734
  if (not_found_ptr)
735
    *not_found_ptr = 0;
736
 
737
  /* Defaults have defaults.  */
738
 
739
  initialize_defaults (&default_symtab, &default_line);
740
 
741
  /* See if arg is *PC.  */
742
 
743
  if (**argptr == '*')
744
    return decode_indirect (argptr);
745
 
746
  is_quoted = (*argptr
747
               && strchr (get_gdb_completer_quote_characters (),
748
                          **argptr) != NULL);
749
  if (is_quoted)
750
    end_quote = skip_quoted (*argptr);
751
 
752
  /* Check to see if it's a multipart linespec (with colons or
753
     periods).  */
754
 
755
  /* Locate the end of the first half of the linespec.
756
     After the call, for instance, if the argptr string is "foo.c:123"
757
     p will point at "123".  If there is only one part, like "foo", p
758
     will point to "". If this is a C++ name, like "A::B::foo", p will
759
     point to "::B::foo". Argptr is not changed by this call.  */
760
 
761
  first_half = p = locate_first_half (argptr, &is_quote_enclosed);
762
 
763
  /* Check if this is an Objective-C method (anything that starts with
764
     a '+' or '-' and a '[').  */
765
  if (is_objc_method_format (p))
766
    is_objc_method = 1;
767
 
768
  /* Check if the symbol could be an Objective-C selector.  */
769
 
770
  {
771
    struct symtabs_and_lines values;
772
 
773
    values = decode_objc (argptr, funfirstline, NULL,
774
                          canonical, saved_arg);
775
    if (values.sals != NULL)
776
      return values;
777
  }
778
 
779
  /* Does it look like there actually were two parts?  */
780
 
781
  if (p[0] == ':' || p[0] == '.')
782
    {
783
      /* Is it a C++ or Java compound data structure?
784
         The check on p[1] == ':' is capturing the case of "::",
785
         since p[0]==':' was checked above.
786
         Note that the call to decode_compound does everything
787
         for us, including the lookup on the symbol table, so we
788
         can return now. */
789
 
790
      if (p[0] == '.' || p[1] == ':')
791
        {
792
          struct symtabs_and_lines values;
793
 
794
          if (is_quote_enclosed)
795
            ++saved_arg;
796
          values = decode_compound (argptr, funfirstline, canonical,
797
                                    saved_arg, p, not_found_ptr);
798
          if (is_quoted && **argptr == '\'')
799
            *argptr = *argptr + 1;
800
          return values;
801
        }
802
 
803
      /* No, the first part is a filename; set file_symtab to be that file's
804
         symtab.  Also, move argptr past the filename.  */
805
 
806
      file_symtab = symtab_from_filename (argptr, p, is_quote_enclosed,
807
                                          not_found_ptr);
808
 
809
      /* Check for single quotes on the non-filename part.  */
810
      if (!is_quoted)
811
        {
812
          is_quoted = (**argptr
813
                       && strchr (get_gdb_completer_quote_characters (),
814
                                  **argptr) != NULL);
815
          if (is_quoted)
816
            end_quote = skip_quoted (*argptr);
817
        }
818
    }
819
 
820
  /* file_symtab is specified file's symtab, or 0 if no file specified.
821
     arg no longer contains the file name.  */
822
 
823
  /* If the filename was quoted, we must re-check the quotation.  */
824
 
825
  if (end_quote == first_half && *end_quote!= '\0')
826
    {
827
      is_quoted = (**argptr
828
                   && strchr (get_gdb_completer_quote_characters (),
829
                              **argptr) != NULL);
830
      if (is_quoted)
831
        end_quote = skip_quoted (*argptr);
832
    }
833
 
834
  /* Check whether arg is all digits (and sign).  */
835
 
836
  q = *argptr;
837
  if (*q == '-' || *q == '+')
838
    q++;
839
  while (*q >= '0' && *q <= '9')
840
    q++;
841
 
842
  if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ','))
843
    /* We found a token consisting of all digits -- at least one digit.  */
844
    return decode_all_digits (argptr, default_symtab, default_line,
845
                              canonical, file_symtab, q);
846
 
847
  /* Arg token is not digits => try it as a variable name
848
     Find the next token (everything up to end or next whitespace).  */
849
 
850
  if (**argptr == '$')          /* May be a convenience variable.  */
851
    /* One or two $ chars possible.  */
852
    p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));
853
  else if (is_quoted)
854
    {
855
      p = end_quote;
856
      if (p[-1] != '\'')
857
        error (_("Unmatched single quote."));
858
    }
859
  else if (is_objc_method)
860
    {
861
      /* allow word separators in method names for Obj-C */
862
      p = skip_quoted_chars (*argptr, NULL, "");
863
    }
864
  else
865
    {
866
      p = skip_quoted (*argptr);
867
    }
868
 
869
  /* Keep any template parameters */
870
  if (*p == '<')
871
    p = find_template_name_end (p);
872
 
873
  /* Keep method overload information.  */
874
  if (*p == '(')
875
    p = find_method_overload_end (p);
876
 
877
  /* Make sure we keep important kewords like "const" */
878
  if (strncmp (p, " const", 6) == 0)
879
    p += 6;
880
 
881
  copy = (char *) alloca (p - *argptr + 1);
882
  memcpy (copy, *argptr, p - *argptr);
883
  copy[p - *argptr] = '\0';
884
  if (p != *argptr
885
      && copy[0]
886
      && copy[0] == copy[p - *argptr - 1]
887
      && strchr (get_gdb_completer_quote_characters (), copy[0]) != NULL)
888
    {
889
      copy[p - *argptr - 1] = '\0';
890
      copy++;
891
    }
892
  else if (is_quoted)
893
    copy[p - *argptr - 1] = '\0';
894
  while (*p == ' ' || *p == '\t')
895
    p++;
896
  *argptr = p;
897
 
898
  /* If it starts with $: may be a legitimate variable or routine name
899
     (e.g. HP-UX millicode routines such as $$dyncall), or it may
900
     be history value, or it may be a convenience variable.  */
901
 
902
  if (*copy == '$')
903
    return decode_dollar (copy, funfirstline, default_symtab,
904
                          canonical, file_symtab);
905
 
906
  /* Look up that token as a variable.
907
     If file specified, use that file's per-file block to start with.  */
908
 
909
  return decode_variable (copy, funfirstline, canonical,
910
                          file_symtab, not_found_ptr);
911
}
912
 
913
 
914
 
915
/* Now, more helper functions for decode_line_1.  Some conventions
916
   that these functions follow:
917
 
918
   Decode_line_1 typically passes along some of its arguments or local
919
   variables to the subfunctions.  It passes the variables by
920
   reference if they are modified by the subfunction, and by value
921
   otherwise.
922
 
923
   Some of the functions have side effects that don't arise from
924
   variables that are passed by reference.  In particular, if a
925
   function is passed ARGPTR as an argument, it modifies what ARGPTR
926
   points to; typically, it advances *ARGPTR past whatever substring
927
   it has just looked at.  (If it doesn't modify *ARGPTR, then the
928
   function gets passed *ARGPTR instead, which is then called ARG.)
929
   Also, functions that return a struct symtabs_and_lines may modify
930
   CANONICAL, as in the description of decode_line_1.
931
 
932
   If a function returns a struct symtabs_and_lines, then that struct
933
   will immediately make its way up the call chain to be returned by
934
   decode_line_1.  In particular, all of the functions decode_XXX
935
   calculate the appropriate struct symtabs_and_lines, under the
936
   assumption that their argument is of the form XXX.  */
937
 
938
/* First, some functions to initialize stuff at the beggining of the
939
   function.  */
940
 
941
static void
942
initialize_defaults (struct symtab **default_symtab, int *default_line)
943
{
944
  if (*default_symtab == 0)
945
    {
946
      /* Use whatever we have for the default source line.  We don't use
947
         get_current_or_default_symtab_and_line as it can recurse and call
948
         us back! */
949
      struct symtab_and_line cursal =
950
        get_current_source_symtab_and_line ();
951
 
952
      *default_symtab = cursal.symtab;
953
      *default_line = cursal.line;
954
    }
955
}
956
 
957
 
958
 
959
/* Decode arg of the form *PC.  */
960
 
961
static struct symtabs_and_lines
962
decode_indirect (char **argptr)
963
{
964
  struct symtabs_and_lines values;
965
  CORE_ADDR pc;
966
 
967
  (*argptr)++;
968
  pc = parse_and_eval_address_1 (argptr);
969
 
970
  values.sals = (struct symtab_and_line *)
971
    xmalloc (sizeof (struct symtab_and_line));
972
 
973
  values.nelts = 1;
974
  values.sals[0] = find_pc_line (pc, 0);
975
  values.sals[0].pc = pc;
976
  values.sals[0].section = find_pc_overlay (pc);
977
  values.sals[0].explicit_pc = 1;
978
 
979
  return values;
980
}
981
 
982
 
983
 
984
/* Locate the first half of the linespec, ending in a colon, period,
985
   or whitespace.  (More or less.)  Also, check to see if *ARGPTR is
986
   enclosed in double quotes; if so, set is_quote_enclosed, advance
987
   ARGPTR past that and zero out the trailing double quote.
988
   If ARGPTR is just a simple name like "main", p will point to ""
989
   at the end.  */
990
 
991
static char *
992
locate_first_half (char **argptr, int *is_quote_enclosed)
993
{
994
  char *ii;
995
  char *p, *p1;
996
  int has_comma;
997
 
998
  /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
999
     and we must isolate the first half.  Outer layers will call again later
1000
     for the second half.
1001
 
1002
     Don't count commas that appear in argument lists of overloaded
1003
     functions, or in quoted strings.  It's stupid to go to this much
1004
     trouble when the rest of the function is such an obvious roach hotel.  */
1005
  ii = find_toplevel_char (*argptr, ',');
1006
  has_comma = (ii != 0);
1007
 
1008
  /* Temporarily zap out second half to not confuse the code below.
1009
     This is undone below. Do not change ii!!  */
1010
  if (has_comma)
1011
    {
1012
      *ii = '\0';
1013
    }
1014
 
1015
  /* Maybe arg is FILE : LINENUM or FILE : FUNCTION.  May also be
1016
     CLASS::MEMBER, or NAMESPACE::NAME.  Look for ':', but ignore
1017
     inside of <>.  */
1018
 
1019
  p = *argptr;
1020
  if (p[0] == '"')
1021
    {
1022
      *is_quote_enclosed = 1;
1023
      (*argptr)++;
1024
      p++;
1025
    }
1026
  else
1027
    {
1028
      *is_quote_enclosed = 0;
1029
      if (strchr (get_gdb_completer_quote_characters (), *p))
1030
        {
1031
          ++(*argptr);
1032
          ++p;
1033
        }
1034
    }
1035
  for (; *p; p++)
1036
    {
1037
      if (p[0] == '<')
1038
        {
1039
          char *temp_end = find_template_name_end (p);
1040
 
1041
          if (!temp_end)
1042
            error (_("malformed template specification in command"));
1043
          p = temp_end;
1044
        }
1045
      /* Check for a colon and a plus or minus and a [ (which
1046
         indicates an Objective-C method) */
1047
      if (is_objc_method_format (p))
1048
        {
1049
          break;
1050
        }
1051
      /* Check for the end of the first half of the linespec.  End of
1052
         line, a tab, a double colon or the last single colon, or a
1053
         space.  But if enclosed in double quotes we do not break on
1054
         enclosed spaces.  */
1055
      if (!*p
1056
          || p[0] == '\t'
1057
          || ((p[0] == ':')
1058
              && ((p[1] == ':') || (strchr (p + 1, ':') == NULL)))
1059
          || ((p[0] == ' ') && !*is_quote_enclosed))
1060
        break;
1061
      if (p[0] == '.' && strchr (p, ':') == NULL)
1062
        {
1063
          /* Java qualified method.  Find the *last* '.', since the
1064
             others are package qualifiers.  Stop at any open parenthesis
1065
             which might provide overload information.  */
1066
          for (p1 = p; *p1 && *p1 != '('; p1++)
1067
            {
1068
              if (*p1 == '.')
1069
                p = p1;
1070
            }
1071
          break;
1072
        }
1073
    }
1074
  while (p[0] == ' ' || p[0] == '\t')
1075
    p++;
1076
 
1077
  /* If the closing double quote was left at the end, remove it.  */
1078
  if (*is_quote_enclosed)
1079
    {
1080
      char *closing_quote = strchr (p - 1, '"');
1081
 
1082
      if (closing_quote && closing_quote[1] == '\0')
1083
        *closing_quote = '\0';
1084
    }
1085
 
1086
  /* Now that we've safely parsed the first half, put back ',' so
1087
     outer layers can see it.  */
1088
  if (has_comma)
1089
    *ii = ',';
1090
 
1091
  return p;
1092
}
1093
 
1094
 
1095
 
1096
/* Here's where we recognise an Objective-C Selector.  An Objective C
1097
   selector may be implemented by more than one class, therefore it
1098
   may represent more than one method/function.  This gives us a
1099
   situation somewhat analogous to C++ overloading.  If there's more
1100
   than one method that could represent the selector, then use some of
1101
   the existing C++ code to let the user choose one.  */
1102
 
1103
struct symtabs_and_lines
1104
decode_objc (char **argptr, int funfirstline, struct symtab *file_symtab,
1105
             char ***canonical, char *saved_arg)
1106
{
1107
  struct symtabs_and_lines values;
1108
  struct symbol **sym_arr = NULL;
1109
  struct symbol *sym = NULL;
1110
  char *copy = NULL;
1111
  struct block *block = NULL;
1112
  unsigned i1 = 0;
1113
  unsigned i2 = 0;
1114
 
1115
  values.sals = NULL;
1116
  values.nelts = 0;
1117
 
1118
  if (file_symtab != NULL)
1119
    block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_symtab), STATIC_BLOCK);
1120
  else
1121
    {
1122
      enum language save_language;
1123
 
1124
      /* get_selected_block can change the current language when there is
1125
         no selected frame yet.  */
1126
      save_language = current_language->la_language;
1127
      block = get_selected_block (0);
1128
      set_language (save_language);
1129
    }
1130
 
1131
  copy = find_imps (file_symtab, block, *argptr, NULL, &i1, &i2);
1132
 
1133
  if (i1 > 0)
1134
    {
1135
      sym_arr = (struct symbol **) alloca ((i1 + 1) * sizeof (struct symbol *));
1136
      sym_arr[i1] = NULL;
1137
 
1138
      copy = find_imps (file_symtab, block, *argptr, sym_arr, &i1, &i2);
1139
      *argptr = copy;
1140
    }
1141
 
1142
  /* i1 now represents the TOTAL number of matches found.
1143
     i2 represents how many HIGH-LEVEL (struct symbol) matches,
1144
     which will come first in the sym_arr array.  Any low-level
1145
     (minimal_symbol) matches will follow those.  */
1146
 
1147
  if (i1 == 1)
1148
    {
1149
      if (i2 > 0)
1150
        {
1151
          /* Already a struct symbol.  */
1152
          sym = sym_arr[0];
1153
        }
1154
      else
1155
        {
1156
          sym = find_pc_function (SYMBOL_VALUE_ADDRESS (sym_arr[0]));
1157
          if ((sym != NULL) && strcmp (SYMBOL_LINKAGE_NAME (sym_arr[0]), SYMBOL_LINKAGE_NAME (sym)) != 0)
1158
            {
1159
              warning (_("debugging symbol \"%s\" does not match selector; ignoring"), SYMBOL_LINKAGE_NAME (sym));
1160
              sym = NULL;
1161
            }
1162
        }
1163
 
1164
      values.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
1165
      values.nelts = 1;
1166
 
1167
      if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1168
        {
1169
          /* Canonicalize this, so it remains resolved for dylib loads.  */
1170
          values.sals[0] = find_function_start_sal (sym, funfirstline);
1171
          build_canonical_line_spec (values.sals, SYMBOL_NATURAL_NAME (sym), canonical);
1172
        }
1173
      else
1174
        {
1175
          /* The only match was a non-debuggable symbol, which might point
1176
             to a function descriptor; resolve it to the actual code address
1177
             instead.  */
1178
          struct minimal_symbol *msymbol = (struct minimal_symbol *)sym_arr[0];
1179
          struct objfile *objfile = msymbol_objfile (msymbol);
1180
          struct gdbarch *gdbarch = get_objfile_arch (objfile);
1181
          CORE_ADDR pc = SYMBOL_VALUE_ADDRESS (msymbol);
1182
 
1183
          pc = gdbarch_convert_from_func_ptr_addr (gdbarch, pc,
1184
                                                   &current_target);
1185
 
1186
          init_sal (&values.sals[0]);
1187
          values.sals[0].pc = pc;
1188
        }
1189
      return values;
1190
    }
1191
 
1192
  if (i1 > 1)
1193
    {
1194
      /* More than one match. The user must choose one or more.  */
1195
      return decode_line_2 (sym_arr, i2, funfirstline, canonical);
1196
    }
1197
 
1198
  return values;
1199
}
1200
 
1201
/* This handles C++ and Java compound data structures.  P should point
1202
   at the first component separator, i.e. double-colon or period.  As
1203
   an example, on entrance to this function we could have ARGPTR
1204
   pointing to "AAA::inA::fun" and P pointing to "::inA::fun".  */
1205
 
1206
static struct symtabs_and_lines
1207
decode_compound (char **argptr, int funfirstline, char ***canonical,
1208
                 char *saved_arg, char *p, int *not_found_ptr)
1209
{
1210
  struct symtabs_and_lines values;
1211
  char *p2;
1212
  char *saved_arg2 = *argptr;
1213
  char *temp_end;
1214
  struct symbol *sym;
1215
  char *copy;
1216
  struct symbol *sym_class;
1217
  struct type *t;
1218
  char *saved_java_argptr = NULL;
1219
 
1220
  /* First check for "global" namespace specification, of the form
1221
     "::foo".  If found, skip over the colons and jump to normal
1222
     symbol processing.  I.e. the whole line specification starts with
1223
     "::" (note the condition that *argptr == p). */
1224
  if (p[0] == ':'
1225
      && ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
1226
    saved_arg2 += 2;
1227
 
1228
  /* Given our example "AAA::inA::fun", we have two cases to consider:
1229
 
1230
     1) AAA::inA is the name of a class.  In that case, presumably it
1231
        has a method called "fun"; we then look up that method using
1232
        find_method.
1233
 
1234
     2) AAA::inA isn't the name of a class.  In that case, either the
1235
        user made a typo or AAA::inA is the name of a namespace.
1236
        Either way, we just look up AAA::inA::fun with lookup_symbol.
1237
 
1238
     Thus, our first task is to find everything before the last set of
1239
     double-colons and figure out if it's the name of a class.  So we
1240
     first loop through all of the double-colons.  */
1241
 
1242
  p2 = p;               /* Save for restart.  */
1243
 
1244
  /* This is very messy. Following the example above we have now the
1245
     following pointers:
1246
     p -> "::inA::fun"
1247
     argptr -> "AAA::inA::fun
1248
     saved_arg -> "AAA::inA::fun
1249
     saved_arg2 -> "AAA::inA::fun
1250
     p2 -> "::inA::fun". */
1251
 
1252
  /* In the loop below, with these strings, we'll make 2 passes, each
1253
     is marked in comments.*/
1254
 
1255
  while (1)
1256
    {
1257
      /* Move pointer up to next possible class/namespace token.  */
1258
 
1259
      p = p2 + 1;       /* Restart with old value +1.  */
1260
 
1261
      /* PASS1: at this point p2->"::inA::fun", so p->":inA::fun",
1262
         i.e. if there is a double-colon, p will now point to the
1263
         second colon. */
1264
      /* PASS2: p2->"::fun", p->":fun" */
1265
 
1266
      /* Move pointer ahead to next double-colon.  */
1267
      while (*p && (p[0] != ' ') && (p[0] != '\t') && (p[0] != '\'')
1268
             && (*p != '('))
1269
        {
1270
          if (current_language->la_language == language_cplus)
1271
            p += cp_validate_operator (p);
1272
 
1273
          if (p[0] == '<')
1274
            {
1275
              temp_end = find_template_name_end (p);
1276
              if (!temp_end)
1277
                error (_("malformed template specification in command"));
1278
              p = temp_end;
1279
            }
1280
          /* Note that, since, at the start of this loop, p would be
1281
             pointing to the second colon in a double-colon, we only
1282
             satisfy the condition below if there is another
1283
             double-colon to the right (after). I.e. there is another
1284
             component that can be a class or a namespace. I.e, if at
1285
             the beginning of this loop (PASS1), we had
1286
             p->":inA::fun", we'll trigger this when p has been
1287
             advanced to point to "::fun".  */
1288
          /* PASS2: we will not trigger this. */
1289
          else if ((p[0] == ':') && (p[1] == ':'))
1290
            break;      /* Found double-colon.  */
1291
          else
1292
            /* PASS2: We'll keep getting here, until p->"", at which point
1293
               we exit this loop.  */
1294
            p++;
1295
        }
1296
 
1297
      if (*p != ':')
1298
        break;          /* Out of the while (1).  This would happen
1299
                           for instance if we have looked up
1300
                           unsuccessfully all the components of the
1301
                           string, and p->""(PASS2)  */
1302
 
1303
      /* We get here if p points to ' ', '\t', '\'', "::" or ""(i.e
1304
         string ended). */
1305
      /* Save restart for next time around.  */
1306
      p2 = p;
1307
      /* Restore argptr as it was on entry to this function.  */
1308
      *argptr = saved_arg2;
1309
      /* PASS1: at this point p->"::fun" argptr->"AAA::inA::fun",
1310
         p2->"::fun".  */
1311
 
1312
      /* All ready for next pass through the loop.  */
1313
    }                   /* while (1) */
1314
 
1315
 
1316
  /* Start of lookup in the symbol tables. */
1317
 
1318
  /* Lookup in the symbol table the substring between argptr and
1319
     p. Note, this call changes the value of argptr.  */
1320
  /* Before the call, argptr->"AAA::inA::fun",
1321
     p->"", p2->"::fun".  After the call: argptr->"fun", p, p2
1322
     unchanged.  */
1323
  sym_class = lookup_prefix_sym (argptr, p2);
1324
 
1325
  /* If sym_class has been found, and if "AAA::inA" is a class, then
1326
     we're in case 1 above.  So we look up "fun" as a method of that
1327
     class.  */
1328
  if (sym_class &&
1329
      (t = check_typedef (SYMBOL_TYPE (sym_class)),
1330
       (TYPE_CODE (t) == TYPE_CODE_STRUCT
1331
        || TYPE_CODE (t) == TYPE_CODE_UNION)))
1332
    {
1333
      /* Arg token is not digits => try it as a function name.
1334
         Find the next token (everything up to end or next
1335
         blank).  */
1336
      if (**argptr
1337
          && strchr (get_gdb_completer_quote_characters (),
1338
                     **argptr) != NULL)
1339
        {
1340
          p = skip_quoted (*argptr);
1341
          *argptr = *argptr + 1;
1342
        }
1343
      else
1344
        {
1345
          /* At this point argptr->"fun".  */
1346
          char *a;
1347
 
1348
          p = *argptr;
1349
          while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':'
1350
                 && *p != '(')
1351
            p++;
1352
          /* At this point p->"".  String ended.  */
1353
          /* Nope, C++ operators could have spaces in them
1354
             ("foo::operator <" or "foo::operator delete []").
1355
             I apologize, this is a bit hacky...  */
1356
          if (current_language->la_language == language_cplus
1357
              && *p == ' ' && p - 8 - *argptr + 1 > 0)
1358
            {
1359
              /* The above loop has already swallowed "operator".  */
1360
              p += cp_validate_operator (p - 8) - 8;
1361
            }
1362
 
1363
          /* Keep any template parameters */
1364
          if (*p == '<')
1365
            p = find_template_name_end (p);
1366
 
1367
          /* Keep method overload information.  */
1368
          a = strchr (p, '(');
1369
          if (a != NULL)
1370
            p = find_method_overload_end (a);
1371
 
1372
          /* Make sure we keep important kewords like "const" */
1373
          if (strncmp (p, " const", 6) == 0)
1374
            p += 6;
1375
 
1376
          /* Java may append typenames,  so assume that if there is
1377
             anything else left in *argptr, it must be a typename.  */
1378
          if (*p && current_language->la_language == language_java)
1379
            {
1380
              struct type *type;
1381
 
1382
              p2 = p;
1383
              while (*p2)
1384
                ++p2;
1385
              copy = (char *) alloca (p2 - p + 1);
1386
              memcpy (copy, p, p2 - p);
1387
              copy[p2 - p] = '\0';
1388
              type = lookup_typename (current_language, get_current_arch (),
1389
                                      copy, NULL, 1);
1390
              if (type != NULL)
1391
                {
1392
                  /* Save the location of this just in case this
1393
                     method/type combination isn't actually defined.
1394
                     It will be checked later.  */
1395
                  saved_java_argptr = p;
1396
                  p = p2;
1397
                }
1398
            }
1399
        }
1400
 
1401
      /* Allocate our own copy of the substring between argptr and
1402
         p. */
1403
      copy = (char *) alloca (p - *argptr + 1);
1404
      memcpy (copy, *argptr, p - *argptr);
1405
      copy[p - *argptr] = '\0';
1406
      if (p != *argptr
1407
          && copy[p - *argptr - 1]
1408
          && strchr (get_gdb_completer_quote_characters (),
1409
                     copy[p - *argptr - 1]) != NULL)
1410
        copy[p - *argptr - 1] = '\0';
1411
 
1412
      /* At this point copy->"fun", p->"" */
1413
 
1414
      /* No line number may be specified.  */
1415
      while (*p == ' ' || *p == '\t')
1416
        p++;
1417
      *argptr = p;
1418
      /* At this point arptr->"".  */
1419
 
1420
      /* Look for copy as a method of sym_class. */
1421
      /* At this point copy->"fun", sym_class is "AAA:inA",
1422
         saved_arg->"AAA::inA::fun".  This concludes the scanning of
1423
         the string for possible components matches.  If we find it
1424
         here, we return. If not, and we are at the and of the string,
1425
         we'll lookup the whole string in the symbol tables.  */
1426
 
1427
      values = find_method (funfirstline, canonical, saved_arg,
1428
                            copy, t, sym_class, not_found_ptr);
1429
      if (saved_java_argptr != NULL && values.nelts == 1)
1430
        {
1431
          /* The user specified a specific return type for a java method.
1432
             Double-check that it really is the one the user specified.
1433
             [This is a necessary evil because strcmp_iw_ordered stops
1434
             comparisons too prematurely.]  */
1435
          sym = find_pc_sect_function (values.sals[0].pc,
1436
                                       values.sals[0].section);
1437
          /* We just found a SAL, we had better be able to go backwards!  */
1438
          gdb_assert (sym != NULL);
1439
          if (strcmp_iw (SYMBOL_LINKAGE_NAME (sym), saved_arg) != 0)
1440
            {
1441
              xfree (values.sals);
1442
              error (_("the class `%s' does not have any method instance named %s\n"),
1443
                     SYMBOL_PRINT_NAME (sym_class), copy);
1444
            }
1445
        }
1446
      return values;
1447
    } /* End if symbol found */
1448
 
1449
 
1450
  /* We couldn't find a class, so we're in case 2 above.  We check the
1451
     entire name as a symbol instead.  */
1452
 
1453
  copy = (char *) alloca (p - saved_arg2 + 1);
1454
  memcpy (copy, saved_arg2, p - saved_arg2);
1455
  /* Note: if is_quoted should be true, we snuff out quote here
1456
     anyway.  */
1457
  copy[p - saved_arg2] = '\000';
1458
  /* Set argptr to skip over the name.  */
1459
  *argptr = (*p == '\'') ? p + 1 : p;
1460
 
1461
  /* Look up entire name */
1462
  sym = lookup_symbol (copy, 0, VAR_DOMAIN, 0);
1463
  if (sym)
1464
    return symbol_found (funfirstline, canonical, copy, sym, NULL);
1465
 
1466
  /* Couldn't find any interpretation as classes/namespaces, so give
1467
     up.  The quotes are important if copy is empty.  */
1468
  if (not_found_ptr)
1469
    *not_found_ptr = 1;
1470
  cplusplus_error (saved_arg,
1471
                   "Can't find member of namespace, class, struct, or union named \"%s\"\n",
1472
                   copy);
1473
}
1474
 
1475
/* Next come some helper functions for decode_compound.  */
1476
 
1477
/* Return the symbol corresponding to the substring of *ARGPTR ending
1478
   at P, allowing whitespace.  Also, advance *ARGPTR past the symbol
1479
   name in question, the compound object separator ("::" or "."), and
1480
   whitespace.  Note that *ARGPTR is changed whether or not the
1481
   lookup_symbol call finds anything (i.e we return NULL).  As an
1482
   example, say ARGPTR is "AAA::inA::fun" and P is "::inA::fun".  */
1483
 
1484
static struct symbol *
1485
lookup_prefix_sym (char **argptr, char *p)
1486
{
1487
  char *p1;
1488
  char *copy;
1489
  struct symbol *sym;
1490
 
1491
  /* Extract the class name.  */
1492
  p1 = p;
1493
  while (p != *argptr && p[-1] == ' ')
1494
    --p;
1495
  copy = (char *) alloca (p - *argptr + 1);
1496
  memcpy (copy, *argptr, p - *argptr);
1497
  copy[p - *argptr] = 0;
1498
 
1499
  /* Discard the class name from the argptr.  */
1500
  p = p1 + (p1[0] == ':' ? 2 : 1);
1501
  while (*p == ' ' || *p == '\t')
1502
    p++;
1503
  *argptr = p;
1504
 
1505
  /* At this point p1->"::inA::fun", p->"inA::fun" copy->"AAA",
1506
     argptr->"inA::fun" */
1507
 
1508
  sym = lookup_symbol (copy, 0, STRUCT_DOMAIN, 0);
1509
  if (sym == NULL)
1510
    {
1511
      /* Typedefs are in VAR_DOMAIN so the above symbol lookup will
1512
         fail when the user attempts to lookup a method of a class
1513
         via a typedef'd name (NOT via the class's name, which is already
1514
         handled in symbol_matches_domain).  So try the lookup again
1515
         using VAR_DOMAIN (where typedefs live) and double-check that we
1516
         found a struct/class type.  */
1517
      struct symbol *s = lookup_symbol (copy, 0, VAR_DOMAIN, 0);
1518
 
1519
      if (s != NULL)
1520
        {
1521
          struct type *t = SYMBOL_TYPE (s);
1522
 
1523
          CHECK_TYPEDEF (t);
1524
          if (TYPE_CODE (t) == TYPE_CODE_STRUCT)
1525
            return s;
1526
        }
1527
    }
1528
 
1529
  return sym;
1530
}
1531
 
1532
/* This finds the method COPY in the class whose type is T and whose
1533
   symbol is SYM_CLASS.  */
1534
 
1535
static struct symtabs_and_lines
1536
find_method (int funfirstline, char ***canonical, char *saved_arg,
1537
             char *copy, struct type *t, struct symbol *sym_class, int *not_found_ptr)
1538
{
1539
  struct symtabs_and_lines values;
1540
  struct symbol *sym = NULL;
1541
  int i1;       /*  Counter for the symbol array.  */
1542
  struct symbol **sym_arr =  alloca (total_number_of_methods (t)
1543
                                     * sizeof (struct symbol *));
1544
 
1545
  /* Find all methods with a matching name, and put them in
1546
     sym_arr.  */
1547
 
1548
  i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr);
1549
 
1550
  if (i1 == 1)
1551
    {
1552
      /* There is exactly one field with that name.  */
1553
      sym = sym_arr[0];
1554
 
1555
      if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1556
        {
1557
          values.sals = (struct symtab_and_line *)
1558
            xmalloc (sizeof (struct symtab_and_line));
1559
          values.nelts = 1;
1560
          values.sals[0] = find_function_start_sal (sym,
1561
                                                    funfirstline);
1562
        }
1563
      else
1564
        {
1565
          values.sals = NULL;
1566
          values.nelts = 0;
1567
        }
1568
      return values;
1569
    }
1570
  if (i1 > 0)
1571
    {
1572
      /* If we were given a specific overload instance, use that
1573
         (or error if no matches were found).  Otherwise ask the user
1574
         which one to use.  */
1575
      if (strchr (saved_arg, '(') != NULL)
1576
        {
1577
          int i;
1578
 
1579
          for (i = 0; i < i1; ++i)
1580
            {
1581
              char *name = saved_arg;
1582
              char *canon = cp_canonicalize_string (name);
1583
 
1584
              if (canon != NULL)
1585
                name = canon;
1586
 
1587
              if (strcmp_iw (name, SYMBOL_LINKAGE_NAME (sym_arr[i])) == 0)
1588
                {
1589
                  values.sals = (struct symtab_and_line *)
1590
                    xmalloc (sizeof (struct symtab_and_line));
1591
                  values.nelts = 1;
1592
                  values.sals[0] = find_function_start_sal (sym_arr[i],
1593
                                                            funfirstline);
1594
                  if (canon)
1595
                    xfree (canon);
1596
                  return values;
1597
                }
1598
 
1599
              if (canon)
1600
                xfree (canon);
1601
            }
1602
 
1603
          error (_("the class `%s' does not have any method instance named %s\n"),
1604
                 SYMBOL_PRINT_NAME (sym_class), copy);
1605
        }
1606
 
1607
      return decode_line_2 (sym_arr, i1, funfirstline, canonical);
1608
    }
1609
  else
1610
    {
1611
      if (not_found_ptr)
1612
        *not_found_ptr = 1;
1613
      if (copy[0] == '~')
1614
        cplusplus_error (saved_arg,
1615
                         "the class `%s' does not have destructor defined\n",
1616
                         SYMBOL_PRINT_NAME (sym_class));
1617
      else
1618
        cplusplus_error (saved_arg,
1619
                         "the class %s does not have any method named %s\n",
1620
                         SYMBOL_PRINT_NAME (sym_class), copy);
1621
    }
1622
}
1623
 
1624
 
1625
 
1626
/* Return the symtab associated to the filename given by the substring
1627
   of *ARGPTR ending at P, and advance ARGPTR past that filename.  If
1628
   NOT_FOUND_PTR is not null and the source file is not found, store
1629
   boolean true at the location pointed to and do not issue an
1630
   error message.  */
1631
 
1632
static struct symtab *
1633
symtab_from_filename (char **argptr, char *p, int is_quote_enclosed,
1634
                      int *not_found_ptr)
1635
{
1636
  char *p1;
1637
  char *copy;
1638
  struct symtab *file_symtab;
1639
 
1640
  p1 = p;
1641
  while (p != *argptr && p[-1] == ' ')
1642
    --p;
1643
  if ((*p == '"') && is_quote_enclosed)
1644
    --p;
1645
  copy = (char *) alloca (p - *argptr + 1);
1646
  memcpy (copy, *argptr, p - *argptr);
1647
  /* It may have the ending quote right after the file name.  */
1648
  if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
1649
      || copy[p - *argptr - 1] == '\'')
1650
    copy[p - *argptr - 1] = 0;
1651
  else
1652
    copy[p - *argptr] = 0;
1653
 
1654
  /* Find that file's data.  */
1655
  file_symtab = lookup_symtab (copy);
1656
  if (file_symtab == 0)
1657
    {
1658
      if (not_found_ptr)
1659
        *not_found_ptr = 1;
1660
      if (!have_full_symbols () && !have_partial_symbols ())
1661
        throw_error (NOT_FOUND_ERROR,
1662
                     _("No symbol table is loaded.  Use the \"file\" command."));
1663
      throw_error (NOT_FOUND_ERROR, _("No source file named %s."), copy);
1664
    }
1665
 
1666
  /* Discard the file name from the arg.  */
1667
  p = p1 + 1;
1668
  while (*p == ' ' || *p == '\t')
1669
    p++;
1670
  *argptr = p;
1671
 
1672
  return file_symtab;
1673
}
1674
 
1675
 
1676
 
1677
/* This decodes a line where the argument is all digits (possibly
1678
   preceded by a sign).  Q should point to the end of those digits;
1679
   the other arguments are as usual.  */
1680
 
1681
static struct symtabs_and_lines
1682
decode_all_digits (char **argptr, struct symtab *default_symtab,
1683
                   int default_line, char ***canonical,
1684
                   struct symtab *file_symtab, char *q)
1685
 
1686
{
1687
  struct symtabs_and_lines values;
1688
  struct symtab_and_line val;
1689
 
1690
  enum sign
1691
    {
1692
      none, plus, minus
1693
    }
1694
  sign = none;
1695
 
1696
  /* We might need a canonical line spec if no file was specified.  */
1697
  int need_canonical = (file_symtab == NULL) ? 1 : 0;
1698
 
1699
  init_sal (&val);
1700
 
1701
  val.pspace = current_program_space;
1702
 
1703
  /* This is where we need to make sure that we have good defaults.
1704
     We must guarantee that this section of code is never executed
1705
     when we are called with just a function name, since
1706
     set_default_source_symtab_and_line uses
1707
     select_source_symtab that calls us with such an argument.  */
1708
 
1709
  if (file_symtab == 0 && default_symtab == 0)
1710
    {
1711
      /* Make sure we have at least a default source file.  */
1712
      set_default_source_symtab_and_line ();
1713
      initialize_defaults (&default_symtab, &default_line);
1714
    }
1715
 
1716
  if (**argptr == '+')
1717
    sign = plus, (*argptr)++;
1718
  else if (**argptr == '-')
1719
    sign = minus, (*argptr)++;
1720
  val.line = atoi (*argptr);
1721
  switch (sign)
1722
    {
1723
    case plus:
1724
      if (q == *argptr)
1725
        val.line = 5;
1726
      if (file_symtab == 0)
1727
        val.line = default_line + val.line;
1728
      break;
1729
    case minus:
1730
      if (q == *argptr)
1731
        val.line = 15;
1732
      if (file_symtab == 0)
1733
        val.line = default_line - val.line;
1734
      else
1735
        val.line = 1;
1736
      break;
1737
    case none:
1738
      break;            /* No need to adjust val.line.  */
1739
    }
1740
 
1741
  while (*q == ' ' || *q == '\t')
1742
    q++;
1743
  *argptr = q;
1744
  if (file_symtab == 0)
1745
    file_symtab = default_symtab;
1746
 
1747
  /* It is possible that this source file has more than one symtab,
1748
     and that the new line number specification has moved us from the
1749
     default (in file_symtab) to a new one.  */
1750
  val.symtab = find_line_symtab (file_symtab, val.line, NULL, NULL);
1751
  if (val.symtab == 0)
1752
    val.symtab = file_symtab;
1753
 
1754
  val.pspace = SYMTAB_PSPACE (val.symtab);
1755
  val.pc = 0;
1756
  values.sals = (struct symtab_and_line *)
1757
    xmalloc (sizeof (struct symtab_and_line));
1758
  values.sals[0] = val;
1759
  values.nelts = 1;
1760
  if (need_canonical)
1761
    build_canonical_line_spec (values.sals, NULL, canonical);
1762
  values.sals[0].explicit_line = 1;
1763
  return values;
1764
}
1765
 
1766
 
1767
 
1768
/* Decode a linespec starting with a dollar sign.  */
1769
 
1770
static struct symtabs_and_lines
1771
decode_dollar (char *copy, int funfirstline, struct symtab *default_symtab,
1772
               char ***canonical, struct symtab *file_symtab)
1773
{
1774
  LONGEST valx;
1775
  int index = 0;
1776
  int need_canonical = 0;
1777
  struct symtabs_and_lines values;
1778
  struct symtab_and_line val;
1779
  char *p;
1780
  struct symbol *sym;
1781
  struct minimal_symbol *msymbol;
1782
 
1783
  p = (copy[1] == '$') ? copy + 2 : copy + 1;
1784
  while (*p >= '0' && *p <= '9')
1785
    p++;
1786
  if (!*p)              /* Reached end of token without hitting non-digit.  */
1787
    {
1788
      /* We have a value history reference.  */
1789
      struct value *val_history;
1790
 
1791
      sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
1792
      val_history = access_value_history ((copy[1] == '$') ? -index : index);
1793
      if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
1794
        error (_("History values used in line specs must have integer values."));
1795
      valx = value_as_long (val_history);
1796
    }
1797
  else
1798
    {
1799
      /* Not all digits -- may be user variable/function or a
1800
         convenience variable.  */
1801
 
1802
      /* Look up entire name as a symbol first.  */
1803
      sym = lookup_symbol (copy, 0, VAR_DOMAIN, 0);
1804
      file_symtab = (struct symtab *) NULL;
1805
      need_canonical = 1;
1806
      /* Symbol was found --> jump to normal symbol processing.  */
1807
      if (sym)
1808
        return symbol_found (funfirstline, canonical, copy, sym, NULL);
1809
 
1810
      /* If symbol was not found, look in minimal symbol tables.  */
1811
      msymbol = lookup_minimal_symbol (copy, NULL, NULL);
1812
      /* Min symbol was found --> jump to minsym processing.  */
1813
      if (msymbol)
1814
        return minsym_found (funfirstline, msymbol);
1815
 
1816
      /* Not a user variable or function -- must be convenience variable.  */
1817
      if (!get_internalvar_integer (lookup_internalvar (copy + 1), &valx))
1818
        error (_("Convenience variables used in line specs must have integer values."));
1819
    }
1820
 
1821
  init_sal (&val);
1822
 
1823
  /* Either history value or convenience value from above, in valx.  */
1824
  val.symtab = file_symtab ? file_symtab : default_symtab;
1825
  val.line = valx;
1826
  val.pc = 0;
1827
  val.pspace = current_program_space;
1828
 
1829
  values.sals = (struct symtab_and_line *) xmalloc (sizeof val);
1830
  values.sals[0] = val;
1831
  values.nelts = 1;
1832
 
1833
  if (need_canonical)
1834
    build_canonical_line_spec (values.sals, NULL, canonical);
1835
 
1836
  return values;
1837
}
1838
 
1839
 
1840
 
1841
/* Decode a linespec that's a variable.  If FILE_SYMTAB is non-NULL,
1842
   look in that symtab's static variables first.  If NOT_FOUND_PTR is not NULL and
1843
   the function cannot be found, store boolean true in the location pointed to
1844
   and do not issue an error message.  */
1845
 
1846
static struct symtabs_and_lines
1847
decode_variable (char *copy, int funfirstline, char ***canonical,
1848
                 struct symtab *file_symtab, int *not_found_ptr)
1849
{
1850
  struct symbol *sym;
1851
  struct minimal_symbol *msymbol;
1852
 
1853
  sym = lookup_symbol (copy,
1854
                       (file_symtab
1855
                        ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_symtab),
1856
                                             STATIC_BLOCK)
1857
                        : get_selected_block (0)),
1858
                       VAR_DOMAIN, 0);
1859
 
1860
  if (sym != NULL)
1861
    return symbol_found (funfirstline, canonical, copy, sym, file_symtab);
1862
 
1863
  msymbol = lookup_minimal_symbol (copy, NULL, NULL);
1864
 
1865
  if (msymbol != NULL)
1866
    return minsym_found (funfirstline, msymbol);
1867
 
1868
  if (not_found_ptr)
1869
    *not_found_ptr = 1;
1870
 
1871
  if (!have_full_symbols ()
1872
      && !have_partial_symbols ()
1873
      && !have_minimal_symbols ())
1874
    throw_error (NOT_FOUND_ERROR,
1875
                 _("No symbol table is loaded.  Use the \"file\" command."));
1876
  throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
1877
}
1878
 
1879
 
1880
 
1881
 
1882
/* Now come some functions that are called from multiple places within
1883
   decode_line_1.  */
1884
 
1885
/* We've found a symbol SYM to associate with our linespec; build a
1886
   corresponding struct symtabs_and_lines.  */
1887
 
1888
static struct symtabs_and_lines
1889
symbol_found (int funfirstline, char ***canonical, char *copy,
1890
              struct symbol *sym, struct symtab *file_symtab)
1891
{
1892
  struct symtabs_and_lines values;
1893
 
1894
  if (SYMBOL_CLASS (sym) == LOC_BLOCK)
1895
    {
1896
      /* Arg is the name of a function */
1897
      values.sals = (struct symtab_and_line *)
1898
        xmalloc (sizeof (struct symtab_and_line));
1899
      values.sals[0] = find_function_start_sal (sym, funfirstline);
1900
      values.nelts = 1;
1901
 
1902
      /* Don't use the SYMBOL_LINE; if used at all it points to
1903
         the line containing the parameters or thereabouts, not
1904
         the first line of code.  */
1905
 
1906
      /* We might need a canonical line spec if it is a static
1907
         function.  */
1908
      if (file_symtab == 0)
1909
        {
1910
          struct blockvector *bv = BLOCKVECTOR (SYMBOL_SYMTAB (sym));
1911
          struct block *b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1912
 
1913
          if (lookup_block_symbol (b, copy, VAR_DOMAIN) != NULL)
1914
            build_canonical_line_spec (values.sals, copy, canonical);
1915
        }
1916
      return values;
1917
    }
1918
  else
1919
    {
1920
      if (funfirstline)
1921
        error (_("\"%s\" is not a function"), copy);
1922
      else if (SYMBOL_LINE (sym) != 0)
1923
        {
1924
          /* We know its line number.  */
1925
          values.sals = (struct symtab_and_line *)
1926
            xmalloc (sizeof (struct symtab_and_line));
1927
          values.nelts = 1;
1928
          memset (&values.sals[0], 0, sizeof (values.sals[0]));
1929
          values.sals[0].symtab = SYMBOL_SYMTAB (sym);
1930
          values.sals[0].line = SYMBOL_LINE (sym);
1931
          return values;
1932
        }
1933
      else
1934
        /* This can happen if it is compiled with a compiler which doesn't
1935
           put out line numbers for variables.  */
1936
        /* FIXME: Shouldn't we just set .line and .symtab to zero
1937
           and return?  For example, "info line foo" could print
1938
           the address.  */
1939
        error (_("Line number not known for symbol \"%s\""), copy);
1940
    }
1941
}
1942
 
1943
/* We've found a minimal symbol MSYMBOL to associate with our
1944
   linespec; build a corresponding struct symtabs_and_lines.  */
1945
 
1946
static struct symtabs_and_lines
1947
minsym_found (int funfirstline, struct minimal_symbol *msymbol)
1948
{
1949
  struct objfile *objfile = msymbol_objfile (msymbol);
1950
  struct gdbarch *gdbarch = get_objfile_arch (objfile);
1951
  struct symtabs_and_lines values;
1952
  CORE_ADDR pc;
1953
 
1954
  values.sals = (struct symtab_and_line *)
1955
    xmalloc (sizeof (struct symtab_and_line));
1956
  values.sals[0] = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
1957
                                      (struct obj_section *) 0, 0);
1958
  values.sals[0].section = SYMBOL_OBJ_SECTION (msymbol);
1959
 
1960
  /* The minimal symbol might point to a function descriptor;
1961
     resolve it to the actual code address instead.  */
1962
  pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
1963
                                           values.sals[0].pc,
1964
                                           &current_target);
1965
  if (pc != values.sals[0].pc)
1966
    values.sals[0] = find_pc_sect_line (pc, NULL, 0);
1967
 
1968
  if (funfirstline)
1969
    skip_prologue_sal (&values.sals[0]);
1970
 
1971
  values.nelts = 1;
1972
  return values;
1973
}

powered by: WebSVN 2.1.0

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