This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2] ARM Linux support for `catch syscall'


Hi Samuel,

Thanks for the patch.  A few comments.

On Wednesday, July 31 2013, Samuel Bronson wrote:

> This time, it passes all the tests and comes with a nearly complete
> XML file (plus a script that can nearly regenerate the XML file).

So the XML file is not complete?  What's missing?  IMO it should
certainly be complete, even if the script can't generate it entirely (in
which case it should be hand editted).

> diff --git a/gdb/syscalls/arm-linux.py b/gdb/syscalls/arm-linux.py
> new file mode 100755
> index 0000000..0814dd4
> --- /dev/null
> +++ b/gdb/syscalls/arm-linux.py
> @@ -0,0 +1,60 @@
> +# Copyright (C) 2013 Free Software Foundation, Inc.
> +
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +import sys
> +import re
> +import time
> +
> +infname = sys.argv[1]
> +inf = file(infname)
> +
> +print("""\
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2009-%s Free Software Foundation, Inc.

The copyright year should be from 2013 to %s, I guess.

> +
> +     Copying and distribution of this file, with or without modification,
> +     are permitted in any medium without royalty provided the copyright
> +     notice and this notice are preserved.  This file is offered as-is,
> +     without any warranty. -->
> +
> +<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
> +
> +<!-- This file was generated using the following file:
> +
> +     %s
> +
> +     The file mentioned above belongs to the Linux Kernel.
> +     Some small hand-edits were made. -->
> +
> +<syscalls_info>""" % (time.strftime("%Y"), infname))
> +
> +def record(name, number, comment=None):
> +    #nm = 'name="%s"' % name
> +    #s = '  <syscall %-30s number="%d"/>' % (nm, number)
> +    s = '  <syscall name="%s" number="%d"/>' % (name, number)
> +    if comment:
> +        s += ' <!-- %s -->' % comment
> +    print(s)
> +
> +for line in inf:
> +    m = re.match(r'^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE\+\s*(\d+)\)',
> +                 line)
> +    if m:
> +        record(m.group(1), int(m.group(2)))
> +        continue
> +
> +    m = re.match(r'^\s+/\* (\d+) was sys_(\w+) \*/$', line)
> +    if m:
> +        record(m.group(2), int(m.group(1)), 'removed')

I don't get the 'removed' comment.  Looking at
<include/linux/arch/arm/include/uapi/asm/unistd.h>, I don't see the
syscalls marked as "removed" in the XML file below.  Where did they come
from?

> +
> +    m = re.match(r'^#define __ARM_NR_(\w+)\s+\(__ARM_NR_BASE\+\s*(\d+)\)',
> +                 line)
> +    if m:
> +        record('ARM_'+m.group(1), 0x0f0000+int(m.group(2)))
> +        continue
> +
> +print('</syscalls_info>')
> diff --git a/gdb/syscalls/arm-linux.xml b/gdb/syscalls/arm-linux.xml
> new file mode 100644
> index 0000000..b35125c
> --- /dev/null
> +++ b/gdb/syscalls/arm-linux.xml
> @@ -0,0 +1,398 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2009-2013 Free Software Foundation, Inc.
[...]

The rest looks good to me!  Thanks a lot, and thanks for the script :-).

-- 
Sergio


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]