From 5e55547ce1f2ce5815b726784215f1234a1ae579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciro=20Santilli=20=E5=85=AD=E5=9B=9B=E4=BA=8B=E4=BB=B6=20?= =?UTF-8?q?=E6=B3=95=E8=BD=AE=E5=8A=9F?= Date: Thu, 9 May 2019 00:00:00 +0000 Subject: [PATCH] userland x86_64: allow ASSERT_EQ to take just about anything --- README.adoc | 10 +++++++++- userland/arch/x86_64/common_arch.h | 8 +++++--- userland/arch/x86_64/lkmc_assert_eq_fail.S | 13 ++++++++++--- userland/arch/x86_64/lkmc_assert_memcmp_fail.S | 7 +++---- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/README.adoc b/README.adoc index fd173df..6b72364 100644 --- a/README.adoc +++ b/README.adoc @@ -11776,7 +11776,15 @@ Bibliography: == x86 userland assembly -Getting started at: <>. +Arch agnostic infrastructure getting started at: <>. + +=== x86 userland assembly getting started + +These are the main concepts and instructions that you should learn to be able to understand what is going on. + +Once those are done, everything else left on userland is just to learn a huge list of instructions: <> + +=== x86 userland assembly instructions TODO diff --git a/userland/arch/x86_64/common_arch.h b/userland/arch/x86_64/common_arch.h index 8992631..1ce486c 100644 --- a/userland/arch/x86_64/common_arch.h +++ b/userland/arch/x86_64/common_arch.h @@ -3,9 +3,11 @@ #ifndef COMMON_ARCH_H #define COMMON_ARCH_H -#define ASSERT_EQ(reg, const) \ - mov reg, %rdi; \ - mov const, %rsi; \ +#define ASSERT_EQ(general1, general2) \ + mov general2, %rdi; \ + push %rdi; \ + mov general1, %rdi; \ + pop %rsi; \ ASSERT_EQ_DO(64); \ ; diff --git a/userland/arch/x86_64/lkmc_assert_eq_fail.S b/userland/arch/x86_64/lkmc_assert_eq_fail.S index 09d0c70..39a2b6a 100644 --- a/userland/arch/x86_64/lkmc_assert_eq_fail.S +++ b/userland/arch/x86_64/lkmc_assert_eq_fail.S @@ -3,7 +3,14 @@ #include "common.h" ENTRY - mov $1, %rax - ASSERT_EQ(%rax, $1) - ASSERT_EQ(%rax, $2) + mov $0x123456789ABCDEF0, %r12 + mov $0x123456789ABCDEF0, %r13 + ASSERT_EQ(%r12, $0x123456789ABCDEF0) + ASSERT_EQ(%r12, %r13) + ASSERT_EQ(%r12, myvar) + ASSERT_EQ($0x123456789ABCDEF0, %r12) + ASSERT_EQ(%r13, %r12) + ASSERT_EQ(myvar, %r12) + ASSERT_EQ(%r12, $0x123456789ABCDEF1) EXIT +myvar: .quad 0x123456789ABCDEF0 diff --git a/userland/arch/x86_64/lkmc_assert_memcmp_fail.S b/userland/arch/x86_64/lkmc_assert_memcmp_fail.S index 1723379..b3b5bf0 100644 --- a/userland/arch/x86_64/lkmc_assert_memcmp_fail.S +++ b/userland/arch/x86_64/lkmc_assert_memcmp_fail.S @@ -2,11 +2,10 @@ #include "common.h" -.data - var0: .long 0x11111111, 0x22222222, 0x33333333, 0x44444444 - var1: .long 0x11111111, 0x22222222, 0x33333333, 0x44444444 - var2: .long 0x11111111, 0x22222223, 0x23333333, 0x44444444 ENTRY ASSERT_MEMCMP(var0, var1, $0x10) ASSERT_MEMCMP(var0, var2, $0x10) EXIT + var0: .long 0x11111111, 0x22222222, 0x33333333, 0x44444444 + var1: .long 0x11111111, 0x22222222, 0x33333333, 0x44444444 + var2: .long 0x11111111, 0x22222223, 0x23333333, 0x44444444