From de9302504724a5e41261a2fb0653d5adca6a5756 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Tue, 4 Dec 2007 07:08:01 +0000 Subject: [PATCH] Fix #122: Allow standalone prefixes. Implementation copied from gas parser. svn path=/trunk/yasm/; revision=2021 --- modules/parsers/nasm/nasm-parse.c | 10 ++++++---- modules/parsers/nasm/tests/Makefile.inc | 2 ++ modules/parsers/nasm/tests/nasm-prefix.asm | 5 +++++ modules/parsers/nasm/tests/nasm-prefix.hex | 6 ++++++ 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 modules/parsers/nasm/tests/nasm-prefix.asm create mode 100644 modules/parsers/nasm/tests/nasm-prefix.hex diff --git a/modules/parsers/nasm/nasm-parse.c b/modules/parsers/nasm/nasm-parse.c index 98c2034d..db08275f 100644 --- a/modules/parsers/nasm/nasm-parse.c +++ b/modules/parsers/nasm/nasm-parse.c @@ -658,8 +658,9 @@ parse_instr(yasm_parser_nasm *parser_nasm) uintptr_t prefix = PREFIX_val; get_next_token(); bc = parse_instr(parser_nasm); - if (bc) - yasm_insn_add_prefix(yasm_bc_get_insn(bc), prefix); + if (!bc) + bc = yasm_arch_create_empty_insn(p_object->arch, cur_line); + yasm_insn_add_prefix(yasm_bc_get_insn(bc), prefix); return bc; } case SEGREG: @@ -667,8 +668,9 @@ parse_instr(yasm_parser_nasm *parser_nasm) uintptr_t segreg = SEGREG_val; get_next_token(); bc = parse_instr(parser_nasm); - if (bc) - yasm_insn_add_seg_prefix(yasm_bc_get_insn(bc), segreg); + if (!bc) + bc = yasm_arch_create_empty_insn(p_object->arch, cur_line); + yasm_insn_add_seg_prefix(yasm_bc_get_insn(bc), segreg); return bc; } default: diff --git a/modules/parsers/nasm/tests/Makefile.inc b/modules/parsers/nasm/tests/Makefile.inc index 599aa397..0e7cf1ed 100644 --- a/modules/parsers/nasm/tests/Makefile.inc +++ b/modules/parsers/nasm/tests/Makefile.inc @@ -19,6 +19,8 @@ EXTRA_DIST += modules/parsers/nasm/tests/hexconst.asm EXTRA_DIST += modules/parsers/nasm/tests/hexconst.hex EXTRA_DIST += modules/parsers/nasm/tests/long.asm EXTRA_DIST += modules/parsers/nasm/tests/long.hex +EXTRA_DIST += modules/parsers/nasm/tests/nasm-prefix.asm +EXTRA_DIST += modules/parsers/nasm/tests/nasm-prefix.hex EXTRA_DIST += modules/parsers/nasm/tests/newsect.asm EXTRA_DIST += modules/parsers/nasm/tests/newsect.hex EXTRA_DIST += modules/parsers/nasm/tests/orphannowarn.asm diff --git a/modules/parsers/nasm/tests/nasm-prefix.asm b/modules/parsers/nasm/tests/nasm-prefix.asm new file mode 100644 index 00000000..2bd7824f --- /dev/null +++ b/modules/parsers/nasm/tests/nasm-prefix.asm @@ -0,0 +1,5 @@ +es +mov ax, [bx] + +a32 +mov ax, [bx] diff --git a/modules/parsers/nasm/tests/nasm-prefix.hex b/modules/parsers/nasm/tests/nasm-prefix.hex new file mode 100644 index 00000000..24bdfef6 --- /dev/null +++ b/modules/parsers/nasm/tests/nasm-prefix.hex @@ -0,0 +1,6 @@ +26 +8b +07 +67 +8b +07