Re: [PATCH] gdb: print size of downloaded debuginfod binary

Martin Liška
2020-12-09T10:51:21Z

[-- Attachment #1: Type: text/plain, Size: 774 bytes --]

On 12/8/20 3:28 PM, Simon Marchi wrote:
> On 2020-12-08 5:16 a.m., Martin Liška wrote:
>> Temporary breakpoint 1 at 0x406150: file /home/marxin/Programming/gcc/gcc/gcc-main.c, line 44.
>> Starting program: /home/marxin/bin/gcc/bin/gcc
>> Downloading 1.00 MB separate debug info for /lib64/ld-linux-x86-64.so.2...10%..20%..30%..40%..50%..60%..70%..80%..90%..100%
>> Downloading 4.20 MB separate debug info for /lib64/libm.so.6...10%..20%..30%..40%..50%..60%..70%..80%..90%..100%
>> Downloading 10.72 MB separate debug info for /lib64/libc.so.6...10%..20%..30%..40%..50%
>>
>> Thoughts?
>
> Could you make it so the percentage always gets written at the same place, overwriting the  previous percentage written?

Sure, implemented in the attached patch.

Martin

>
> Simon

[-- Attachment #2: 0001-gdb-Print-percent-progress-for-debuginfod.patch --]
[-- Type: text/x-patch, Size: 2171 bytes --]

From 51f332475399ce42767fc912291fa879b91d4ddf Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Wed, 9 Dec 2020 11:48:15 +0100
Subject: [PATCH] gdb: Print percent progress for debuginfod.

Prints progress like:

Downloading 4.89 MB separate debug info for /usr/lib64/libgcrypt.so.20.. 100%
Downloading 1.10 MB separate debug info for /usr/lib64/liblzma.so.5.. 100%
Downloading 1.31 MB separate debug info for /usr/lib64/liblz4.so.1.. 100%
Downloading 0.96 MB separate debug info for /usr/lib64/libsmime3.so.. 36%

ChangeLog:

* gdb/debuginfod-support.c (struct user_data): Add
last_percent_printed field.
(progressfn): Print progress.
---
gdb/debuginfod-support.c | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
index e21b2f40ca..3d68f08fc0 100644
--- a/gdb/debuginfod-support.c
+++ b/gdb/debuginfod-support.c
@@ -46,12 +46,12 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
struct user_data
{
user_data (const char *desc, const char *fname)
- : desc (desc), fname (fname), has_printed (false)
+ : desc (desc), fname (fname), last_percent_printed (-1)
{ }

const char * const desc;
const char * const fname;
- bool has_printed;
+ long last_percent_printed;
};

/* Deleter for a debuginfod_client. */
@@ -80,13 +80,20 @@ progressfn (debuginfod_client *c, long cur, long total)
return 1;
}

- if (!data->has_printed && total != 0)
+ if (total != 0)
{
/* Print this message only once. */
- data->has_printed = true;
- printf_filtered ("Downloading %s %ps...\n",
- data->desc,
- styled_string (file_name_style.style (), data->fname));
+ long percent = 100 * cur / total;
+ if (percent != data->last_percent_printed)
+ {
+ data->last_percent_printed = percent;
+ printf_filtered ("\rDownloading %.2f MB %s %ps.. %3ld%%%s",
+ 1.0f * total / (1024 * 1024),
+ data->desc,
+ styled_string (file_name_style.style (), data->fname),
+ percent, cur == total ? "\n" : "");
+ gdb_flush (gdb_stdout);
+ }
}

return 0;
--
2.29.2