This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2] i386-cpuid: add support for identifying a processor


On Thursday, February 13, 2014 13:30:14 Markus Metzger wrote:
> --- /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 */


afaict, you don't need the #else.  the non-x86 codepaths in i386-cpuid.h will 
set the return value to 0, and your main code will treat this as an error and 
set cpu.vendor to CV_UNKNOWN.
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]