mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
CRIS testsuite, based on the SIM testsuite, by Edgar E. Iglesias.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3365 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
83fa1010ae
commit
dd43edf4e1
103 changed files with 7014 additions and 0 deletions
116
tests/cris/check_glibc_kernelversion.c
Normal file
116
tests/cris/check_glibc_kernelversion.c
Normal file
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
* Check the lz insn.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "sys.h"
|
||||
|
||||
#define __LINUX_KERNEL_VERSION 131584
|
||||
|
||||
#define DL_SYSDEP_OSCHECK(FATAL) \
|
||||
do { \
|
||||
/* Test whether the kernel is new enough. This test is only \
|
||||
performed if the library is not compiled to run on all \
|
||||
kernels. */ \
|
||||
if (__LINUX_KERNEL_VERSION > 0) \
|
||||
{ \
|
||||
char bufmem[64]; \
|
||||
char *buf = bufmem; \
|
||||
unsigned int version; \
|
||||
int parts; \
|
||||
char *cp; \
|
||||
struct utsname uts; \
|
||||
\
|
||||
/* Try the uname syscall */ \
|
||||
if (__uname (&uts)) \
|
||||
{ \
|
||||
/* This was not successful. Now try reading the /proc \
|
||||
filesystem. */ \
|
||||
ssize_t reslen; \
|
||||
int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY); \
|
||||
if (fd == -1 \
|
||||
|| (reslen = __read (fd, bufmem, sizeof (bufmem))) <= 0) \
|
||||
/* This also didn't work. We give up since we cannot \
|
||||
make sure the library can actually work. */ \
|
||||
FATAL ("FATAL: cannot determine library version\n"); \
|
||||
__close (fd); \
|
||||
buf[MIN (reslen, (ssize_t) sizeof (bufmem) - 1)] = '\0'; \
|
||||
} \
|
||||
else \
|
||||
buf = uts.release; \
|
||||
\
|
||||
/* Now convert it into a number. The string consists of at most \
|
||||
three parts. */ \
|
||||
version = 0; \
|
||||
parts = 0; \
|
||||
cp = buf; \
|
||||
while ((*cp >= '0') && (*cp <= '9')) \
|
||||
{ \
|
||||
unsigned int here = *cp++ - '0'; \
|
||||
\
|
||||
while ((*cp >= '0') && (*cp <= '9')) \
|
||||
{ \
|
||||
here *= 10; \
|
||||
here += *cp++ - '0'; \
|
||||
} \
|
||||
\
|
||||
++parts; \
|
||||
version <<= 8; \
|
||||
version |= here; \
|
||||
\
|
||||
if (*cp++ != '.') \
|
||||
/* Another part following? */ \
|
||||
break; \
|
||||
} \
|
||||
\
|
||||
if (parts < 3) \
|
||||
version <<= 8 * (3 - parts); \
|
||||
\
|
||||
/* Now we can test with the required version. */ \
|
||||
if (version < __LINUX_KERNEL_VERSION) \
|
||||
/* Not sufficent. */ \
|
||||
FATAL ("FATAL: kernel too old\n"); \
|
||||
\
|
||||
_dl_osversion = version; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char bufmem[64] = "2.6.22";
|
||||
char *buf = bufmem;
|
||||
unsigned int version;
|
||||
int parts;
|
||||
char *cp;
|
||||
|
||||
version = 0;
|
||||
parts = 0;
|
||||
cp = buf;
|
||||
while ((*cp >= '0') && (*cp <= '9'))
|
||||
{
|
||||
unsigned int here = *cp++ - '0';
|
||||
|
||||
while ((*cp >= '0') && (*cp <= '9'))
|
||||
{
|
||||
here *= 10;
|
||||
here += *cp++ - '0';
|
||||
}
|
||||
|
||||
++parts;
|
||||
version <<= 8;
|
||||
version |= here;
|
||||
|
||||
if (*cp++ != '.')
|
||||
/* Another part following? */
|
||||
break;
|
||||
}
|
||||
|
||||
if (parts < 3)
|
||||
version <<= 8 * (3 - parts);
|
||||
if (version < __LINUX_KERNEL_VERSION)
|
||||
err();
|
||||
pass();
|
||||
exit(0);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue