[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Increasing minimum 'i386' processor



On Tue, Nov 22, 2011 at 04:47:21PM +0100, Jakub Wilk wrote:
> * Ben Hutchings <ben@decadent.org.uk>, 2011-11-20, 20:48:
> >Use of CPUID is probably safe in practice since most 486 models do
> >implement it, though userland should really read /proc/cpuinfo.
> >The other uses may be conditional on a CPU feature test but may
> >well be bugs.
> 
> Is format of /proc/cpuinfo documented anywhere?

Sadly, it is not documented explicitly.

> Does /proc/cpuinfo with the exist on non-Linux architectures? If
> yes, do they use the same format?

It is Linux-specific, but included in FreeBSD's Linux compatibility module.
I don't know whether Debian kFreeBSD loads that by default.

> Are the any ready-made libraries that can parse this file?
 
Not that I know of.

However, if you're looking for specific x86 feature flags (which is
almost certainly what you need) you can use:

bool x86_has_feature(const char *name)
{
    FILE *cpuinfo;
    char *line = NULL, *p;
    size_t line_len = 0, name_len = strlen(name);
    bool found = false;

    cpuinfo = fopen("/proc/cpuinfo", "r");
    if (!cpuinfo)
        return false;

    while (getline(&line, &line_len, cpuinfo) >= 0 && !found) {
        if (strncmp(line, "flags\t", 6))
            continue;
        p = line;
        while ((p = strchr(p, ' ')) != NULL) {
	    p++;
            if (strncmp(p, name, name_len) == 0 &&
                isspace((unsigned char)p[name_len])) {
                found = true;
                break;
            }
        }
    }

    fclose(cpuinfo);
    return found;
}

Ben.

-- 
Ben Hutchings
We get into the habit of living before acquiring the habit of thinking.
                                                              - Albert Camus


Reply to: