From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21050 invoked by alias); 13 Feb 2014 13:34:54 -0000 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 Received: (qmail 21039 invoked by uid 89); 13 Feb 2014 13:34:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.3 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mga09.intel.com Received: from mga09.intel.com (HELO mga09.intel.com) (134.134.136.24) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 13 Feb 2014 13:34:47 +0000 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP; 13 Feb 2014 05:30:29 -0800 X-ExtLoop1: 1 Received: from irsmsx104.ger.corp.intel.com ([163.33.3.159]) by fmsmga001.fm.intel.com with ESMTP; 13 Feb 2014 05:34:43 -0800 Received: from irsmsx153.ger.corp.intel.com (163.33.192.75) by IRSMSX104.ger.corp.intel.com (163.33.3.159) with Microsoft SMTP Server (TLS) id 14.3.123.3; Thu, 13 Feb 2014 13:34:35 +0000 Received: from irsmsx104.ger.corp.intel.com ([169.254.5.244]) by IRSMSX153.ger.corp.intel.com ([169.254.9.196]) with mapi id 14.03.0123.003; Thu, 13 Feb 2014 13:34:34 +0000 From: "Metzger, Markus T" To: Mark Kettenis CC: "jan.kratochvil@redhat.com" , "gdb-patches@sourceware.org" Subject: RE: [PATCH 1/2] i386-cpuid: add support for identifying a processor Date: Thu, 13 Feb 2014 13:34:00 -0000 Message-ID: References: <1392294615-16416-1-git-send-email-markus.t.metzger@intel.com> <201402131329.s1DDTOV8031860@glazunov.sibelius.xs4all.nl> In-Reply-To: <201402131329.s1DDTOV8031860@glazunov.sibelius.xs4all.nl> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2014-02/txt/msg00466.txt.bz2 > -----Original Message----- > From: gdb-patches-owner@sourceware.org [mailto:gdb-patches- > owner@sourceware.org] On Behalf Of Mark Kettenis > Sent: Thursday, February 13, 2014 2:29 PM > > Add a struct i386_cpu to identify an x86 cpu and a function i386_this_c= pu > > to identify the cpu we're running on. >=20 > This code really has no place in GDB. The only reason this was > accepted in the linux-btrace.c is as a workaround for the fact that > Linux kernels advertised this feature on hardware where it was broken. > Moving this code in its own file and making it generally available > only encourages misuse. I need this for btrace so I thought I'd make it available to others, too. I'm OK to leave it in the btrace area. I'll send another patch. Thanks, Markus. > > 2014-02-13 Markus Metzger > > > > * common/i386-cpuid.h (i386_cpu_vendor, i386_cpu) > > (i386_this_cpu): New. > > * common/i386-cpuid.c (i386_this_cpu): New. > > * Makefile.in: (SFILES): Added i386-cpuid.c. > > (HFILES_NO_SRCDIR): Added i386-cpuid.h. > > (COMMON_OBS): Added i386-cpuid.o. > > (i386-cpuid.o): New target. > > > > gdbserver/ > > * Makefile.in: (SFILES): Added i386-cpuid.c. > > (OBS): Added i386-cpuid.o. > > (i386-cpuid.o): New target. > > > > > > --- > > gdb/Makefile.in | 9 ++++-- > > gdb/common/i386-cpuid.c | 74 > +++++++++++++++++++++++++++++++++++++++++++++++ > > gdb/common/i386-cpuid.h | 33 +++++++++++++++++++++ > > gdb/gdbserver/Makefile.in | 9 ++++-- > > 4 files changed, 121 insertions(+), 4 deletions(-) > > create mode 100644 gdb/common/i386-cpuid.c > > > > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > > index ea56854..212cb93 100644 > > --- a/gdb/Makefile.in > > +++ b/gdb/Makefile.in > > @@ -839,7 +839,8 @@ SFILES =3D ada-exp.y ada-lang.c ada-typeprint.c ada- > valprint.c ada-tasks.c \ > > common/gdb_vecs.c common/common-utils.c common/xml-utils.c \ > > common/ptid.c common/buffer.c gdb-dlfcn.c common/agent.c \ > > common/format.c common/filestuff.c btrace.c record-btrace.c ctf.c \ > > - target/waitstatus.c common/print-utils.c common/rsp-low.c > > + target/waitstatus.c common/print-utils.c common/rsp-low.c \ > > + common/i386-cpuid.c > > > > LINTFILES =3D $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c > > > > @@ -1021,7 +1022,7 @@ COMMON_OBS =3D $(DEPFILES) $(CONFIG_OBS) > $(YYOBJ) \ > > gdb_vecs.o jit.o progspace.o skip.o probe.o \ > > common-utils.o buffer.o ptid.o gdb-dlfcn.o common-agent.o \ > > format.o registry.o btrace.o record-btrace.o waitstatus.o \ > > - print-utils.o rsp-low.o > > + print-utils.o rsp-low.o i386-cpuid.o > > > > TSOBS =3D inflow.o > > > > @@ -2150,6 +2151,10 @@ rsp-low.o: ${srcdir}/common/rsp-low.c > > $(COMPILE) $(srcdir)/common/rsp-low.c > > $(POSTCOMPILE) > > > > +i386-cpuid.o: ${srcdir}/common/i386-cpuid.c > > + $(COMPILE) $(srcdir)/common/i386-cpuid.c > > + $(POSTCOMPILE) > > + > > # > > # gdb/target/ dependencies > > # > > diff --git a/gdb/common/i386-cpuid.c b/gdb/common/i386-cpuid.c > > new file mode 100644 > > index 0000000..7ac05d4 > > --- /dev/null > > +++ b/gdb/common/i386-cpuid.c > > @@ -0,0 +1,74 @@ > > +/* > > + Copyright (C) 2014 Free Software Foundation, Inc. > > + > > + This file is part of GDB. > > + > > + This file is free software; you can redistribute it and/or modify it > > + under the terms of the GNU General Public License as published by t= he > > + Free Software Foundation; either version 3, or (at your option) any > > + later version. > > + > > + This program is distributed in the hope that it will be useful, > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + GNU General Public License for more details. > > + > > + You should have received a copy of the GNU General Public License > > + along with this program. If not, see . > */ > > + > > +#include "i386-cpuid.h" > > + > > +#if defined(__i386__) || defined(__x86_64__) > > + > > +/* See i386-cpuid.h. */ > > + > > +struct i386_cpu > > +i386_this_cpu (void) > > +{ > > + struct i386_cpu cpu; > > + unsigned int eax, ebx, ecx, edx; > > + int ok; > > + > > + cpu.vendor =3D CV_UNKNOWN; > > + > > + ok =3D i386_cpuid (0, &eax, &ebx, &ecx, &edx); > > + if (ok !=3D 0) > > + { > > + if (ebx =3D=3D signature_INTEL_ebx && ecx =3D=3D signature_INTEL= _ecx > > + && edx =3D=3D signature_INTEL_edx) > > + { > > + unsigned int cpuid, ignore; > > + > > + ok =3D i386_cpuid (1, &cpuid, &ignore, &ignore, &ignore); > > + if (ok !=3D 0) > > + { > > + cpu.vendor =3D CV_INTEL; > > + > > + cpu.family =3D (cpuid >> 8) & 0xf; > > + cpu.model =3D (cpuid >> 4) & 0xf; > > + cpu.stepping =3D cpuid & 0xf; > > + > > + if (cpu.family =3D=3D 0x6) > > + cpu.model +=3D (cpuid >> 12) & 0xf0; > > + } > > + } > > + } > > + > > + return cpu; > > +} > > + > > +#else /* i386 && x86_64 */ > > + > > +/* See i386-cpuid.h. */ > > + > > +struct i386_cpu > > +i386_this_cpu (void) > > +{ > > + struct i386_cpu cpu; > > + > > + cpu.vendor =3D CV_UNKNOWN; > > + > > + return cpu; > > +} > > + > > +#endif /* i386 && x86_64 */ > > diff --git a/gdb/common/i386-cpuid.h b/gdb/common/i386-cpuid.h > > index 9aea054..1ed0251 100644 > > --- a/gdb/common/i386-cpuid.h > > +++ b/gdb/common/i386-cpuid.h > > @@ -22,6 +22,35 @@ > > /* Always include the header for the cpu bit defines. */ > > #include "i386-gcc-cpuid.h" > > > > +/* An enumeration of cpu vendors. */ > > + > > +enum i386_cpu_vendor > > +{ > > + /* We do not know this vendor. */ > > + CV_UNKNOWN, > > + > > + /* Intel. */ > > + CV_INTEL > > +}; > > + > > +/* A cpu identifier. */ > > + > > +struct i386_cpu > > +{ > > + /* The processor vendor. */ > > + enum i386_cpu_vendor vendor; > > + > > + /* The cpu family. */ > > + unsigned short family; > > + > > + /* The cpu model. */ > > + unsigned char model; > > + > > + /* The cpu stepping. */ > > + unsigned char stepping; > > +}; > > + > > + > > #if defined(__i386__) || defined(__x86_64__) > > > > /* Return cpuid data for requested cpuid level, as found in returned > > @@ -60,4 +89,8 @@ i386_cpuid (unsigned int __level, > > > > #endif /* i386 && x86_64 */ > > > > +/* Identify the cpu we're running on. */ > > + > > +extern struct i386_cpu i386_this_cpu (void); > > + > > #endif /* I386_CPUID_COMMON_H */ > > diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in > > index 5f69ddb..52d0248 100644 > > --- a/gdb/gdbserver/Makefile.in > > +++ b/gdb/gdbserver/Makefile.in > > @@ -164,7 +164,7 @@ SFILES=3D $(srcdir)/gdbreplay.c > $(srcdir)/inferiors.c $(srcdir)/dll.c \ > > $(srcdir)/common/buffer.c $(srcdir)/common/linux-btrace.c \ > > $(srcdir)/common/filestuff.c $(srcdir)/target/waitstatus.c \ > > $(srcdir)/common/mips-linux-watch.c $(srcdir)/common/print-utils.c > \ > > - $(srcdir)/common/rsp-low.c > > + $(srcdir)/common/rsp-low.c $(srcdir)/common/i386-cpuid.c > > > > DEPFILES =3D @GDBSERVER_DEPFILES@ > > > > @@ -177,7 +177,8 @@ OBS =3D agent.o ax.o inferiors.o regcache.o remote- > utils.o server.o signals.o \ > > target.o waitstatus.o utils.o debug.o version.o vec.o gdb_vecs.o= \ > > mem-break.o hostio.o event-loop.o tracepoint.o xml-utils.o \ > > common-utils.o ptid.o buffer.o format.o filestuff.o dll.o notif.= o \ > > - tdesc.o print-utils.o rsp-low.o $(XML_BUILTIN) $(DEPFILES) $(LIB= OBJS) > > + tdesc.o print-utils.o rsp-low.o i386-cpuid.o $(XML_BUILTIN) > $(DEPFILES) \ > > + $(LIBOBJS) > > GDBREPLAY_OBS =3D gdbreplay.o version.o > > GDBSERVER_LIBS =3D @GDBSERVER_LIBS@ > > XM_CLIBS =3D @LIBS@ > > @@ -537,6 +538,10 @@ mips-linux-watch.o: ../common/mips-linux- > watch.c > > $(COMPILE) $< > > $(POSTCOMPILE) > > > > +i386-cpuid.o: ../common/i386-cpuid.c > > + $(COMPILE) $< > > + $(POSTCOMPILE) > > + > > # Native object files rules from ../nat > > > > linux-waitpid.o: ../nat/linux-waitpid.c > > -- > > 1.8.3.1 > > > > Intel GmbH Dornacher Strasse 1 85622 Feldkirchen/Muenchen, Deutschland Sitz der Gesellschaft: Feldkirchen bei Muenchen Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk Registergericht: Muenchen HRB 47456 Ust.-IdNr./VAT Registration No.: DE129385895 Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052