From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7868 invoked by alias); 14 Jul 2014 13:56:44 -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 7734 invoked by uid 89); 14 Jul 2014 13:56:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.8 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; Mon, 14 Jul 2014 13:56:41 +0000 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 14 Jul 2014 06:56:40 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 14 Jul 2014 06:56:39 -0700 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 s6EDucTq009236; Mon, 14 Jul 2014 14:56:38 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id s6EDuc7V002134; Mon, 14 Jul 2014 15:56:38 +0200 Received: (from mmetzger@localhost) by ulvlx001.iul.intel.com with œ id s6EDuc4e002130; Mon, 14 Jul 2014 15:56:38 +0200 From: Markus Metzger To: palves@redhat.com Cc: gdb-patches@sourceware.org Subject: [PATCH 08/12] btrace: identify cpu Date: Mon, 14 Jul 2014 13:56:00 -0000 Message-Id: <1405346196-1804-9-git-send-email-markus.t.metzger@intel.com> In-Reply-To: <1405346196-1804-1-git-send-email-markus.t.metzger@intel.com> References: <1405346196-1804-1-git-send-email-markus.t.metzger@intel.com> X-IsSubscribed: yes X-SW-Source: 2014-07/txt/msg00327.txt.bz2 Add a struct for identifying a processor and a function to identify the processor we're running on. We will need this feature for the new btrace format. 2014-07-14 Markus Metzger * common/btrace-common.h (btrace_cpu_vendor, btrace_cpu) (btrace_this_cpu): New. * common/btrace-common.c: Include i386-cpuid.h. (btrace_this_cpu): New. --- gdb/common/btrace-common.c | 37 +++++++++++++++++++++++++++++++++++++ gdb/common/btrace-common.h | 30 ++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/gdb/common/btrace-common.c b/gdb/common/btrace-common.c index 90774a2..178ad35 100644 --- a/gdb/common/btrace-common.c +++ b/gdb/common/btrace-common.c @@ -18,10 +18,47 @@ along with this program. If not, see . */ #include "btrace-common.h" +#include "nat/i386-cpuid.h" /* See btrace-common.h. */ +struct btrace_cpu +btrace_this_cpu (void) +{ + struct btrace_cpu cpu; + unsigned int eax, ebx, ecx, edx; + int ok; + + memset (&cpu, 0, sizeof (cpu)); + + 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; + + if (cpu.family == 0x6) + cpu.model += (cpuid >> 12) & 0xf0; + } + } + } + + return cpu; +} + +/* See btrace-common.h. */ + const char * btrace_format_string (enum btrace_format format) { diff --git a/gdb/common/btrace-common.h b/gdb/common/btrace-common.h index 3629736..5fa9806 100644 --- a/gdb/common/btrace-common.h +++ b/gdb/common/btrace-common.h @@ -74,6 +74,34 @@ enum btrace_error BTRACE_ERR_OVERFLOW }; +/* An enumeration of cpu vendors. */ + +enum btrace_cpu_vendor +{ + /* We do not know this vendor. */ + CV_UNKNOWN, + + /* Intel. */ + CV_INTEL +}; + +/* A cpu identifier. */ + +struct btrace_cpu +{ + /* The processor vendor. */ + enum btrace_cpu_vendor vendor; + + /* The cpu family. */ + unsigned short family; + + /* The cpu model. */ + unsigned char model; + + /* The cpu stepping. */ + unsigned char stepping; +}; + /* A BTS configuration. */ struct btrace_config_bts @@ -147,6 +175,8 @@ struct btrace_data } variant; }; +/* Identify the cpu we're running on. */ +extern struct btrace_cpu btrace_this_cpu (void); /* Return a string representation of FORMAT. */ extern const char *btrace_format_string (enum btrace_format format); -- 1.8.3.1