This is the mail archive of the mailing list for the glibc 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 v8] Add pretty printers for the NPTL lock types

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/
> 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 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  <>
> 	* 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/ New file.
> 	* nptl/ 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/ Likewise.
> 	* pretty-printers/test-mutex-attributes.c: Likewise.
> 	* pretty-printers/ Likewise.
> 	* pretty-printers/test-mutex-printer.c: Likewise.
> 	* pretty-printers/ Likewise.
> 	* pretty-printers/test-rwlock-attributes.c: Likewise.
> 	* pretty-printers/ Likewise.
> 	* pretty-printers/test-rwlock-printer.c: Likewise.
> 	* pretty-printers/ Likewise.
> 	* pretty-printers/ 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.


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