38syscall_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;
66 std::vector<int> *syscall_numbers)
81 std::vector<int> *syscall_numbers)
146 std::vector<syscall_group_desc_up>
groups;
187 std::vector<syscall_group_desc_up>::iterator it
192 if ((*it)->name == group)
199 groupdesc = it->get ();
213 const char *
name,
int number,
const char *
alias,
225 for (
char *group = strtok_r (groups,
",", &saveptr);
227 group = strtok_r (NULL,
",", &saveptr))
248 if (strcmp (attr.name,
"name") == 0)
249 name = (
char *) attr.value.get ();
250 else if (strcmp (attr.name,
"number") == 0)
251 number = * (ULONGEST *) attr.value.get ();
252 else if (strcmp (attr.name,
"alias") == 0)
253 alias = (
char *) attr.value.get ();
254 else if (strcmp (attr.name,
"groups") == 0)
255 groups = (
char *) attr.value.get ();
257 internal_error (_(
"Unknown attribute name '%s'."), attr.name);
294 data.syscalls_info = sysinfo.get ();
300 return sysinfo.release ();
304 warning (_(
"Could not load XML syscalls info; ignoring"));
317 gdb::optional<gdb::char_vector> full_file
323 const std::string dirname =
ldirname (filename);
324 auto fetch_another = [&dirname] (
const char *
name)
366 if (xml_syscall_file != NULL)
367 warning (_(
"Could not load the syscall XML file `%s/%s'."),
368 gdb_datadir.c_str (), xml_syscall_file);
370 warning (_(
"There is no XML file to open."));
372 warning (_(
"GDB will not be able to display "
373 "syscall names nor to verify if\n"
374 "any provided syscall numbers are valid."));
399 if (groupdesc->name == group)
400 return groupdesc.get ();
408 std::vector<int> *syscall_numbers)
413 if (
syscalls_info != NULL && syscall_name != NULL && syscall_numbers != NULL)
415 if (sysdesc->name == syscall_name || sysdesc->alias == syscall_name)
417 syscall_numbers->push_back (sysdesc->number);
431 || syscall_number < 0)
435 if (sysdesc->number == syscall_number)
436 return sysdesc->name.c_str ();
450 const char **names = XNEWVEC (
const char *, nsyscalls + 1);
476 if (groupdesc == NULL)
493 const char **names = NULL;
501 names = (
const char**)
xmalloc ((ngroups + 1) *
sizeof (
char *));
519 int syscall_number,
struct syscall *s)
523 s->
number = syscall_number;
529 std::vector<int> *syscall_numbers)
548 std::vector<int> *syscall_numbers)
static struct @5 attributes[]
struct syscalls_info * gdbarch_syscalls_info(struct gdbarch *gdbarch)
const char * gdbarch_xml_syscall_file(struct gdbarch *gdbarch)
void set_gdbarch_syscalls_info(struct gdbarch *gdbarch, struct syscalls_info *syscalls_info)
void set_gdbarch_xml_syscall_file(struct gdbarch *gdbarch, const char *xml_syscall_file)
syscall_desc(int number_, std::string name_, std::string alias_)
syscall_group_desc(const std::string &name_)
std::vector< syscall_desc * > syscalls
struct syscalls_info * syscalls_info
std::vector< syscall_group_desc_up > groups
std::vector< syscall_desc_up > syscalls
std::string my_gdb_datadir
std::string ldirname(const char *filename)
gdb::optional< gdb::char_vector > xml_fetch_content_from_file(const char *filename, const char *dirname)
int gdb_xml_parse_quick(const char *name, const char *dtd_name, const struct gdb_xml_element *elements, const char *document, void *user_data)
gdb_xml_attribute_handler gdb_xml_parse_attr_ulongest
gdb::function_view< gdb::optional< gdb::char_vector >(const char *)> xml_fetch_another
static struct syscalls_info * syscall_parse_xml(const char *document, xml_fetch_another fetcher)
static struct syscall_group_desc * syscall_group_create_syscall_group_desc(struct syscalls_info *syscalls_info, const char *group)
static const struct gdb_xml_element syscalls_info_children[]
static void syscall_group_add_syscall(struct syscalls_info *syscalls_info, struct syscall_desc *syscall, const char *group)
static const char ** xml_list_of_syscalls(struct gdbarch *gdbarch)
const char ** get_syscall_group_names(struct gdbarch *gdbarch)
static const struct gdb_xml_attribute syscall_attr[]
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)
static const struct gdb_xml_element syselements[]
bool get_syscalls_by_group(struct gdbarch *gdbarch, const char *group, std::vector< int > *syscall_numbers)
const char ** get_syscall_names(struct gdbarch *gdbarch)
static bool xml_list_syscalls_by_group(struct gdbarch *gdbarch, const char *group, std::vector< int > *syscalls)
static struct syscalls_info * xml_init_syscalls_info(const char *filename)
std::unique_ptr< syscall_group_desc > syscall_group_desc_up
static bool xml_get_syscalls_by_name(struct gdbarch *gdbarch, const char *syscall_name, std::vector< int > *syscall_numbers)
std::unique_ptr< syscalls_info > syscalls_info_up
bool get_syscalls_by_name(struct gdbarch *gdbarch, const char *syscall_name, std::vector< int > *syscall_numbers)
static void syscall_start_syscall(struct gdb_xml_parser *parser, const struct gdb_xml_element *element, void *user_data, std::vector< gdb_xml_value > &attributes)
static const char ** xml_list_of_groups(struct gdbarch *gdbarch)
static void init_syscalls_info(struct gdbarch *gdbarch)
static const char * xml_get_syscall_name(struct gdbarch *gdbarch, int syscall_number)
static struct syscall_group_desc * syscall_group_get_group_by_name(const struct syscalls_info *syscalls_info, const char *group)
static void syscall_create_syscall_desc(struct syscalls_info *syscalls_info, const char *name, int number, const char *alias, char *groups)
std::unique_ptr< syscall_desc > syscall_desc_up
void get_syscall_by_number(struct gdbarch *gdbarch, int syscall_number, struct syscall *s)