// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
-struct Ureg {
+typedef struct UregAmd64 UregAmd64;
+struct UregAmd64 {
u64int ax;
u64int bx;
u64int cx;
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
-struct Ureg {
+typedef struct UregArm UregArm;
+struct UregArm {
uint r0;
uint r1;
uint r2;
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
-struct Ureg
+typedef struct Ureg386 Ureg386;
+struct Ureg386
{
uint32 di; /* general registers */
uint32 si; /* ... */
#include <libc.h>
#include <bio.h>
#include <ctype.h>
-
-#define Ureg Ureg_amd64
- #include <ureg_amd64.h>
-#undef Ureg
-#define Ureg Ureg_x86
- #include <ureg_x86.h>
-#undef Ureg
+#include <ureg_amd64.h>
+#include <ureg_x86.h>
#include <mach.h>
char* file = "6.out";
static Fhdr fhdr;
int have_syms;
int fd;
-struct Ureg_amd64 ureg_amd64;
-struct Ureg_x86 ureg_x86;
+struct UregAmd64 ureg_amd64;
+struct Ureg386 ureg_x86;
int total_sec = 0;
int delta_msec = 100;
int nsample;
int i;
union {
uvlong regs[1];
- struct Ureg_amd64 ureg;
+ struct UregAmd64 ureg;
} u;
for(i = 0; i < sizeof ureg_amd64; i+=8) {
uvlong x;
int r;
- r = get8(map, offsetof(struct Ureg_amd64, ip), &x);
+ r = get8(map, offsetof(struct UregAmd64, ip), &x);
ureg_amd64.ip = x;
return r;
}
uvlong x;
int r;
- r = get8(map, offsetof(struct Ureg_amd64, sp), &x);
+ r = get8(map, offsetof(struct UregAmd64, sp), &x);
ureg_amd64.sp = x;
return r;
}
int
x86_getPC(Map* map)
{
- return get4(map, offsetof(struct Ureg_x86, pc), &ureg_x86.pc);
+ return get4(map, offsetof(struct Ureg386, pc), &ureg_x86.pc);
}
int
x86_getSP(Map* map)
{
- return get4(map, offsetof(struct Ureg_x86, sp), &ureg_x86.sp);
+ return get4(map, offsetof(struct Ureg386, sp), &ureg_x86.sp);
}
uvlong
#include "ureg_arm.h"
#include <mach.h>
-#define REGOFF(x) (uintptr) (&((struct Ureg *) 0)->x)
+#define REGOFF(x) (uintptr) (&((struct UregArm *) 0)->x)
#define SP REGOFF(r13)
#define PC REGOFF(pc)
-#define REGSIZE sizeof(struct Ureg)
+#define REGSIZE sizeof(struct UregArm)
Reglist armreglist[] =
{
#define ASR(v, s) ((long)(v) >> (s))
#define ROR(v, s) (LSR((v), (s)) | (((v) & ((1 << (s))-1)) << (32 - (s))))
-
-
typedef struct Instr Instr;
struct Instr
{
#include "ureg_amd64.h"
#include <mach.h>
-#define REGOFF(x) offsetof(struct Ureg, x)
+#define REGOFF(x) offsetof(struct UregAmd64, x)
-#define REGSIZE sizeof(struct Ureg)
+#define REGSIZE sizeof(struct UregAmd64)
#define FP_CTLS(x) (REGSIZE+2*(x))
#define FP_CTL(x) (REGSIZE+4*(x))
#define FP_REG(x) (FP_CTL(8)+16*(x))
#include <ureg_x86.h>
#include <mach.h>
-#define REGOFF(x) (uintptr)(&((struct Ureg *) 0)->x)
+#define REGOFF(x) (uintptr)(&((struct Ureg386 *) 0)->x)
#define PC REGOFF(pc)
#define SP REGOFF(sp)
#define AX REGOFF(ax)
-#define REGSIZE sizeof(struct Ureg)
+#define REGSIZE sizeof(struct Ureg386)
#define FP_CTL(x) (REGSIZE+4*(x))
#define FP_REG(x) (FP_CTL(7)+10*(x))
#define FPREGSIZE (7*4+8*10)
#include <libc.h>
#include <bio.h>
#include <mach.h>
-#define Ureg UregAmd64
#include <ureg_amd64.h>
-#undef Ureg
-#define Ureg Ureg386
#include <ureg_x86.h>
-#undef Ureg
-
-typedef struct UregAmd64 UregAmd64;
-typedef struct Ureg386 Ureg386;
/*
* i386-specific debugger interface
#include <libc.h>
#include <bio.h>
#include <mach.h>
-#define Ureg Ureg32
#include <ureg_x86.h>
-#undef Ureg
-#define Ureg Ureg64
#include <ureg_amd64.h>
-#undef Ureg
#undef waitpid /* want Unix waitpid, not Plan 9 */
-typedef struct Ureg32 Ureg32;
-typedef struct Ureg64 Ureg64;
-
extern mach_port_t mach_reply_port(void); // should be in system headers, is not
// Mach-error wrapper.
go2darwin32(uvlong addr)
{
switch(addr){
- case offsetof(Ureg32, ax):
+ case offsetof(Ureg386, ax):
return offsetof(x86_thread_state32_t, eax);
- case offsetof(Ureg32, bx):
+ case offsetof(Ureg386, bx):
return offsetof(x86_thread_state32_t, ebx);
- case offsetof(Ureg32, cx):
+ case offsetof(Ureg386, cx):
return offsetof(x86_thread_state32_t, ecx);
- case offsetof(Ureg32, dx):
+ case offsetof(Ureg386, dx):
return offsetof(x86_thread_state32_t, edx);
- case offsetof(Ureg32, si):
+ case offsetof(Ureg386, si):
return offsetof(x86_thread_state32_t, esi);
- case offsetof(Ureg32, di):
+ case offsetof(Ureg386, di):
return offsetof(x86_thread_state32_t, edi);
- case offsetof(Ureg32, bp):
+ case offsetof(Ureg386, bp):
return offsetof(x86_thread_state32_t, ebp);
- case offsetof(Ureg32, fs):
+ case offsetof(Ureg386, fs):
return offsetof(x86_thread_state32_t, fs);
- case offsetof(Ureg32, gs):
+ case offsetof(Ureg386, gs):
return offsetof(x86_thread_state32_t, gs);
- case offsetof(Ureg32, pc):
+ case offsetof(Ureg386, pc):
return offsetof(x86_thread_state32_t, eip);
- case offsetof(Ureg32, cs):
+ case offsetof(Ureg386, cs):
return offsetof(x86_thread_state32_t, cs);
- case offsetof(Ureg32, flags):
+ case offsetof(Ureg386, flags):
return offsetof(x86_thread_state32_t, eflags);
- case offsetof(Ureg32, sp):
+ case offsetof(Ureg386, sp):
return offsetof(x86_thread_state32_t, esp);
}
return -1;
go2darwin64(uvlong addr)
{
switch(addr){
- case offsetof(Ureg64, ax):
+ case offsetof(UregAmd64, ax):
return offsetof(x86_thread_state64_t, rax);
- case offsetof(Ureg64, bx):
+ case offsetof(UregAmd64, bx):
return offsetof(x86_thread_state64_t, rbx);
- case offsetof(Ureg64, cx):
+ case offsetof(UregAmd64, cx):
return offsetof(x86_thread_state64_t, rcx);
- case offsetof(Ureg64, dx):
+ case offsetof(UregAmd64, dx):
return offsetof(x86_thread_state64_t, rdx);
- case offsetof(Ureg64, si):
+ case offsetof(UregAmd64, si):
return offsetof(x86_thread_state64_t, rsi);
- case offsetof(Ureg64, di):
+ case offsetof(UregAmd64, di):
return offsetof(x86_thread_state64_t, rdi);
- case offsetof(Ureg64, bp):
+ case offsetof(UregAmd64, bp):
return offsetof(x86_thread_state64_t, rbp);
- case offsetof(Ureg64, r8):
+ case offsetof(UregAmd64, r8):
return offsetof(x86_thread_state64_t, r8);
- case offsetof(Ureg64, r9):
+ case offsetof(UregAmd64, r9):
return offsetof(x86_thread_state64_t, r9);
- case offsetof(Ureg64, r10):
+ case offsetof(UregAmd64, r10):
return offsetof(x86_thread_state64_t, r10);
- case offsetof(Ureg64, r11):
+ case offsetof(UregAmd64, r11):
return offsetof(x86_thread_state64_t, r11);
- case offsetof(Ureg64, r12):
+ case offsetof(UregAmd64, r12):
return offsetof(x86_thread_state64_t, r12);
- case offsetof(Ureg64, r13):
+ case offsetof(UregAmd64, r13):
return offsetof(x86_thread_state64_t, r13);
- case offsetof(Ureg64, r14):
+ case offsetof(UregAmd64, r14):
return offsetof(x86_thread_state64_t, r14);
- case offsetof(Ureg64, r15):
+ case offsetof(UregAmd64, r15):
return offsetof(x86_thread_state64_t, r15);
- case offsetof(Ureg64, fs):
+ case offsetof(UregAmd64, fs):
return offsetof(x86_thread_state64_t, fs);
- case offsetof(Ureg64, gs):
+ case offsetof(UregAmd64, gs):
return offsetof(x86_thread_state64_t, gs);
- case offsetof(Ureg64, ip):
+ case offsetof(UregAmd64, ip):
return offsetof(x86_thread_state64_t, rip);
- case offsetof(Ureg64, cs):
+ case offsetof(UregAmd64, cs):
return offsetof(x86_thread_state64_t, cs);
- case offsetof(Ureg64, flags):
+ case offsetof(UregAmd64, flags):
return offsetof(x86_thread_state64_t, rflags);
- case offsetof(Ureg64, sp):
+ case offsetof(UregAmd64, sp):
return offsetof(x86_thread_state64_t, rsp);
}
return -1;
#include <libc.h>
#include <bio.h>
#include <mach.h>
-#define Ureg Ureg32
#include <ureg_x86.h>
-#undef Ureg
-#define Ureg Ureg64
#include <ureg_amd64.h>
-#undef Ureg
#undef waitpid
// The old glibc used with crosstool compilers on thresher
#define PTRACE_EVENT_EXIT 0x6
#endif
-typedef struct Ureg64 Ureg64;
-
static Maprw ptracesegrw;
static Maprw ptraceregrw;
}
switch(addr){
- case offsetof(Ureg64, ax):
+ case offsetof(UregAmd64, ax):
return offsetof(struct user_regs_struct, rax);
- case offsetof(Ureg64, bx):
+ case offsetof(UregAmd64, bx):
return offsetof(struct user_regs_struct, rbx);
- case offsetof(Ureg64, cx):
+ case offsetof(UregAmd64, cx):
return offsetof(struct user_regs_struct, rcx);
- case offsetof(Ureg64, dx):
+ case offsetof(UregAmd64, dx):
return offsetof(struct user_regs_struct, rdx);
- case offsetof(Ureg64, si):
+ case offsetof(UregAmd64, si):
return offsetof(struct user_regs_struct, rsi);
- case offsetof(Ureg64, di):
+ case offsetof(UregAmd64, di):
return offsetof(struct user_regs_struct, rdi);
- case offsetof(Ureg64, bp):
+ case offsetof(UregAmd64, bp):
return offsetof(struct user_regs_struct, rbp);
- case offsetof(Ureg64, r8):
+ case offsetof(UregAmd64, r8):
return offsetof(struct user_regs_struct, r8);
- case offsetof(Ureg64, r9):
+ case offsetof(UregAmd64, r9):
return offsetof(struct user_regs_struct, r9);
- case offsetof(Ureg64, r10):
+ case offsetof(UregAmd64, r10):
return offsetof(struct user_regs_struct, r10);
- case offsetof(Ureg64, r11):
+ case offsetof(UregAmd64, r11):
return offsetof(struct user_regs_struct, r11);
- case offsetof(Ureg64, r12):
+ case offsetof(UregAmd64, r12):
return offsetof(struct user_regs_struct, r12);
- case offsetof(Ureg64, r13):
+ case offsetof(UregAmd64, r13):
return offsetof(struct user_regs_struct, r13);
- case offsetof(Ureg64, r14):
+ case offsetof(UregAmd64, r14):
return offsetof(struct user_regs_struct, r14);
- case offsetof(Ureg64, r15):
+ case offsetof(UregAmd64, r15):
return offsetof(struct user_regs_struct, r15);
- case offsetof(Ureg64, ds):
+ case offsetof(UregAmd64, ds):
return offsetof(struct user_regs_struct, ds);
- case offsetof(Ureg64, es):
+ case offsetof(UregAmd64, es):
return offsetof(struct user_regs_struct, es);
- case offsetof(Ureg64, fs):
+ case offsetof(UregAmd64, fs):
return offsetof(struct user_regs_struct, fs);
- case offsetof(Ureg64, gs):
+ case offsetof(UregAmd64, gs):
return offsetof(struct user_regs_struct, gs);
- case offsetof(Ureg64, ip):
+ case offsetof(UregAmd64, ip):
return offsetof(struct user_regs_struct, rip);
- case offsetof(Ureg64, cs):
+ case offsetof(UregAmd64, cs):
return offsetof(struct user_regs_struct, cs);
- case offsetof(Ureg64, flags):
+ case offsetof(UregAmd64, flags):
return offsetof(struct user_regs_struct, eflags);
- case offsetof(Ureg64, sp):
+ case offsetof(UregAmd64, sp):
return offsetof(struct user_regs_struct, rsp);
- case offsetof(Ureg64, ss):
+ case offsetof(UregAmd64, ss):
return offsetof(struct user_regs_struct, ss);
}
return -1;