public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Binutils <binutils@sourceware.org>
Subject: [PATCH v2] x86: Remove libopcodes dependency
Date: Mon, 28 Nov 2022 15:49:42 -0800	[thread overview]
Message-ID: <CAMe9rOpbKEZ=wSgTbDLEXgzj2sbAHp1uU0WSGy0qTPL1fakM0g@mail.gmail.com> (raw)
In-Reply-To: <6a5d4918-919a-8b6b-822b-17ce38488629@suse.com>

[-- Attachment #1: Type: text/plain, Size: 1823 bytes --]

On Thu, Nov 24, 2022 at 2:19 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> On 22.11.2022 19:19, H.J. Lu wrote:
> > --- a/gas/Makefile.am
> > +++ b/gas/Makefile.am
> > @@ -446,6 +446,12 @@ development.exp: $(BFDDIR)/development.sh
> >       $(EGREP) "(development|experimental)=" $(BFDDIR)/development.sh  \
> >         | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@
> >
> > +$(srcdir)/../opcodes/i386-init.h $(srcdir)/../opcodes/i386-tbl.h: \
> > +     @MAINT@ $(srcdir)/../opcodes/i386-opc.tbl \
> > +     $(srcdir)/../opcodes/i386-reg.tbl \
> > +     $(srcdir)/../opcodes/i386-opc.h
> > +     cd ../opcodes; make gen-i386-tbl
>
> I've made a patch to gas/Makefile.am as you have requested in reply to
> my series. I will want to put that through some more testing, so I will
> submit a v3 of that only a little later (and of course only unless you
> submit a v2 of your patch earlier that I would also end up being okay
> with). In the course of doing so I noticed a few more issues with your
> change:
>
> For one I don't think you can put @MAINT@ on a continued line, as the
> line continuation might then be hidden when @MAINT@ expands to #. The
> list of dependencies wants expressing via a variable, which would then
> be used immediately after @MAINT@ without any line continuation
> following.

Fixed.

> And then your rule / dependency won't be enough on a "maintainer-clean"
> tree, i.e. when the generated headers aren't there at all, and when
> config/.deps/tc-i386.Po is still empty. In that case nothing would
> trigger their generation; an explicit dependency of config/tc-i386.o on
> these headers needs adding here.

Fixed.

> Finally you're missing a dependency of the generated headers on
> i386-gen.c.

They have a dependency on i386-gen which depends on i386-gen.c.

Here is the v2 patch.

-- 
H.J.

[-- Attachment #2: v2-0001-x86-Remove-libopcodes-dependency.patch --]
[-- Type: text/x-patch, Size: 9911 bytes --]

From 1eb648370f8d397ef31180d6f6777a96d81f3238 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Tue, 22 Nov 2022 10:04:20 -0800
Subject: [PATCH v2] x86: Remove libopcodes dependency

As Jan Beulich <jbeulich@suse.com> noticed, since i386-init.h and
i386-tbl.h are only used by tc-i386.c, we can remove libopcodes
dependency by including opcodes/i386-tbl.h directly.

gas/

	* Makefile.am ($(srcdir)/../opcodes/i386-init.h
	$(srcdir)/../opcodes/i386-tbl.h): New rule.
	* configure.ac (need_opcodes): Don't set for i386.
	* config/tc-i386.c: Include "opcodes/i386-tbl.h".
	* Makefile.in: Regenerated.
	* configure: Likewise.

opcodes/

	* Makefile.am (TARGET32_LIBOPCODES_CFILES): Remove i386-opc.c.
	(i386-opc.lo): Removed.
	(gen-i386-tbl): New rule.
	* configure.ac: Remove i386-opc.lo.
	* i386-opc.c: Removed.
	* i386-opc.h (insn_template): Change name to const char *.
	(i386_regtab): Removed.
	(i386_regtab_size): Likewise.
	* Makefile.in: Regenerated.
	* configure: Likewise.
	* po/POTFILES.in: Likewise.
---
 gas/Makefile.am        |  9 +++++++++
 gas/Makefile.in        |  9 +++++++++
 gas/config/tc-i386.c   |  1 +
 gas/configure          |  2 +-
 gas/configure.ac       |  2 +-
 opcodes/Makefile.am    |  6 +-----
 opcodes/Makefile.in    |  7 +------
 opcodes/configure      |  2 +-
 opcodes/configure.ac   |  2 +-
 opcodes/i386-opc.c     | 24 ------------------------
 opcodes/i386-opc.h     |  5 +----
 opcodes/po/POTFILES.in |  1 -
 12 files changed, 26 insertions(+), 44 deletions(-)
 delete mode 100644 opcodes/i386-opc.c

diff --git a/gas/Makefile.am b/gas/Makefile.am
index dc5931252e4..37d12966623 100644
--- a/gas/Makefile.am
+++ b/gas/Makefile.am
@@ -448,6 +448,15 @@ development.exp: $(BFDDIR)/development.sh
 	$(EGREP) "(development|experimental)=" $(BFDDIR)/development.sh  \
 	  | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@
 
+config/tc-i386.@OBJEXT@: $(srcdir)/../opcodes/i386-init.h \
+	$(srcdir)/../opcodes/i386-tbl.h
+
+$(srcdir)/../opcodes/i386-init.h $(srcdir)/../opcodes/i386-tbl.h: @MAINT@ $(srcdir)/../opcodes/i386-opc.tbl \
+	$(srcdir)/../opcodes/i386-reg.tbl \
+	$(srcdir)/../opcodes/i386-opc.h \
+	$(srcdir)/../opcodes/i386-gen.c
+	$(MAKE) -C ../opcodes gen-i386-tbl
+
 EXTRA_as_new_SOURCES += config/m68k-parse.y
 config/m68k-parse.c: $(srcdir)/config/m68k-parse.y
 	$(SHELL) $(YLWRAP) $(srcdir)/config/m68k-parse.y y.tab.c $@ -- $(YACCCOMPILE)
diff --git a/gas/Makefile.in b/gas/Makefile.in
index 8324cbe999d..3b6ae1404d9 100644
--- a/gas/Makefile.in
+++ b/gas/Makefile.in
@@ -2064,6 +2064,15 @@ check-DEJAGNU: site.exp
 development.exp: $(BFDDIR)/development.sh
 	$(EGREP) "(development|experimental)=" $(BFDDIR)/development.sh  \
 	  | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@
+
+config/tc-i386.@OBJEXT@: $(srcdir)/../opcodes/i386-init.h \
+	$(srcdir)/../opcodes/i386-tbl.h
+
+$(srcdir)/../opcodes/i386-init.h $(srcdir)/../opcodes/i386-tbl.h: @MAINT@ $(srcdir)/../opcodes/i386-opc.tbl \
+	$(srcdir)/../opcodes/i386-reg.tbl \
+	$(srcdir)/../opcodes/i386-opc.h \
+	$(srcdir)/../opcodes/i386-gen.c
+	$(MAKE) -C ../opcodes gen-i386-tbl
 config/m68k-parse.c: $(srcdir)/config/m68k-parse.y
 	$(SHELL) $(YLWRAP) $(srcdir)/config/m68k-parse.y y.tab.c $@ -- $(YACCCOMPILE)
 config/m68k-parse.h: config/m68k-parse.c
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 5a88d25a9c2..73277dacca3 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -34,6 +34,7 @@
 #include "sframe.h"
 #include "elf/x86-64.h"
 #include "opcodes/i386-init.h"
+#include "opcodes/i386-tbl.h"
 #include <limits.h>
 
 #ifndef INFER_ADDR_PREFIX
diff --git a/gas/configure b/gas/configure
index 57c1fa3557e..f329b905d37 100755
--- a/gas/configure
+++ b/gas/configure
@@ -12263,7 +12263,7 @@ _ACEOF
 
     # Do we need the opcodes library?
     case ${cpu_type} in
-      vax | tic30)
+      i386 | vax | tic30)
 	;;
 
       *)
diff --git a/gas/configure.ac b/gas/configure.ac
index feb43399ce8..7f165c9fe64 100644
--- a/gas/configure.ac
+++ b/gas/configure.ac
@@ -420,7 +420,7 @@ changequote([,])dnl
 
     # Do we need the opcodes library?
     case ${cpu_type} in
-      vax | tic30)
+      i386 | vax | tic30)
 	;;
 
       *)
diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
index 93e9002be19..b227427672f 100644
--- a/opcodes/Makefile.am
+++ b/opcodes/Makefile.am
@@ -162,7 +162,6 @@ TARGET32_LIBOPCODES_CFILES = \
 	h8300-dis.c \
 	hppa-dis.c \
 	i386-dis.c \
-	i386-opc.c \
 	ip2k-asm.c \
 	ip2k-desc.c \
 	ip2k-dis.c \
@@ -562,10 +561,7 @@ $(srcdir)/i386%tbl.h $(srcdir)/i386%init.h: @MAINT@ i386-gen$(EXEEXT_FOR_BUILD)
 		< $(srcdir)/i386-opc.tbl \
 		| ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir)
 
-i386-opc.lo: $(srcdir)/i386-tbl.h
-# While not really a dependency, specify i386-init.h here as well to make sure
-# it is generated even if i386-tbl.h is present and up-to-date.
-i386-opc.lo: $(srcdir)/i386-init.h
+gen-i386-tbl: $(srcdir)/i386-tbl.h $(srcdir)/i386-init.h
 
 ia64-gen$(EXEEXT_FOR_BUILD): ia64-gen.o $(BUILD_LIB_DEPS)
 	$(AM_V_CCLD)$(LINK_FOR_BUILD) ia64-gen.o $(BUILD_LIBS)
diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
index fe4539d6097..8bfa2118f58 100644
--- a/opcodes/Makefile.in
+++ b/opcodes/Makefile.in
@@ -554,7 +554,6 @@ TARGET32_LIBOPCODES_CFILES = \
 	h8300-dis.c \
 	hppa-dis.c \
 	i386-dis.c \
-	i386-opc.c \
 	ip2k-asm.c \
 	ip2k-desc.c \
 	ip2k-dis.c \
@@ -947,7 +946,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h8300-dis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hppa-dis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386-dis.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386-opc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64-dis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64-opc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip2k-asm.Plo@am__quote@
@@ -1537,10 +1535,7 @@ $(srcdir)/i386%tbl.h $(srcdir)/i386%init.h: @MAINT@ i386-gen$(EXEEXT_FOR_BUILD)
 		< $(srcdir)/i386-opc.tbl \
 		| ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir)
 
-i386-opc.lo: $(srcdir)/i386-tbl.h
-# While not really a dependency, specify i386-init.h here as well to make sure
-# it is generated even if i386-tbl.h is present and up-to-date.
-i386-opc.lo: $(srcdir)/i386-init.h
+gen-i386-tbl: $(srcdir)/i386-tbl.h $(srcdir)/i386-init.h
 
 ia64-gen$(EXEEXT_FOR_BUILD): ia64-gen.o $(BUILD_LIB_DEPS)
 	$(AM_V_CCLD)$(LINK_FOR_BUILD) ia64-gen.o $(BUILD_LIBS)
diff --git a/opcodes/configure b/opcodes/configure
index 08c57a33855..9dc87d6c19c 100755
--- a/opcodes/configure
+++ b/opcodes/configure
@@ -12534,7 +12534,7 @@ if test x${all_targets} = xfalse ; then
 	bfd_h8300_arch)		ta="$ta h8300-dis.lo" ;;
 	bfd_hppa_arch)		ta="$ta hppa-dis.lo" ;;
 	bfd_i386_arch|bfd_iamcu_arch)
-				ta="$ta i386-dis.lo i386-opc.lo" ;;
+				ta="$ta i386-dis.lo" ;;
 	bfd_ia64_arch)		ta="$ta ia64-dis.lo ia64-opc.lo" ;;
 	bfd_ip2k_arch)		ta="$ta ip2k-asm.lo ip2k-desc.lo ip2k-dis.lo ip2k-ibld.lo ip2k-opc.lo" using_cgen=yes ;;
 	bfd_epiphany_arch)	ta="$ta epiphany-asm.lo epiphany-desc.lo epiphany-dis.lo epiphany-ibld.lo epiphany-opc.lo" using_cgen=yes ;;
diff --git a/opcodes/configure.ac b/opcodes/configure.ac
index e998d613436..8c79deb9ffc 100644
--- a/opcodes/configure.ac
+++ b/opcodes/configure.ac
@@ -282,7 +282,7 @@ if test x${all_targets} = xfalse ; then
 	bfd_h8300_arch)		ta="$ta h8300-dis.lo" ;;
 	bfd_hppa_arch)		ta="$ta hppa-dis.lo" ;;
 	bfd_i386_arch|bfd_iamcu_arch)
-				ta="$ta i386-dis.lo i386-opc.lo" ;;
+				ta="$ta i386-dis.lo" ;;
 	bfd_ia64_arch)		ta="$ta ia64-dis.lo ia64-opc.lo" ;;
 	bfd_ip2k_arch)		ta="$ta ip2k-asm.lo ip2k-desc.lo ip2k-dis.lo ip2k-ibld.lo ip2k-opc.lo" using_cgen=yes ;;
 	bfd_epiphany_arch)	ta="$ta epiphany-asm.lo epiphany-desc.lo epiphany-dis.lo epiphany-ibld.lo epiphany-opc.lo" using_cgen=yes ;;
diff --git a/opcodes/i386-opc.c b/opcodes/i386-opc.c
deleted file mode 100644
index 729c22932b1..00000000000
--- a/opcodes/i386-opc.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Intel 80386 opcode table
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
-
-   This file is part of the GNU opcodes library.
-
-   This library is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3, or (at your option)
-   any later version.
-
-   It is distributed in the hope that it will be useful, but WITHOUT
-   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-   License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "libiberty.h"
-#include "i386-opc.h"
-#include "i386-tbl.h"
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
index 459268f3656..51256dcfc0e 100644
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -924,7 +924,7 @@ typedef union i386_operand_type
 typedef struct insn_template
 {
   /* instruction name sans width suffix ("mov" for movl insns) */
-  char *name;
+  const char *name;
 
   /* Bitfield arrangement is such that individual fields can be easily
      extracted (in native builds at least) - either by at most a masking
@@ -1011,6 +1011,3 @@ typedef struct
 #define Dw2Inval (-1)
 }
 reg_entry;
-
-extern const reg_entry i386_regtab[];
-extern const unsigned int i386_regtab_size;
diff --git a/opcodes/po/POTFILES.in b/opcodes/po/POTFILES.in
index 24f57af24a3..421f67c0791 100644
--- a/opcodes/po/POTFILES.in
+++ b/opcodes/po/POTFILES.in
@@ -74,7 +74,6 @@ hppa-dis.c
 i386-dis.c
 i386-gen.c
 i386-init.h
-i386-opc.c
 i386-opc.h
 i386-tbl.h
 ia64-asmtab.c
-- 
2.38.1


  reply	other threads:[~2022-11-28 23:50 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-22 18:19 [PATCH] " H.J. Lu
2022-11-23  8:36 ` Jan Beulich
2022-11-28 23:43   ` H.J. Lu
2022-11-29  9:12     ` Jan Beulich
2022-11-24 10:19 ` Jan Beulich
2022-11-28 23:49   ` H.J. Lu [this message]
2022-11-29  9:22     ` [PATCH v2] " Jan Beulich
2022-11-29 19:38       ` H.J. Lu
2022-11-30  0:06         ` H.J. Lu
2022-11-30  6:58           ` Jan Beulich
2022-11-30 22:22             ` H.J. Lu
2022-12-01  7:41               ` Jan Beulich
2022-12-01 18:26                 ` [PATCH v3] " H.J. Lu
2022-12-02  7:16                   ` Jan Beulich
2022-12-02 17:19                     ` H.J. Lu
2022-12-05 11:25                       ` Jan Beulich
2022-11-30  7:31         ` [PATCH v2] " Jan Beulich
2022-11-30 22:15           ` H.J. Lu
2022-12-01  7:21             ` Jan Beulich
2022-12-01 18:20               ` H.J. Lu
2022-12-02  7:10                 ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAMe9rOpbKEZ=wSgTbDLEXgzj2sbAHp1uU0WSGy0qTPL1fakM0g@mail.gmail.com' \
    --to=hjl.tools@gmail.com \
    --cc=binutils@sourceware.org \
    --cc=jbeulich@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).