+ std::string extra;
+};
+
+struct memrange
+{
+ memrange (int type_, bfd_signed_vma start_, bfd_signed_vma end_)
+ : type (type_), start (start_), end (end_)
+ {}
+
+ memrange ()
+ {}
+
+ /* memrange_absolute for absolute memory range, else basereg
+ number. */
+ int type;
+ bfd_signed_vma start;
+ bfd_signed_vma end;
+};
+
+class collection_list
+{
+public:
+ collection_list ();
+
+ void add_wholly_collected (const char *print_name);
+
+ void append_exp (struct expression *exp);
+
+ /* Add AEXPR to the list, taking ownership. */
+ void add_aexpr (agent_expr_up aexpr);
+
+ void add_remote_register (unsigned int regno);
+ void add_ax_registers (struct agent_expr *aexpr);
+ void add_local_register (struct gdbarch *gdbarch,
+ unsigned int regno,
+ CORE_ADDR scope);
+ void add_memrange (struct gdbarch *gdbarch,
+ int type, bfd_signed_vma base,
+ unsigned long len, CORE_ADDR scope);
+ void collect_symbol (struct symbol *sym,
+ struct gdbarch *gdbarch,
+ long frame_regno, long frame_offset,
+ CORE_ADDR scope,
+ int trace_string);
+
+ void add_local_symbols (struct gdbarch *gdbarch, CORE_ADDR pc,
+ long frame_regno, long frame_offset, int type,
+ int trace_string);
+ void add_static_trace_data ();
+
+ void finish ();
+
+ std::vector<std::string> stringify ();
+
+ const std::vector<std::string> &wholly_collected ()
+ { return m_wholly_collected; }
+
+ const std::vector<std::string> &computed ()
+ { return m_computed; }
+
+private:
+ /* We need the allocator zero-initialize the mask, so we don't use
+ gdb::byte_vector. */
+ std::vector<unsigned char> m_regs_mask;
+
+ std::vector<memrange> m_memranges;
+
+ std::vector<agent_expr_up> m_aexprs;
+
+ /* True is the user requested a collection of "$_sdata", "static
+ tracepoint data". */
+ bool m_strace_data;
+
+ /* A set of names of wholly collected objects. */
+ std::vector<std::string> m_wholly_collected;
+ /* A set of computed expressions. */
+ std::vector<std::string> m_computed;