diff --git a/README.adoc b/README.adoc index b0e28f6..056c6f1 100644 --- a/README.adoc +++ b/README.adoc @@ -11362,10 +11362,12 @@ This verifies that the venerable `add` instruction and our setup are working. Then, modify that program to make the assertion fail: .... -TODO +ASSERT_EQ(%rax, $4) .... -and then watch the assertion fail: +because 1 + 2 tends to equal 3 instead of 4. + +And then watch the assertion fail: .... ./build-userland @@ -11375,10 +11377,10 @@ and then watch the assertion fail: with error message: .... -TODO +error 1 at line 8 .... -Notice how we give the actual assembly line number where the failing assert was! +and notice how we give the actual assembly line number where the failing assert was! Other setup sanity checks that you might want to look into include: diff --git a/userland/arch/x86_64/add.S b/userland/arch/x86_64/add.S new file mode 100644 index 0000000..978b1a3 --- /dev/null +++ b/userland/arch/x86_64/add.S @@ -0,0 +1,9 @@ +/* https://github.com/cirosantilli/linux-kernel-module-cheat#userland-assembly */ + +#include "common.h" + +ENTRY + mov $1, %rax + add $2, %rax + ASSERT_EQ(%rax, $3) +EXIT diff --git a/userland/arch/x86_64/common_arch.h b/userland/arch/x86_64/common_arch.h index 11490c3..d94e3d4 100644 --- a/userland/arch/x86_64/common_arch.h +++ b/userland/arch/x86_64/common_arch.h @@ -9,9 +9,9 @@ mov reg, %rax; \ mov const, %rbx; \ cmp %rax, %rbx; \ - ASSERT(je); \ pop %rbx; \ pop %rax; \ + ASSERT(je); \ ; # TODO