From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from nx209.node01.secure-mailgate.com (nx209.node01.secure-mailgate.com [89.22.108.209]) by sourceware.org (Postfix) with ESMTPS id D56A13857C6F for ; Wed, 31 Mar 2021 20:24:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D56A13857C6F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=trande.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=zied.guermazi@trande.de Received: from host202.checkdomain.de ([185.137.168.148]) by node01.secure-mailgate.com with esmtps (TLSv1.2:AES128-GCM-SHA256:128) (Exim 4.92) (envelope-from ) id 1lRhNn-00Bmsn-QA; Wed, 31 Mar 2021 22:24:09 +0200 X-SecureMailgate-Identity: host202.checkdomain.de Received: from [192.168.178.48] (x4dbe5b1d.dyn.telefonica.de [77.190.91.29]) (Authenticated sender: zied.guermazi@trande.de) by host202.checkdomain.de (Postfix) with ESMTPSA id 7B8012C17F1; Wed, 31 Mar 2021 22:24:06 +0200 (CEST) X-SecureMailgate-Identity: host202.checkdomain.de Subject: Re: [PATCH v3 2/7] add btrace coresight related commands To: Luis Machado , gdb-patches@sourceware.org References: <20210331025234.518688-1-zied.guermazi@trande.de> <20210331025234.518688-3-zied.guermazi@trande.de> From: Zied Guermazi Message-ID: <004b5761-e333-1dcf-170f-a2c4e46f0467@trande.de> Date: Wed, 31 Mar 2021 22:24:06 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-PPP-Message-ID: <20210331202407.4084166.35460@host202.checkdomain.de> X-PPP-Vhost: trande.de X-Originating-IP: 185.137.168.148 X-SecureMailgate-Domain: host202.checkdomain.de X-SecureMailgate-Username: 185.137.168.148 Authentication-Results: secure-mailgate.com; auth=pass smtp.auth=185.137.168.148@host202.checkdomain.de X-SecureMailgate-Outgoing-Class: ham X-SecureMailgate-Outgoing-Evidence: SB/global_tokens (3.9943455632e-07) X-Recommended-Action: accept X-Filter-ID: Pt3MvcO5N4iKaDQ5O6lkdGlMVN6RH8bjRMzItlySaT82tQnXqa8rZjcoZzMd5QtsPUtbdvnXkggZ 3YnVId/Y5jcf0yeVQAvfjHznO7+bT5wqBcSGeVWq1E9YWZbsmhKMTlod1WpdzSJAbIL3qp5JunYf gJ55pDnOxWzxymfhhAUcEJUqtZn698k7kZCd7zwAAXDkcXwqI3EzqRI7b1h6dtuKVcrdJYAOQDtq J/YBikdTtObPqIqeRAv2CqzEPfjvB3Z/Wx7uDHrO1hbB/iD4bL8OjONUxj6G88Jwir+HLMf58Uml vZK0vgkd/lF74hEc9L/XgNzNH0o+k352fiAt4k+zB29cev/mxhsWfeWz35f4pTpxobFuL+e0fy34 oD/ddeY4sFfEO5Z9x2RLtlNMz1ghFiuDCY0EdD8+W8Mu0TaMUebeq1Kfx54Rs6A/416LOg8+9WnN ZNKNZzh6/juqNryEQ4wIktG7zMaLuynhc9yeHYgHqM5or36X+4e7VKCYJmDzuWA3WuLty5Wyc2Wm aj3bQmEqUddg4pDcHxi62gyvRMJRmxob6YsAftWgMLxMQe+bc+r9MxWEuItVKVsOcvEyD626wjRt 3bpJYyMCBfDfX8TdqEXkwxwMjsp2mNApl6LfObvzesyantODKQ/pG1lZ8+HAdgnYqIGFsqDavXIg r/U0flMcy2Vi/IcBgY4a4nD4ixtEBgLUs9VA8/4/8xQgoW7Jlml5bhJtfEFIJGtCL01hSmyW6+yK TJkXbSzQVoe9F3r4nGkQ/UE6I8eMg2QPeWwHcgS1KNzDmiSQis+Tr/ou8/jUw/KdvG1La5vUDKg/ 7R+r4yLqDVcb11JypoCoqvpOL7pcF7JBJkM+2e0AbJkdujIQjna76I5VwEQS/ewCdRuFnPc3a9Om Ize4//P4wHlqBE95R7lrKCg7FGnRer/dcX4cH+r2H98ofLYzO1MVBsy9N9GaER8fSNt2G69l5A15 J+BVEQnFZvGHTWn+6fSn7yf1+aFQVq9KMe2fA8F2bndHrMyzApmy8BV67fUf9oDBqtClgM5jH/om 1Q6dmIy8iqmbI7tomuflAFZWxUv/gddYDfv9P7jIziYCxYjtpdnwoAXqnOHQMy7RBa34pTpxobFu L+e0fy34oD/dtRJ6AUU1jLhf7eHKWQ/cqiWG9+RapTrLKXq7ZaPhBnpQQhQ3cXtTqZg6zYv+9efs DtHUJ+yCaNfUw72jEoPbjg== X-Report-Abuse-To: spam@node04.secure-mailgate.com X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00, BODY_8BITS, GIT_PATCH_0, HTML_MESSAGE, IMAGE_ATTACHED, KAM_DMARC_STATUS, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Mar 2021 20:24:16 -0000 hi Luis thanks for your review comments. Here is the status of the updates. The changes will be published in next version of the patch set. On 31.03.21 20:30, Luis Machado wrote: > On 3/30/21 11:52 PM, Zied Guermazi wrote: >> This patch extends the commands needed for using branch tracing >> with ARM CoreSight traces. >> Those commands are: >> set record btrace etm sink >> set record btrace etm buffer-size >> record btrace etm >> >> gdb/ChangeLog >> >>     * NEWS: list new commands for extending btrace >>     to support using ARM CoreSight Traces. >>     * record-btrace.c (record_btrace_print_etm_conf): New. >>     (record_btrace_print_conf): handle BTRACE_FORMAT_ETM. >>     (cmd_record_btrace_etm_start): New. >>     (cmd_record_btrace_start): handle starting ETM tracing. >>     (cmd_show_record_btrace_cpu): extend for ARM cpus. >>     (show_record_etm_buffer_size_value): New. >>     (_initialize_record_btrace): add commands for ETM traces. >>     (record_start): add starting ETM traces. >> >> gdb/doc/ChangeLog >> >>     * gdb.texinfo (Process Record and Replay): Document extending >>     GDB btrace commands to support using ARM CoreSight traces. >> >> gdbsupport/ChangeLog >> >>     * btrace-common.h (btrace_format): add BTRACE_FORMAT_ETM >>     to the enum. >>     (btrace_config_etm): new struct. >>     (btrace_config): add btrace_config_etm etm. >>     * btrace-common.cc (btrace_format_string): add BTRACE_FORMAT_ETM. >>     (btrace_format_short_string): add BTRACE_FORMAT_ETM. >> >> >> --- >>   gdb/ChangeLog               |  11 ++++ >>   gdb/NEWS                    |  16 ++++++ >>   gdb/doc/gdb.texinfo         |  51 +++++++++++++++- >>   gdb/record-btrace.c         | 112 +++++++++++++++++++++++++++++++++++- >>   gdb/record.c                |   2 + >>   gdbsupport/ChangeLog        |  10 ++++ >>   gdbsupport/btrace-common.cc |   6 ++ >>   gdbsupport/btrace-common.h  |  22 ++++++- >>   8 files changed, 226 insertions(+), 4 deletions(-) >> >> diff --git a/gdb/ChangeLog b/gdb/ChangeLog >> index 7178c30affb..a63fdfa1911 100644 >> --- a/gdb/ChangeLog >> +++ b/gdb/ChangeLog >> @@ -1,5 +1,16 @@ >>   2021-02-25  Zied Guermazi  >>   +    * record-btrace.c (record_btrace_print_etm_conf): New. >> +    (record_btrace_print_conf): handle BTRACE_FORMAT_ETM. >> +    (cmd_record_btrace_etm_start): New. >> +    (cmd_record_btrace_start): handle starting ETM tracing. >> +    (cmd_show_record_btrace_cpu): extend for ARM cpus. >> +    (show_record_etm_buffer_size_value): New. >> +    (_initialize_record_btrace): add commands for ETM traces. >> +    * record.c (record_start): add starting ETM traces. >> + >> +2021-02-02  Zied Guermazi  >> + >>       * Makefile.in LIBOPENCSD_C_API: set the flag. >>       * config.in LIBOPENCSD_C_API: undefine it if >>       libopenocsd library is available. >> diff --git a/gdb/NEWS b/gdb/NEWS >> index 7f5a745d0c0..0dbd89eb360 100644 >> --- a/gdb/NEWS >> +++ b/gdb/NEWS >> @@ -2,6 +2,7 @@ >>            (Organized release by release) >>     *** Changes since GDB 10 >> +* Record btrace now  supports using ARM CoreSight ETM traces. >>     * Building GDB now requires GMP (The GNU Multiple Precision >> Arithmetic >>     Library). >> @@ -35,6 +36,21 @@ >>     * New commands >>   +record btrace etm >> +record etm >> +  Start branch trace recording using ARM CoreSight trace format (ETM). >> + >> +set|show record btrace etm buffer-size >> +  Set and show the size of the ring buffer used for branch tracing in >> +  ETM format. >> +  The obtained size may differ from the requested size.  Use "info >> +  record" to see the obtained buffer size. >> + >> +set|show record btrace etm sink >> +  Set and show the trace sink used for branch tracing in >> +  ETM format. >> +  Use "default" to reset it to default sink. >> + >>   set debug event-loop >>   show debug event-loop >>     Control the display of debug output about GDB's event loop. >> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo >> index 80ccf74a049..bd5b2c91869 100644 >> --- a/gdb/doc/gdb.texinfo >> +++ b/gdb/doc/gdb.texinfo >> @@ -7371,15 +7371,19 @@ For architecture environments that support >> process record and replay, >>   @kindex record btrace >>   @kindex record btrace bts >>   @kindex record btrace pt >> +@kindex record btrace etm >>   @kindex record bts >>   @kindex record pt >> +@kindex record etm >>   @kindex rec >>   @kindex rec full >>   @kindex rec btrace >>   @kindex rec btrace bts >>   @kindex rec btrace pt >> +@kindex rec btrace etm >>   @kindex rec bts >>   @kindex rec pt >> +@kindex rec etm >>   @item record @var{method} >>   This command starts the process record and replay target.  The >>   recording method can be specified as parameter.  Without a parameter >> @@ -7393,7 +7397,7 @@ replay implementation.  This method allows >> replaying and reverse >>   execution. >>     @item btrace @var{format} >> -Hardware-supported instruction recording, supported on Intel >> +Hardware-supported instruction recording, supported on Intel and ARM >>   processors.  This method does not record data.  Further, the data is >>   collected in a ring buffer so old data will be overwritten when the >>   buffer is full.  It allows limited reverse execution. Variables and >> @@ -7427,6 +7431,13 @@ Decoding the recorded execution trace, on the >> other hand, is more >>   expensive than decoding @acronym{BTS} trace.  This is mostly due to >> the >>   increased number of instructions to process.  You should increase the >>   buffer-size with care. >> + >> +@item etm >> +@cindex ARM CoreSight Trace >> +Use the @dfn{ARM CoreSight Trace} recording format.  In this >> +format, @acronym{ETM, Extended Trace Macrocell} stores the processor >> +execution trace in a compressed form that is afterwards >> +decoded by @value{GDBN}. >>   @end table >>     Not all recording formats may be available on all processors. >> @@ -7574,6 +7585,12 @@ and to read-write memory.  Beware that the >> accessed memory corresponds >>   to the live target and not necessarily to the current replay >>   position. >>   +@item set record btrace etm sink @var{sink} >> +Set ARM CoreSight ETM sink to collect traces. >> +On @sc{gnu}/Linux systems, possible values for @var{sink} are the >> name of the >> +files in the directory >> @file{/sys/bus/event_source/devices/cs_etm/sinks/}. >> +Use the value @kbd{default} to reset it to default sink. >> + >>   @item set record btrace cpu @var{identifier} >>   Set the processor to be used for enabling workarounds for processor >>   errata when decoding the trace. >> @@ -7637,6 +7654,9 @@ Recorded 84872 instructions in 3189 functions >> (0 gaps) for thread 1 (...). >>   @item show record btrace replay-memory-access >>   Show the current setting of @code{replay-memory-access}. >>   +@item show record btrace etm sink >> +Show ARM CoreSight ETM sink. >> + >>   @item show record btrace cpu >>   Show the processor to be used for enabling trace decode errata >>   workarounds. >> @@ -7688,6 +7708,29 @@ also need longer to process the branch trace >> data before it can be used. >>   Show the current setting of the requested ring buffer size for branch >>   tracing in Intel Processor Trace format. >>   +@kindex set record btrace etm >> +@item set record btrace etm buffer-size @var{size} >> +@itemx set record btrace etm buffer-size unlimited >> +Set the requested ring buffer size for branch tracing in ARM >> +CoreSight ETM Trace format.  Default is 16KB. >> + >> +If @var{size} is a positive number, then @value{GDBN} will try to >> +allocate a buffer of at least @var{size} bytes for each new thread >> +that uses the btrace recording method and the ARM CoreSight ETM >> +format.  The actually obtained buffer size may differ from the >> +requested @var{size}.  Use the @code{info record} command to see the >> +actual buffer size for each thread. >> + >> +If @var{limit} is @code{unlimited} or zero, @value{GDBN} will try to >> +allocate a buffer of 4MB. >> + >> +Bigger buffers mean longer traces.  On the other hand, @value{GDBN} >> will >> +also need longer to process the branch trace data before it can be >> used. >> + >> +@item show record btrace etm buffer-size @var{size} >> +Show the current setting of the requested ring buffer size for branch >> +tracing in ARM CoreSight ETM Trace format. >> + >>   @kindex info record >>   @item info record >>   Show various statistics about the recording depending on the recording >> @@ -7739,6 +7782,12 @@ For the @code{pt} recording format, it also >> shows: >>   @item >>   Size of the perf ring buffer. >>   @end itemize >> + >> +For the @code{etm} recording format, it also shows: >> +@itemize @bullet >> +@item >> +Size of the perf ring buffer. >> +@end itemize >>   @end table >>     @kindex record delete >> diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c >> index d9cc7a3b6d8..0c9ab7c2529 100644 >> --- a/gdb/record-btrace.c >> +++ b/gdb/record-btrace.c >> @@ -201,6 +201,10 @@ static struct cmd_list_element >> *show_record_btrace_bts_cmdlist; >>   static struct cmd_list_element *set_record_btrace_pt_cmdlist; >>   static struct cmd_list_element *show_record_btrace_pt_cmdlist; >>   +/* Command lists for "set/show record btrace etm".  */ >> +static struct cmd_list_element *set_record_btrace_etm_cmdlist; >> +static struct cmd_list_element *show_record_btrace_etm_cmdlist; >> + >>   /* Command list for "set record btrace cpu".  */ >>   static struct cmd_list_element *set_record_btrace_cpu_cmdlist; >>   @@ -525,6 +529,22 @@ record_btrace_print_pt_conf (const struct >> btrace_config_pt *conf) >>       } >>   } >>   +/* Print an ARM Processor Trace configuration.  */ >> + >> +static void >> +record_btrace_print_etm_conf (const struct btrace_config_etm *conf) >> +{ >> +  unsigned int size; >> + >> +  size = conf->size; >> +  if (size > 0) >> +    { >> +      const char *suffix; >> +      suffix = record_btrace_adjust_size (&size); >> +      printf_unfiltered (_("Buffer size: %u%s.\n"), size, suffix); >> +    } >> +} >> + >>   /* Print a branch tracing configuration.  */ >>     static void >> @@ -545,6 +565,10 @@ record_btrace_print_conf (const struct >> btrace_config *conf) >>       case BTRACE_FORMAT_PT: >>         record_btrace_print_pt_conf (&conf->pt); >>         return; >> + >> +    case BTRACE_FORMAT_ETM: >> +      record_btrace_print_etm_conf (&conf->etm); >> +      return; >>       } >>       internal_error (__FILE__, __LINE__, _("Unknown branch trace >> format.")); >> @@ -2675,7 +2699,7 @@ record_btrace_target::stop (ptid_t ptid) >>         tp->btrace.flags |= BTHR_STOP; >>       } >>       } >> - } >> +} > > Spurious change? [Zied] this is fixing a wrong indentation. previously a space was erroneously put before the closing braces. I fixed it while I was visiting this function. shall I keep it or remove it? > >>     /* The can_execute_reverse method of target record-btrace.  */ >>   @@ -2936,6 +2960,27 @@ cmd_record_btrace_pt_start (const char >> *args, int from_tty) >>       } >>   } >>   +/* Start recording in arm CoreSight ETM Trace format.  */ > > arm -> ARM (and in other similar places). [Zied] fixed here. I will look for similar occurrences. > >> + >> +static void >> +cmd_record_btrace_etm_start (const char *args, int from_tty) >> +{ >> +  if (args != nullptr && *args != 0) >> +    error (_("Invalid argument.")); >> + >> +  record_btrace_conf.format = BTRACE_FORMAT_ETM; >> + >> +  try >> +    { >> +      execute_command ("target record-btrace", from_tty); >> +    } >> +  catch (const gdb_exception &exception) >> +    { >> +      record_btrace_conf.format = BTRACE_FORMAT_NONE; >> +      throw; >> +    } >> +} >> + >>   /* Alias for "target record".  */ >>     static void >> @@ -2950,10 +2995,18 @@ cmd_record_btrace_start (const char *args, >> int from_tty) >>       { >>         execute_command ("target record-btrace", from_tty); >>       } >> -  catch (const gdb_exception &exception) >> +  catch (const gdb_exception &exception_pt) >>       { >>         record_btrace_conf.format = BTRACE_FORMAT_BTS; >>   +      try >> +    { >> +      execute_command ("target record-btrace", from_tty); >> +    } >> +      catch (const gdb_exception &exception_bts) >> +    { >> +      record_btrace_conf.format = BTRACE_FORMAT_ETM; >> + > > The indentation of the curly braces seems off. [Zied] in the code the indentation is fine. In the patch, the + at the beginning of the line change the way some editors displays it. here is the source code in gedit with spaces and tabs displayed. > >>         try >>           { >>             execute_command ("target record-btrace", from_tty); >> @@ -2964,6 +3017,7 @@ cmd_record_btrace_start (const char *args, int >> from_tty) >>             throw; >>           } >>       } >> +    } >>   } >>     /* The "show record btrace replay-memory-access" command. */ >> @@ -3102,6 +3156,17 @@ show_record_pt_buffer_size_value (struct >> ui_file *file, int from_tty, >>               value); >>   } >>   +/* The "record etm buffer-size" show value function.  */ >> + >> +static void >> +show_record_etm_buffer_size_value (struct ui_file *file, int from_tty, >> +                   struct cmd_list_element *c, >> +                   const char *value) >> +{ >> +  fprintf_filtered (file, _("The record/replay etm buffer size is >> %s.\n"), >> +            value); > > Indentation problem. [Zied] the same issue mentioned above on the impact of the + on the way some editors align tabs. here is the code as displayed in gedit showing tabs and spaces > >> +} >> + >>   /* Initialize btrace commands.  */ >>     void _initialize_record_btrace (); >> @@ -3165,6 +3230,13 @@ When set to \"none\", errata workarounds are >> disabled."), >>             "set record btrace cpu ", 1, >>             &set_record_btrace_cmdlist); >>   +  add_cmd ("etm", class_obscure, cmd_record_btrace_etm_start, >> +       _("\ >> +Start branch trace recording in ARM CoreSight ETM Trace format.\n\n\ >> +This format may not be available on all processors."), >> +       &record_btrace_cmdlist); >> +  add_alias_cmd ("etm", "btrace etm", class_obscure, 1, >> &record_cmdlist); >> + >>     add_cmd ("auto", class_support, cmd_set_record_btrace_cpu_auto, _("\ >>   Automatically determine the cpu to be used for trace decode."), >>          &set_record_btrace_cpu_cmdlist); >> @@ -3226,6 +3298,41 @@ to see the actual buffer size."), NULL, >> show_record_pt_buffer_size_value, >>                   &set_record_btrace_pt_cmdlist, >>                   &show_record_btrace_pt_cmdlist); >>   +  add_basic_prefix_cmd ("etm", class_support, >> +            _("Set record btrace etm options."), >> +            &set_record_btrace_etm_cmdlist, >> +            "set record btrace etm ", 0, &set_record_btrace_cmdlist); >> + >> +  add_show_prefix_cmd ("etm", class_support, >> +               _("Show record btrace etm options."), >> +               &show_record_btrace_etm_cmdlist, >> +               "show record btrace etm ", 0, >> &show_record_btrace_cmdlist); >> + >> +  add_setshow_uinteger_cmd ("buffer-size", no_class, >> +                &record_btrace_conf.etm.size, >> +                _("Set the record/replay etm buffer size."), >> +                _("Show the record/replay etm buffer size."), _("\ >> +Bigger buffers allow longer recording but also take more time to >> process \ >> +the recorded execution.\n\ >> +The actual buffer size may differ from the requested size.  Use >> \"info record\" \ >> +to see the actual buffer size."), NULL, >> show_record_etm_buffer_size_value, >> +          &set_record_btrace_etm_cmdlist, >> +          &show_record_btrace_etm_cmdlist); >> + >> +  add_setshow_string_cmd ("sink", no_class, >> +              &record_btrace_conf.etm.sink, >> +              _("Set the record/replay ETM sink device."), >> +              _("Show the record/replay ETM sink device."), >> +              _("\ >> +Sink device is the device that intercepts ETM traces and collects or >> routes \ >> +them out of the SoC.\n\ > > Just a suggestion. Should we go with "device" or "System On a Chip"? [Zied] in the terminology I am using, a System on Chip is a set of processors/cores and a set of devices (can also be designated as controllers, peripherals). is there a standard terminology in GDB to designate them? In the case of ETM sink, devices can be for example an ETB, a TMC or a TPIU. > >> +The list of available sinks on linux targets correspond to the files >> in \ > > correspond -> corresponds [Zied] fixed > >> +the directory \"/sys/bus/event_source/devices/cs_etm/sinks/\".\n\ >> +value \"default\" reset it to default sink"), >> +              NULL, NULL, >> +              &set_record_btrace_etm_cmdlist, >> +              &show_record_btrace_etm_cmdlist); >> + >>     add_target (record_btrace_target_info, record_btrace_target_open); >>       bfcache = htab_create_alloc (50, bfcache_hash, bfcache_eq, NULL, >> @@ -3233,4 +3340,5 @@ to see the actual buffer size."), NULL, >> show_record_pt_buffer_size_value, >>       record_btrace_conf.bts.size = 64 * 1024; >>     record_btrace_conf.pt.size = 16 * 1024; >> +  record_btrace_conf.etm.size = 8 * 1024; > > Suggestion. It would be nice to have a more meaningful constant name > here, if possible. [Zied] changed to #define DEFAULT_ETM_BUFFER_SIZE (8 * 1024)   record_btrace_conf.etm.size = DEFAULT_ETM_BUFFER_SIZE; > >>   } >> diff --git a/gdb/record.c b/gdb/record.c >> index cd541b56f43..c9de7b77370 100644 >> --- a/gdb/record.c >> +++ b/gdb/record.c >> @@ -118,6 +118,8 @@ record_start (const char *method, const char >> *format, int from_tty) >>       execute_command_to_string ("record btrace bts", from_tty, false); >>         else if (strcmp (format, "pt") == 0) >>       execute_command_to_string ("record btrace pt", from_tty, false); >> +      else if (strcmp (format, "etm") == 0) >> +    execute_command_to_string ("record btrace etm", from_tty, false); >>         else >>       error (_("Invalid format.")); >>       } >> diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog >> index f27b57c2fa9..ed4708b7028 100644 >> --- a/gdbsupport/ChangeLog >> +++ b/gdbsupport/ChangeLog >> @@ -1,3 +1,13 @@ >> +2021-02-25  Zied Guermazi  >> + >> +    * btrace-common.h (btrace_format): add BTRACE_FORMAT_ETM >> +    to the enum. >> +    (btrace_cpu_vendor): add CV_ARM to the enum. >> +    (btrace_config_etm): new struct. >> +    (btrace_config): add btrace_config_etm etm. >> +    * btrace-common.cc (btrace_format_string): add BTRACE_FORMAT_ETM. >> +    (btrace_format_short_string): add BTRACE_FORMAT_ETM. >> + >>   2021-02-25  Zied Guermazi  >>         * gdbsupport/common.m4: check --with-arm-cs configuration >> diff --git a/gdbsupport/btrace-common.cc b/gdbsupport/btrace-common.cc >> index 4f9ef855e74..82701942aa9 100644 >> --- a/gdbsupport/btrace-common.cc >> +++ b/gdbsupport/btrace-common.cc >> @@ -36,6 +36,9 @@ btrace_format_string (enum btrace_format format) >>         case BTRACE_FORMAT_PT: >>         return _("Intel Processor Trace"); >> + >> +    case BTRACE_FORMAT_ETM: >> +      return _("ARM Processor CoreSight ETM Trace"); >>     } >>       internal_error (__FILE__, __LINE__, _("Unknown branch trace >> format")); >> @@ -56,6 +59,9 @@ btrace_format_short_string (enum btrace_format format) >>         case BTRACE_FORMAT_PT: >>         return "pt"; >> + >> +    case BTRACE_FORMAT_ETM: >> +      return "etm"; >>       } >>       internal_error (__FILE__, __LINE__, _("Unknown branch trace >> format")); >> diff --git a/gdbsupport/btrace-common.h b/gdbsupport/btrace-common.h >> index 26d26ec957f..153b977723a 100644 >> --- a/gdbsupport/btrace-common.h >> +++ b/gdbsupport/btrace-common.h >> @@ -63,7 +63,10 @@ enum btrace_format >>     BTRACE_FORMAT_BTS, >>       /* Branch trace is in Intel Processor Trace format.  */ >> -  BTRACE_FORMAT_PT >> +  BTRACE_FORMAT_PT, >> + >> +  /* Branch trace is ARM CoreSight ETM format.  */ >> +  BTRACE_FORMAT_ETM >>   }; >>     /* An enumeration of cpu vendors.  */ >> @@ -119,6 +122,20 @@ struct btrace_config_pt >>     unsigned int size; >>   }; >>   +/* An ARM CoreSight ETM Trace configuration.  */ >> + >> +struct btrace_config_etm >> +{ >> +  /* The size of the branch trace buffer in bytes. >> + >> +     This is unsigned int and not size_t since it is registered as >> +     control variable for "set record btrace etm buffer-size". */ >> +  unsigned int size; >> + >> +  /* The sink used to collect the traces.  */ >> +  char *sink; >> +}; >> + >>   /* A branch tracing configuration. >>        This describes the requested configuration as well as the >> actually >> @@ -136,6 +153,9 @@ struct btrace_config >>       /* The Intel Processor Trace format configuration.  */ >>     struct btrace_config_pt pt; >> + >> +  /* The ARM CoreSight ETM Trace configuration.  */ >> +  struct btrace_config_etm etm; >>   }; >>     /* Branch trace in BTS format.  */ >> Kind Regards Zied Guermazi