From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16484 invoked by alias); 31 May 2012 15:33:03 -0000 Received: (qmail 16431 invoked by uid 22791); 31 May 2012 15:33:02 -0000 X-SWARE-Spam-Status: No, hits=-5.6 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mga14.intel.com (HELO mga14.intel.com) (143.182.124.37) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 31 May 2012 15:32:44 +0000 Content-Type: multipart/mixed; boundary="===============1388481169==" MIME-Version: 1.0 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga102.ch.intel.com with ESMTP; 31 May 2012 08:32:41 -0700 X-ExtLoop1: 1 Received: from irsmsx101.ger.corp.intel.com ([163.33.3.153]) by azsmga001.ch.intel.com with ESMTP; 31 May 2012 08:32:39 -0700 Received: from irsmsx104.ger.corp.intel.com (163.33.3.159) by IRSMSX101.ger.corp.intel.com (163.33.3.153) with Microsoft SMTP Server (TLS) id 14.1.355.2; Thu, 31 May 2012 16:31:54 +0100 Received: from irsmsx102.ger.corp.intel.com ([169.254.2.198]) by IRSMSX104.ger.corp.intel.com ([169.254.5.11]) with mapi id 14.01.0355.002; Thu, 31 May 2012 16:31:53 +0100 From: "Metzger, Markus T" To: Jan Kratochvil CC: "kettenis@gnu.org" , "gdb-patches@sourceware.org" , "markus.t.metzger@gmail.com" Subject: RE: [PATCH 04/16] thread, btrace: add generic branch trace support Date: Thu, 31 May 2012 15:33:00 -0000 Message-ID: References: <1337772151-20265-1-git-send-email-markus.t.metzger@intel.com> <1337772151-20265-5-git-send-email-markus.t.metzger@intel.com> <20120530204152.GD20633@host2.jankratochvil.net> In-Reply-To: <20120530204152.GD20633@host2.jankratochvil.net> MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-05/txt/msg01086.txt.bz2 --===============1388481169== MIME-Version: 1.0 Content-Language: en-US Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=SHA1; boundary="----=_NextPart_000_01C6_01CD3F53.441F2660" ------=_NextPart_000_01C6_01CD3F53.441F2660 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-length: 6323 > -----Original Message----- > From: Jan Kratochvil [mailto:jan.kratochvil@redhat.com] > Sent: Wednesday, May 30, 2012 10:42 PM > To: Metzger, Markus T Thanks for your review! [...] > > +#if !defined(EALREADY) > > GNU Coding Style formatting would be: > #if !defined (EALREADY) > but maybe it is easier: > #ifndef EALREADY Fixed. > > +/* Remap EALREADY for systems that do not define it, e.g. mingw. */ > > +# define EALREADY EBUSY #endif > > + > > +int > > +enable_btrace (struct thread_info *tinfo) > > Very every new function must have a comment before. > It is very common across the whole patchset. > > This function is documented in btrace.h so it is enough to write here: > > /* See definition in btrace.h. */ > > int > enable_btrace (struct thread_info *tinfo) OK. I'll add comments to every function. > I did not list them specifically but I see at least some of the new > functions > without comment are really not documented in their corresponding .h file (at > least the 'static' ones). > > Also use some common prefix for the global functions in btrace.c, most > probably just rename this function to btrace_enable and other functions too. I tried to stick to the existing style. If you look at gdb/tracepoint.h, for example, functions are called start_tracing() and stop_tracing() instead of trace_start() and trace_stop(). If you're OK, I would leave the names as they are. > > +{ > > + if (!tinfo) > > + return EINVAL; > > This cannot happen (similarly in other functions) in current code. It could > be > rather 'gdb_assert (tinfo != NULL);' but I think it can be even omitted. I removed those pointer checks. > Also 'struct thread_info *' is commonly called 'tp' in GDB. But it is not > required to change it. Fixed. > > + > > + if (tinfo->btrace.target) > > + return EALREADY; > > Isn't more suitable here to say some user message instead? > error (_("Branch tracing is already enable for %s."), > target_pid_to_str (tinfo->ptid)); > > The generic message is not too user friendly, in KVM (assuming not > supporting btrace that way): > (gdb) btrace enable all > warning: Couldn't enable branch tracing for 26535: No such file or > directory > > "No such file or directory" may not be understood well by a user. Agreed. > > + > > + tinfo->btrace.target = target_enable_btrace (tinfo->ptid); if > > + (!tinfo->btrace.target) > > + return (errno ? errno : ENOSYS); > > I do not see the whole picture now but I do not find these error codes too > right, it is like in C code. GDB uses more the > error()/throw_error()/TRY_CATCH exceptions. Wouldn't it simplify the code > a lot? The idea was to not have the low levels talk to the user directly. I was not aware of the extensive use of exception handling until I followed the discussion about C++ - which was after I wrote this code. I am trying to share the low level code with gdbserver, which seems to use a restricted form of exception handling or none at all for IN_PROCESS_AGENT. This reminds me that I have not tested IN_PROCESS_AGENT. I have done nothing to either include or exclude the new btrace packets and I don't know what the default is. Can you point me to some documentation on how to build and test it? If I called error () to indicate that I could not configure branch tracing, for example, this would cause the IN_PROCESS_AGENT to exit () and might not lead to the correct response for standard gdbserver (I have not checked this). Do you have a proposal on what to do in this case? Is it OK to call error () in gdbserver code and trust the gdbserver infrastructure to handle it correctly? [...] > > + if (!errcode) > > + { > > + VEC_free (btrace_block_s, btinfo->btrace); > > + btinfo->btrace = NULL; > > VEC_free already does 'btinfo->btrace = NULL;' (I agree it is confusing). Fixed. [...] > > +void > > +disconnect_btrace (void) > > +{ > > + ptid_t ptid = inferior_ptid; > > Minor style issue - instead: > struct cleanup *old_chain = save_inferior_ptid (); > > > + > > + iterate_over_threads (do_disconnect_btrace, NULL); > > + > > + switch_to_thread (ptid); > > Minor style issue - instead: > do_cleanups (old_chain); > > This makes it safe against possible future throws of errors. Fixed. [...] > > + /* The first block ends at the current pc. */ > > + if (!VEC_empty (btrace_block_s, btinfo->btrace)) > > + { > > + struct frame_info *frame = get_current_frame (); > > Empty line after declarations. Fixed. > > + if (frame) > > + { > > + struct btrace_block *head = > > + VEC_index (btrace_block_s, btinfo->btrace, 0); > > Empty line after declarations. Fixed. [...] > > + if (btinfo->iterator >= VEC_length (btrace_block_s, btinfo->btrace)) > > + { > > + btinfo->iterator = VEC_length (btrace_block_s, btinfo->btrace); > > + return NULL; > > So == VEC_length is not permitted and you still set it to VEC_length? > Shouldn't it be set to VEC_length -1 in such case? See more by comment for > the btrace_thread_info.iterator field. Changed the condition to >. Also for the other cases. [...] > > +struct btrace_block > > +{ > > + CORE_ADDR begin; > > + CORE_ADDR end; > > Describe END is the last byte (and not one-after-the-last-one). BTW I would > find easier to make it rather one-after-the-last-byte. This is not the last byte of the block but the address of the last instruction in the block. I'll add a comment. [...] > Could you describe here what does mean if it is -1 and what does mean if it > is > VEC_length (btrace)? The code is doing some magic with it. I'll add a comment to the iterator field in struct btrace_thread_info in gdb/btrace.h [...] > > INHERIT (to_traceframe_info, t); > > INHERIT (to_use_agent, t); > > INHERIT (to_can_use_agent, t); > > + INHERIT (to_supports_btrace, t); > > This whole INHERIT / de_fault / '#define target_.*' way is the deprecated > one. > The currently recommended way is to use stub functions like > target_verify_memory (and many others). I am sorry it is probably not > documented anywhere. I can add those. I used to declare respective macros. Do you want me to drop the INHERIT changes from the patch? [...] Regards, Markus. ------=_NextPart_000_01C6_01CD3F53.441F2660 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-length: 9801 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEH AQAAoIIYeDCCAyAwggKJoAMCAQICBDXe9M8wDQYJKoZIhvcNAQEFBQAwTjEL MAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVxdWlm YXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw05ODA4MjIxNjQx NTFaFw0xODA4MjIxNjQxNTFaME4xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdF cXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0aWZpY2F0ZSBB dXRob3JpdHkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFdsVhnCGLu oJotHwhtkRRomAoe/toEbxOEYiHD0XzOnwXguAHwTjTs4oqVBGSs8WtTXwWz y2eAv0ICjv7dAQns4QAUT/z78AzdQ7pbK+EfgHCZFVeTFvEPl2q3wmgjHMxN WTCsUR47ryvW7mNFe8XZX1DS41APOojnvxT94Me5AgMBAAGjggEJMIIBBTBw BgNVHR8EaTBnMGWgY6BhpF8wXTELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0Vx dWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1 dGhvcml0eTENMAsGA1UEAxMEQ1JMMTAaBgNVHRAEEzARgQ8yMDE4MDgyMjE2 NDE1MVowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFEjmaPkr0rKV10fYIyAQ TzOYkJ/UMB0GA1UdDgQWBBRI5mj5K9KylddH2CMgEE8zmJCf1DAMBgNVHRME BTADAQH/MBoGCSqGSIb2fQdBAAQNMAsbBVYzLjBjAwIGwDANBgkqhkiG9w0B AQUFAAOBgQBYzinq/Pfetc4CuRe1hdG54+CVzCUxDQCmkm5/tpJjnlCV0Zpv 5BHeY4VumO6o/1rI01WyZnFX3sAh6z0qpyNJAQSGQnv87n+iFlK1Z2fTQNs7 JliyKHc9rhR3Ydb6KmYnoA36p3Nc6nDxlCFlRF/6/O8paKmih3nvee9PrAd3 ODCCAz0wggKmoAMCAQICAwWw/zANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQG EwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1 cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA2MDIxNjE4MDEzMFoXDTE2 MDIxOTE4MDEzMFowUjELMAkGA1UEBhMCVVMxGjAYBgNVBAoTEUludGVsIENv cnBvcmF0aW9uMScwJQYDVQQDEx5JbnRlbCBFeHRlcm5hbCBCYXNpYyBQb2xp Y3kgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBpd/XOb9Q VqEZ8mQ1042TdOIq3ATDIsV2xDyt30yLyMR5Wjtus0bn3B+he89BiNO/LP6+ rFzEwlD55PlX+HLGIKeNNG97dqyc30FElEUjZzTZFq2N4e3kVJ/XAEEgANzV 8v9qp7qWwxugPgfc3z9BkYot+CifozexHLb/hEZj+yISCU61kRZvuSQ0E11y YL4dRgcglJeaHo3oX57rvIckaLsYV5/1Aj+R8DM1Ppk965XQAKsHfnyT7C4S 50T4lVn4lz36wOdNZn/zegG1zp41lnoTFfT4KuKVJH5x7YD1p6KbgJCKLovn ujGuohquBNfdXKpZkvz6pGv+iC1HawJdAgMBAAGjgaAwgZ0wDgYDVR0PAQH/ BAQDAgEGMB0GA1UdDgQWBBQaxgxKxEdvqNutK/D0Vgaj7TdUDDA6BgNVHR8E MzAxMC+gLaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3Vy ZWNhLmNybDAfBgNVHSMEGDAWgBRI5mj5K9KylddH2CMgEE8zmJCf1DAPBgNV HRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABMQOK2kVKVIlUWwLTdy wJ+e2O+PC/uQltK2F3lRyrPfBn69tOkIP4SgDJOfsxyobIrPLe75kBLw+Dom 13OBDp/EMZJZ1CglQfVV8co9mT3aZMjSGGQiMgkJLR3jMfr900fXZKj5XeqC J+JP0mEhJGEdVCY+FFlksJjV86fDrq1QMIIFijCCBHKgAwIBAgIKYR6AtwAA AAAABzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJVUzEaMBgGA1UEChMR SW50ZWwgQ29ycG9yYXRpb24xJzAlBgNVBAMTHkludGVsIEV4dGVybmFsIEJh c2ljIFBvbGljeSBDQTAeFw0wOTA1MTUxOTI1MTNaFw0xNTA1MTUxOTM1MTNa MFYxCzAJBgNVBAYTAlVTMRowGAYDVQQKExFJbnRlbCBDb3Jwb3JhdGlvbjEr MCkGA1UEAxMiSW50ZWwgRXh0ZXJuYWwgQmFzaWMgSXNzdWluZyBDQSAzQTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMGPgGLnOO5IOzlHRfr1 XfCVb97V4BR2QVpPZ7CrcIQ+FGa2KHD/6dPjwxOIrtFTdfW4BYikdFmxUZVB WRWZ5Vye2cCdGzFWqIEOE1e17nNx1jM8Z6GZEqbDUS+vBuPlBFHKQoVm5BaN IHpyn2XZxqwjV9j5/crIfPrCGstk+2ztUhVS8OHEgzO784PgD9pOgBnnAbZH mEM1FYYmQ6ibS+gVCHzobDYG+YReRiHpFKWBxpUuP+X0WYFw/Ja1JW7N8pEL AFDw0UFBWFgiv1QIusdLvSy8mcsLJ5wy050OVcxShqoUxhw/wvyuuoQxvmEP jhRa1C2oSCmGN0003GMhQWMCAwEAAaOCAlwwggJYMA8GA1UdEwEB/wQFMAMB Af8wHQYDVR0OBBYEFKoWZq+3PVZTYK4Nwu3z7gfLUWB+MAsGA1UdDwQEAwIB hjASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBTCKwhTx+hd MsKCgOmWwLgjQsAV+TAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAfBgNV HSMEGDAWgBQaxgxKxEdvqNutK/D0Vgaj7TdUDDCBvQYDVR0fBIG1MIGyMIGv oIGsoIGphk5odHRwOi8vd3d3LmludGVsLmNvbS9yZXBvc2l0b3J5L0NSTC9J bnRlbCUyMEV4dGVybmFsJTIwQmFzaWMlMjBQb2xpY3klMjBDQS5jcmyGV2h0 dHA6Ly9jZXJ0aWZpY2F0ZXMuaW50ZWwuY29tL3JlcG9zaXRvcnkvQ1JML0lu dGVsJTIwRXh0ZXJuYWwlMjBCYXNpYyUyMFBvbGljeSUyMENBLmNybDCB4wYI KwYBBQUHAQEEgdYwgdMwYwYIKwYBBQUHMAKGV2h0dHA6Ly93d3cuaW50ZWwu Y29tL3JlcG9zaXRvcnkvY2VydGlmaWNhdGVzL0ludGVsJTIwRXh0ZXJuYWwl MjBCYXNpYyUyMFBvbGljeSUyMENBLmNydDBsBggrBgEFBQcwAoZgaHR0cDov L2NlcnRpZmljYXRlcy5pbnRlbC5jb20vcmVwb3NpdG9yeS9jZXJ0aWZpY2F0 ZXMvSW50ZWwlMjBFeHRlcm5hbCUyMEJhc2ljJTIwUG9saWN5JTIwQ0EuY3J0 MA0GCSqGSIb3DQEBBQUAA4IBAQCUY/1d0MS6VPTlIcOho1XWh193PD5kJDJS PdphLHQdM1oKA+whMdIBoY1VzTDDK+C+Ey4Jcyna7fpC8uVmn/Rz/i9MZtyc 7qezPtZTn9UyORvJmddH+Ox/RycGwe3ags8jUdspECorYOkJyZksnDIlTVUv bR7wyY+gGJYqxWXqrcVFEiMsWu8/OIlf7F2gAYMBw1kZ55dn4lWBIM0WqvRe WpPvhYeN7Y+3MKEdSMkQ7TZiNbfdZ5D/8KfWNMTJ4VHltOgCL1lA5tx/F4R1 920skpL5eu3Sj650RUe3rOXsaV5NyJzBwB31+1zsmleVdFD0k/Fw9HxXbAQE 35ucN/7CMIIGGzCCBQOgAwIBAgIKLe/tkAABAAB8QDANBgkqhkiG9w0BAQUF ADBWMQswCQYDVQQGEwJVUzEaMBgGA1UEChMRSW50ZWwgQ29ycG9yYXRpb24x KzApBgNVBAMTIkludGVsIEV4dGVybmFsIEJhc2ljIElzc3VpbmcgQ0EgM0Ew HhcNMTIwMTA5MTAyMTE5WhcNMTQxMjI0MTAyMTE5WjBHMRowGAYDVQQDExFN ZXR6Z2VyLCBNYXJrdXMgVDEpMCcGCSqGSIb3DQEJARYabWFya3VzLnQubWV0 emdlckBpbnRlbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQDNFEzrGLYCoj6ZrC1Hl4ZVaxkYaR/XqIvq8N0MrkliLwFA0NMe92mLZGZH +Nib70+s/ug2QEBiTbIL8HmGisvivk4uos+VdJoklfccMqg+8jLy7K7EQPcT LADoSEqALH6CQUxOgMWy19mddNwgYcqtaYC20rBUU6OW4XNq4LpXuAcQsDEL zYB74/M8+Egu8f7hdqzOPSvqtySxQek83zrIvIj0kJGzzi/wx3YvCmVPeS+9 XCyysVxtE451RUdSMn278XP4ROL4nypewMumUKlM8zmpXr36DfEJp7POsOPh Is70HR5ECbl38xKwDIAFVJIiKPInbEYLNzxmNCYgwjxBAgMBAAGjggL4MIIC 9DALBgNVHQ8EBAMCB4AwPAYJKwYBBAGCNxUHBC8wLQYlKwYBBAGCNxUIhsOM dYSZ5VGD/YEohY6fU4KRwAlngd69OZXwQwIBZAIBCDAdBgNVHQ4EFgQUO1LS H9DzY7/SDxgu5ElpvSO2ucMwHwYDVR0jBBgwFoAUqhZmr7c9VlNgrg3C7fPu B8tRYH4wgc8GA1UdHwSBxzCBxDCBwaCBvqCBu4ZXaHR0cDovL3d3dy5pbnRl bC5jb20vcmVwb3NpdG9yeS9DUkwvSW50ZWwlMjBFeHRlcm5hbCUyMEJhc2lj JTIwSXNzdWluZyUyMENBJTIwM0EoMSkuY3JshmBodHRwOi8vY2VydGlmaWNh dGVzLmludGVsLmNvbS9yZXBvc2l0b3J5L0NSTC9JbnRlbCUyMEV4dGVybmFs JTIwQmFzaWMlMjBJc3N1aW5nJTIwQ0ElMjAzQSgxKS5jcmwwgfUGCCsGAQUF BwEBBIHoMIHlMGwGCCsGAQUFBzAChmBodHRwOi8vd3d3LmludGVsLmNvbS9y ZXBvc2l0b3J5L2NlcnRpZmljYXRlcy9JbnRlbCUyMEV4dGVybmFsJTIwQmFz aWMlMjBJc3N1aW5nJTIwQ0ElMjAzQSgxKS5jcnQwdQYIKwYBBQUHMAKGaWh0 dHA6Ly9jZXJ0aWZpY2F0ZXMuaW50ZWwuY29tL3JlcG9zaXRvcnkvY2VydGlm aWNhdGVzL0ludGVsJTIwRXh0ZXJuYWwlMjBCYXNpYyUyMElzc3VpbmclMjBD QSUyMDNBKDEpLmNydDAfBgNVHSUEGDAWBggrBgEFBQcDBAYKKwYBBAGCNwoD DDApBgkrBgEEAYI3FQoEHDAaMAoGCCsGAQUFBwMEMAwGCisGAQQBgjcKAwww UQYDVR0RBEowSKAqBgorBgEEAYI3FAIDoBwMGm1hcmt1cy50Lm1ldHpnZXJA aW50ZWwuY29tgRptYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbTANBgkqhkiG 9w0BAQUFAAOCAQEADdFEG6jdrvYiP7vtLUBHgm0nVxgFWGo4wWFaRtAxn5zX 9zffITtPdhtiMvRPJdRAKkAjjAfBx7oDojjMS0VIFZVEPKRx1IlrakO1cpGb 4vDpA4OTa8L1sdN+0SBUBYhIV1fxPlHvbcatzbwzP4xdKAunujaEN6Vv4DC0 hsEazMArZXIRVKnKxS7BeLsHlM7VL7K4R70wTonQCtwgxSjlU46y8R9ktLWD TQX7JxMZ76Z5oLbd6V+I28QcHL+/tyuM9a/WxT2Cgn2Up+xWE0OK9CNERIU8 +PI+ATvXgapAPe3kgRNDKs4JP5Dv3vzLo9lWWs4rfOLBC6050ZcZZxPDbjCC BmIwggVKoAMCAQICClJANE4AAQAAUK4wDQYJKoZIhvcNAQEFBQAwVjELMAkG A1UEBhMCVVMxGjAYBgNVBAoTEUludGVsIENvcnBvcmF0aW9uMSswKQYDVQQD EyJJbnRlbCBFeHRlcm5hbCBCYXNpYyBJc3N1aW5nIENBIDNBMB4XDTEwMTAx ODA4NTcxNFoXDTEzMTAwMjA4NTcxNFowRzEaMBgGA1UEAxMRTWV0emdlciwg TWFya3VzIFQxKTAnBgkqhkiG9w0BCQEWGm1hcmt1cy50Lm1ldHpnZXJAaW50 ZWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkMGMOKjN GWxm+QGUl32IFMyvLrzHAveRRn9jzy6LWuGmgmxJxuTMqkEK0y3vCVPWKWMw dP96AJS9U/J+3ByDovhXcPs3gi08xUHT7qolxOGt0nBwKzYgvW8ahbwW0Iuj UBLe4QB+XboX6WWx1aUIj0Urv93jSlqi942u96SspQh4oYV7EtZFnpOvkJPT tpJhXe5e1SACosn6vuSpIslZYdRlPdcFTx8vhL4A/YzZWW6NbnfhIAmFRq93 jRXwci9Cr/E6Ygb8jgCQgzmzw3864fGZ6uhKUuu3dsAcrlqALoFxb4HUh9cX HFFY553ZtFegbKSko4kFS1Jroi2qYYMMzwIDAQABo4IDPzCCAzswCwYDVR0P BAQDAgQwMD0GCSsGAQQBgjcVBwQwMC4GJisGAQQBgjcVCIbDjHWEmeVRg/2B KIWOn1OCkcAJZ4S52UGHhP9OAgFkAgEMMEQGCSqGSIb3DQEJDwQ3MDUwDgYI KoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDAHBgUrDgMCBzAKBggqhkiG 9w0DBzAdBgNVHQ4EFgQUegpGutM4LPQCiqaGdC/gNvXYCIYwHwYDVR0jBBgw FoAUqhZmr7c9VlNgrg3C7fPuB8tRYH4wgc8GA1UdHwSBxzCBxDCBwaCBvqCB u4ZXaHR0cDovL3d3dy5pbnRlbC5jb20vcmVwb3NpdG9yeS9DUkwvSW50ZWwl MjBFeHRlcm5hbCUyMEJhc2ljJTIwSXNzdWluZyUyMENBJTIwM0EoMSkuY3Js hmBodHRwOi8vY2VydGlmaWNhdGVzLmludGVsLmNvbS9yZXBvc2l0b3J5L0NS TC9JbnRlbCUyMEV4dGVybmFsJTIwQmFzaWMlMjBJc3N1aW5nJTIwQ0ElMjAz QSgxKS5jcmwwgfUGCCsGAQUFBwEBBIHoMIHlMGwGCCsGAQUFBzAChmBodHRw Oi8vd3d3LmludGVsLmNvbS9yZXBvc2l0b3J5L2NlcnRpZmljYXRlcy9JbnRl bCUyMEV4dGVybmFsJTIwQmFzaWMlMjBJc3N1aW5nJTIwQ0ElMjAzQSgxKS5j cnQwdQYIKwYBBQUHMAKGaWh0dHA6Ly9jZXJ0aWZpY2F0ZXMuaW50ZWwuY29t L3JlcG9zaXRvcnkvY2VydGlmaWNhdGVzL0ludGVsJTIwRXh0ZXJuYWwlMjBC YXNpYyUyMElzc3VpbmclMjBDQSUyMDNBKDEpLmNydDAfBgNVHSUEGDAWBggr BgEFBQcDBAYKKwYBBAGCNwoDBDApBgkrBgEEAYI3FQoEHDAaMAoGCCsGAQUF BwMEMAwGCisGAQQBgjcKAwQwUQYDVR0RBEowSKAqBgorBgEEAYI3FAIDoBwM Gm1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tgRptYXJrdXMudC5tZXR6Z2Vy QGludGVsLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAOtoEY5C6tRBge2BLRJSF zR3sqBdsg8Qq7cvE7qKaow45J+fNN4o7zYc6aU/U9MeYZiLLo6q/0VY7R7by nwQKiUKPdwz08xFcUOI/plzbuSqp5qcex+WpMiHuS196JlPaaxbX+0ihWkB3 jjo6LDTQHmE2svplsVRZhm2kIr4xKlrdi0tjqc7CfSV57/cA/dJPSY34VU+v XS+QIWbB16WSVL4LN7wyhfb9xcJeIJm7nHKIJdMHAsH2Hncj2hbnqdpVRLmP J759yYOhOLH5npNgPn1af9+JcuVfDqj4dwIUvegsTEL5dX70wJoggVfksgHs zRLkzebEP8WreFFk2ml0UzGCA4YwggOCAgEBMGQwVjELMAkGA1UEBhMCVVMx GjAYBgNVBAoTEUludGVsIENvcnBvcmF0aW9uMSswKQYDVQQDEyJJbnRlbCBF eHRlcm5hbCBCYXNpYyBJc3N1aW5nIENBIDNBAgot7+2QAAEAAHxAMAkGBSsO AwIaBQCgggH3MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcN AQkFMQ8XDTEyMDUzMTE1MzE1MlowIwYJKoZIhvcNAQkEMRYEFEgzUnUqVCT8 pHmf72Vv/wRtm0TvMHMGCSsGAQQBgjcQBDFmMGQwVjELMAkGA1UEBhMCVVMx GjAYBgNVBAoTEUludGVsIENvcnBvcmF0aW9uMSswKQYDVQQDEyJJbnRlbCBF eHRlcm5hbCBCYXNpYyBJc3N1aW5nIENBIDNBAgpSQDROAAEAAFCuMHUGCyqG SIb3DQEJEAILMWagZDBWMQswCQYDVQQGEwJVUzEaMBgGA1UEChMRSW50ZWwg Q29ycG9yYXRpb24xKzApBgNVBAMTIkludGVsIEV4dGVybmFsIEJhc2ljIElz c3VpbmcgQ0EgM0ECClJANE4AAQAAUK4wgasGCSqGSIb3DQEJDzGBnTCBmjAK BggqhkiG9w0DBzALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAOBggqhkiG9w0DAgICAIAwBwYFKw4DAgcwDQYIKoZIhvcNAwICAUAw DQYIKoZIhvcNAwICASgwBwYFKw4DAhowCwYJYIZIAWUDBAIDMAsGCWCGSAFl AwQCAjALBglghkgBZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEAon5zUKJjLRIM 4Kug8FX06gDCiofaHQEi5IEUaKQN5bNX6XPoojLTWFPx3+zb23WFG5SkYCqV d3P3TKolN46XCy5pipbEiD7EXpZMca4NS/Z8R+bSTIN2XUSMLBbSJVcc92N2 ngy18C9vfmEp9lp/opCGjQTaRlPaLP202y47QqOaE4tZTdfiB+HZZqZ7xnRa u+6tv/eo6zii8IyEXWYmsasjovpQvroGsjvbDRRvnznckqBqoVST7UAExLT+ 1ktqoaGI9kPSdXUz+9B2VoR5fc6tAkMsuhRynWEALWOf3Va+1aWf6i+xXDyj rZsxOoYdXctcmckciQ7Ncl5PhRVvIgAAAAAAAA== ------=_NextPart_000_01C6_01CD3F53.441F2660-- --===============1388481169== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-length: 414 ---------------------------------------------------------------------------= ----------- Intel GmbH Dornacher Strasse 1 85622 Feldkirchen/Muenchen, Deutschland=20 Sitz der Gesellschaft: Feldkirchen bei Muenchen Geschaeftsfuehrer: Douglas Lusk, Peter Gleissner, Hannes Schwaderer Registergericht: Muenchen HRB 47456=20 Ust.-IdNr./VAT Registration No.: DE129385895 Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052 --===============1388481169==--