From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17262 invoked by alias); 31 May 2012 15:33:28 -0000 Received: (qmail 17251 invoked by uid 22791); 31 May 2012 15:33:25 -0000 X-SWARE-Spam-Status: No, hits=-5.9 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 mga03.intel.com (HELO mga03.intel.com) (143.182.124.21) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 31 May 2012 15:33:09 +0000 Content-Type: multipart/mixed; boundary="===============1951652181==" MIME-Version: 1.0 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 31 May 2012 08:32:53 -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:52 -0700 Received: from irsmsx102.ger.corp.intel.com ([169.254.2.198]) by IRSMSX101.ger.corp.intel.com ([169.254.1.241]) with mapi id 14.01.0355.002; Thu, 31 May 2012 16:32:04 +0100 From: "Metzger, Markus T" To: Jan Kratochvil CC: "kettenis@gnu.org" , "gdb-patches@sourceware.org" , "markus.t.metzger@gmail.com" Subject: RE: [PATCH 05/16] cli, btrace: add btrace cli 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-6-git-send-email-markus.t.metzger@intel.com> <20120530204212.GE20633@host2.jankratochvil.net> In-Reply-To: <20120530204212.GE20633@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/msg01087.txt.bz2 --===============1951652181== MIME-Version: 1.0 Content-Language: en-US Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=SHA1; boundary="----=_NextPart_000_01CA_01CD3F53.4A129660" ------=_NextPart_000_01CA_01CD3F53.4A129660 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-length: 9408 > -----Original Message----- > From: Jan Kratochvil [mailto:jan.kratochvil@redhat.com] > Sent: Wednesday, May 30, 2012 10:42 PM Thanks for your review! [...] > > +/* A new thread observer enabling branch tracing for the new thread. > > +*/ static struct observer *btrace_thread_observer; > > + > > +/* Branch tracing command list. */ > > +static struct cmd_list_element *btcmdlist; static struct > > +cmd_list_element *btencmdlist; static struct cmd_list_element > > +*btdiscmdlist; > > The variables should be each commented. Fixed. > > #if !defined(EALREADY) > > /* Remap EALREADY for systems that do not define it, e.g. mingw. */ > > @@ -252,3 +268,591 @@ next_btrace (struct thread_info *tinfo) > > > > return VEC_index (btrace_block_s, btinfo->btrace, > > btinfo->iterator); } > > + > > Function comment. Fixed. > > +static int > > +thread_callback (struct thread_info *tinfo, void *arg) > > Despite it is static there are some wishes for GDB all the functions should > have the filename prefix, therefore btrace_thread_callback here. I pity the maintainer of gdb/dwarf2-frame-tailcall.c;-) You mentioned this for another patch, already. If this is gdb style, I can certainly name my functions accordingly. I just don't see this a lot in other gdb files, and it results in odd and quite lengthy names. > > +{ > > + observer_new_thread_ftype *tfun = arg; > > Empty line after declarations. Fixed all occurences in this source file. [...] > > + if (!pid) > > + pid = ptid_get_pid (tinfo->ptid); > > + > > + error (_("Couldn't enable branch tracing for %d: %s"), > > + pid, safe_strerror (errcode)); > > Just use %s and as argument: target_pid_to_str (tinfo) Fixed. > But enable_btrace should error on its own as I have recommended. Will fix once the situation with gdbserver and shared code is clear. [...] > > + error (_("Couldn't disable branch tracing for %d: %s"), > > + pid, safe_strerror (errcode)); > > + } > > Likewise above. Fixed. [...] > > + if (number_is_in_list (range, tinfo->num)) > > + { > > + /* Switching threads makes it easier for targets like kgdb, where > > we > need > > + to switch cpus, as well. */ > > + switch_to_thread (tinfo->ptid); > > In such case it should be switched in the most bottom function. I can move it to the enable and disable functions. This will result in a few extra switches back to the selected thread when processing a list of threads. I hope that's OK. > > + safe_do_enable_btrace (tinfo); > > Here is TINFO still passed as a parameter so it is not required to call > switch_to_thread. I originally did not intend to switch threads, at all. All the btrace functions take the thread to operate on as explicit argument. When I later added btrace support to kgdb, I realized that I had to switch cpu's in order to perform certain operations. I should really do this inside kgdb, but it was so much easier just to switch threads in gdb. If you're not OK with this, I can remove all the thread switching and look for a solution in kgdb. > > + } > > + > > + return 0; > > +} > > + > > +static void > > +cmd_btrace_enable (char *args, int from_tty) { > > + if (args) > > So far I think GDB considers ARGS may be either NULL or "" as no- > parameters. Fixed. > > > + { > > + ptid_t ptid = inferior_ptid; > > Again use save_inferior_ptid like I suggested before. Fixed all occurrences in this file. [...] > > + } > > + else > > + { > > + struct thread_info *tinfo = find_thread_ptid (inferior_ptid); > > Empty line after declarations. Fixed. > > + if (!tinfo) > > + error (_("Couldn't enable branch tracing: no inferior thread.")); > > + else > > 'else' is not needed, 'error' doe snot return. Fixed all occurrences in this file. [...] > > +#define BTR_LIST_ADDRESS (1 << 0) > > +#define BTR_LIST_FUNCTION (1 << 1) > > +#define BTR_LIST_LINE (1 << 2) > > +#define BTR_LIST_TOTAL (1 << 3) > > It should be rather enum. Each item needs its comment. Fixed. > > + > > +static void > > +do_btrace_list_item (unsigned int block, struct btrace_block *trace, > > + unsigned int flags) { > > + struct gdbarch *gdbarch = get_current_arch (); > > gdbarch depends on TRACE, not on current frame. Each frame can have > different gdbarch. But putting gdbarch into each TRACE is probably too > expensive. > > I would guess target_gdbarch is more acceptable to use for printing > CORE_ADDR. Replaced this with target_arch. > > + struct symtab *symtab = NULL; > > + struct symbol *symbol = NULL; > > + > > + if (!trace) > > + return; > > Cannot happen, remove or gdb_assert. Removed. [...] > > + { > > + struct minimal_symbol *msymbol = > > + lookup_minimal_symbol_by_pc (trace->begin); > > Empty line. Fixed. [...] > > +static void > > +do_btrace_list (VEC (btrace_block_s) *btrace, char *range, > > + unsigned int flags) > > +{ > > + struct gdbarch *gdbarch = get_current_arch (); > > Unused variable. Fixed. [...] > > + else if (!btrace) > > + error (_("No trace")); > > dot: > error (_("No trace.")); Rearranged the if so the error case is at the final else. Since the preceding then statements do not return, I still need to put the error () under else. [...] > > + error (_("No trace.")); > > + return; > > Excessive return. Fixed all occurrences in this file. > > + } > > + > > + if (trace->end < trace->begin) > > + error (_("Bad trace: 0x%" BFD_VMA_FMT "x - 0x%" BFD_VMA_FMT > "x."), > > + trace->begin, trace->end); > > It is CORE_ADDR, not bfd_vma. Therefore use paddress. Fixed. Changed this to a warning. > > + > > + gdb_disassembly (gdbarch, current_uiout, 0, flags, -1, > > + trace->begin, trace->end + 1); } > > + > > +static void > > +cmd_btrace (char *args, int from_tty) { > > + struct thread_info *thread = find_thread_ptid (inferior_ptid); > > + struct btrace_block *trace = NULL; > > + int flags = 0; > > Use enum. Flags is a bit-vector. The enum just provides names for the bits. > > + > > + if (!thread) > > + { > > + error (_("No thread.")); > > + return; > > Excessive return. Fixed. [...] > > + VEC (btrace_block_s) *btrace = NULL; > > + struct cleanup *cleanup; > > + struct get_number_or_range_state state; > > + unsigned int i; > > + > > + cleanup = make_cleanup (xfree, btrace); > > You must use VEC_cleanup here, not xfree. Fixed. > > + init_number_or_range (&state, args); > > + while (!state.finished) > > + { > > + int index = get_number_or_range (&state); > > Empty line after declarations. Fixed. > > + if (!index) > > + { > > + error (_("Args must be numbers or '$' variables.")); > > + return; > > Excessive return. Fixed. > > + } > > + > > + trace = read_btrace (thread, index - 1); > > + if (!trace) > > + continue; > > + > > + VEC_safe_push (btrace_block_s, btrace, trace); > > + } > > + > > + i = VEC_length (btrace_block_s, btrace); > > + while (i--) > > + do_btrace (VEC_index (btrace_block_s, btrace, i), flags); > > + > > + do_cleanups (cleanup); > > + return; > > The function is a bit spaghetting, maybe you could split it for the > different > cases. Just optional. I split the function into argument processing and trace printing. > > + } > > + > > + if (args && *args) > > + { > > + error (_("Junk after argument: %s"), args); > > + return; > > Excessive return. Fixed. [...] > > + add_cmd ("branchtrace", class_btrace, NULL, > > + _("Recording a branch trace."), &cmdlist); > > Incorrect indentation, it would be (using tab): > add_cmd ("branchtrace", class_btrace, NULL, > _("Recording a branch trace."), &cmdlist); but you can: > add_cmd ("branchtrace", class_btrace, NULL, _("Recording a branch > trace."), > &cmdlist); Fixed. > > + add_prefix_cmd ("btrace", class_btrace, cmd_btrace, _("\ > > +Disassemble the selected branch trace block.\n\n\ With a /m modifier, > > +source lines are included (if available).\n\ With a /r modifier, raw > > +instructions in hex are included.\n\n\ Without arguments, selects the > > +chronologically preceding block.\n\ With \"+[]\" argument, selects > > +the n-th chronologically preceding block.\n\ With \"-[]\" > > +argument, selects the n-th chronologically succeeding block.\n\ With > > +one positive integer argument, selects the respective block.\n\ With > > +a range argument \"-\", selects the h-th block and disassembles > > +\ blocks in the range in reverse (i.e. original control flow) order.\n"), > > + &btcmdlist, "btrace ", 1, &cmdlist); > > In many cases - you should use tab character instead of 8 spaces. Fixed. Do you happen to know how to tell emacs to use tab for indentation? [...] > > "List of classes of commands:" > > "" > > "aliases -- Aliases of other commands" > > + "branchtrace -- Recording a branch trace" > > I am not sure if it is worth a new class but it does not fit much in > 'tracepoints'. It didn't fit anywhere, really, so I ended up adding a new class. Regards, Markus. ------=_NextPart_000_01CA_01CD3F53.4A129660 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 AQkFMQ8XDTEyMDUzMTE1MzIwMlowIwYJKoZIhvcNAQkEMRYEFBZhCv/TT2xj CHSP7MtmyMYYlLowMHMGCSsGAQQBgjcQBDFmMGQwVjELMAkGA1UEBhMCVVMx GjAYBgNVBAoTEUludGVsIENvcnBvcmF0aW9uMSswKQYDVQQDEyJJbnRlbCBF eHRlcm5hbCBCYXNpYyBJc3N1aW5nIENBIDNBAgpSQDROAAEAAFCuMHUGCyqG SIb3DQEJEAILMWagZDBWMQswCQYDVQQGEwJVUzEaMBgGA1UEChMRSW50ZWwg Q29ycG9yYXRpb24xKzApBgNVBAMTIkludGVsIEV4dGVybmFsIEJhc2ljIElz c3VpbmcgQ0EgM0ECClJANE4AAQAAUK4wgasGCSqGSIb3DQEJDzGBnTCBmjAK BggqhkiG9w0DBzALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAOBggqhkiG9w0DAgICAIAwBwYFKw4DAgcwDQYIKoZIhvcNAwICAUAw DQYIKoZIhvcNAwICASgwBwYFKw4DAhowCwYJYIZIAWUDBAIDMAsGCWCGSAFl AwQCAjALBglghkgBZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEAp/cKXFgYGqvx Bz9z7hLL35A7AiLYIo+coy14XTt7W0gpOdbACfxU6IFR0xdoQJTp/pbHg7gV qMqXOKNN2zQYKbFA6KNZpcEvOF3gkRQtqduUUr95cnDiBmug6+86VBb4+6/g +WqpOvxh0NGLsfOe8KNhPU2QrFFkGQp/BwyGxZLhltwhxyeMk6HJKRP8Ijco 7HAwsyB00xCPEIFDor4mRK179/Z++URX38a8A+uBMOGPBJ3gzDUdt1JJCWAh L3iPPkAmGs/I5xfQi9JetQ1Ay7nQxuuL6d63Pn7GEQt7YkM4DyG8A67sf4S9 lp8aJw9HkVshCKuTspnhRdUUpmIwmQAAAAAAAA== ------=_NextPart_000_01CA_01CD3F53.4A129660-- --===============1951652181== 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 --===============1951652181==--