Skip to content
Tom Tromey edited this page May 14, 2018 · 3 revisions

Here's a rundown of all the branches hosted here and what they are for.

The branches are in varying stages of usefulness and completeness. I've tried to note everything relevant, but there's really no substitute for reading the patches yourself.

If you're interested in basing your work on a branch, please feel free. I'd appreciate a note if you found something useful or if you plan to submit it upstream.

avoid-alloc-minsym-hash

I posted this one to the list recently. It shrinks objfile a bit if there are no mangled symbols.

bfd-fixes

I started trying to fix a BFD memory "leak" (really a "loiterer" in java lingo), but didn't finish. There's a bug in Bugzilla.

catch-exec-name

Started to add a regexp argument to catch exec so you could catch execs by name. Don't recall the status.

catch-exit

Initial work on a catch exit patch that uses PTRACE_O_TRACEEXIT. IIRC it mostly works for native but I didn't do the remote bits yet. At some point I had an actual use case in mind for this but I no longer recall it.

cleanup-checker

Extra patches for the cleanup checker to let us mark some functions as "known to leak a cleanup". I never put this in since it seemed like a not very good idea. Instead it's better to fix up APIs so that leaking cleanups is never normal.

cleanups/cli-user-commands

Make CLI user commands use reference-counted command lists. I think there's some bug that this is supposed to fix.

cleanups/value-deprecation-removals

Remove some deprecated value APIs, but mostly really just by renaming them and turning them into a slightly more acceptable form. It's not clear this is really a good direction.

frame-cache-change

An attempt to move the frame cache to the address space.

gcc-pr-55608-fallout

An attempt to automatically dereference synthetic pointers when printing. Currently gdb prints:

(gdb) p c
$2 = (byte *) <synthetic pointer>

... which is pretty useless. See GCC PR 55608, I think, for some discussion.

gdbserver-vs-filestuff

Make gdbserver use filestuff for CLOEXEC. There was a discussion on the list at some point about this. It has some issue I didn't fix. This might all be simpler now that gdbserver can use libiberty.

intern-simple-types

Share most identical types in an objfile. This can save memory when multiple CUs are expanded. However, dealing with structs and unions is unimplemented; this is non-trivial due to mutually recursive data structures. So, the actual savings seen are rather modest. Also, I think much of the savings one might expect from this work can also be achieved by simply running dwz.

lazily-read-function-bodies

When expanding a CU, one can save a lot of time by skipping function bodies. IIRC I measured this at ~40% of the time to expand a CU. Normally this is not important but there are some outlying CUs in some large C++ programs.

This patch is incomplete because I never made it expand function bodies when a by-address lookup is done.

This may be worth resurrecting though it's tempting to go one step further and also lazily instantiate types. Or even further -- unify partial and full symbols. for DWARF and make CU expansion completely lazy.

mempool-valgrind-annotations

Adds valgrind client request checks to objalloc. obstack still would have to be done. I was hoping this would give some information about "slop" (memory in a chunk that is wasted) but I couldn't find a way to get this information from valgrind. This does however catch more out-of-bounds accesses.

more-target-delegates

One remaining patch to make to_info_proc use delegation. It's mildly questionable so I never submitted it. The remaining non-delegating target methods probably require a more principled unified approach.

move-gdbserver-to-top-level

An attempt to move gdbserver, common, and gnulib to top-level. This simplifies the build a bit and generally makes things more sane. It also provocatively names the new top-level directory "libgdb"... the circle is complete.

This needs some work, but I think it's still a good idea.

multi-target

Multi-target work. See the wiki. This needs a pretty substantial revamp, I'm afraid, though I think the core concepts are salvageable, as are patches to convert particular targets (corelow comes to mind) to avoid global variables.

A decent chunk of the useful part of this is now on multi-target-corelow. The record-* target bits aren't (and probably must be redone) and the bits to add a target id to a ptid are not (and these may also need to be redone).

multi-target-corelow

Some work extracted from multi-target and made prepped for submission. This converts the corelow and other targets to be multi-target-ready; introducing a new style of target instantiation to do so. It also adds the target stack.

namespace-test

A couple namespace tests, not sure why I thought this was needed.

no-val-print

An attempt to remove val_print in favor of using only value_print. This is still a good idea but not critical given that Intel has addressed VLA in a different way. Implementing this is just a big slog through a lot of code; the only real gotcha is making sure that gdb doesn't allocate too much temporary memory when printing; but even if it does there are probably reasonable ways to solve this.

operator-new-delete

A lot of code to implement new and delete in the C++ expression parser. This is incomplete, I think there's a list of issues in the README.archer. This patch perhaps more than any other convinced me that the compiler project was the way to go for users wanting real C++ expression parsing.

pagination-continue-feature

The patch to let you type "c" at the pagination prompt. This still needs a NEWS entry and maybe something else, you'll have to consult the list archives.

pr-12707-physname-cleanup

My attempt at fixing PR 12707. There's a thread about it on the list. I added my comments about 12707 to the PR, basically I came up with a completely different approach that should save memory in symbols and symbol tables and that also fixes this issue. However, it is a bit tricky and requires at least name canonicalization for all languages.

pr-16155-thread-bt-aarch64

Fixes for AArch64, originally from PR 16155. Probably dead now or all upstreamed. There was one patch that I backed out as it was described as "obviously wrong", though I never actually understood what was wrong about it. I think there's a test for the questionable case on the branch, but of course no ready explanation.

process-vm-readv

Use the Linux process_vm_readv and process_vm_writev APIs. Only done for gdb, not gdbserver.

python/changes-for-gui

Allows for Python to override CLI commands but still call into the old underlying command -- quite handy. I hacked this up for FOSDEM.

python/init-fixup

Address a Python startup problem that Hui and others have pointed out. Discussion seems stalled.

python/misc-hacks

Some random commands written in Python.

python/pie

Build gdb as PIE and arrange for "import gdb" to work from an ordinary Python interpreter. This also has a number of other random Python changes and some unrelated struct shrinkages that I moved upstream already. The submit/python/* branches probably have everything relevant here.

python/pr-13351-fix

Fixes PR 13351, I don't recall why it didn't go in.

python/progspace-submit

Python progspace cleanups. Some changes were requested which I haven't gotten around to implementing.

python/simple-vla-prettyprinter

A partial attempt to write a generic pretty-printer that understands the C struct hack. Probably a nice bit of infrastructure to provide.

python/stap-mutex-command

A branch holding info mutex. Probably none of it really works.

reading-progress-message

This is a fun one -- it changes the gdb "Loading ..." messages to use a nice progress bar. This looks much prettier; for one thing it gets rid of the output where gdb looks like it is interrupting itself to tell you about the separate debuginfo.

This kind of works though there are still some bugs. Also, for MI, there is a defined way to output these kind of progress messages, but as far as I can tell (I vaguely recall running into one spot but I can't find it now) nothing actually does so. So it isn't clear what to do there.

shrink-symbols

Crunch symbols to be a bit smaller. Fairly ugly so I never put it in. I think it does shave another word off of partial_symbol though.

sort-static-psymbols

Static psymbols aren't sorted, so I was curious about the impact. Rather big startup slowdown, no noticeable improvements. So ... dead, but left around as a reminder.

split-objfile/line-table

split-objfile/psymbols

Two split-objfile branches that I submitted upstream but have not put in. Not sure why other than vague fear and the sense that no-one cares.

split-objfile/type-alloc-fix

split-objfile/type-no-objfile-backlink

Some attempts to remove the objfile backlink from struct type. This is necessary but not sufficient for split objfile to work. It's all discussed on the wiki page.

static-link-fix

Try to fix PR 8300 -- gdb ignores DW_AT_static_link. This needs some revamping to be cleaner. It has been blocked for a couple of years now because GCC still emits the wrong debuginfo (link to GCC PR in the GDB PR), so even if this went in, it would not work. The test case on this branch is still worth keeping even if the patch itself needs rewriting.

submit/python/inferior-additions

submit/python/pie

Stuff extracted from tromey/python/pie. The inferior-additions branch was submitted upstream (but needs changes). The PIE branch isn't polished yet.

threaded-dwarf-reader

A patch from the early days to make gdb multi-threaded and read DWARF in worker threads. I was proud of this branch so I never deleted it. I think it doesn't help any real-world case.

use-new-macros

Change mumble_alloc (sizeof (type)) to MUMBLE_NEW (type). Attempts to do this everywhere in gdb. It's quite large but I think improves type-safety. This work found two (semi-) bugs in gdb, those fixes I pushed in.

Note that this could go one step further and introduce a _NEW analogue to TYPE_ALLOC. This would result in a few more conversions.

Not sure if the patch is complete.

yacc-dash-p

Use yacc -p instead of the current hacks. Surprisingly tricky to make this work.