summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Johnson <peter@tortall.net>2011-10-02 22:11:01 -0700
committerPeter Johnson <peter@tortall.net>2011-10-02 22:11:01 -0700
commitcc4657a134cc2c2ce9b67626ab0f5ea5c212cf95 (patch)
tree683a07447b4b884c6eb781b8eae014b73dbdf288
parent716c17112d85cc4aa3735ce2959b3fe9c06bcb80 (diff)
parentd19cbdababcf128b993aa0f4a12a64b9cefb784f (diff)
downloadyasm-cc4657a134cc2c2ce9b67626ab0f5ea5c212cf95.tar.gz
Merge pull request #60 from olsner/struc_base
Implement the base offset parameter for the struc macro
-rw-r--r--modules/parsers/nasm/nasm-std.mac6
-rw-r--r--modules/parsers/nasm/tests/Makefile.inc2
-rw-r--r--modules/parsers/nasm/tests/strucbase.asm11
-rw-r--r--modules/parsers/nasm/tests/strucbase.hex4
4 files changed, 20 insertions, 3 deletions
diff --git a/modules/parsers/nasm/nasm-std.mac b/modules/parsers/nasm/nasm-std.mac
index 3c9223ab..bb6e5c4e 100644
--- a/modules/parsers/nasm/nasm-std.mac
+++ b/modules/parsers/nasm/nasm-std.mac
@@ -25,14 +25,14 @@
__SECT__
%endmacro
-%imacro struc 1.nolist
+%imacro struc 1-2.nolist 0
%push struc
%define %$strucname %1
-[absolute 0]
+[absolute %2]
%$strucname: ; allow definition of `.member' to work sanely
%endmacro
%imacro endstruc 0.nolist
-%{$strucname}_size:
+%{$strucname}_size EQU $ - %$strucname
%pop
__SECT__
%endmacro
diff --git a/modules/parsers/nasm/tests/Makefile.inc b/modules/parsers/nasm/tests/Makefile.inc
index e8293d2a..56d0b926 100644
--- a/modules/parsers/nasm/tests/Makefile.inc
+++ b/modules/parsers/nasm/tests/Makefile.inc
@@ -39,6 +39,8 @@ EXTRA_DIST += modules/parsers/nasm/tests/strucalign.asm
EXTRA_DIST += modules/parsers/nasm/tests/strucalign.hex
EXTRA_DIST += modules/parsers/nasm/tests/struczero.asm
EXTRA_DIST += modules/parsers/nasm/tests/struczero.hex
+EXTRA_DIST += modules/parsers/nasm/tests/strucbase.asm
+EXTRA_DIST += modules/parsers/nasm/tests/strucbase.hex
EXTRA_DIST += modules/parsers/nasm/tests/syntax-err.asm
EXTRA_DIST += modules/parsers/nasm/tests/syntax-err.errwarn
EXTRA_DIST += modules/parsers/nasm/tests/uscore.asm
diff --git a/modules/parsers/nasm/tests/strucbase.asm b/modules/parsers/nasm/tests/strucbase.asm
new file mode 100644
index 00000000..81e2fc03
--- /dev/null
+++ b/modules/parsers/nasm/tests/strucbase.asm
@@ -0,0 +1,11 @@
+struc base, -7
+.a: resb 1
+.b: resb 1
+endstruc
+
+; Expect base and base.a to appear at -7, base.b at -6
+db base
+db base.a
+db base.b
+; The size should be '2' here
+db base_size
diff --git a/modules/parsers/nasm/tests/strucbase.hex b/modules/parsers/nasm/tests/strucbase.hex
new file mode 100644
index 00000000..5d48c5ea
--- /dev/null
+++ b/modules/parsers/nasm/tests/strucbase.hex
@@ -0,0 +1,4 @@
+f9
+f9
+fa
+02