diff options
author | Gerrit Pape <pape@smarden.org> | 2002-05-18 17:30:16 +0000 |
---|---|---|
committer | Gerrit Pape <pape@smarden.org> | 2002-05-18 17:30:16 +0000 |
commit | 9cc46dc719566d4665f2e584cbd0b3b250d4b7d9 (patch) | |
tree | 3102f6853180830c6ad48d40c3e5fa5ef3d21d49 /src/x86cpuid.c | |
parent | a3b07af346564647eb28477c80cc0d1b6929246b (diff) | |
download | runit-9cc46dc719566d4665f2e584cbd0b3b250d4b7d9.tar.gz runit-9cc46dc719566d4665f2e584cbd0b3b250d4b7d9.tar.xz runit-9cc46dc719566d4665f2e584cbd0b3b250d4b7d9.zip |
* src/: include public domain sources to build byte.a, unix.a, time.a:
runit builds without having daemontools' sources installed. 0.3.3.
Diffstat (limited to 'src/x86cpuid.c')
-rw-r--r-- | src/x86cpuid.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/x86cpuid.c b/src/x86cpuid.c new file mode 100644 index 0000000..f81c593 --- /dev/null +++ b/src/x86cpuid.c @@ -0,0 +1,40 @@ +/* Public domain. */ + +#include <signal.h> + +void nope() +{ + exit(1); +} + +int main() +{ + unsigned long x[4]; + unsigned long y[4]; + int i; + int j; + char c; + + signal(SIGILL,nope); + + x[0] = 0; + x[1] = 0; + x[2] = 0; + x[3] = 0; + + asm volatile(".byte 15;.byte 162" : "=a"(x[0]),"=b"(x[1]),"=c"(x[3]),"=d"(x[2]) : "0"(0) ); + if (!x[0]) return 0; + asm volatile(".byte 15;.byte 162" : "=a"(y[0]),"=b"(y[1]),"=c"(y[2]),"=d"(y[3]) : "0"(1) ); + + for (i = 1;i < 4;++i) + for (j = 0;j < 4;++j) { + c = x[i] >> (8 * j); + if (c < 32) c = 32; + if (c > 126) c = 126; + putchar(c); + } + + printf("-%08x-%08x\n",y[0],y[3]); + + return 0; +} |