From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31959 invoked by alias); 13 Feb 2014 12:30:22 -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 31936 invoked by uid 89); 13 Feb 2014 12:30:21 -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 autolearn=ham version=3.3.2 X-HELO: mga11.intel.com Received: from mga11.intel.com (HELO mga11.intel.com) (192.55.52.93) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 13 Feb 2014 12:30:20 +0000 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 13 Feb 2014 04:30:18 -0800 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 13 Feb 2014 04:30:17 -0800 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id s1DCUGdY017459; Thu, 13 Feb 2014 12:30:16 GMT Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id s1DCUG33016687; Thu, 13 Feb 2014 13:30:16 +0100 Received: (from mmetzger@localhost) by ulvlx001.iul.intel.com with œ id s1DCUFLV016683; Thu, 13 Feb 2014 13:30:15 +0100 From: Markus Metzger To: jan.kratochvil@redhat.com Cc: gdb-patches@sourceware.org, Mark Kettenis Subject: [PATCH 1/2] i386-cpuid: add support for identifying a processor Date: Thu, 13 Feb 2014 12:30:00 -0000 Message-Id: <1392294615-16416-1-git-send-email-markus.t.metzger@intel.com> X-IsSubscribed: yes X-SW-Source: 2014-02/txt/msg00464.txt.bz2 Add a struct i386_cpu to identify an x86 cpu and a function i386_this_cpu to identify the cpu we're running on. CC: Mark Kettenis 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 = 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 . */ + +#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