From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH 10/14] Introduce dwarf2_enter_objfile and use it
Date: Sat, 15 Feb 2020 16:55:00 -0000 [thread overview]
Message-ID: <20200215165444.32653-11-tom@tromey.com> (raw)
In-Reply-To: <20200215165444.32653-1-tom@tromey.com>
dwarf2_per_objfile has a backlink to objfile. Once the series is
complete, the objfile will only be set temporarily: that is, it will
be set when calling in to some DWARF module, and then cleared when
leaving.
This patch introduces a new RAII class, dwarf2_enter_objfile, which
will be used for this purpose. Then, it changes all the callbacks to
call this.
2020-02-15 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (class dwarf2_enter_objfile): New.
* dwarf2/read.c (dw2_find_last_source_symtab)
(dw2_map_symtabs_matching_filename, dw2_lookup_symbol)
(dw2_print_stats, dw2_expand_symtabs_for_function)
(dw2_expand_all_symtabs, dw2_expand_symtabs_with_fullname)
(dw2_expand_symtabs_matching, dw2_find_pc_sect_compunit_symtab)
(dw2_map_symbol_filenames, dw2_debug_names_lookup_symbol)
(dw2_debug_names_expand_symtabs_for_function)
(dw2_debug_names_map_matching_symbols)
(dw2_debug_names_expand_symtabs_matching)
(dwarf2_initialize_objfile, dwarf2_build_psymtabs)
(dwarf2_psymtab::read_symtab, dwarf2_psymtab::expand_psymtab)
(dwarf2_psymtab::get_compunit_symtab): Use dwarf2_enter_objfile.
* dwarf2/loc.c (dwarf2_find_location_expression)
(rw_pieced_value, indirect_pieced_value, coerce_pieced_ref)
(dwarf2_locexpr_baton_eval, dwarf2_evaluate_property)
(locexpr_read_variable, locexpr_read_variable_at_entry)
(locexpr_get_symbol_read_needs, locexpr_describe_location)
(locexpr_tracepoint_var_ref, locexpr_generate_c_location)
(loclist_read_variable, loclist_read_variable_at_entry)
(loclist_describe_location, loclist_tracepoint_var_ref)
(loclist_generate_c_location): Use dwarf2_enter_objfile.
* dwarf2/index-write.c (save_gdb_index_command): Use
dwarf2_enter_objfile.
---
gdb/ChangeLog | 27 +++++++++++++++++++++++++++
gdb/dwarf2/index-write.c | 1 +
gdb/dwarf2/loc.c | 34 ++++++++++++++++++++++++++++++----
gdb/dwarf2/read.c | 21 +++++++++++++++++++++
gdb/dwarf2/read.h | 24 ++++++++++++++++++++++++
5 files changed, 103 insertions(+), 4 deletions(-)
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
index 2cbf2ebd202..24255f5f76f 100644
--- a/gdb/dwarf2/index-write.c
+++ b/gdb/dwarf2/index-write.c
@@ -1755,6 +1755,7 @@ save_gdb_index_command (const char *arg, int from_tty)
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
+ dwarf2_enter_objfile enterer (objfile);
if (dwarf2_per_objfile != NULL)
{
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index 4a148c26722..b0f650cada8 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -312,7 +312,7 @@ const gdb_byte *
dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
size_t *locexpr_length, CORE_ADDR pc)
{
- struct objfile *objfile = baton->per_cu->objfile ();
+ struct objfile *objfile = baton->objfile;
struct gdbarch *gdbarch = get_objfile_arch (objfile);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
unsigned int addr_size = baton->per_cu->addr_size ();
@@ -1612,6 +1612,8 @@ rw_pieced_value (struct value *v, struct value *from)
gdb::byte_vector buffer;
bool bits_big_endian = type_byte_order (value_type (v)) == BFD_ENDIAN_BIG;
+ dwarf2_enter_objfile enterer (c->objfile);
+
if (from != NULL)
{
from_contents = value_contents (from);
@@ -2015,6 +2017,8 @@ indirect_pieced_value (struct value *value)
{
struct piece_closure *c
= (struct piece_closure *) value_computed_closure (value);
+ dwarf2_enter_objfile enterer (c->objfile);
+
struct type *type;
struct frame_info *frame;
int i, bit_length;
@@ -2105,6 +2109,7 @@ coerce_pieced_ref (const struct value *value)
gdb_assert (closure != NULL);
gdb_assert (closure->pieces.size () == 1);
+ dwarf2_enter_objfile enterer (closure->objfile);
return indirect_synthetic_pointer
(closure->pieces[0].v.ptr.die_sect_off,
closure->pieces[0].v.ptr.offset,
@@ -2404,7 +2409,7 @@ dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
ctx.per_cu = dlbaton->per_cu;
ctx.obj_address = addr;
- objfile = dlbaton->per_cu->objfile ();
+ objfile = dlbaton->objfile;
ctx.gdbarch = get_objfile_arch (objfile);
ctx.addr_size = dlbaton->per_cu->addr_size ();
@@ -2474,6 +2479,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
const struct dwarf2_property_baton *baton
= (const struct dwarf2_property_baton *) prop->data.baton;
gdb_assert (baton->property_type != NULL);
+ dwarf2_enter_objfile enterer (baton->locexpr.objfile);
if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame,
addr_stack ? addr_stack->addr : 0,
@@ -3552,6 +3558,8 @@ locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
{
struct dwarf2_locexpr_baton *dlbaton
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
struct value *val;
val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
@@ -3569,6 +3577,7 @@ locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
{
struct dwarf2_locexpr_baton *dlbaton
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
dlbaton->size);
@@ -3582,6 +3591,7 @@ locexpr_get_symbol_read_needs (struct symbol *symbol)
{
struct dwarf2_locexpr_baton *dlbaton
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
return dwarf2_loc_desc_get_symbol_read_needs (dlbaton->data, dlbaton->size,
dlbaton->per_cu);
@@ -4285,7 +4295,9 @@ locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
{
struct dwarf2_locexpr_baton *dlbaton
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
- struct objfile *objfile = dlbaton->per_cu->objfile ();
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
+ struct objfile *objfile = dlbaton->objfile;
unsigned int addr_size = dlbaton->per_cu->addr_size ();
int offset_size = dlbaton->per_cu->offset_size ();
@@ -4304,6 +4316,8 @@ locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
{
struct dwarf2_locexpr_baton *dlbaton
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
unsigned int addr_size = dlbaton->per_cu->addr_size ();
if (dlbaton->size == 0)
@@ -4323,6 +4337,8 @@ locexpr_generate_c_location (struct symbol *sym, string_file *stream,
{
struct dwarf2_locexpr_baton *dlbaton
= (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
unsigned int addr_size = dlbaton->per_cu->addr_size ();
if (dlbaton->size == 0)
@@ -4357,6 +4373,8 @@ loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
{
struct dwarf2_loclist_baton *dlbaton
= (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
struct value *val;
const gdb_byte *data;
size_t size;
@@ -4382,6 +4400,8 @@ loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
{
struct dwarf2_loclist_baton *dlbaton
= (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
const gdb_byte *data;
size_t size;
CORE_ADDR pc;
@@ -4421,8 +4441,10 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
{
struct dwarf2_loclist_baton *dlbaton
= (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
const gdb_byte *loc_ptr, *buf_end;
- struct objfile *objfile = dlbaton->per_cu->objfile ();
+ struct objfile *objfile = dlbaton->objfile;
struct gdbarch *gdbarch = get_objfile_arch (objfile);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
unsigned int addr_size = dlbaton->per_cu->addr_size ();
@@ -4511,6 +4533,8 @@ loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
{
struct dwarf2_loclist_baton *dlbaton
= (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
const gdb_byte *data;
size_t size;
unsigned int addr_size = dlbaton->per_cu->addr_size ();
@@ -4533,6 +4557,8 @@ loclist_generate_c_location (struct symbol *sym, string_file *stream,
{
struct dwarf2_loclist_baton *dlbaton
= (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym);
+ dwarf2_enter_objfile enterer (dlbaton->objfile);
+
unsigned int addr_size = dlbaton->per_cu->addr_size ();
const gdb_byte *data;
size_t size;
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 7b493f5a227..f86034f2273 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -3234,6 +3234,7 @@ dw2_get_real_path (struct objfile *objfile,
static struct symtab *
dw2_find_last_source_symtab (struct objfile *objfile)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
dwarf2_per_cu_data *dwarf_cu = dwarf2_per_objfile->all_comp_units.back ();
@@ -3310,6 +3311,7 @@ dw2_map_symtabs_matching_filename
(struct objfile *objfile, const char *name, const char *real_path,
gdb::function_view<bool (symtab *)> callback)
{
+ dwarf2_enter_objfile enterer (objfile);
const char *name_basename = lbasename (name);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -3528,6 +3530,7 @@ static struct compunit_symtab *
dw2_lookup_symbol (struct objfile *objfile, block_enum block_index,
const char *name, domain_enum domain)
{
+ dwarf2_enter_objfile enterer (objfile);
struct compunit_symtab *stab_best = NULL;
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -3570,6 +3573,7 @@ dw2_lookup_symbol (struct objfile *objfile, block_enum block_index,
static void
dw2_print_stats (struct objfile *objfile)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
int total = (dwarf2_per_objfile->all_comp_units.size ()
@@ -3616,6 +3620,7 @@ static void
dw2_expand_symtabs_for_function (struct objfile *objfile,
const char *func_name)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -3632,6 +3637,7 @@ dw2_expand_symtabs_for_function (struct objfile *objfile,
static void
dw2_expand_all_symtabs (struct objfile *objfile)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
int total_units = (dwarf2_per_objfile->all_comp_units.size ()
@@ -3654,6 +3660,7 @@ static void
dw2_expand_symtabs_with_fullname (struct objfile *objfile,
const char *fullname)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -4657,6 +4664,7 @@ dw2_expand_symtabs_matching
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -4725,6 +4733,7 @@ dw2_find_pc_sect_compunit_symtab (struct objfile *objfile,
if (!data)
return NULL;
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
gdb::optional<compunit_symtab *> &symtab
@@ -4745,6 +4754,7 @@ static void
dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun,
void *data, int need_fullname)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -5527,6 +5537,7 @@ static struct compunit_symtab *
dw2_debug_names_lookup_symbol (struct objfile *objfile, block_enum block_index,
const char *name, domain_enum domain)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -5593,6 +5604,7 @@ static void
dw2_debug_names_expand_symtabs_for_function (struct objfile *objfile,
const char *func_name)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -5617,6 +5629,7 @@ dw2_debug_names_map_matching_symbols
gdb::function_view<symbol_found_callback_ftype> callback,
symbol_compare_ftype *ordered_compare)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -5676,6 +5689,7 @@ dw2_debug_names_expand_symtabs_matching
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -5792,6 +5806,7 @@ dwarf2_initialize_objfile (struct objfile *objfile, dw_index_kind *index_kind)
{
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
+ dwarf2_enter_objfile enterer (objfile);
/* If we're about to read full symbols, don't bother with the
indices. In this case we also don't care if some other debug
@@ -5861,6 +5876,8 @@ dwarf2_initialize_objfile (struct objfile *objfile, dw_index_kind *index_kind)
void
dwarf2_build_psymtabs (struct objfile *objfile)
{
+ dwarf2_enter_objfile enterer (objfile);
+
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -8740,6 +8757,7 @@ locate_pdi_sibling (const struct die_reader_specs *reader,
void
dwarf2_psymtab::read_symtab (struct objfile *objfile)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -8899,6 +8917,7 @@ process_queue (struct dwarf2_per_objfile *dwarf2_per_objfile)
void
dwarf2_psymtab::expand_psymtab (struct objfile *objfile)
{
+ dwarf2_enter_objfile enterer (objfile);
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
@@ -8928,6 +8947,7 @@ dwarf2_psymtab::readin_p (struct objfile *objfile) const
if (per_cu_data == nullptr)
return true;
+ dwarf2_enter_objfile enterer (objfile);
dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
gdb::optional<compunit_symtab *> &symtab
@@ -8943,6 +8963,7 @@ dwarf2_psymtab::get_compunit_symtab (struct objfile *objfile) const
if (per_cu_data == nullptr)
return nullptr;
+ dwarf2_enter_objfile enterer (objfile);
dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
gdb::optional<compunit_symtab *> &symtab
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 98d58fb6880..bef37e969d3 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -284,6 +284,30 @@ public:
dwarf2_per_objfile *get_dwarf2_per_objfile (struct objfile *objfile);
+/* The "objfile" member of a dwarf2_per_objfile is normally nullptr,
+ and temporarily set when calling into the DWARF code. This class
+ is used "enter" a particular objfile. */
+
+class dwarf2_enter_objfile
+{
+public:
+
+ dwarf2_enter_objfile (struct objfile *objfile)
+ : m_per_objfile (get_dwarf2_per_objfile (objfile)),
+ m_restore_objfile (&m_per_objfile->objfile, objfile)
+ {
+ }
+
+ ~dwarf2_enter_objfile () = default;
+
+ DISABLE_COPY_AND_ASSIGN (dwarf2_enter_objfile);
+
+private:
+
+ dwarf2_per_objfile *m_per_objfile;
+ scoped_restore_tmpl<struct objfile *> m_restore_objfile;
+};
+
/* A partial symtab specialized for DWARF. */
struct dwarf2_psymtab : public partial_symtab
{
--
2.17.2
next prev parent reply other threads:[~2020-02-15 16:55 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-15 16:54 [PATCH 00/14] Share DWARF partial symtabs between objfiles Tom Tromey
2020-02-15 16:55 ` [PATCH 03/14] Introduce dwarf2_per_objfile::obstack Tom Tromey
2020-02-19 4:13 ` Simon Marchi
2020-02-22 0:44 ` Tom Tromey
2020-02-15 16:55 ` [PATCH 02/14] Simplify setting of reading_partial_symbols Tom Tromey
2020-02-15 16:55 ` [PATCH 06/14] Add "objfile" parameter to two partial_symtab methods Tom Tromey
2020-02-18 11:26 ` Luis Machado
2020-02-15 16:55 ` [PATCH 11/14] Split type_unit_group Tom Tromey
2020-02-18 12:08 ` Luis Machado
2020-02-22 0:40 ` Tom Tromey
2020-02-15 16:55 ` [PATCH 08/14] Remove symtab links from dwarf2_psymtab and dwarf2_per_cu_quick_data Tom Tromey
2020-02-18 11:50 ` Luis Machado
2020-02-19 4:47 ` Simon Marchi
2020-02-22 0:38 ` Tom Tromey
2020-02-22 0:36 ` Tom Tromey
2020-02-15 16:55 ` Tom Tromey [this message]
2020-02-18 11:58 ` [PATCH 10/14] Introduce dwarf2_enter_objfile and use it Luis Machado
2020-02-21 22:54 ` Tom Tromey
2020-02-15 16:55 ` [PATCH 04/14] Convert IS_TYPE_UNIT_GROUP to method Tom Tromey
2020-02-15 16:55 ` [PATCH 01/14] Fix latent bug in dwarf2_find_containing_comp_unit Tom Tromey
2020-02-19 3:42 ` Simon Marchi
2020-02-19 14:08 ` Tom Tromey
2020-02-20 0:11 ` Tom Tromey
2020-02-20 0:12 ` Tom Tromey
2020-02-20 15:44 ` Simon Marchi
2020-02-20 16:50 ` Tom Tromey
2020-03-07 19:12 ` Christian Biesinger
2020-02-15 16:55 ` [PATCH 09/14] Add objfile member to DWARF batons Tom Tromey
2020-02-15 16:55 ` [PATCH 14/14] Share DWARF partial symtabs Tom Tromey
2020-02-18 12:26 ` Luis Machado
2020-02-21 23:03 ` Tom Tromey
2020-02-15 16:55 ` [PATCH 13/14] Move signatured_type::type to unshareable object Tom Tromey
2020-02-15 16:55 ` [PATCH 07/14] Add dwarf2_per_cu_data::index Tom Tromey
2020-02-18 11:39 ` Luis Machado
2020-02-21 23:36 ` Tom Tromey
2020-02-19 4:36 ` Simon Marchi
2020-02-19 5:31 ` Simon Marchi
2020-02-21 23:41 ` Tom Tromey
2020-02-21 23:41 ` Tom Tromey
2020-02-15 16:55 ` [PATCH 05/14] Introduce dwarf2_unshareable and move die_type_hash Tom Tromey
2020-02-18 11:23 ` Luis Machado
2020-02-19 4:20 ` Simon Marchi
2020-02-21 22:43 ` Tom Tromey
2020-02-15 16:55 ` [PATCH 12/14] Fix a memory leak and remove an unused member Tom Tromey
2020-02-17 12:31 ` [PATCH 00/14] Share DWARF partial symtabs between objfiles Luis Machado
2020-02-17 16:59 ` Tom Tromey
2020-02-22 21:50 ` Tom de Vries
2020-02-22 22:01 ` Tom Tromey
2020-02-23 2:37 ` Simon Marchi
2020-02-23 23:58 ` Tom Tromey
2020-02-24 2:52 ` Simon Marchi
2020-02-24 3:07 ` Tom Tromey
2020-02-24 3:22 ` Tom Tromey
2020-02-24 13:42 ` Tom de Vries
2020-02-24 16:00 ` Tom de Vries
2020-02-24 17:29 ` Tom Tromey
2020-02-24 23:15 ` Tom Tromey
2020-02-24 19:18 ` Simon Marchi
2020-02-24 23:20 ` Tom Tromey
2020-02-24 22:48 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200215165444.32653-11-tom@tromey.com \
--to=tom@tromey.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).