x86: Remove libopcodes dependency
Checks
Commit Message
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 | 6 ++++++
gas/Makefile.in | 6 ++++++
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, 20 insertions(+), 44 deletions(-)
delete mode 100644 opcodes/i386-opc.c
Comments
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
This recursing into a different directory (and then even using "cd" and
"make" instead of "$(MAKE) -C") is what I have specifically avoided in
my patches. This is deemed an anti-pattern by many people: If you
consider running make in just gas/ is an okay thing to do, then running
make in just opcodes/ is, too. Yet with such a rule doing so in parallel
can result in strange collisions and likely partially broken files.
Therefore with my general maintainer hat on I object to such an approach.
If you really want to generate the files from gas/, then you should do
so there, i.e. also going as far as building i386-gen there. Once
again I did consider doing to, but deemed it awkward: Even if we don't
use libopcodes.{a,so} anymore, I think the opcode table processing
would better remain in opcodes/ - we'd use that library no longer as
a binary but as a (generated) source code one. If you think differently,
I wouldn't object to you following this alternative approach.
As a formal remark: In the description I would expect to be credited at
least for recognizing the opportunity; really you've re-used some of
what I've had in my patches, irrespective of you perhaps having done
things from scratch (and having spotted/corrected an oversight of mine,
which I was about to submit v3 of my series for, but which now I will
wait with until the above is settled - sadly meaning yet further delays
for the growing pile of other work I have pending on top).
Jan
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.
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.
Finally you're missing a dependency of the generated headers on
i386-gen.c.
Jan
On Wed, Nov 23, 2022 at 12:36 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
>
> This recursing into a different directory (and then even using "cd" and
> "make" instead of "$(MAKE) -C") is what I have specifically avoided in
> my patches. This is deemed an anti-pattern by many people: If you
> consider running make in just gas/ is an okay thing to do, then running
> make in just opcodes/ is, too. Yet with such a rule doing so in parallel
> can result in strange collisions and likely partially broken files.
"make" in opcodes won't regenerate these header files. As far as make
dependency is concerned,
$(MAKE) -C ../opcodes gen-i386-tbl
is like other programs.
> Therefore with my general maintainer hat on I object to such an approach.
>
> If you really want to generate the files from gas/, then you should do
> so there, i.e. also going as far as building i386-gen there. Once
> again I did consider doing to, but deemed it awkward: Even if we don't
> use libopcodes.{a,so} anymore, I think the opcode table processing
> would better remain in opcodes/ - we'd use that library no longer as
> a binary but as a (generated) source code one. If you think differently,
> I wouldn't object to you following this alternative approach.
>
> As a formal remark: In the description I would expect to be credited at
> least for recognizing the opportunity; really you've re-used some of
Will do.
> what I've had in my patches, irrespective of you perhaps having done
> things from scratch (and having spotted/corrected an oversight of mine,
> which I was about to submit v3 of my series for, but which now I will
> wait with until the above is settled - sadly meaning yet further delays
> for the growing pile of other work I have pending on top).
>
On 29.11.2022 00:43, H.J. Lu wrote:
> On Wed, Nov 23, 2022 at 12:36 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
>>
>> This recursing into a different directory (and then even using "cd" and
>> "make" instead of "$(MAKE) -C") is what I have specifically avoided in
>> my patches. This is deemed an anti-pattern by many people: If you
>> consider running make in just gas/ is an okay thing to do, then running
>> make in just opcodes/ is, too. Yet with such a rule doing so in parallel
>> can result in strange collisions and likely partially broken files.
>
> "make" in opcodes won't regenerate these header files. As far as make
> dependency is concerned,
>
> $(MAKE) -C ../opcodes gen-i386-tbl
>
> is like other programs.
No, it is not. There may be auxiliary files which get touched as a side
effect. There may also be some other entity (down the road) wanting to
do something similar, which may end up conflicting. Plus you shouldn't
set a bad precedent. My objection remains. I'm actually puzzled that
you've now submitted a v2 of your patch _after_ having made me (by
remaining silent there) _once again_ waste time on submitting a new
version of a series you (apparently) mean to reject in the end. I don't
mind you wanting things done differently, but then please say so. I
did specifically wait a few days to give you time to reply one way or
another.
Jan
@@ -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
+
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)
@@ -2060,6 +2060,12 @@ check-DEJAGNU: site.exp
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
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
@@ -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
@@ -12263,7 +12263,7 @@ _ACEOF
# Do we need the opcodes library?
case ${cpu_type} in
- vax | tic30)
+ i386 | vax | tic30)
;;
*)
@@ -420,7 +420,7 @@ changequote([,])dnl
# Do we need the opcodes library?
case ${cpu_type} in
- vax | tic30)
+ i386 | vax | tic30)
;;
*)
@@ -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)
@@ -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)
@@ -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 ;;
@@ -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 ;;
deleted file mode 100644
@@ -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"
@@ -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;
@@ -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