From 1913317cb95d02c3244e5d91b7b59e33cfe991c5 Mon Sep 17 00:00:00 2001 From: Aaron Merey Date: Fri, 31 Jul 2020 18:25:48 -0400 Subject: [PATCH] debuginfod-support.c: Replace globals with user_data Store query information in user_data struct instead of global variables. Also include DEBUGINFOD_CFLAGS in INTERNAL_CFLAG_BASE. gdb/ChangeLog: * Makefile.in: Add DEBUGINFOD_CFLAGS to INTERNAL_CFLAGS_BASE. * debuginfod-support.c: Replace global vars with struct user_data. --- gdb/ChangeLog | 5 +++++ gdb/Makefile.in | 8 ++++++-- gdb/debuginfod-support.c | 40 ++++++++++++++++++++++++---------------- 3 files changed, 35 insertions(+), 18 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9e718361a6..6e44e74f40 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-07-31 Aaron Merey + + * Makefile.in: Add DEBUGINFOD_CFLAGS to INTERNAL_CFLAGS_BASE. + * debuginfod-support.c: Replace global vars with struct user_data. + 2020-07-30 Simon Marchi PR ada/26318 diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 0d6d8137b5..783949d054 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -214,6 +214,9 @@ GDB_WERROR_CFLAGS = $(WERROR_CFLAGS) PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ +DEBUGINFOD_CFLAGS = @DEBUGINFOD_CFLAGS@ +DEBUGINFOD_LIBS = @DEBUGINFOD_LIBS@ + RDYNAMIC = @RDYNAMIC@ # Where is the INTL library? Typically in ../intl. @@ -598,7 +601,8 @@ INTERNAL_CFLAGS_BASE = \ $(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) $(ZLIBINC) \ $(BFD_CFLAGS) $(INCLUDE_CFLAGS) $(LIBDECNUMBER_CFLAGS) \ $(INTL_CFLAGS) $(INCGNU) $(INCSUPPORT) $(ENABLE_CFLAGS) \ - $(INTERNAL_CPPFLAGS) $(SRCHIGH_CFLAGS) $(TOP_CFLAGS) $(PTHREAD_CFLAGS) + $(INTERNAL_CPPFLAGS) $(SRCHIGH_CFLAGS) $(TOP_CFLAGS) $(PTHREAD_CFLAGS) \ + $(DEBUGINFOD_CFLAGS) INTERNAL_WARN_CFLAGS = $(INTERNAL_CFLAGS_BASE) $(GDB_WARN_CFLAGS) INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(GDB_WERROR_CFLAGS) @@ -624,7 +628,7 @@ CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) \ $(LIBEXPAT) $(LIBLZMA) $(LIBBABELTRACE) $(LIBIPT) \ $(WIN32LIBS) $(LIBGNU) $(LIBICONV) \ $(LIBMPFR) $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS) \ - @DEBUGINFOD_LIBS@ + $(DEBUGINFOD_LIBS) CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(CTF_DEPS) \ $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU) \ $(LIBSUPPORT) diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c index f4a227b040..9325bf8651 100644 --- a/gdb/debuginfod-support.c +++ b/gdb/debuginfod-support.c @@ -43,29 +43,39 @@ debuginfod_debuginfo_query (const unsigned char *build_id, #else #include -/* TODO: Use debuginfod API extensions instead of these globals. */ -static std::string desc; -static std::string fname; -static bool has_printed; +struct user_data +{ + std::string desc; + std::string fname; + bool has_printed; + + user_data (std::string desc, std::string fname, bool has_printed) + : desc (desc), fname (fname), has_printed (has_printed) + { } +}; static int progressfn (debuginfod_client *c, long cur, long total) { + struct user_data *data = static_cast (debuginfod_get_user_data (c)); + if (check_quit_flag ()) { printf_filtered ("Cancelling download of %s %ps...\n", - desc.c_str (), - styled_string (file_name_style.style (), fname.c_str ())); + data->desc.c_str (), + styled_string (file_name_style.style (), + data->fname.c_str ())); return 1; } - if (!has_printed && total != 0) + if (! data->has_printed && total != 0) { /* Print this message only once. */ - has_printed = true; + data->has_printed = true; printf_filtered ("Downloading %s %ps...\n", - desc.c_str (), - styled_string (file_name_style.style (), fname.c_str ())); + data->desc.c_str (), + styled_string (file_name_style.style (), + data->fname.c_str ())); } return 0; @@ -98,10 +108,9 @@ debuginfod_source_query (const unsigned char *build_id, if (c == nullptr) return scoped_fd (-ENOMEM); - desc = std::string ("source file"); - fname = std::string (srcpath); - has_printed = false; + struct user_data data ("source file", srcpath, false); + debuginfod_set_user_data (c, &data); scoped_fd fd (debuginfod_find_source (c, build_id, build_id_len, @@ -136,11 +145,10 @@ debuginfod_debuginfo_query (const unsigned char *build_id, if (c == nullptr) return scoped_fd (-ENOMEM); - desc = std::string ("separate debug info for"); - fname = std::string (filename); - has_printed = false; char *dname = nullptr; + struct user_data data ("separate debug info for", filename, false); + debuginfod_set_user_data (c, &data); scoped_fd fd (debuginfod_find_debuginfo (c, build_id, build_id_len, &dname)); if (fd.get () < 0 && fd.get () != -ENOENT) -- 2.25.4