Re: [PATCH] Support gzip compressed exec and core files in gdb

Michael Eager
2015-03-11T20:12:55Z

On 03/11/15 11:24, Cary Coutant wrote:
> How will this affect split DWARF?
>
> If you uncompress a foo.gz binary, and the binary has relative paths
> to .dwo files, will GDB look for the .dwo files relative to the
> original binary, or to the uncompressed binary?

GDB should look for .dwo files relative to the original file. The
uncompressed file is essentially hidden.

If you can send me a test case creating .dwo files, I'll make sure
that it works.

> When it looks for a .dwp file, will it look for foo.dwp or foo.gz.dwp,
> and will it look in the same directory as the original, or in /tmp?
>
> If foo.dwp is also compressed, will it uncompress that?

The file search for exec and core are unchanged, so gdb will find
whatever file it is asked to look for, using the current search path,
exactly as it does now. No file names are modified.

There's specific code to uncompress exec and core files. I might
need to add code for dwp.

I originally looked at doing decompression in BFD, so that it would
simply be transparent. If a component opened a gzipped file, BFD
would transparently decompress it. This didn't work. GDB does
some file operations, like closing and reopening files, which I think
should be done in BFD.

> Would it make sense to support .tar.gz/.tgz files containing both a
> binary and its .dwp?

Perhaps, but I don't want to extend this (conceptually) simple extension
to also handling tar files. Maybe as a follow-on.

>
> -cary
>
>
>
> On Tue, Mar 10, 2015 at 4:01 PM, Michael Eager <eager@eagerm.com> wrote:
>> Add support to automatically unzip compressed executable and core files.
>> Files will be uncompressed into temporary directory (/tmp or $TMPDIR)
>> and are deleted when GDB exits. This should be transparent to users,
>> except for disk space requirements. The name of the uncompressed file is
>> mentioned, but all references to the file in GDB messages is to the file
>> which the user specified.
>>
>> This operation cannot be done completely by BFD because BFD allows an opened
>> file to be passed to it for processing. GDB uses this functionality.
>>
>> BFD:
>> * bfd-in2.h: Regenerate.
>> * bfd.c (struct bfd): Add uncompressed_filename.
>> * bfdio.c (bfd_get_mtime): Set bfd->mtime_set to true.
>> * cache.c (bfd_open): Open previously created uncompressed file.
>>
>> GDB:
>> * common/filestuff.c (struct compressed_file_cache_search,
>> eq_compressed_file,
>> is_gzip, decompress_gzip, do_compressed_cleanup, gdb_uncompress): New.
>> * common/filestuff.h (gdb_uncompress): Declare.
>> * corelow.c (core_open): Uncompress core file.
>> * exec.c (exec_file_attach): Uncompress exe file.
>> * symfile.c (symfile_bfd_open): Uncompress sym (exe) file.
>>
>> GDB/DOC:
>> * gdb.texinfo: Mention gzipped exec and core files.
>>
>> --
>> Michael Eager eager@eagercon.com
>> 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
>

--
Michael Eager eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077