This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v8] Add pretty printers for the NPTL lock types
- From: Siddhesh Poyarekar <siddhesh at sourceware dot org>
- To: Martin Galvan <martin dot galvan at tallertechnologies dot com>
- Cc: libc-alpha at sourceware dot org, carlos at redhat dot com
- Date: Wed, 8 Jun 2016 21:09:01 +0530
- Subject: Re: [PATCH v8] Add pretty printers for the NPTL lock types
- Authentication-results: sourceware.org; auth=none
- References: <20160608153304 dot 12910-1-martin dot galvan at tallertechnologies dot com>
On Wed, Jun 08, 2016 at 12:33:04PM -0300, Martin Galvan wrote:
> This patch adds pretty printers for the following NPTL types:
>
> - pthread_mutex_t
> - pthread_mutexattr_t
> - pthread_cond_t
> - pthread_condattr_t
> - pthread_rwlock_t
> - pthread_rwlockattr_t
>
> To load the pretty printers into your gdb session, do the following:
>
> python
> import sys
> sys.path.insert(0, '/path/to/glibc/build/nptl/pretty-printers')
> end
>
> source /path/to/glibc/source/pretty-printers/nptl-printers.py
>
> You can check which printers are registered and enabled by issuing the
> 'info pretty-printer' gdb command. Printers should trigger automatically when
> trying to print a variable of one of the types mentioned above.
>
> The printers are architecture-independent, and were manually tested on both
> the gdb CLI and Eclipse CDT.
>
> In order to work, the printers need to know the values of various flags that
> are scattered throughout pthread.h and pthreadP.h as enums and #defines. Since
> replicating these constants in the printers file itself would create a
> maintenance burden, I wrote a script called gen-py-const.awk that Makerules uses
> to extract the constants. This script is pretty much the same as gen-as-const.awk,
> except it doesn't cast the constant values to 'long' and is thorougly documented.
> The constants need only to be enumerated in a .pysym file, which is then referenced
> by a Make variable called gen-py-const-headers.
>
> As for the install directory, I discussed this with Mike Frysinger and Siddhesh
> Poyarekar, and we agreed that it can be handled in a separate patch, and it shouldn't
> block merging of this one.
>
> In addition, I've written a series of test cases for the pretty printers.
> Each lock type (mutex, condvar and rwlock) has two test programs, one for itself
> and other for its related 'attributes' object. Each test program in turn has a
> PExpect-based Python script that drives gdb and compares its output to the
> expected printer's. The tests run on the glibc host, which is assumed to have
> both gdb and PExpect; if either is absent the tests will fail with code 77
> (UNSUPPORTED). For cross-testing you should use cross-test-ssh.sh as test-wrapper.
> I've tested the printers on both a native build and a cross build using a Beaglebone
> Black, with the build system's filesystem shared with the board through NFS.
>
> Finally, I've written a README that explains all this and more.
>
> Hopefully this should be good to go in now. Thanks.
>
> ChangeLog:
>
> 2016-06-08 Martin Galvan <martin.galvan@tallertechnologies.com>
>
> * Makeconfig (all-subdirs): Add pretty-printers.
> * Makerules ($(py-const)): New rule.
> * Rules (others): Add $(py-const), if defined.
> * nptl/Makefile (gen-py-const-headers): New variable.
> * nptl/nptl-printers.py: New file.
> * nptl/nptl_lock_constants.py: Likewise.
> * nptl/nptl_lock_constants.pysym: Likewise.
> * pretty-printers/Makefile: Likewise.
> * pretty-printers/README: Likewise.
> * pretty-printers/test-condvar-attributes.c: Likewise.
> * pretty-printers/test-condvar-attributes.p: Likewise.
> * pretty-printers/test-condvar-printer.c: Likewise.
> * pretty-printers/test-condvar-printer.py: Likewise.
> * pretty-printers/test-mutex-attributes.c: Likewise.
> * pretty-printers/test-mutex-attributes.py: Likewise.
> * pretty-printers/test-mutex-printer.c: Likewise.
> * pretty-printers/test-mutex-printer.py: Likewise.
> * pretty-printers/test-rwlock-attributes.c: Likewise.
> * pretty-printers/test-rwlock-attributes.py: Likewise.
> * pretty-printers/test-rwlock-printer.c: Likewise.
> * pretty-printers/test-rwlock-printer.py: Likewise.
> * pretty-printers/test_common.py: Likewise.
> * scripts/gen-py-const.awk: Likewise.
Thanks, looks good to me now on visual inspection. I'll test it out
and give it a spin this weekend and also give a week to anybody else
who may want to review the patch. So if everything goes well, I'll
push this patch in about a week.
Siddhesh