]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/guile/guile-internal.h
C++ keyword cleanliness, mostly auto-generated
[thirdparty/binutils-gdb.git] / gdb / guile / guile-internal.h
CommitLineData
ed3ef339
DE
1/* Internal header for GDB/Scheme code.
2
32d0add0 3 Copyright (C) 2014-2015 Free Software Foundation, Inc.
ed3ef339
DE
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20/* See README file in this directory for implementation notes, coding
21 conventions, et.al. */
22
23#ifndef GDB_GUILE_INTERNAL_H
24#define GDB_GUILE_INTERNAL_H
25
26#include "hashtab.h"
27#include "extension-priv.h"
28#include "symtab.h"
29#include "libguile.h"
30
31struct block;
32struct frame_info;
33struct objfile;
34struct symbol;
35
36/* A function to pass to the safe-call routines to ignore things like
37 memory errors. */
38typedef int excp_matcher_func (SCM key);
39
40/* Scheme variables to define during initialization. */
41
42typedef struct
43{
44 const char *name;
45 SCM value;
46 const char *doc_string;
47} scheme_variable;
48
49/* End of scheme_variable table mark. */
50
51#define END_VARIABLES { NULL, SCM_BOOL_F, NULL }
52
53/* Scheme functions to define during initialization. */
54
55typedef struct
56{
57 const char *name;
58 int required;
59 int optional;
60 int rest;
61 scm_t_subr func;
62 const char *doc_string;
63} scheme_function;
64
65/* End of scheme_function table mark. */
66
67#define END_FUNCTIONS { NULL, 0, 0, 0, NULL, NULL }
68
69/* Useful for defining a set of constants. */
70
71typedef struct
72{
73 const char *name;
74 int value;
75} scheme_integer_constant;
76
77#define END_INTEGER_CONSTANTS { NULL, 0 }
78
79/* Pass this instead of 0 to routines like SCM_ASSERT to indicate the value
80 is not a function argument. */
81#define GDBSCM_ARG_NONE 0
82
83/* Ensure new code doesn't accidentally try to use this. */
84#undef scm_make_smob_type
85#define scm_make_smob_type USE_gdbscm_make_smob_type_INSTEAD
86
87/* They brought over () == #f from lisp.
88 Let's avoid that for now. */
89#undef scm_is_bool
90#undef scm_is_false
91#undef scm_is_true
92#define scm_is_bool USE_gdbscm_is_bool_INSTEAD
93#define scm_is_false USE_gdbscm_is_false_INSTEAD
94#define scm_is_true USE_gdbscm_is_true_INSTEAD
95#define gdbscm_is_bool(scm) \
96 (scm_is_eq ((scm), SCM_BOOL_F) || scm_is_eq ((scm), SCM_BOOL_T))
97#define gdbscm_is_false(scm) scm_is_eq ((scm), SCM_BOOL_F)
98#define gdbscm_is_true(scm) (!gdbscm_is_false (scm))
99
16954d5d
LC
100#ifndef HAVE_SCM_NEW_SMOB
101
102/* Guile <= 2.0.5 did not provide this function, so provide it here. */
103
104static inline SCM
105scm_new_smob (scm_t_bits tc, scm_t_bits data)
106{
107 SCM_RETURN_NEWSMOB (tc, data);
108}
109
110#endif
111
ed3ef339
DE
112/* Function name that is passed around in case an error needs to be reported.
113 __func is in C99, but we provide a wrapper "just in case",
114 and because FUNC_NAME is the canonical value used in guile sources.
115 IWBN to use the Scheme version of the name (e.g. foo-bar vs foo_bar),
116 but let's KISS for now. */
117#define FUNC_NAME __func__
118
119extern const char gdbscm_module_name[];
120extern const char gdbscm_init_module_name[];
121
122extern int gdb_scheme_initialized;
123
d2929fdc
DE
124extern int gdbscm_guile_major_version;
125extern int gdbscm_guile_minor_version;
126extern int gdbscm_guile_micro_version;
127
ed3ef339
DE
128extern const char gdbscm_print_excp_none[];
129extern const char gdbscm_print_excp_full[];
130extern const char gdbscm_print_excp_message[];
131extern const char *gdbscm_print_excp;
132
133extern SCM gdbscm_documentation_symbol;
134extern SCM gdbscm_invalid_object_error_symbol;
135
136extern SCM gdbscm_map_string;
137extern SCM gdbscm_array_string;
138extern SCM gdbscm_string_string;
139\f
140/* scm-utils.c */
141
fe978cb0 142extern void gdbscm_define_variables (const scheme_variable *, int is_public);
ed3ef339 143
fe978cb0 144extern void gdbscm_define_functions (const scheme_function *, int is_public);
ed3ef339
DE
145
146extern void gdbscm_define_integer_constants (const scheme_integer_constant *,
fe978cb0 147 int is_public);
ed3ef339 148
77b64a49
PA
149extern void gdbscm_printf (SCM port, const char *format, ...)
150 ATTRIBUTE_PRINTF (2, 3);
ed3ef339
DE
151
152extern void gdbscm_debug_display (SCM obj);
153
154extern void gdbscm_debug_write (SCM obj);
155
156extern void gdbscm_parse_function_args (const char *function_name,
157 int beginning_arg_pos,
158 const SCM *keywords,
159 const char *format, ...);
160
161extern SCM gdbscm_scm_from_longest (LONGEST l);
162
163extern LONGEST gdbscm_scm_to_longest (SCM l);
164
165extern SCM gdbscm_scm_from_ulongest (ULONGEST l);
166
167extern ULONGEST gdbscm_scm_to_ulongest (SCM u);
168
169extern void gdbscm_dynwind_xfree (void *ptr);
170
171extern int gdbscm_is_procedure (SCM proc);
e698b8c4
DE
172
173extern char *gdbscm_gc_xstrdup (const char *);
06eb1586
DE
174
175extern const char * const *gdbscm_gc_dup_argv (char **argv);
d2929fdc
DE
176
177extern int gdbscm_guile_version_is_at_least (int major, int minor, int micro);
ed3ef339 178\f
b2715b27 179/* GDB smobs, from scm-gsmob.c */
ed3ef339
DE
180
181/* All gdb smobs must contain one of the following as the first member:
182 gdb_smob, chained_gdb_smob, or eqable_gdb_smob.
183
b2715b27
AW
184 Chained GDB smobs should have chained_gdb_smob as their first member. The
185 next,prev members of chained_gdb_smob allow for chaining gsmobs together so
186 that, for example, when an objfile is deleted we can clean up all smobs that
187 reference it.
ed3ef339 188
b2715b27
AW
189 Eq-able GDB smobs should have eqable_gdb_smob as their first member. The
190 containing_scm member of eqable_gdb_smob allows for returning the same gsmob
191 instead of creating a new one, allowing them to be eq?-able.
ed3ef339 192
b2715b27
AW
193 All other smobs should have gdb_smob as their first member.
194 FIXME: dje/2014-05-26: gdb_smob was useful during early development as a
195 "baseclass" for all gdb smobs. If it's still unused by gdb 8.0 delete it.
196
197 IMPORTANT: chained_gdb_smob and eqable_gdb-smob are "subclasses" of
ed3ef339
DE
198 gdb_smob. The layout of chained_gdb_smob,eqable_gdb_smob must match
199 gdb_smob as if it is a subclass. To that end we use macro GDB_SMOB_HEAD
200 to ensure this. */
201
b2715b27
AW
202#define GDB_SMOB_HEAD \
203 int empty_base_class;
ed3ef339
DE
204
205typedef struct
206{
207 GDB_SMOB_HEAD
208} gdb_smob;
209
210typedef struct _chained_gdb_smob
211{
212 GDB_SMOB_HEAD
213
214 struct _chained_gdb_smob *prev;
215 struct _chained_gdb_smob *next;
216} chained_gdb_smob;
217
218typedef struct _eqable_gdb_smob
219{
220 GDB_SMOB_HEAD
221
222 /* The object we are contained in.
223 This can be used for several purposes.
224 This is used by the eq? machinery: We need to be able to see if we have
225 already created an object for a symbol, and if so use that SCM.
226 This may also be used to protect the smob from GC if there is
227 a reference to this smob from outside of GC space (i.e., from gdb).
228 This can also be used in place of chained_gdb_smob where we need to
229 keep track of objfile referencing objects. When the objfile is deleted
230 we need to invalidate the objects: we can do that using the same hashtab
231 used to record the smob for eq-ability. */
232 SCM containing_scm;
233} eqable_gdb_smob;
234
235#undef GDB_SMOB_HEAD
236
237struct objfile;
238struct objfile_data;
239
240/* A predicate that returns non-zero if an object is a particular kind
241 of gsmob. */
242typedef int (gsmob_pred_func) (SCM);
243
244extern scm_t_bits gdbscm_make_smob_type (const char *name, size_t size);
245
246extern void gdbscm_init_gsmob (gdb_smob *base);
247
248extern void gdbscm_init_chained_gsmob (chained_gdb_smob *base);
249
1254eefc
DE
250extern void gdbscm_init_eqable_gsmob (eqable_gdb_smob *base,
251 SCM containing_scm);
ed3ef339 252
ed3ef339
DE
253extern void gdbscm_add_objfile_ref (struct objfile *objfile,
254 const struct objfile_data *data_key,
255 chained_gdb_smob *g_smob);
256
257extern void gdbscm_remove_objfile_ref (struct objfile *objfile,
258 const struct objfile_data *data_key,
259 chained_gdb_smob *g_smob);
260
261extern htab_t gdbscm_create_eqable_gsmob_ptr_map (htab_hash hash_fn,
262 htab_eq eq_fn);
263
264extern eqable_gdb_smob **gdbscm_find_eqable_gsmob_ptr_slot
265 (htab_t htab, eqable_gdb_smob *base);
266
267extern void gdbscm_fill_eqable_gsmob_ptr_slot (eqable_gdb_smob **slot,
1254eefc 268 eqable_gdb_smob *base);
ed3ef339
DE
269
270extern void gdbscm_clear_eqable_gsmob_ptr_slot (htab_t htab,
271 eqable_gdb_smob *base);
272\f
273/* Exceptions and calling out to Guile. */
274
275/* scm-exception.c */
276
277extern SCM gdbscm_make_exception (SCM tag, SCM args);
278
279extern int gdbscm_is_exception (SCM scm);
280
281extern SCM gdbscm_exception_key (SCM excp);
282
283extern SCM gdbscm_exception_args (SCM excp);
284
285extern SCM gdbscm_make_exception_with_stack (SCM key, SCM args, SCM stack);
286
287extern SCM gdbscm_make_error_scm (SCM key, SCM subr, SCM message,
288 SCM args, SCM data);
289
290extern SCM gdbscm_make_error (SCM key, const char *subr, const char *message,
291 SCM args, SCM data);
292
293extern SCM gdbscm_make_type_error (const char *subr, int arg_pos,
294 SCM bad_value, const char *expected_type);
295
296extern SCM gdbscm_make_invalid_object_error (const char *subr, int arg_pos,
297 SCM bad_value, const char *error);
298
4a2722c5
DE
299extern void gdbscm_invalid_object_error (const char *subr, int arg_pos,
300 SCM bad_value, const char *error)
ed3ef339
DE
301 ATTRIBUTE_NORETURN;
302
303extern SCM gdbscm_make_out_of_range_error (const char *subr, int arg_pos,
304 SCM bad_value, const char *error);
305
4a2722c5
DE
306extern void gdbscm_out_of_range_error (const char *subr, int arg_pos,
307 SCM bad_value, const char *error)
ed3ef339
DE
308 ATTRIBUTE_NORETURN;
309
310extern SCM gdbscm_make_misc_error (const char *subr, int arg_pos,
311 SCM bad_value, const char *error);
312
06eb1586
DE
313extern void gdbscm_misc_error (const char *subr, int arg_pos,
314 SCM bad_value, const char *error)
315 ATTRIBUTE_NORETURN;
316
ed3ef339
DE
317extern void gdbscm_throw (SCM exception) ATTRIBUTE_NORETURN;
318
319extern SCM gdbscm_scm_from_gdb_exception (struct gdb_exception exception);
320
321extern void gdbscm_throw_gdb_exception (struct gdb_exception exception)
322 ATTRIBUTE_NORETURN;
323
324extern void gdbscm_print_exception_with_stack (SCM port, SCM stack,
325 SCM key, SCM args);
326
327extern void gdbscm_print_gdb_exception (SCM port, SCM exception);
328
329extern char *gdbscm_exception_message_to_string (SCM exception);
330
331extern excp_matcher_func gdbscm_memory_error_p;
332
e698b8c4
DE
333extern excp_matcher_func gdbscm_user_error_p;
334
ed3ef339
DE
335extern SCM gdbscm_make_memory_error (const char *subr, const char *msg,
336 SCM args);
337
4a2722c5
DE
338extern void gdbscm_memory_error (const char *subr, const char *msg, SCM args)
339 ATTRIBUTE_NORETURN;
ed3ef339
DE
340
341/* scm-safe-call.c */
342
343extern void *gdbscm_with_guile (void *(*func) (void *), void *data);
344
345extern SCM gdbscm_call_guile (SCM (*func) (void *), void *data,
346 excp_matcher_func *ok_excps);
347
348extern SCM gdbscm_safe_call_0 (SCM proc, excp_matcher_func *ok_excps);
349
350extern SCM gdbscm_safe_call_1 (SCM proc, SCM arg0,
351 excp_matcher_func *ok_excps);
352
353extern SCM gdbscm_safe_call_2 (SCM proc, SCM arg0, SCM arg1,
354 excp_matcher_func *ok_excps);
355
356extern SCM gdbscm_safe_call_3 (SCM proc, SCM arg0, SCM arg1, SCM arg2,
357 excp_matcher_func *ok_excps);
358
359extern SCM gdbscm_safe_call_4 (SCM proc, SCM arg0, SCM arg1, SCM arg2,
360 SCM arg3,
361 excp_matcher_func *ok_excps);
362
363extern SCM gdbscm_safe_apply_1 (SCM proc, SCM arg0, SCM args,
364 excp_matcher_func *ok_excps);
365
366extern SCM gdbscm_unsafe_call_1 (SCM proc, SCM arg0);
367
368extern char *gdbscm_safe_eval_string (const char *string, int display_result);
369
370extern char *gdbscm_safe_source_script (const char *filename);
371
372extern void gdbscm_enter_repl (void);
373\f
374/* Interface to various GDB objects, in alphabetical order. */
375
376/* scm-arch.c */
377
378typedef struct _arch_smob arch_smob;
379
380extern struct gdbarch *arscm_get_gdbarch (arch_smob *a_smob);
381
382extern arch_smob *arscm_get_arch_smob_arg_unsafe (SCM arch_scm, int arg_pos,
383 const char *func_name);
384
385extern SCM arscm_scm_from_arch (struct gdbarch *gdbarch);
386
387/* scm-block.c */
388
389extern SCM bkscm_scm_from_block (const struct block *block,
390 struct objfile *objfile);
391
392extern const struct block *bkscm_scm_to_block
393 (SCM block_scm, int arg_pos, const char *func_name, SCM *excp);
394
e698b8c4
DE
395/* scm-cmd.c */
396
397extern char *gdbscm_parse_command_name (const char *name,
398 const char *func_name, int arg_pos,
399 struct cmd_list_element ***base_list,
400 struct cmd_list_element **start_list);
401
402extern int gdbscm_valid_command_class_p (int command_class);
403
06eb1586
DE
404extern char *gdbscm_canonicalize_command_name (const char *name,
405 int want_trailing_space);
406
ed3ef339
DE
407/* scm-frame.c */
408
409typedef struct _frame_smob frame_smob;
410
411extern int frscm_is_frame (SCM scm);
412
413extern frame_smob *frscm_get_frame_smob_arg_unsafe (SCM frame_scm, int arg_pos,
414 const char *func_name);
415
416extern struct frame_info *frscm_frame_smob_to_frame (frame_smob *);
417
418/* scm-iterator.c */
419
420typedef struct _iterator_smob iterator_smob;
421
422extern SCM itscm_iterator_smob_object (iterator_smob *i_smob);
423
424extern SCM itscm_iterator_smob_progress (iterator_smob *i_smob);
425
426extern void itscm_set_iterator_smob_progress_x (iterator_smob *i_smob,
427 SCM progress);
428
429extern const char *itscm_iterator_smob_name (void);
430
431extern SCM gdbscm_make_iterator (SCM object, SCM progress, SCM next);
432
433extern int itscm_is_iterator (SCM scm);
434
435extern SCM gdbscm_end_of_iteration (void);
436
437extern int itscm_is_end_of_iteration (SCM obj);
438
439extern SCM itscm_safe_call_next_x (SCM iter, excp_matcher_func *ok_excps);
440
441extern SCM itscm_get_iterator_arg_unsafe (SCM self, int arg_pos,
442 const char *func_name);
443
444/* scm-lazy-string.c */
445
446extern int lsscm_is_lazy_string (SCM scm);
447
448extern SCM lsscm_make_lazy_string (CORE_ADDR address, int length,
449 const char *encoding, struct type *type);
450
451extern struct value *lsscm_safe_lazy_string_to_value (SCM string,
452 int arg_pos,
453 const char *func_name,
454 SCM *except_scmp);
455
456extern void lsscm_val_print_lazy_string
457 (SCM string, struct ui_file *stream,
458 const struct value_print_options *options);
459
460/* scm-objfile.c */
461
462typedef struct _objfile_smob objfile_smob;
463
464extern SCM ofscm_objfile_smob_pretty_printers (objfile_smob *o_smob);
465
466extern objfile_smob *ofscm_objfile_smob_from_objfile (struct objfile *objfile);
467
468extern SCM ofscm_scm_from_objfile (struct objfile *objfile);
469
ded03782
DE
470/* scm-progspace.c */
471
472typedef struct _pspace_smob pspace_smob;
473
474extern SCM psscm_pspace_smob_pretty_printers (const pspace_smob *);
475
476extern pspace_smob *psscm_pspace_smob_from_pspace (struct program_space *);
477
478extern SCM psscm_scm_from_pspace (struct program_space *);
479
ed3ef339
DE
480/* scm-string.c */
481
d2929fdc
DE
482extern int gdbscm_scm_string_to_int (SCM string);
483
ed3ef339
DE
484extern char *gdbscm_scm_to_c_string (SCM string);
485
486extern SCM gdbscm_scm_from_c_string (const char *string);
487
77b64a49
PA
488extern SCM gdbscm_scm_from_printf (const char *format, ...)
489 ATTRIBUTE_PRINTF (1, 2);
ed3ef339
DE
490
491extern char *gdbscm_scm_to_string (SCM string, size_t *lenp,
492 const char *charset,
493 int strict, SCM *except_scmp);
494
495extern SCM gdbscm_scm_from_string (const char *string, size_t len,
496 const char *charset, int strict);
497
06eb1586
DE
498extern char *gdbscm_scm_to_host_string (SCM string, size_t *lenp, SCM *except);
499
500extern SCM gdbscm_scm_from_host_string (const char *string, size_t len);
501
ed3ef339
DE
502/* scm-symbol.c */
503
504extern int syscm_is_symbol (SCM scm);
505
506extern SCM syscm_scm_from_symbol (struct symbol *symbol);
507
508extern struct symbol *syscm_get_valid_symbol_arg_unsafe
509 (SCM self, int arg_pos, const char *func_name);
510
511/* scm-symtab.c */
512
513extern SCM stscm_scm_from_symtab (struct symtab *symtab);
514
515extern SCM stscm_scm_from_sal (struct symtab_and_line sal);
516
517/* scm-type.c */
518
519typedef struct _type_smob type_smob;
520
521extern int tyscm_is_type (SCM scm);
522
523extern SCM tyscm_scm_from_type (struct type *type);
524
525extern type_smob *tyscm_get_type_smob_arg_unsafe (SCM type_scm, int arg_pos,
526 const char *func_name);
527
528extern struct type *tyscm_type_smob_type (type_smob *t_smob);
529
530extern SCM tyscm_scm_from_field (SCM type_scm, int field_num);
531
532/* scm-value.c */
533
534extern struct value *vlscm_scm_to_value (SCM scm);
535
536extern int vlscm_is_value (SCM scm);
537
538extern SCM vlscm_scm_from_value (struct value *value);
539
540extern SCM vlscm_scm_from_value_unsafe (struct value *value);
541
542extern struct value *vlscm_convert_typed_value_from_scheme
543 (const char *func_name, int obj_arg_pos, SCM obj,
544 int type_arg_pos, SCM type_scm, struct type *type, SCM *except_scmp,
545 struct gdbarch *gdbarch, const struct language_defn *language);
546
547extern struct value *vlscm_convert_value_from_scheme
548 (const char *func_name, int obj_arg_pos, SCM obj, SCM *except_scmp,
549 struct gdbarch *gdbarch, const struct language_defn *language);
550\f
551/* stript_lang methods */
552
553extern objfile_script_sourcer_func gdbscm_source_objfile_script;
9f050062 554extern objfile_script_executor_func gdbscm_execute_objfile_script;
ed3ef339
DE
555
556extern int gdbscm_auto_load_enabled (const struct extension_language_defn *);
557
558extern void gdbscm_preserve_values
559 (const struct extension_language_defn *,
560 struct objfile *, htab_t copied_types);
561
562extern enum ext_lang_rc gdbscm_apply_val_pretty_printer
563 (const struct extension_language_defn *,
564 struct type *type, const gdb_byte *valaddr,
565 int embedded_offset, CORE_ADDR address,
566 struct ui_file *stream, int recurse,
567 const struct value *val,
568 const struct value_print_options *options,
569 const struct language_defn *language);
570
571extern int gdbscm_breakpoint_has_cond (const struct extension_language_defn *,
572 struct breakpoint *b);
573
574extern enum ext_lang_bp_stop gdbscm_breakpoint_cond_says_stop
575 (const struct extension_language_defn *, struct breakpoint *b);
576\f
577/* Initializers for each piece of Scheme support, in alphabetical order. */
578
579extern void gdbscm_initialize_arches (void);
580extern void gdbscm_initialize_auto_load (void);
581extern void gdbscm_initialize_blocks (void);
582extern void gdbscm_initialize_breakpoints (void);
e698b8c4 583extern void gdbscm_initialize_commands (void);
ed3ef339
DE
584extern void gdbscm_initialize_disasm (void);
585extern void gdbscm_initialize_exceptions (void);
586extern void gdbscm_initialize_frames (void);
587extern void gdbscm_initialize_iterators (void);
588extern void gdbscm_initialize_lazy_strings (void);
589extern void gdbscm_initialize_math (void);
590extern void gdbscm_initialize_objfiles (void);
591extern void gdbscm_initialize_pretty_printers (void);
06eb1586 592extern void gdbscm_initialize_parameters (void);
ed3ef339 593extern void gdbscm_initialize_ports (void);
ded03782 594extern void gdbscm_initialize_pspaces (void);
ed3ef339
DE
595extern void gdbscm_initialize_smobs (void);
596extern void gdbscm_initialize_strings (void);
597extern void gdbscm_initialize_symbols (void);
598extern void gdbscm_initialize_symtabs (void);
599extern void gdbscm_initialize_types (void);
600extern void gdbscm_initialize_values (void);
601\f
602/* Use these after a TRY_CATCH to throw the appropriate Scheme exception
603 if a GDB error occurred. */
604
605#define GDBSCM_HANDLE_GDB_EXCEPTION(exception) \
606 do { \
607 if (exception.reason < 0) \
608 { \
609 gdbscm_throw_gdb_exception (exception); \
610 /*NOTREACHED */ \
611 } \
612 } while (0)
613
614/* If cleanups are establish outside the TRY_CATCH block, use this version. */
615
616#define GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS(exception, cleanups) \
617 do { \
618 if (exception.reason < 0) \
619 { \
620 do_cleanups (cleanups); \
621 gdbscm_throw_gdb_exception (exception); \
622 /*NOTREACHED */ \
623 } \
624 } while (0)
625
626#endif /* GDB_GUILE_INTERNAL_H */