From: Mark Kettenis <mark.kettenis@xs4all.nl>
To: markus.t.metzger@intel.com
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:29:00 -0000 [thread overview]
Message-ID: <201402131329.s1DDTOV8031860@glazunov.sibelius.xs4all.nl> (raw)
In-Reply-To: <1392294615-16416-1-git-send-email-markus.t.metzger@intel.com> (message from Markus Metzger on Thu, 13 Feb 2014 13:30:14 +0100)
> From: Markus Metzger <markus.t.metzger@intel.com>
> Date: Thu, 13 Feb 2014 13:30:14 +0100
>
> Add a struct i386_cpu to identify an x86 cpu and a function i386_this_cpu
> to identify the cpu we're running on.
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.
> 2014-02-13 Markus Metzger <markus.t.metzger@intel.com>
>
> * 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 = 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 = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c
>
> @@ -1021,7 +1022,7 @@ COMMON_OBS = $(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 = 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 the
> + 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 <http://www.gnu.org/licenses/>. */
> +
> +#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 = CV_UNKNOWN;
> +
> + ok = i386_cpuid (0, &eax, &ebx, &ecx, &edx);
> + if (ok != 0)
> + {
> + if (ebx == signature_INTEL_ebx && ecx == signature_INTEL_ecx
> + && edx == signature_INTEL_edx)
> + {
> + unsigned int cpuid, ignore;
> +
> + ok = i386_cpuid (1, &cpuid, &ignore, &ignore, &ignore);
> + if (ok != 0)
> + {
> + cpu.vendor = CV_INTEL;
> +
> + cpu.family = (cpuid >> 8) & 0xf;
> + cpu.model = (cpuid >> 4) & 0xf;
> + cpu.stepping = cpuid & 0xf;
> +
> + if (cpu.family == 0x6)
> + cpu.model += (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 = 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= $(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 = @GDBSERVER_DEPFILES@
>
> @@ -177,7 +177,8 @@ OBS = 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) $(LIBOBJS)
> + tdesc.o print-utils.o rsp-low.o i386-cpuid.o $(XML_BUILTIN) $(DEPFILES) \
> + $(LIBOBJS)
> GDBREPLAY_OBS = gdbreplay.o version.o
> GDBSERVER_LIBS = @GDBSERVER_LIBS@
> XM_CLIBS = @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
>
>
next prev parent reply other threads:[~2014-02-13 13:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-13 12:30 Markus Metzger
2014-02-13 12:30 ` [PATCH 2/2] btrace: use i386-cpuid's cpu identifier Markus Metzger
2014-02-13 13:29 ` Mark Kettenis [this message]
2014-02-13 13:34 ` [PATCH 1/2] i386-cpuid: add support for identifying a processor Metzger, Markus T
2014-02-13 18:32 ` Pedro Alves
2014-02-14 8:30 ` Metzger, Markus T
2014-02-14 17:29 ` Mike Frysinger
2014-02-17 8:04 ` Metzger, Markus T
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201402131329.s1DDTOV8031860@glazunov.sibelius.xs4all.nl \
--to=mark.kettenis@xs4all.nl \
--cc=gdb-patches@sourceware.org \
--cc=jan.kratochvil@redhat.com \
--cc=markus.t.metzger@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox