From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by sourceware.org (Postfix) with ESMTPS id B0FF8385383E for ; Wed, 23 Jun 2021 10:59:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B0FF8385383E IronPort-SDR: nX8wSl3eApIJUUj8a7icONwxa5Vwk/0D8SdVwDrchKf7raREaUwDN/rmwvCQy+PNT6INOef3ov dJHv7Sb0uwGg== X-IronPort-AV: E=McAfee;i="6200,9189,10023"; a="205411436" X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="205411436" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2021 03:59:45 -0700 IronPort-SDR: ZHk9dy7hKXk8OETBA1ublN8UphYcL6oWioHfvrcos+AUPb8Muqm8+NEHDsLqLocYwUKFtL3R0s UvUqafzXK0ZA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="454612369" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by fmsmga008.fm.intel.com with ESMTP; 23 Jun 2021 03:59:45 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Wed, 23 Jun 2021 03:59:44 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Wed, 23 Jun 2021 03:59:44 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.176) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Wed, 23 Jun 2021 03:59:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KQvAUBWp/LWRG1BYUiedR1Vz6PGA3aE5e/lrp5Xa+GBbn3RWwXe7E0VQJIdKSaDm8Q0hvaSdwRBrU3QEA+l0/PFwzVoJMaiCA1aUxuVujXPdmjUhgP6gdX6GrbNh4IOZp1Z1q7lpGUXYeSTFO508WVsFMiUJ4XWYcBHqUzP4BVSAstmyYBailXXNW12dHpWpqx3Y6pDUhp8dovT0vYsCB2fWH4CzQJo+YvJLcPbtqkb4ffKaOyE1uCBQvJxfVybjMmU005Cg5HuMwVshn7CAIHycRhbZIVxsAYeA492vVBPkvh4gZlrmA8D4a6PLyNycbKXM4mjufw+rX/jnQD1V+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RY5CdO+um9Vw0pu/EXDf5FoLo6AOWxhZQ1n/j9OUDOo=; b=jyS6Im7+5YdqTUqgXKcxNnfeDFJsgvBKaUmUcRNE+H3FRmLKeyKn6wCMfstGGjeJJNrmID0gLRW3iB+rHXr1B3DdmHGQQivuZlEo4hK600zpBXNJvUte+u/OARLAI1QCWik3NEj+E9K1oSOC6l+AJcVQOez3r3EoG4LPHcB9SpCbZv0nSTbmAqSzYmgHYoTuwppKXdVL8isb5ZnGGKO55Zz5jjasqb2+UJuyoQHm+fBILlR/LY7zG01VcqDCdRQ/Ot4T66/pfO84zIFF0f1FrAKQv7WTM2PAUqaW1Fu9y9V11VrMSYJBFYG5D1P7alsqtP5tsFNb1qx/63RsNKJMzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM5PR11MB1690.namprd11.prod.outlook.com (2603:10b6:3:15::11) by DM5PR11MB1708.namprd11.prod.outlook.com (2603:10b6:3:d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Wed, 23 Jun 2021 10:59:43 +0000 Received: from DM5PR11MB1690.namprd11.prod.outlook.com ([fe80::b0e3:d229:174e:cc45]) by DM5PR11MB1690.namprd11.prod.outlook.com ([fe80::b0e3:d229:174e:cc45%9]) with mapi id 15.20.4242.023; Wed, 23 Jun 2021 10:59:43 +0000 From: "Metzger, Markus T" To: Zied Guermazi CC: "gdb-patches@sourceware.org" Subject: RE: [PATCH v6 6/7] add support for coresight btrace via remote protocol Thread-Topic: [PATCH v6 6/7] add support for coresight btrace via remote protocol Thread-Index: AQHXVmSmS+ZGSbFKlkWPCaK2yDTCX6shYZjA Date: Wed, 23 Jun 2021 10:59:43 +0000 Message-ID: References: <20210531213307.275079-1-zied.guermazi@trande.de> <20210531213307.275079-7-zied.guermazi@trande.de> In-Reply-To: <20210531213307.275079-7-zied.guermazi@trande.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows x-originating-ip: [134.3.204.142] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 616e629f-96ab-4209-1da7-08d936360190 x-ms-traffictypediagnostic: DM5PR11MB1708: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: TmKBjgydHhx9kF0reOxGCyBS9uNaQEVNeXHXQ3rG86tczpmM3xrYIktK7k+ry26VYDLQ3+OAoB5X6xD2TfUO2C2coCD+2FD1lEA5593fvc/hLtc7YOb0cLloOFzam9+nIUz6v4nb5RsH30m6IlBqa8C6hZoVDqXerB3woF8h9bGW3RqN9EPxUla1WNiQJUE3y6LvMQVL4FqAUPGLFuq+/l3RHYh0N3GJLK6feqhKyVgM4+gjVOiNgbAoucjTYERN2EQcDphtocXXXdH7otzYzqjORKz3Va2br9Qr3fC4k97tfZ26tkdWEm4ThioHwmtbnLC+940F9YcbIQmiQyj+W+32dAs/aQnYwAfwxYJpc8ShPQ0sWkAqiq+BVAjiW5d3FMUS4nhf9eqny0YxS2FL6KNNJ52ZI2byFOuPdKiCwMUz7g642IGwQ4flpH6zcHV1XLYx6raJ5kt8rBm/HR+mvw/D2v0OH7ABI7oQLFCnY3PphbxVhM8zC6zPspUbGmkb6bmGC4Ffvbq/riEKsZqj+vtYyWtkSH/ZO/zVi2/lQJxdXjsAp1nhznKOQ3WI4lrzSRA2JIL5cSSJkznSTU7JDCOP6gA8ViZ26QqfyCOzrSs= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM5PR11MB1690.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(39860400002)(396003)(376002)(366004)(136003)(346002)(26005)(186003)(122000001)(38100700002)(316002)(55016002)(9686003)(478600001)(4326008)(6916009)(76116006)(8936002)(2906002)(6506007)(8676002)(5660300002)(52536014)(33656002)(66476007)(66556008)(64756008)(66446008)(66946007)(86362001)(71200400001)(83380400001)(7696005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?d+WiVwrT453D1Pd3p/nYhqSPtUZvtc3jCgpP0HNpyp4QthnsbSqySdLCRHHX?= =?us-ascii?Q?kFyCZ1Sh2DcZmVVtmOHeSICTjVTZZsON04B1y2id43NxzpvT5shjzGYI5VqA?= =?us-ascii?Q?c14D7AE2blRECNF67hR3eSGobb5iy1kQeg3KYM4LzsOscWxQXHZ/WPRe4Xrt?= =?us-ascii?Q?0VjYgNJDp7Go3fDZRJriQbcoueFNeY7eKsdEKImv2amCUaH8LLvylY4e0sB5?= =?us-ascii?Q?NQeoxZV+JgrY4TRKZpiBILIN0V+aO6FfTV6R0IHHAelcBAOyg3KG9TQQV/0b?= =?us-ascii?Q?QLiA3G38XzddNQajJ1lnRlmh0RgY6kTfMjGE07IqtLetK4OaSHP0lUNJWXub?= =?us-ascii?Q?5JceRermki3Rxu+bKfHYOwmSQudzn2dYmy1QJRoiBzjSyuNWkqR2RGmYJWzM?= =?us-ascii?Q?cIzDvFgFF+i0qVnYo3QzvC8ZKts2WkKIFpp5kY01cdhtwQT3yxGFEbt42C5+?= =?us-ascii?Q?diaxWQ1yR8YPsmrJWaVAhRVsANxQWHdyAnuf9TKOi2Rzvh58lDSqrc0zAYI/?= =?us-ascii?Q?4v1o0zbJAV0AU9un3FhJMmY7sdp1hgVqAFvJ70wRA6bzYzcp7oSaE88xEDhn?= =?us-ascii?Q?Ay0ySMTEC7wAofvEguVOFZdFSUqiQpCpVy7CJ5Kk92ZOiUd0lJlVDNteG6nE?= =?us-ascii?Q?GUww7QmZq8Qu5DnhdSoi0GzUXp0V99y3VkLrpD2bZvToYlEC18L1P3UZp9MG?= =?us-ascii?Q?xG/TzLOeztz/KWw0Knt/4w8+Qp75iOQYCL7WciAXfkoCQd81AlD5d4ETc97Z?= =?us-ascii?Q?9XvGp24rR2w+KPLCh7qVWeWNkrxj+Gzq3LujNlOQPq+/0ZUHa2UoCUEOWxT5?= =?us-ascii?Q?03m6Cvx5IaKSlZIdSbaKWkvDQaBPhhp2lTAfGET2z5bzqE+efQBr/BNuR3p2?= =?us-ascii?Q?9mDRPygh5dyTj9p3eCUfuw1osbXo5hyDTdLO8guFy6HSASg22QGvN7hbgxDF?= =?us-ascii?Q?X9mKdECXMkFIJDAe+L7bw108hvin8YIrA5mJ6i+5LUkrk3DNxEHwfkmh9nBZ?= =?us-ascii?Q?jdCuujFhX63xwB/v1nQb9nd0x1SUcSqp2gOkTVU3uO1CFgc4RFl3ggbcaIPk?= =?us-ascii?Q?gJI8o/p6yvTgOBCV53AgGAkbq+0EK6x46hyrYlvCx4ixTHuVwJclitfKg6C1?= =?us-ascii?Q?J0m2XR4DOlolVO+TAjBCNEi93emUToCX72MmCKrHBPaD/jnaBw2EvEVPHv2j?= =?us-ascii?Q?BSTwI1MvSxb5xe0DrmNHsEJ7cnkb/FAVV0dShIq4it4vu2d4o4Nz717glDni?= =?us-ascii?Q?IWQagyMcx0WBD/Ij9AJnqEDzINuoeTAeQcOTlWaJLTwdX1YSFynhqIcXd2yQ?= =?us-ascii?Q?SwL6dHJij8TiJLDf2Cs+ijFY?= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR11MB1690.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 616e629f-96ab-4209-1da7-08d936360190 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jun 2021 10:59:43.0652 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: pjMO3Rqgj0S4VxBV6E0KfjnUQ4dyv/qP/V85Vjmb033PoFEPrdwLUEhJukzhjs4HuvIyn3O65NCzRCvouzMwMS4JNlujf31AhT44u4tSiPw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1708 X-OriginatorOrg: intel.com Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, DKIM_INVALID, DKIM_SIGNED, GIT_PATCH_0, KAM_DMARC_STATUS, 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 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, 23 Jun 2021 10:59:50 -0000 Hello Zied, >+/* Parse a btrace etm "cpu-etm-config-etmv4_config" xml record. */ >+ >+static void >+parse_xml_btrace_etm_config_source_config_cpu_etmv4_config ( Isn't the element just called "etmv4-config"? >+ struct gdb_xml_parser *parser, >+ const struct gdb_xml_element *element, >+ void *user_data, >+ std::vector &attributes) >+{ >+ struct btrace_data *btrace; >+ cs_etm_trace_params *etm_trace_params; No forward declarations; etm_trace_params can become a reference. >+ >+ DEBUG ("parse_xml_btrace_etm_config_source_config_cpu_etmv4_config"); >+ >+ btrace =3D (struct btrace_data *) user_data; >+ etm_trace_params =3D & (btrace->variant.etm.config.etm_trace_params->ba= ck >()); >+ >+ struct gdb_xml_value *reg_idr0; >+ reg_idr0 >+ =3D xml_find_attribute (attributes, "reg_idr0"); Please combine declaration and initialization. >+ >+ struct gdb_xml_value *reg_idr1; >+ reg_idr1 >+ =3D xml_find_attribute (attributes, "reg_idr1"); >+ >+ struct gdb_xml_value *reg_idr2; >+ reg_idr2 >+ =3D xml_find_attribute (attributes, "reg_idr2"); >+ >+ struct gdb_xml_value *reg_idr8; >+ reg_idr8 >+ =3D xml_find_attribute (attributes, "reg_idr8"); >+ >+ struct gdb_xml_value *reg_configr; >+ reg_configr >+ =3D xml_find_attribute (attributes, "reg_configr"); >+ >+ struct gdb_xml_value *reg_traceidr; >+ reg_traceidr >+ =3D xml_find_attribute (attributes, "reg_traceidr"); >+ >+ etm_trace_params->etmv4.reg_idr0 >+ =3D (unsigned int) *(ULONGEST *) reg_idr0->value.get (); We should check those pointers before dereferencing. If the XML doesn't contain that attribute, the pointer would be nullptr. >+/* Parse a btrace etm "cpu-etm-config" xml record. */ >+ >+static void >+parse_xml_btrace_etm_config_source_config_cpu_etm_config ( How would we arrive at that function name? Wouldn't it simply be parse_xml_btrace_cpu_etm_config? More below. >+ trace_id =3D xml_find_attribute (attributes, "trace_id"); >+ if (trace_id !=3D NULL) >+ btrace->variant.etm.trace_id >+ =3D (uint8_t) *(ULONGEST *) trace_id->value.get (); Shouldn't this be an error? >+static const struct gdb_xml_attribute >+btrace_etm_config_source_config_cpu_config_etmv3_config_attributes[] =3D { >+ { "reg_ctrl", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL }, NULL is spelled nullptr in new code. >+ struct gdb_xml_value *sink; >+ sink =3D xml_find_attribute (attributes, "sink"); >+ if (sink !=3D nullptr) >+ conf->etm.sink =3D (char*) sink->value.get (); I don't think this memory is alive after parsing the XML. >+static const struct gdb_xml_attribute btrace_conf_etm_attributes[] =3D { >+ { "size", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL }, >+ { "sink", GDB_XML_AF_OPTIONAL, NULL, NULL }, >+ { NULL, GDB_XML_AF_NONE, NULL, NULL } >+}; Shouldn't there be entries for filter and config, too? > These are the currently defined stub features, in more detail: >@@ -42248,9 +42262,11 @@ The remote stub understands the >@samp{Qbtrace:off} packet. > > @item Qbtrace:bts > The remote stub understands the @samp{Qbtrace:bts} packet. >+(@pxref{bts}). > > @item Qbtrace:pt > The remote stub understands the @samp{Qbtrace:pt} packet. >+(@pxref{pt}). > > @item Qbtrace-conf:bts:size > The remote stub understands the @samp{Qbtrace-conf:bts:size} packet. >@@ -42286,7 +42302,6 @@ The remote stub understands the >@samp{QThreadEvents} packet. > @item no-resumed > The remote stub reports the @samp{N} stop reply. > >- > @item memory-tagging > The remote stub supports and implements the required memory tagging > functionality and understands the @samp{qMemTags} (@pxref{qMemTags}) and >@@ -42296,6 +42311,15 @@ For AArch64 GNU/Linux systems, this feature also >requires access to the > @file{/proc/@var{pid}/smaps} file so memory mapping page flags can be >inspected. > This is done via the @samp{vFile} requests. > >+@item Qbtrace:etm >+The remote stub understands the @samp{Qbtrace:etm} packet. >+(@pxref{etm}). Shouldn't this command be documented together with Qbtrace:bts and Qbtrace:pt above? >+ >+@item Qbtrace-conf:etm:size >+The remote stub understands the @samp{Qbtrace-conf:etm:size} packet. >+ >+@item Qbtrace-conf:etm:sink >+The remote stub understands the @samp{Qbtrace-conf:etm:sink} packet. > @end table Same here. They would go to the Qbtrace-conf:... block. This comment is for all new packets that are really extensions of existing btrace packets for a new format. >diff --git a/gdb/features/btrace-conf.dtd b/gdb/features/btrace-conf.dtd >index 4b060bb408c..7334d035f34 100644 >--- a/gdb/features/btrace-conf.dtd >+++ b/gdb/features/btrace-conf.dtd >@@ -4,11 +4,17 @@ > are permitted in any medium without royalty provided the copyright > notice and this notice are preserved. --> > >- >- >+ >+ I don't know how this would be handled. We'd need someone else to review this part. >diff --git a/gdb/remote.c b/gdb/remote.c >index 9b465d77343..2defaa4503e 100644 >--- a/gdb/remote.c >+++ b/gdb/remote.c >@@ -2184,6 +2184,15 @@ enum { > packets and the tag violation stop replies. */ > PACKET_memory_tagging_feature, > >+ /* Support for the Qbtrace-etm packet. */ >+ PACKET_Qbtrace_etm, >+ >+ /* Support for the Qbtrace-conf:etm:size packet. */ >+ PACKET_Qbtrace_conf_etm_size, >+ >+ /* Support for the Qbtrace-conf:etm:sink packet. */ >+ PACKET_Qbtrace_conf_etm_sink, Packets for filter and config are missing. >+static void >+linux_low_encode_etm_config (struct buffer *buffer, >+ const struct btrace_data_etm_config *config) >+{ >+ int architecture; >+ buffer_grow_str (buffer, "\n"); >+ buffer_grow_str (buffer, "\n"); >+ for (int i=3D0; i< config->cpu_count;i++) >+ { >+ if ((config->etm_trace_params->at (i).protocol =3D=3D OCSD_PROTOCOL_E= TMV3) >+ ||(config->etm_trace_params->at (i).protocol =3D=3D OCSD_PROTOCOL_PTM)) space before ( >+ { >+ architecture =3D ARCH_V7; >+ } No {} for a single statement. >+ else if (config->etm_trace_params->at (i).protocol =3D=3D >OCSD_PROTOCOL_ETMV4I) >+ { >+ architecture =3D ARCH_V8; >+ } >+ else >+ { >+ architecture =3D ARCH_UNKNOWN; >+ } >+ >+ buffer_xml_printf (buffer,"+ "core_prof=3D\"0x%x\" cpu_id=3D\"0x%x\" protocol=3D\"0x%x\">\n", Indentation of the split string is off. More below. >+ architecture, profile_CortexA, >+ i, config->etm_trace_params->at (i).protocol); >+ if (architecture =3D=3D ARCH_V7) >+ { >+ buffer_xml_printf (buffer, >+ "+ "reg_ccer=3D\"0x%x\" reg_trc_id=3D\"0x%x\"/>\n", >+ config->etm_trace_params->at (i).etmv3.reg_idr, >+ config->etm_trace_params->at (i).etmv3.reg_ctrl, >+ config->etm_trace_params->at (i).etmv3.reg_ccer, >+ config->etm_trace_params->at (i).etmv3.reg_trc_id); It might help to stick to the order used in the corresponding schema. >@@ -7077,7 +7161,7 @@ linux_process_target::read_btrace_conf (const >btrace_target_info *tinfo, > const struct btrace_config *conf; > > buffer_grow_str (buffer, "conf.dtd\">\n"); >- buffer_grow_str (buffer, "\n"); >+ buffer_grow_str (buffer, "\n"); We only need 1.1 for the new features. If we built a new gdbserver from this it wouldn't be able to use PT or BTS with an old GDB, although we didn't change anything, there. > conf =3D linux_btrace_conf (tinfo); > if (conf !=3D NULL) >@@ -7098,6 +7182,20 @@ linux_process_target::read_btrace_conf (const >btrace_target_info *tinfo, > buffer_xml_printf (buffer, " size=3D\"0x%x\"", conf->pt.size); > buffer_xml_printf (buffer, "/>\n"); > break; >+ >+ case BTRACE_FORMAT_ETM: >+ buffer_xml_printf (buffer, "+ buffer_xml_printf (buffer, " size=3D\"0x%x\"", conf->etm.size); >+ if (conf->etm.sink !=3DNULL) spaces around !=3D and nullptr instead of NULL >+ { >+ buffer_xml_printf (buffer, " sink=3D\"%s\"", conf->etm.sink); >+ } >+ else >+ { >+ buffer_xml_printf (buffer, " sink=3D\"default\""); We treat nullptr as default above, yet we pass "default", here. The parser just installs that string. Where do we handle the "default" sink? Regards, Markus. Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva = Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928