Fix crash with some older GCC versions. Reported in issue #7.
This commit is contained in:
parent
eae16b82d3
commit
6e4d45b644
2 changed files with 11 additions and 5 deletions
|
@ -112,8 +112,12 @@ cpu_exec_cpuid_ext(uint32_t* regs)
|
||||||
exec_cpuid(regs);
|
exec_cpuid(regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The function below is not inlined as it appears to bork optimized
|
||||||
|
* code generation on some older buggy GCC versions.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
cpuid_get_raw_data(struct cpu_raw_data_t* data)
|
NOINLINE_ATTR cpuid_get_raw_data(struct cpu_raw_data_t* data)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < 32; i++)
|
for (i = 0; i < 32; i++)
|
||||||
|
|
|
@ -116,11 +116,13 @@ typedef int32_t bsize_t;
|
||||||
# define ATOMIC_SUB(var, val) __sync_fetch_and_sub(&var, val)
|
# define ATOMIC_SUB(var, val) __sync_fetch_and_sub(&var, val)
|
||||||
# define PREFETCH_WRITE(x, n) __builtin_prefetch((x), 1, (n))
|
# define PREFETCH_WRITE(x, n) __builtin_prefetch((x), 1, (n))
|
||||||
# define PREFETCH_READ(x, n) __builtin_prefetch((x), 0, (n))
|
# define PREFETCH_READ(x, n) __builtin_prefetch((x), 0, (n))
|
||||||
|
# define NOINLINE_ATTR __attribute__((noinline))
|
||||||
#else
|
#else
|
||||||
# define likely(expr) (expr)
|
# define likely(expr) (expr)
|
||||||
# define unlikely(expr) (expr)
|
# define unlikely(expr) (expr)
|
||||||
# define PREFETCH_WRITE(x, n)
|
# define PREFETCH_WRITE(x, n)
|
||||||
# define PREFETCH_READ(x, n)
|
# define PREFETCH_READ(x, n)
|
||||||
|
# define NOINLINE_ATTR
|
||||||
# if defined(sun) || defined (__sun)
|
# if defined(sun) || defined (__sun)
|
||||||
# include <atomic.h>
|
# include <atomic.h>
|
||||||
# define ATOMIC_ADD(var, val) atomic_add_int(&var, val)
|
# define ATOMIC_ADD(var, val) atomic_add_int(&var, val)
|
||||||
|
|
Loading…
Reference in a new issue