Differences between revisions 8 and 9
Revision 8 as of 2013-07-31 10:59:35
Size: 3483
Editor: PedroAlves
Comment: Add guidelines/file naming
Revision 9 as of 2013-07-31 11:01:19
Size: 3533
Editor: PedroAlves
Comment: Add TOC.
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#pragma section-numbers 2
Line 2: Line 3:

Common part of GDB and GDBserver

This page describes the work to move duplicate code of GDB and GDBserver to files in the gdb/common/ directory.

1. Goal

The goal of this project is to reduce the code duplication between GDB and GDBserver, and to signify the contents of the gdb/common/ directory.

2. Plan

Here is something like a plan on what we can do on this project,

  • Move duplicated code among *-nat.c and *-low.c. Some macros, and code accessing hardware registers should be the same on both GDB and GDBserver. No reason to keep the same code in two copies respectively. Move these duplicated part to common/ directory, and give a logically reasonable file name. For example, the code for accessing debug registers are duplicated in i386-low.c and i386-nat.c, so they can be moved to common directory with file name i386-dbg-reg.c and i386-rdbg-reg.h. See Move common macros to i386-dbg-reg.h. There is no automatic way to identify the duplications between *-nat.c and *-low.c except examining code manually.

  • Move gdb_thread_db.h and gdb_wait.h to common directory. gdb/gdb_thread_db.h is include by both GDB and GDBserver, so it is straightforward to move gdb_thread_db.h to common/ dir. gdb_wait.h can be moved to common dir as well, as discussed here.

  • Move duplicated code utils.c and gdbserver/utils.c. So far, there are two instance of implementations to functions like xmalloc, xrealloc, internal_error, etc. They are not 100% the same, but can be moved to common/utils.c
  • Move duplicated code in gdb/linux-thread-db.c and gdb/gdbserver/thread-db.c. There should be some duplications, but still no idea on how to, due to lack of knowledge on these two files. As part of this piece of work, part of gdb_proc_serivce.h in GDB and GDBserver can be moved to common dir, and leave its own definition of 'struct ps_prochandle'.
  • Part of terminal.h is duplicated as well, and we can move them to common/ dir.

3. Guidelines

3.1. File Naming

  • Avoid "common" in file names in files under common/. Instead, name the files for what they contain, not for the fact that they're "common" to two programs (gdb, gdbserver) presently. The preferred direction is, when moving things to common/, take the opportunity to split them into smaller, more atomic, leaner units. E.g., that's how we ended up with ptid.h/ptid.c, instead of inferior-common.h (or some such). If the resulting file is just a dumping ground of miscellaneous things, then call it that. Say, foo-misc.h or foo-defs.h, not foo-common.h.

4. Build/Configure

In order not to mess up the plan above, Yao moves build/configure related stuff into a separate section. In March 2011, Yao gave a try to build stuffs in common/ directory into libcommon.a, for GDB and GDBserver to link. See the thread on this here. Finally, patches were dropped from CVS, because of various failures they caused.

So far, we have three possible approaches,

  1. Don't have its own build stuff in common/, let gdb or gdbserver to build them.
  2. Create Makefile.am and m4 files, but don't creat configure files. Similar to what we did for gnulib. This is suggested by Pedro.
  3. Use Yao's original's patches, with various bugs fixed.


None: Common (last edited 2016-01-16 14:43:53 by PedroAlves)

All content (C) 2008 Free Software Foundation. For terms of use, redistribution, and modification, please see the WikiLicense page.