30 #include "filenames.h"
38 syscall_warn_user (
void)
40 static int have_warned = 0;
44 warning (
_(
"Can not parse XML syscalls information; XML support was "
45 "disabled at compile time."));
57 int syscall_number,
struct syscall *s)
60 s->
number = syscall_number;
70 s->
name = syscall_name;
106 char *my_gdb_datadir;
136 xfree (syscalls_info->my_gdb_datadir);
138 if (syscalls_info->syscalls != NULL)
147 xfree (syscalls_info);
158 const char *
name,
int number)
162 sysdesc->
name = xstrdup (name);
183 for (i = 0; i <
len; i++)
185 if (strcmp (attrs[i].name,
"name") == 0)
186 name = attrs[i].
value;
187 else if (strcmp (attrs[i].name,
"number") == 0)
191 _(
"Unknown attribute name '%s'."), attrs[i].name);
223 struct cleanup *result_cleanup;
230 syselements, document, &data) == 0)
238 warning (
_(
"Could not load XML syscalls info; ignoring"));
258 if (full_file == NULL)
271 return syscalls_info;
283 if (syscalls_info != NULL && syscalls_info->my_gdb_datadir != NULL
284 && filename_cmp (syscalls_info->my_gdb_datadir,
gdb_datadir) != 0)
289 syscalls_info = NULL;
294 if (syscalls_info != NULL)
302 if (syscalls_info == NULL)
305 if (syscalls_info->syscalls == NULL)
307 if (xml_syscall_file != NULL)
308 warning (
_(
"Could not load the syscall XML file `%s/%s'."),
311 warning (
_(
"There is no XML file to open."));
313 warning (
_(
"GDB will not be able to display "
314 "syscall names nor to verify if\n"
315 "any provided syscall numbers are valid."));
319 syscalls_info->my_gdb_datadir = xstrdup (
gdb_datadir);
326 const char *syscall_name)
332 if (syscalls_info == NULL
333 || syscall_name == NULL)
339 if (strcmp (sysdesc->
name, syscall_name) == 0)
353 if (syscalls_info == NULL
354 || syscall_number < 0)
360 if (sysdesc->
number == syscall_number)
361 return sysdesc->
name;
371 const char **names = NULL;
375 if (syscalls_info == NULL)
379 names =
xmalloc ((nsyscalls + 1) *
sizeof (
char *));
384 names[i] = sysdesc->
name;
399 int syscall_number,
struct syscall *s)
403 s->
number = syscall_number;
409 const char *syscall_name,
struct syscall *s)
414 s->
name = syscall_name;
static void syscall_create_syscall_desc(struct syscalls_info *syscalls_info, const char *name, int number)
static const struct gdb_xml_attribute syscall_attr[]
static void syscalls_info_free_syscalls_desc(struct syscall_desc *sd)
char *(* xml_fetch_another)(const char *href, void *baton)
void warning(const char *fmt,...)
char * ldirname(const char *filename)
void internal_error(const char *file, int line, const char *fmt,...)
static struct syscalls_info * syscall_parse_xml(const char *document, xml_fetch_another fetcher, void *fetcher_baton)
#define VEC_safe_push(T, V, O)
struct syscalls_info * syscalls_info
static void free_syscalls_info(void *arg)
void get_syscall_by_name(struct gdbarch *gdbarch, const char *syscall_name, struct syscall *s)
void set_gdbarch_syscalls_info(struct gdbarch *gdbarch, struct syscalls_info *syscalls_info)
static struct cleanup * make_cleanup_free_syscalls_info(struct syscalls_info *syscalls_info)
struct syscall_desc * syscall_desc_p
void get_syscall_by_number(struct gdbarch *gdbarch, int syscall_number, struct syscall *s)
#define VEC_iterate(T, V, I, P)
static struct syscalls_info * xml_init_syscalls_info(const char *filename)
int gdb_xml_parse_quick(const char *name, const char *dtd_name, const struct gdb_xml_element *elements, const char *document, void *user_data)
static struct syscalls_info * allocate_syscalls_info(void)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
static const char ** xml_list_of_syscalls(struct gdbarch *gdbarch)
char * xml_fetch_content_from_file(const char *filename, void *baton)
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)
const char * gdbarch_xml_syscall_file(struct gdbarch *gdbarch)
const char ** get_syscall_names(struct gdbarch *gdbarch)
void discard_cleanups(struct cleanup *old_chain)
static const char * xml_get_syscall_name(struct gdbarch *gdbarch, int syscall_number)
static int xml_get_syscall_number(struct gdbarch *gdbarch, const char *syscall_name)
#define VEC_address(T, V)
gdb_xml_attribute_handler gdb_xml_parse_attr_ulongest
unsigned long long ULONGEST
static const struct gdb_xml_element syscalls_info_children[]
void set_gdbarch_xml_syscall_file(struct gdbarch *gdbarch, const char *xml_syscall_file)
static void init_syscalls_info(struct gdbarch *gdbarch)
static void syscall_start_syscall(struct gdb_xml_parser *parser, const struct gdb_xml_element *element, void *user_data, VEC(gdb_xml_value_s)*attributes)
struct syscalls_info * gdbarch_syscalls_info(struct gdbarch *gdbarch)
void do_cleanups(struct cleanup *old_chain)
DEF_VEC_P(syscall_desc_p)
const ULONGEST const LONGEST len