This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: RFC: Add support for SHF_COMPRESSED
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Jan Beulich <JBeulich at suse dot com>
- Cc: Binutils <binutils at sourceware dot org>, GDB <gdb at sourceware dot org>
- Date: Wed, 18 Mar 2015 14:29:17 -0700
- Subject: Re: RFC: Add support for SHF_COMPRESSED
- Authentication-results: sourceware.org; auth=none
- References: <CAMe9rOp7=hH0HSVmbKohv=5JmcV25owj_RtnPYirG1Bhej=XkA at mail dot gmail dot com> <550318C90200007800069E5B at mail dot emea dot novell dot com> <CAMe9rOoy9dbAw7Kh9+-haTE4gj4331Dk5E1YAr+1Xx+HBzCF0w at mail dot gmail dot com> <55031C360200007800069EAF at mail dot emea dot novell dot com>
On Fri, Mar 13, 2015 at 9:19 AM, Jan Beulich <JBeulich@suse.com> wrote:
>>>> On 13.03.15 at 17:13, <hjl.tools@gmail.com> wrote:
>> On Fri, Mar 13, 2015 at 9:05 AM, Jan Beulich <JBeulich@suse.com> wrote:
>>>>>> On 13.03.15 at 16:31, <hjl.tools@gmail.com> wrote:
>>>> I am working on SHF_COMPRESSED support:
>>>>
>>>> http://www.sco.com/developers/gabi/latest/ch4.sheader.html
>>>>
>>>> We already have .zdebug* sections, which aren't compatible
>>>> with SHF_COMPRESSED scheme due to missing compression
>>>> header. What section names should we use for SHF_COMPRESSED
>>>> debug sections. Using .debug* or .zdebug* will break existing tools.
>>>> I am thinking .zlibdebug* or ..Zdebug*. Any suggestions?
>>>
>>> Why would they need to have different names anyway? They're
>>> distinguishable by the flag.
>>
>> Won't the exiting tools, like GDB, choke on compressed .debug* sections?
>
> If they're well behaved, they shouldn't (they should just ignore
> them).
>
I implemented SHF_COMPRESSED on users/hjl/compressed
branch. The old gdb doesn't understand SHF_COMPRESSED:
Reading symbols from bfd.gz...Dwarf Error: wrong version in
compilation unit header (is 136, should be 2, 3, or 4) [in module
/export/home/hjl/bugs/binutils/compressed-2/bfd.gz]
(no debugging symbols found)...done.
(gdb)
and the new gdb works fine:
Reading symbols from gold.gz...done.
(gdb) b main
Breakpoint 1 at 0x400450: file x.c, line 6.
(gdb) r
Starting program: /export/home/hjl/bugs/binutils/compressed-2/gold.gz
Breakpoint 1, main () at x.c:6
6 printf ("hello world\n");
(gdb)
I added --compressed-debug-sections=[none|zlib] to as and
objcopy. I updated gold to decompress SHF_COMPRESSED
section. I didn't add --compressed-debug-sections=[none|zlib]
to gold since I don't know if this name is a final choice nor
gold maintainers want such an option.
I wrote some as/objcopy tests:
[hjl@gnu-6 compressed-1]$ make
./as --x32 --nocompress-debug-sections -o x.o x.s
./as --x32 --compressed-debug-sections=zlib -o compressed0.o x.s
./objcopy --compressed-debug-sections=zlib x.o compressed.o
cmp compressed.o compressed0.o
./as --x32 --compress-debug-sections -o compress0.o x.s
./objcopy --compress-debug-sections x.o compress.o
cmp compress.o compress0.o
./objcopy --compressed-debug-sections=none x.o decompressed.o
cmp x.o decompressed.o
./objcopy --compressed-debug-sections=none compressed.o decompressed.o
cmp compressed.o decompressed.o
./objcopy --compressed-debug-sections=none compress.o decompressed.o
cmp compress.o decompressed.o
./objcopy --decompress-debug-sections compressed.o decompressed.o
cmp x.o decompressed.o
./objcopy --decompress-debug-sections compress.o decompressed.o
cmp x.o decompressed.o
cp x.o y.o
ar rv libx.a y.o
ar: creating libx.a
a - y.o
ar rc libx.a y.o
./objcopy --compressed-debug-sections=zlib x.o compressed1.o
cmp compressed1.o compressed.o
./objcopy --compressed-debug-sections=zlib compress.o compressed2.o
cmp compressed2.o compressed.o
./objcopy --compress-debug-sections compressed.o compresse1.o
cmp compresse1.o compress.o
./objcopy --compressed-debug-sections=zlib libx.a liby.a
ar xv liby.a y.o
x - y.o
cmp y.o compressed.o
./objcopy --compress-debug-sections liby.a
ar xv liby.a y.o
x - y.o
cmp y.o compress.o
./objcopy --compressed-debug-sections=zlib liby.a
ar xv liby.a y.o
x - y.o
cmp y.o compressed.o
./objcopy --decompress-debug-sections liby.a
ar xv liby.a y.o
x - y.o
cmp y.o decompressed.o
[hjl@gnu-6 compressed-1]$
and ld/gold/gdb tests:
gcc -mx32 -B./ -g -Wa,--compressed-debug-sections=zlib -c x.c -o x.o
gcc -mx32 -B./ -o bfd x.o -fuse-ld=bfd
gcc -mx32 -B./ -o gold x.o -fuse-ld=gold
./objcopy --compressed-debug-sections=zlib gold gold.gz
./objcopy --compressed-debug-sections=zlib bfd bfd.gz
./gdb -batch -x gdb.cmd bfd.gz
Breakpoint 1 at 0x4003b0: file x.c, line 6.
Breakpoint 1, main () at x.c:6
6 printf ("hello world\n");
A debugging session is active.
Inferior 1 [process 5951] will be killed.
Quit anyway? (y or n) [answered Y; input not from terminal]
./gdb -batch -x gdb.cmd gold.gz
Breakpoint 1 at 0x400450: file x.c, line 6.
Breakpoint 1, main () at x.c:6
6 printf ("hello world\n");
A debugging session is active.
Inferior 1 [process 5962] will be killed.
Quit anyway? (y or n) [answered Y; input not from terminal]
[hjl@gnu-6 compressed-2]$
Any feedbacks?
Thanks.
--
H.J.