lkml.org 
[lkml]   [1998]   [Apr]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
SubjectSome x86 kernel bugs
Date
Hi, Linus,

Using binutils 2.8.1.0.26, I found a few x86 kernel bugs. In linux
2.0.33 and 2.1.90, there are many

btl %al, xxxxxxxx
btrl %al, xxxxxxxx

The old binutils silently turned them into

btl %eax, xxxxxxxx
btrl %eax, xxxxxxxx

But binutils 2.8.1.0.26 flags them as error since the valid register
for btl/btrl is 16-bit or 32-bit. I am not sure if they are serious
or not. From what I have seen, they are mainly from SMP codes.

BTW, I am enclosng a preliminary patch for binutils 2.8.1.0.27 against
binutils 2.8.1.0.26.

Thanks.


--
H.J. Lu (hjl@gnu.org)
---
Index: bfd/configure
===================================================================
RCS file: /home/work/cvs/gnu/binutils/bfd/configure,v
retrieving revision 1.40
diff -u -r1.40 configure
--- bfd/configure 1998/03/26 23:33:24 1.40
+++ bfd/configure 1998/03/28 02:49:00
@@ -993,7 +993,7 @@

PACKAGE=bfd

-VERSION=2.8.1.0.26
+VERSION=2.8.1.0.27

if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
Index: bfd/configure.in
===================================================================
RCS file: /home/work/cvs/gnu/binutils/bfd/configure.in,v
retrieving revision 1.43
diff -u -r1.43 configure.in
--- bfd/configure.in 1998/03/26 23:33:25 1.43
+++ bfd/configure.in 1998/03/28 02:48:55
@@ -7,7 +7,7 @@
AC_CANONICAL_SYSTEM
AC_ISC_POSIX

-AM_INIT_AUTOMAKE(bfd, 2.8.1.0.26)
+AM_INIT_AUTOMAKE(bfd, 2.8.1.0.27)

dnl These must be called before AM_PROG_LIBTOOL, because it may want
dnl to call AC_CHECK_PROG.
Index: gas/ChangeLog.linux
===================================================================
RCS file: /home/work/cvs/gnu/binutils/gas/ChangeLog.linux,v
retrieving revision 1.37
diff -u -r1.37 ChangeLog.linux
--- gas/ChangeLog.linux 1998/03/27 09:04:04 1.37
+++ gas/ChangeLog.linux 1998/03/28 07:58:56
@@ -1,3 +1,10 @@
+Fri Mar 27 23:58:47 1998 H.J. Lu (hjl@gnu.org)
+
+ * config/tc-i386.h (OperandSizeMask): New.
+
+ * config/tc-i386.c (md_assemble): Emit WORD_PREFIX_OPCODE only
+ when there is an ambiguity.
+
Thu Mar 26 08:43:53 1998 H.J. Lu (hjl@gnu.org)

* Makefile.am (diststuff): Depend on $(DISTFILES) instead of
Index: gas/config/tc-i386.c
===================================================================
RCS file: /home/work/cvs/gnu/binutils/gas/config/tc-i386.c,v
retrieving revision 1.34
diff -u -r1.34 tc-i386.c
--- gas/config/tc-i386.c 1998/03/27 18:54:53 1.34
+++ gas/config/tc-i386.c 1998/03/28 07:57:30
@@ -1201,7 +1201,7 @@
/* If there's no opcode suffix and it is needed, we try to invent
one based on register operands. */
if (!i.suffix && i.reg_operands
- && (t->opcode_modifier & (ByteOperand|WordOperand|DWordOperand)))
+ && (t->opcode_modifier & OperandSizeMask))
{
/* We take i.suffix from the LAST register operand specified. This
assumes that the last register operands is the destination register
@@ -1315,7 +1315,10 @@
MAX_PREFIXES);
return;
}
- i.prefix[i.prefixes++] = WORD_PREFIX_OPCODE;
+ /* We only emit an operand size prefix if there is an
+ ambiguity. */
+ if ((t->opcode_modifier & OperandSizeMask) != WordOperand)
+ i.prefix[i.prefixes++] = WORD_PREFIX_OPCODE;
}
}

Index: gas/config/tc-i386.h
===================================================================
RCS file: /home/work/cvs/gnu/binutils/gas/config/tc-i386.h,v
retrieving revision 1.19
diff -u -r1.19 tc-i386.h
--- gas/config/tc-i386.h 1998/03/26 23:33:48 1.19
+++ gas/config/tc-i386.h 1998/03/28 07:48:53
@@ -301,6 +301,7 @@
#define ByteOperand 0x200000 /* allow byte operand size */
#define WordOperand 0x400000 /* allow word operand size */
#define DWordOperand 0x800000 /* allow double word operand size */
+#define OperandSizeMask (ByteOperand|WordOperand|DWordOperand)

/* (opcode_modifier & COMES_IN_ALL_SIZES) is true if the
instuction comes in byte, word, and dword sizes and is encoded into
Index: include/opcode/ChangeLog.linux
===================================================================
RCS file: /home/work/cvs/gnu/binutils/include/opcode/ChangeLog.linux,v
retrieving revision 1.13
diff -u -r1.13 ChangeLog.linux
--- include/opcode/ChangeLog.linux 1998/03/27 16:28:41 1.13
+++ include/opcode/ChangeLog.linux 1998/03/28 07:42:58
@@ -1,3 +1,7 @@
+Fri Mar 27 18:48:31 1998 H.J. Lu <hjl@gnu.org>
+
+ * i386.h (i386_optab): Add more WordOperand.
+
Thu Mar 26 19:23:24 1998 H.J. Lu <hjl@gnu.org>

* i386.h (i386_optab): Use ByteOperand, WordOperand and
Index: include/opcode/i386.h
===================================================================
RCS file: /home/work/cvs/gnu/binutils/include/opcode/i386.h,v
retrieving revision 1.26
diff -u -r1.26 i386.h
--- include/opcode/i386.h 1998/03/27 18:54:58 1.26
+++ include/opcode/i386.h 1998/03/28 07:37:06
@@ -700,14 +700,14 @@
/* processor control */
{"fninit", 0, 0xdbe3, _, NoModrm, { 0, 0, 0} },
{"finit", 0, 0x9bdbe3, _, NoModrm, { 0, 0, 0} },
-{"fldcw", 1, 0xd9, 5, Modrm, { WordMem, 0, 0} },
-{"fnstcw", 1, 0xd9, 7, Modrm, { WordMem, 0, 0} },
-{"fstcw", 1, 0x9bd9, 7, Modrm, { WordMem, 0, 0} },
-{"fnstsw", 1, 0xdfe0, _, NoModrm, { Acc, 0, 0} },
-{"fnstsw", 1, 0xdd, 7, Modrm, { WordMem, 0, 0} },
+{"fldcw", 1, 0xd9, 5, Modrm|WordOperand, { WordMem, 0, 0} },
+{"fnstcw", 1, 0xd9, 7, Modrm|WordOperand, { WordMem, 0, 0} },
+{"fstcw", 1, 0x9bd9, 7, Modrm|WordOperand, { WordMem, 0, 0} },
+{"fnstsw", 1, 0xdfe0, _, NoModrm|WordOperand, { Acc, 0, 0} },
+{"fnstsw", 1, 0xdd, 7, Modrm|WordOperand, { WordMem, 0, 0} },
{"fnstsw", 0, 0xdfe0, _, NoModrm, { 0, 0, 0} },
-{"fstsw", 1, 0x9bdfe0, _, NoModrm, { Acc, 0, 0} },
-{"fstsw", 1, 0x9bdd, 7, Modrm, { WordMem, 0, 0} },
+{"fstsw", 1, 0x9bdfe0, _, NoModrm|WordOperand, { Acc, 0, 0} },
+{"fstsw", 1, 0x9bdd, 7, Modrm|WordOperand, { WordMem, 0, 0} },
{"fstsw", 0, 0x9bdfe0, _, NoModrm, { 0, 0, 0} },
{"fnclex", 0, 0xdbe2, _, NoModrm, { 0, 0, 0} },
{"fclex", 0, 0x9bdbe2, _, NoModrm, { 0, 0, 0} },
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu

\
 
 \ /
  Last update: 2005-03-22 13:42    [W:0.023 / U:2.264 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site