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

Martin Liška
2020-12-08T10:16:08Z

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

On 12/7/20 6:07 PM, Simon Marchi wrote:
>
>
> On 2020-12-07 6:43 a.m., Martin Liška wrote:
>> With the patch, one can see now:
>>
>> Reading symbols from /usr/bin/gcc...
>> Downloading 2.69 MiB separate debug info for /usr/bin/gcc...
>> Downloading 1.00 MiB separate debug info for /lib64/ld-linux-x86-64.so.2...
>> Downloading 10.72 MiB separate debug info for /lib64/libc.so.6...
>> ...
>

Thank you for the review.

> I think that's a good idea.  Given that we don't have a progress bar (yet), this gives clue to the user about why it might take some time.

Btw. I can also offer a WIP patch that implements the progress bar:

...
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?

>
> Let's see if others have other opinions about this.  If nothing comes for by next week, you can go ahead and merge it.

All right,
thanks,
Martin

>
> Simon

[-- Attachment #2: gdb-progress-bar.patch --]
[-- Type: text/x-patch, Size: 1723 bytes --]

diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
index e21b2f40ca..5a810b897d 100644
--- a/gdb/debuginfod-support.c
+++ b/gdb/debuginfod-support.c
@@ -43,14 +43,17 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
#else
#include <elfutils/debuginfod.h>

+#define PROGRESS_STEP_PERCENT 10
+
struct user_data
{
user_data (const char *desc, const char *fname)
- : desc (desc), fname (fname), has_printed (false)
+ : desc (desc), fname (fname), next_percent_progress (PROGRESS_STEP_PERCENT), has_printed (false)
{ }

const char * const desc;
const char * const fname;
+ long next_percent_progress;
bool has_printed;
};

@@ -74,6 +77,7 @@ progressfn (debuginfod_client *c, long cur, long total)

if (check_quit_flag ())
{
+ // TODO
printf_filtered ("Cancelling download of %s %ps...\n",
data->desc,
styled_string (file_name_style.style (), data->fname));
@@ -84,9 +88,23 @@ progressfn (debuginfod_client *c, long cur, long total)
{
/* Print this message only once. */
data->has_printed = true;
- printf_filtered ("Downloading %s %ps...\n",
+ printf_filtered ("Downloading %.2f MB %s %ps.",
+ 1.0f * total / (1024 * 1024),
data->desc,
styled_string (file_name_style.style (), data->fname));
+ gdb_flush (gdb_stdout);
+ }
+ else if (total != 0)
+ {
+ long percent = 100 * cur / total;
+ while (percent >= data->next_percent_progress)
+ {
+ printf ("..%ld%%", data->next_percent_progress);
+ data->next_percent_progress += PROGRESS_STEP_PERCENT;
+ }
+ if (percent == 100)
+ printf ("\n");
+ gdb_flush (gdb_stdout);
}

return 0;