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] |
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] |