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;
142 std::vector<syscall_group_desc_up>
groups;
183 std::vector<syscall_group_desc_up>::iterator it
188 if ((*it)->name == group)
195 groupdesc = it->get ();
209 const char *
name,
int number,
219 for (
char *group = strtok (groups,
",");
221 group = strtok (NULL,
","))
242 for (i = 0; i < len; i++)
244 if (strcmp (attrs[i].
name,
"name") == 0)
246 else if (strcmp (attrs[i].
name,
"number") == 0)
248 else if (strcmp (attrs[i].
name,
"groups") == 0)
249 groups = (
char *) attrs[i].
value;
252 _(
"Unknown attribute name '%s'."), attrs[i].
name);
294 return sysinfo.release ();
298 warning (
_(
"Could not load XML syscalls info; ignoring"));
313 if (full_file == NULL)
318 (
void *)
ldirname (filename).c_str ());
355 if (xml_syscall_file != NULL)
356 warning (
_(
"Could not load the syscall XML file `%s/%s'."),
359 warning (
_(
"There is no XML file to open."));
361 warning (
_(
"GDB will not be able to display " 362 "syscall names nor to verify if\n" 363 "any provided syscall numbers are valid."));
388 if (groupdesc->name == group)
389 return groupdesc.get ();
397 const char *syscall_name)
402 || syscall_name == NULL)
406 if (sysdesc->name == syscall_name)
407 return sysdesc->number;
419 || syscall_number < 0)
423 if (sysdesc->number == syscall_number)
424 return sysdesc->name.c_str ();
438 const char **names =
XNEWVEC (
const char *, nsyscalls + 1);
458 struct syscall *syscalls = NULL;
466 if (groupdesc == NULL)
469 nsyscalls = groupdesc->
syscalls.size ();
473 for (i = 0; i < groupdesc->
syscalls.size (); i++)
475 syscalls[i].
name = groupdesc->
syscalls[i]->name.c_str ();
480 syscalls[i].
name = NULL;
494 const char **names = NULL;
502 names = (
const char**)
xmalloc ((ngroups + 1) *
sizeof (
char *));
520 int syscall_number,
struct syscall *s)
524 s->
number = syscall_number;
530 const char *syscall_name,
struct syscall *s)
535 s->
name = syscall_name;
static const struct gdb_xml_attribute syscall_attr[]
syscall_desc(int number_, std::string name_)
void warning(const char *fmt,...)
static struct syscall_group_desc * syscall_group_create_syscall_group_desc(struct syscalls_info *syscalls_info, const char *group)
static void syscall_group_add_syscall(struct syscalls_info *syscalls_info, struct syscall_desc *syscall, const char *group)
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)
static struct syscall * xml_list_syscalls_by_group(struct gdbarch *gdbarch, const char *group)
static struct syscall_group_desc * syscall_group_get_group_by_name(const struct syscalls_info *syscalls_info, const char *group)
gdb::unique_xmalloc_ptr< char >(* xml_fetch_another)(const char *href, void *baton)
struct syscalls_info * syscalls_info
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)
void get_syscall_by_number(struct gdbarch *gdbarch, int syscall_number, struct syscall *s)
static void syscall_create_syscall_desc(struct syscalls_info *syscalls_info, const char *name, int number, char *groups)
static struct syscalls_info * xml_init_syscalls_info(const char *filename)
std::string ldirname(const char *filename)
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
int gdb_xml_parse_quick(const char *name, const char *dtd_name, const struct gdb_xml_element *elements, const char *document, void *user_data)
std::string my_gdb_datadir
std::unique_ptr< syscall_group_desc > syscall_group_desc_up
std::unique_ptr< syscall_desc > syscall_desc_up
static const char ** xml_list_of_syscalls(struct gdbarch *gdbarch)
std::vector< syscall_desc_up > syscalls
static const struct gdb_xml_element syselements[]
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)
std::vector< syscall_group_desc_up > groups
const char * gdbarch_xml_syscall_file(struct gdbarch *gdbarch)
const char ** get_syscall_names(struct gdbarch *gdbarch)
static const char * xml_get_syscall_name(struct gdbarch *gdbarch, int syscall_number)
std::unique_ptr< syscalls_info > syscalls_info_up
static int xml_get_syscall_number(struct gdbarch *gdbarch, const char *syscall_name)
gdb::unique_xmalloc_ptr< char > xml_fetch_content_from_file(const char *filename, void *baton)
#define VEC_address(T, V)
gdb_xml_attribute_handler gdb_xml_parse_attr_ulongest
unsigned long long ULONGEST
const char ** get_syscall_group_names(struct gdbarch *gdbarch)
struct syscall * get_syscalls_by_group(struct gdbarch *gdbarch, const char *group)
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)
std::vector< syscall_desc * > syscalls
syscall_group_desc(const std::string &name_)
struct syscalls_info * gdbarch_syscalls_info(struct gdbarch *gdbarch)
static const char ** xml_list_of_groups(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)