mirror of
https://github.com/RGBCube/serenity
synced 2025-05-25 18:45:06 +00:00

In QtCreator (and under weird configurations with gcc), this used to fail with the error messages like: "error: member of anonymous union redeclares '___'". This patch gives each member a unique name.
123 lines
3.9 KiB
C
123 lines
3.9 KiB
C
/*
|
|
* Copyright (c) 2021, Leon Albrecht <leon2002.la@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
|
|
#define RREGISTER(num) \
|
|
union { \
|
|
u64 r##num; \
|
|
struct { \
|
|
u32 _unused##num; \
|
|
union { \
|
|
u32 r##num##d; \
|
|
struct { \
|
|
u16 __unused##num; \
|
|
union { \
|
|
u16 r##num##w; \
|
|
struct { \
|
|
u8 ___unused##num; \
|
|
u8 r##num##b; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}
|
|
|
|
#define GPREGISTER(letter) \
|
|
union { \
|
|
u64 r##letter##x; \
|
|
struct \
|
|
{ \
|
|
u32 _unused##letter; \
|
|
union { \
|
|
u32 e##letter##x; \
|
|
struct \
|
|
{ \
|
|
u16 __unused##letter; \
|
|
union { \
|
|
u16 letter##x; \
|
|
struct { \
|
|
u8 letter##h; \
|
|
u8 letter##l; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}
|
|
|
|
#define SPREGISTER(name) \
|
|
union { \
|
|
u64 r##name; \
|
|
struct \
|
|
{ \
|
|
u32 _unused##name; \
|
|
union { \
|
|
u32 e##name; \
|
|
struct \
|
|
{ \
|
|
u16 __unused##name; \
|
|
union { \
|
|
u16 name; \
|
|
struct { \
|
|
u8 ___unused##name; \
|
|
u8 name##l; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}; \
|
|
}
|
|
|
|
struct [[gnu::packed]] PtraceRegisters {
|
|
GPREGISTER(a);
|
|
GPREGISTER(b);
|
|
GPREGISTER(c);
|
|
GPREGISTER(d);
|
|
|
|
SPREGISTER(sp);
|
|
SPREGISTER(bp);
|
|
SPREGISTER(si);
|
|
SPREGISTER(di);
|
|
SPREGISTER(ip); // technically there is no ipl, but what ever
|
|
|
|
RREGISTER(8);
|
|
RREGISTER(9);
|
|
RREGISTER(10);
|
|
RREGISTER(11);
|
|
RREGISTER(12);
|
|
RREGISTER(13);
|
|
RREGISTER(14);
|
|
RREGISTER(15);
|
|
// flags
|
|
union {
|
|
u64 rflags;
|
|
struct {
|
|
u32 _;
|
|
union {
|
|
u32 eflags;
|
|
struct {
|
|
u16 __;
|
|
u16 flags;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
// These may not be used, unless we go back into compatibility mode
|
|
u32 cs;
|
|
u32 ss;
|
|
u32 ds;
|
|
u32 es;
|
|
u32 fs;
|
|
u32 gs;
|
|
|
|
// FIXME: Add FPU registers and Flags
|
|
// FIXME: Add Ymm Xmm etc.
|
|
};
|