>>> Alan Modra 01.03.05 13:11:54 >>> >On Tue, Mar 01, 2005 at 09:56:45AM +0100, Jan Beulich wrote: >> * config/tc-i386.c (intel_e11): If not followed by T_PTR, treat T_BYTE >> etc. like normal symbol references (T_ID). > >OK, but.. > >> * gas/i386/intelok.d: Add -r to objdump options. Adjust expectations. > >Please test this on i686-aout and i686-coff targets and adjust relocs to >suit all targets. Changes below/attached. I'm not sure if in such a case it is OK to apply without another approval - please let me know. Re-tested on i686-pc-linux-gnu and as cross tools for i686-aout and i686-coff. Jan gas/ 2005-03-01 Jan Beulich * config/tc-i386.c (intel_e11): If not followed by T_PTR, treat T_BYTE etc. like normal symbol references (T_ID). gas/testsuite/ 2005-03-01 Jan Beulich * gas/i386/intelok.d: Add -r to objdump options. Adjust expectations. * gas/i386/intelok.s: Add checks for various special memory operands. --- /home/jbeulich/src/binutils/mainline/2005-02-28/gas/config/tc-i386.c 2005-02-01 16:15:56.000000000 +0100 +++ 2005-02-28/gas/config/tc-i386.c 2005-02-28 17:42:09.000000000 +0100 @@ -6154,6 +6162,23 @@ intel_e11 () { intel_match_token (cur_token.code); + if (cur_token.code != T_PTR) + { + /* It must have been an identifier; add it to the displacement string. */ + strcat (intel_parser.disp, prev_token.str); + + /* The identifier represents a memory reference only if it's not + preceded by an offset modifier and if it's not an equate. */ + if (intel_parser.op_modifier != T_OFFSET) + { + symbolS *symbolP; + + symbolP = symbol_find(prev_token.str); + if (!symbolP || S_GET_SEGMENT(symbolP) != absolute_section) + intel_parser.is_mem = 1; + } + } + return 1; } --- /home/jbeulich/src/binutils/mainline/2005-02-28/gas/testsuite/gas/i386/intelok.d 2005-02-08 13:56:14.000000000 +0100 +++ 2005-02-28/gas/testsuite/gas/i386/intelok.d 2005-03-01 09:38:13.305824976 +0100 @@ -1,5 +1,5 @@ #as: -J -#objdump: -dwMintel +#objdump: -drwMintel #name: i386 intel-ok .*: +file format .* @@ -93,6 +93,20 @@ Disassembly of section .text: [ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\]) [ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\]) [ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\]) +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+byte +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+byte +[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\] +[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\] +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+fword +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+fword +[ ]*[0-9a-f]+: 8b 80 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+qword +[ ]*[0-9a-f]+: 8b 80 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+qword +[ ]*[0-9a-f]+: 8b 80 08 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+8\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+tbyte +[ ]*[0-9a-f]+: 8b 80 08 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+8\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+tbyte +#[ ]*[0-9a-f]+: 8b 04 85 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+word +#[ ]*[0-9a-f]+: 8b 04 85 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+word +#[ ]*[0-9a-f]+: 8b 04 85 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+xmmword +#[ ]*[0-9a-f]+: 8b 04 85 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+xmmword [ ]*[0-9a-f]+: 6a 01[ ]+push[ ]+0x1 [ ]*[0-9a-f]+: 6a ff[ ]+push[ ]+0xffffffff [ ]*[0-9a-f]+: 6a fe[ ]+push[ ]+0xfffffffe --- /home/jbeulich/src/binutils/mainline/2005-02-28/gas/testsuite/gas/i386/intelok.s 2005-02-08 13:56:39.000000000 +0100 +++ 2005-02-28/gas/testsuite/gas/i386/intelok.s 2005-03-01 09:31:11.807902400 +0100 @@ -1,6 +1,10 @@ .intel_syntax noprefix + .equiv dword, 4 .text start: + + # operand sizes + add al, [eax] add al, byte ptr [eax] add ax, [eax] @@ -88,6 +92,23 @@ start: xlat byte ptr [ebx] xlatb + # memory operands + + mov eax, dword ptr [byte+eax] + mov eax, dword ptr byte[eax] + mov eax, [dword+eax] + mov eax, dword[eax] + mov eax, [fword+eax] + mov eax, fword[eax] + mov eax, [qword+eax+dword] + mov eax, qword[eax+dword] + mov eax, [tbyte+eax+dword*2] + mov eax, tbyte[eax+dword*2] +# mov eax, [word+eax*dword] +# mov eax, word[eax*dword] +# mov eax, [xmmword+(eax+1)*dword] +# mov eax, xmmword[(eax+1)*dword] + # expressions push + 1