ACK: [PATCH 1/2] ACPICA: fix IASL building issues with gcc-9 and --as-needed linker option

ivanhu ivan.hu at canonical.com
Wed Mar 6 02:35:14 UTC 2019


On 3/6/19 12:31 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Buglink: https://bugs.launchpad.net/bugs/1816474
>
> The IASL component has been a bit broken for a while, it is by luck
> that objects in it have not been causing linking issues because
> we are not using the --as-needed option.  Fedora 30 on non-x86 targets
> was hitting linker issues with missing objects. Fix this by re-syncing
> just the required sources to build the IASL component.  Also clean
> up the lex/yacc build rules.
>
> Also remove the need for ACPI globals to be included into the
> fwts_iasl_interface now that the linking is being performed correctly.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/acpica/source/compiler/Makefile.am        |  457 +++----
>  src/acpica/source/compiler/aslhelp.c          |  336 +++++
>  src/acpica/source/compiler/aslmapenter.c      |  456 +++++++
>  src/acpica/source/compiler/asloptions.c       | 1127 +++++++++++++++++
>  .../source/compiler/fwts_iasl_interface.c     |    2 -
>  5 files changed, 2163 insertions(+), 215 deletions(-)
>  create mode 100644 src/acpica/source/compiler/aslhelp.c
>  create mode 100644 src/acpica/source/compiler/aslmapenter.c
>  create mode 100644 src/acpica/source/compiler/asloptions.c
>
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index 7753c4a6..b237b47c 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -23,253 +23,284 @@
>  AUTOMAKE_OPTIONS = subdir-objects
>  
>  AM_CPPFLAGS = -Wall -Wstrict-prototypes -fno-strict-aliasing -D_LINUX \
> -		-DACPI_ASL_COMPILER $(CFLAGS) -I$(top_srcdir)/src/acpica/source/include \
> -	-g
> +	      -DACPI_ASL_COMPILER $(CFLAGS) -I$(top_srcdir)/src/acpica/source/include
>  
> -AM_YFLAGS = -v -d -y
> +AM_YFLAGS = -d
>  
>  #
>  # Case in-sensitive scanning
>  #
>  AM_LFLAGS = -i
>  
> -aslcompiler.c: $(srcdir)/aslparser.y
> -	m4 -P -I$(srcdir) $^ > aslcompiler.y
> -	${YACC} ${AM_YFLAGS} -baslcompiler -pAslCompiler aslcompiler.y
> +ASL_PARSER = 				\
> +	$(srcdir)/aslcstyle.y		\
> +	$(srcdir)/aslhelpers.y		\
> +	$(srcdir)/aslparser.y		\
> +	$(srcdir)/aslprimaries.y	\
> +	$(srcdir)/aslresources.y	\
> +	$(srcdir)/aslrules.y		\
> +	$(srcdir)/aslsupport.y		\
> +	$(srcdir)/asltokens.y		\
> +	$(srcdir)/asltypes.y
> +
> +ASL_LEXER =
> +	$(srcdir)/aslcompiler.l		\
> +	$(srcdir)/aslsupport.l		\
> +	$(srcdir)/aslcompiler.y.h
> +
> +$(srcdir)/aslcompiler.y: $(ASL_PARSER)
> +	m4 -P -I$(srcdir) $(srcdir)/aslparser.y > $@
> +
> +$(srcdir)/aslcompilerlex.c: $(ASL_LEXER)
> +	${LEX} ${AM_LFLAGS} -PAslCompiler -o$@ $(srcdir)/aslcompiler.l
> +
> +.NOTPARALLEL: $(srcdir)/aslcompiler.c
> +$(srcdir)/aslcompiler.c $(srcdir)/aslcompiler.y.h: $(srcdir)/aslcompiler.y
> +	${YACC} ${AM_YFLAGS} -d -baslcompiler -pAslCompiler $^
>  	mv aslcompiler.tab.c aslcompiler.c
>  	mv aslcompiler.tab.h aslcompiler.y.h
>  
> -aslcompilerlex.c: $(srcdir)/aslcompiler.l
> -	${LEX} ${AM_LFLAGS} -PAslCompiler -oaslcompilerlex.c $^
> -
> -dtparser.c: $(srcdir)/dtparser.y
> -	${YACC} ${AM_YFLAGS} -bdtparser -pDtParser $^
> +.NOTPARALLEL: $(srcdir)/dtparserlex.c
> +$(srcdir)/dtparserlex.c $(srcdir)/dtparser.c $(srcdir)/dtparser.y.h: $(srcdir)/dtparser.l $(srcdir)/dtparser.y
> +	${LEX} ${AM_LFLAGS} -PDtParser -o$(srcdir)/dtparserlex.c $<
> +	${YACC} ${AM_YFLAGS} -bdtparser -pDtParser $(srcdir)/dtparser.y
>  	mv dtparser.tab.c dtparser.c
>  	mv dtparser.tab.h dtparser.y.h
>  
> -dtparserlex.c: $(srcdir)/dtparser.l
> -	${LEX} ${AM_LFLAGS} -PDtParser -odtparserlex.c $^
> -
> -prparser.c: $(srcdir)/prparser.y
> -	${YACC} ${AM_YFLAGS} -bprparser -pPrParser $^
> +.NOTPARALLEL: $(srcdir)/prparserlex.c
> +$(srcdir)/prparserlex.c $(srcdir)/prparser.c $(srcdir)/prparser.y.h: $(srcdir)/prparser.l $(srcdir)/prparser.y
> +	${LEX} ${AM_LFLAGS} -PPrParser -o$(srcdir)/prparserlex.c $<
> +	${YACC} ${AM_YFLAGS} -bprparser -pPrParser $(srcdir)/prparser.y
>  	mv prparser.tab.c prparser.c
>  	mv prparser.tab.h prparser.y.h
>  
> -prparserlex.c: $(srcdir)/prparser.l
> -	${LEX} ${AM_LFLAGS} -PPrParser -oprparserlex.c $^
> -
>  pkglib_LTLIBRARIES = libfwtsiasl.la
>  
> -BUILT_SOURCES = aslcompiler.c 			\
> -		aslcompilerlex.c		\
> -		dtparser.c			\
> -		dtparserlex.c 			\
> -		prparser.c			\
> -		prparserlex.c
> +BUILT_SOURCES = aslcompiler.y		\
> +		aslcompiler.y.h		\
> +		aslcompilerlex.c	\
> +		aslcompiler.c		\
> +		dtparser.y.h		\
> +		dtparserlex.c 		\
> +		dtparser.c 		\
> +		prparser.y.h		\
> +		prparserlex.c		\
> +		prparser.c
>  
>  #
>  # Just export fwts specific API so we don't clash with core ACPICA library
>  #
>  libfwtsiasl_la_LDFLAGS = -export-symbols-regex "fwts_.*" -lpthread -version-info 1:0:0
>  
> -CLEANFILES = y.output y.tab.c y.tab.h aslcompiler.y.h $(BUILT_SOURCES)
> +CLEANFILES = $(BUILT_SOURCES)
>  
>  libfwtsiasl_la_CPPFLAGS = $(AM_CPPFLAGS)
>  libfwtsiasl_la_SOURCES = 			\
>  	fwts_iasl_interface.c 			\
> -	aslallocate.c				\
> -	aslanalyze.c 				\
> -	aslascii.c				\
> -	aslcache.c				\
> -	aslcompile.c 				\
> -	aslcompilerlex.c 			\
> -	aslcompiler.c 				\
> -	aslcodegen.c 				\
> -	asldebug.c				\
> -	aslerror.c 				\
> -	aslexternal.c				\
> -	aslfiles.c 				\
> -	aslfold.c 				\
> -	asllength.c 				\
> -	asllisting.c 				\
> -	aslload.c 				\
> -	asllookup.c 				\
> -	aslmap.c 				\
> -	aslmapoutput.c				\
> -	aslmaputils.c				\
> -	aslmessages.c				\
> -	aslopcodes.c 				\
> -	asloperands.c 				\
> -	aslopt.c 				\
> -	aslparseop.c				\
> -	aslpld.c				\
> -	aslpredef.c 				\
> -	aslresource.c 				\
> -	aslrestype1.c 				\
> -	aslrestype1i.c 				\
> -	aslrestype2.c 				\
> -	aslrestype2d.c 				\
> -	aslrestype2e.c 				\
> -	aslrestype2q.c 				\
> -	aslrestype2w.c 				\
> -	aslstartup.c 				\
> -	aslstubs.c 				\
> -	asltransform.c 				\
> -	asltree.c 				\
> -	aslutils.c 				\
> -	aslbtypes.c 				\
> -	aslwalks.c 				\
> -	asluuid.c 				\
> -	aslmethod.c 				\
> -	aslhex.c 				\
> -	aslnamesp.c 				\
> -	aslfileio.c 				\
> -	asllistsup.c 				\
> -	asloffset.c 				\
> -	aslxref.c 				\
> -	aslxrefout.c				\
> -	aslprepkg.c 				\
> -	aslprintf.c				\
> -	aslprune.c				\
> -	cvcompiler.c				\
> -	cvdisasm.c				\
> -	cvparser.c				\
> -	dtfield.c 				\
> -	dtio.c 					\
> -	dtsubtable.c 				\
> -	dttemplate.c 				\
> -	dttable.c 				\
> -	dttable1.c				\
> -	dttable2.c				\
> -	dtutils.c 				\
> -	dtexpress.c 				\
> -	dtcompile.c 				\
> -	dtparser.c	 			\
> -	dtparserlex.c 				\
> -	prparser.c 				\
> -	prparserlex.c 				\
> -	prscan.c 				\
> -	aslrestype2s.c 				\
> -	prmacros.c 				\
> -	prutils.c 				\
> -	prexpress.c 				\
> -	../components/utilities/utalloc.c 	\
> -	../components/utilities/utcache.c 	\
> -	../components/utilities/utcopy.c 	\
> -	../components/utilities/utdebug.c 	\
> -	../components/utilities/utdelete.c 	\
> -	../components/utilities/utglobal.c 	\
> -	../components/utilities/uthex.c		\
> -	../components/utilities/utinit.c 	\
> -	../components/utilities/utlock.c 	\
> -	../components/utilities/utobject.c 	\
> -	../components/utilities/utmisc.c 	\
> -	../components/utilities/utmath.c 	\
> -	../components/utilities/utmutex.c 	\
> -	../components/utilities/utresrc.c 	\
> -	../components/utilities/utstate.c 	\
> -	../components/utilities/utxface.c 	\
> -	../components/utilities/utxferror.c 	\
> -	../components/utilities/utdecode.c 	\
> -	../components/utilities/utpredef.c 	\
> -	../components/utilities/utstring.c 	\
> -	../components/utilities/utaddress.c 	\
> -	../components/utilities/utownerid.c 	\
> -	../components/utilities/utexcep.c 	\
> -	../components/utilities/utuuid.c	\
> -	../components/utilities/utxfinit.c	\
> -	../components/namespace/nsaccess.c 	\
> -	../components/namespace/nsalloc.c 	\
> -	../components/namespace/nsdump.c 	\
> -	../components/namespace/nsnames.c 	\
> -	../components/namespace/nsobject.c 	\
> -	../components/namespace/nsparse.c 	\
> -	../components/namespace/nssearch.c 	\
> -	../components/namespace/nsutils.c 	\
> -	../components/namespace/nswalk.c 	\
> -	../components/namespace/nsxfobj.c 	\
> -	../components/parser/psargs.c 		\
> -	../components/parser/psloop.c 		\
> -	../components/parser/psopcode.c 	\
> -	../components/parser/psparse.c 		\
> -	../components/parser/psscope.c 		\
> -	../components/parser/pstree.c 		\
> -	../components/parser/psutils.c 		\
> -	../components/parser/pswalk.c 		\
> -	../components/parser/psobject.c 	\
> -	../components/parser/psopinfo.c 	\
> -	../components/dispatcher/dswscope.c 	\
> -	../components/dispatcher/dswstate.c 	\
> -	../components/dispatcher/dsfield.c 	\
> -	../components/dispatcher/dsobject.c 	\
> -	../components/dispatcher/dsopcode.c 	\
> -	../components/dispatcher/dsutils.c 	\
> -	../components/dispatcher/dswexec.c 	\
> -	../components/dispatcher/dswload.c 	\
> -	../components/dispatcher/dswload2.c 	\
> -	../components/dispatcher/dsargs.c 	\
> -	../components/dispatcher/dscontrol.c 	\
> -	../components/executer/exconcat.c	\
> -	../components/executer/exconvrt.c 	\
> -	../components/executer/excreate.c 	\
> -	../components/executer/exdump.c 	\
> -	../components/executer/exmisc.c 	\
> -	../components/executer/exmutex.c 	\
> -	../components/executer/exnames.c 	\
> -	../components/executer/exoparg1.c 	\
> -	../components/executer/exoparg2.c 	\
> -	../components/executer/exoparg3.c 	\
> -	../components/executer/exoparg6.c 	\
> -	../components/executer/exprep.c 	\
> -	../components/executer/exregion.c 	\
> -	../components/executer/exresnte.c 	\
> -	../components/executer/exresolv.c 	\
> -	../components/executer/exresop.c 	\
> -	../components/executer/exstore.c 	\
> -	../components/executer/exstoren.c 	\
> -	../components/executer/exstorob.c 	\
> -	../components/executer/exsystem.c 	\
> -	../components/executer/exutils.c 	\
> -	../common/adfile.c 			\
> -	../common/adisasm.c 			\
> -	../common/adwalk.c 			\
> -	../common/ahids.c 			\
> -	../common/ahpredef.c 			\
> +	aslcompilerlex.c			\
> +	aslcompiler.c				\
> +	dtparserlex.c				\
> +	dtparser.c				\
> +	prparserlex.c				\
> +	prparser.c				\
> +	../common/adisasm.c			\
> +	../common/acfileio.c			\
> +	../common/adfile.c			\
> +	../common/adwalk.c			\
> +	../common/ahids.c			\
> +	../common/ahpredef.c			\
> +	../common/ahtable.c			\
> +	../common/ahuuids.c			\
> +	../compiler/aslallocate.c		\
> +	../compiler/aslanalyze.c		\
> +	../compiler/aslascii.c			\
> +	../compiler/aslbtypes.c			\
> +	../compiler/aslcache.c			\
> +	../compiler/aslcodegen.c		\
> +	../compiler/aslcompile.c		\
> +	../compiler/asldebug.c			\
> +	../compiler/aslerror.c			\
> +	../compiler/aslexternal.c		\
> +	../compiler/aslfiles.c			\
> +	../compiler/aslfileio.c			\
> +	../compiler/aslfold.c			\
> +	../compiler/aslhelp.c			\
> +	../compiler/aslhex.c			\
> +	../compiler/asllength.c			\
> +	../compiler/asllisting.c		\
> +	../compiler/asllistsup.c		\
> +	../compiler/aslload.c			\
> +	../compiler/asllookup.c			\
> +	../compiler/aslmain.c			\
> +	../compiler/aslmap.c			\
> +	../compiler/aslmapenter.c		\
> +	../compiler/aslmapoutput.c		\
> +	../compiler/aslmaputils.c		\
> +	../compiler/aslmessages.c		\
> +	../compiler/aslmethod.c			\
> +	../compiler/aslnamesp.c			\
> +	../compiler/asloffset.c			\
> +	../compiler/aslopcodes.c		\
> +	../compiler/asloperands.c		\
> +	../compiler/aslopt.c			\
> +	../compiler/asloptions.c		\
> +	../compiler/aslparseop.c		\
> +	../compiler/aslpredef.c			\
> +	../compiler/aslprepkg.c			\
> +	../compiler/aslprintf.c			\
> +	../compiler/aslprune.c			\
> +	../compiler/aslresource.c		\
> +	../compiler/aslrestype1.c		\
> +	../compiler/aslrestype1i.c		\
> +	../compiler/aslrestype2.c		\
> +	../compiler/aslrestype2d.c		\
> +	../compiler/aslrestype2e.c		\
> +	../compiler/aslrestype2q.c		\
> +	../compiler/aslrestype2s.c		\
> +	../compiler/aslrestype2w.c		\
> +	../compiler/aslstartup.c		\
> +	../compiler/aslstubs.c			\
> +	../compiler/aslpld.c			\
> +	../compiler/asltransform.c		\
> +	../compiler/asltree.c			\
> +	../compiler/aslutils.c			\
> +	../compiler/asluuid.c			\
> +	../compiler/aslwalks.c			\
> +	../compiler/aslxref.c			\
> +	../compiler/aslxrefout.c		\
> +	../compiler/cvcompiler.c		\
> +	../compiler/cvdisasm.c			\
> +	../compiler/cvparser.c			\
>  	../common/cmfsize.c			\
> -	../common/dmextern.c 			\
> -	../common/dmrestag.c 			\
> +	../components/debugger/dbfileio.c	\
> +	../components/disassembler/dmbuffer.c	\
> +	../components/disassembler/dmcstyle.c	\
> +	../components/disassembler/dmdeferred.c	\
> +	../common/dmextern.c			\
> +	../components/disassembler/dmnames.c	\
> +	../components/disassembler/dmopcode.c	\
> +	../components/disassembler/dmresrc.c	\
> +	../components/disassembler/dmresrcl.c	\
> +	../components/disassembler/dmresrcl2.c	\
> +	../components/disassembler/dmresrcs.c	\
> +	../common/dmrestag.c			\
>  	../common/dmswitch.c			\
> -	../common/dmtable.c 			\
> +	../common/dmtable.c			\
>  	../common/dmtables.c			\
> -	../common/dmtbinfo.c 			\
> -	../common/dmtbinfo1.c			\
> -	../common/dmtbinfo2.c			\
> -	../common/dmtbinfo3.c			\
> -	../common/dmtbdump.c 			\
> +	../common/dmtbdump.c			\
>  	../common/dmtbdump1.c			\
>  	../common/dmtbdump2.c			\
>  	../common/dmtbdump3.c			\
> +	../common/dmtbinfo.c			\
> +	../common/dmtbinfo1.c			\
> +	../common/dmtbinfo2.c			\
> +	../common/dmtbinfo3.c			\
> +	../components/disassembler/dmutils.c	\
> +	../components/disassembler/dmwalk.c	\
> +	../components/dispatcher/dsargs.c	\
> +	../components/dispatcher/dscontrol.c	\
> +	../components/dispatcher/dsfield.c	\
> +	../components/dispatcher/dsobject.c	\
> +	../components/dispatcher/dsopcode.c	\
> +	../components/dispatcher/dspkginit.c	\
> +	../components/dispatcher/dsutils.c	\
> +	../components/dispatcher/dswexec.c	\
> +	../components/dispatcher/dswload.c	\
> +	../components/dispatcher/dswload2.c	\
> +	../components/dispatcher/dswscope.c	\
> +	../components/dispatcher/dswstate.c	\
> +	../compiler/dtcompile.c			\
> +	../compiler/dtexpress.c			\
> +	../compiler/dtfield.c			\
> +	../compiler/dtio.c			\
> +	../compiler/dtsubtable.c		\
> +	../compiler/dttable.c			\
> +	../compiler/dttable1.c			\
> +	../compiler/dttable2.c			\
> +	../compiler/dttemplate.c		\
> +	../compiler/dtutils.c			\
> +	../components/executer/exconcat.c	\
> +	../components/executer/exconvrt.c	\
> +	../components/executer/excreate.c	\
> +	../components/executer/exdump.c		\
> +	../components/executer/exmisc.c		\
> +	../components/executer/exmutex.c	\
> +	../components/executer/exnames.c	\
> +	../components/executer/exoparg1.c	\
> +	../components/executer/exoparg2.c	\
> +	../components/executer/exoparg3.c	\
> +	../components/executer/exoparg6.c	\
> +	../components/executer/exprep.c		\
> +	../components/executer/exregion.c	\
> +	../components/executer/exresnte.c	\
> +	../components/executer/exresolv.c	\
> +	../components/executer/exresop.c	\
> +	../components/executer/exstore.c	\
> +	../components/executer/exstoren.c	\
> +	../components/executer/exstorob.c	\
> +	../components/executer/exsystem.c	\
> +	../components/executer/exutils.c	\
>  	../common/getopt.c			\
> -	../components/debugger/dbfileio.c 	\
> -	../components/disassembler/dmbuffer.c 	\
> -	../components/disassembler/dmcstyle.c	\
> -	../components/disassembler/dmnames.c 	\
> -	../components/disassembler/dmopcode.c 	\
> -	../components/disassembler/dmresrc.c 	\
> -	../components/disassembler/dmresrcl.c 	\
> -	../components/disassembler/dmresrcs.c 	\
> -	../components/disassembler/dmutils.c 	\
> -	../components/disassembler/dmwalk.c 	\
> -	../components/disassembler/dmdeferred.c \
> -	../components/disassembler/dmresrcl2.c 	\
> +	../components/namespace/nsaccess.c	\
> +	../components/namespace/nsalloc.c	\
> +	../components/namespace/nsdump.c	\
> +	../components/namespace/nsnames.c	\
> +	../components/namespace/nsobject.c	\
> +	../components/namespace/nsparse.c	\
> +	../components/namespace/nssearch.c	\
> +	../components/namespace/nsutils.c	\
> +	../components/namespace/nswalk.c	\
> +	../components/namespace/nsxfobj.c	\
> +	../os_specific/service_layers/osunixxf.c\
> +	../compiler/prexpress.c			\
> +	../compiler/prmacros.c			\
> +	../compiler/prscan.c			\
> +	../compiler/prutils.c			\
> +	../components/parser/psargs.c		\
> +	../components/parser/psloop.c		\
> +	../components/parser/psobject.c		\
> +	../components/parser/psopcode.c		\
> +	../components/parser/psopinfo.c		\
> +	../components/parser/psparse.c		\
> +	../components/parser/psscope.c		\
> +	../components/parser/pstree.c		\
> +	../components/parser/psutils.c		\
> +	../components/parser/pswalk.c		\
>  	../components/tables/tbdata.c		\
> -	../components/tables/tbfadt.c 		\
> -	../components/tables/tbinstal.c 	\
> -	../components/tables/tbutils.c 		\
> -	../components/tables/tbxface.c 		\
> -	../components/tables/tbxfroot.c		\
> -	../components/tables/tbxfload.c		\
> +	../components/tables/tbfadt.c		\
> +	../components/tables/tbinstal.c		\
>  	../components/tables/tbprint.c		\
> -	../tools/acpiexec/aeinitfile.c		\
> -	../os_specific/service_layers/osunixxf.c
> -
> +	../components/tables/tbutils.c		\
> +	../components/tables/tbxface.c		\
> +	../components/tables/tbxfload.c		\
> +	../components/utilities/utaddress.c	\
> +	../components/utilities/utalloc.c	\
> +	../components/utilities/utascii.c	\
> +	../components/utilities/utbuffer.c	\
> +	../components/utilities/utcache.c	\
> +	../components/utilities/utcopy.c	\
> +	../components/utilities/utdebug.c	\
> +	../components/utilities/utdecode.c	\
> +	../components/utilities/utdelete.c	\
> +	../components/utilities/uterror.c	\
> +	../components/utilities/utexcep.c	\
> +	../components/utilities/utglobal.c	\
> +	../components/utilities/uthex.c		\
> +	../components/utilities/utinit.c	\
> +	../components/utilities/utlock.c	\
> +	../components/utilities/utmath.c	\
> +	../components/utilities/utmisc.c	\
> +	../components/utilities/utmutex.c	\
> +	../components/utilities/utnonansi.c	\
> +	../components/utilities/utobject.c	\
> +	../components/utilities/utownerid.c	\
> +	../components/utilities/utpredef.c	\
> +	../components/utilities/utresdecode.c	\
> +	../components/utilities/utresrc.c	\
> +	../components/utilities/utstate.c	\
> +	../components/utilities/utstrtoul64.c	\
> +	../components/utilities/utstrsuppt.c	\
> +	../components/utilities/utstring.c	\
> +	../components/utilities/utuuid.c	\
> +	../components/utilities/utxface.c	\
> +	../components/utilities/utxferror.c
> diff --git a/src/acpica/source/compiler/aslhelp.c b/src/acpica/source/compiler/aslhelp.c
> new file mode 100644
> index 00000000..f51b07f8
> --- /dev/null
> +++ b/src/acpica/source/compiler/aslhelp.c
> @@ -0,0 +1,336 @@
> +/******************************************************************************
> + *
> + * Module Name: aslhelp - iASL help screens
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions, and the following disclaimer,
> + *    without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + *    substantially similar to the "NO WARRANTY" disclaimer below
> + *    ("Disclaimer") and any redistribution must be conditioned upon
> + *    including a substantially similar Disclaimer requirement for further
> + *    binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + *    of any contributors may be used to endorse or promote products derived
> + *    from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +#include "acapps.h"
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("aslhelp")
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    Usage
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Display option help message.
> + *              Optional items in square brackets.
> + *
> + ******************************************************************************/
> +
> +void
> +Usage (
> +    void)
> +{
> +    printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
> +    printf ("%s\n\n", ASL_COMPLIANCE);
> +    ACPI_USAGE_HEADER ("iasl [Options] [Files]");
> +
> +    printf ("\nGeneral:\n");
> +    ACPI_OPTION ("-@  <file>",      "Specify command file");
> +    ACPI_OPTION ("-I  <dir>",       "Specify additional include directory");
> +    ACPI_OPTION ("-p  <prefix>",    "Specify path/filename prefix for all output files");
> +    ACPI_OPTION ("-v",              "Display compiler version");
> +    ACPI_OPTION ("-vd",             "Display compiler build date and time");
> +    ACPI_OPTION ("-vo",             "Enable optimization comments");
> +    ACPI_OPTION ("-vs",             "Disable signon");
> +
> +    printf ("\nHelp:\n");
> +    ACPI_OPTION ("-h",              "This message");
> +    ACPI_OPTION ("-hc",             "Display operators allowed in constant expressions");
> +    ACPI_OPTION ("-hd",             "Info for obtaining and disassembling binary ACPI tables");
> +    ACPI_OPTION ("-hf",             "Display help for output filename generation");
> +    ACPI_OPTION ("-hr",             "Display ACPI reserved method names");
> +    ACPI_OPTION ("-ht",             "Display currently supported ACPI table names");
> +
> +    printf ("\nPreprocessor:\n");
> +    ACPI_OPTION ("-D <symbol>",     "Define symbol for preprocessor use");
> +    ACPI_OPTION ("-li",             "Create preprocessed output file (*.i)");
> +    ACPI_OPTION ("-P",              "Preprocess only and create preprocessor output file (*.i)");
> +    ACPI_OPTION ("-Pn",             "Disable preprocessor");
> +
> +    printf ("\nErrors, Warnings, and Remarks:\n");
> +    ACPI_OPTION ("-va",             "Disable all errors/warnings/remarks");
> +    ACPI_OPTION ("-ve",             "Report only errors (ignore warnings and remarks)");
> +    ACPI_OPTION ("-vi",             "Less verbose errors and warnings for use with IDEs");
> +    ACPI_OPTION ("-vr",             "Disable remarks");
> +    ACPI_OPTION ("-vw <messageid>", "Ignore specific error, warning or remark");
> +    ACPI_OPTION ("-vx <messageid>", "Expect a specific warning, remark, or error");
> +    ACPI_OPTION ("-w <1|2|3>",      "Set warning reporting level");
> +    ACPI_OPTION ("-we",             "Report warnings as errors");
> +    ACPI_OPTION ("-ww <messageid>", "Report specific warning or remark as error");
> +
> +    printf ("\nAML Bytecode Generation (*.aml):\n");
> +    ACPI_OPTION ("-oa",             "Disable all optimizations (compatibility mode)");
> +    ACPI_OPTION ("-of",             "Disable constant folding");
> +    ACPI_OPTION ("-oi",             "Disable integer optimization to Zero/One/Ones");
> +    ACPI_OPTION ("-on",             "Disable named reference string optimization");
> +    ACPI_OPTION ("-ot",             "Disable typechecking");
> +    ACPI_OPTION ("-cr",             "Disable Resource Descriptor error checking");
> +    ACPI_OPTION ("-in",             "Ignore NoOp operators");
> +    ACPI_OPTION ("-r <revision>",   "Override table header Revision (1-255)");
> +
> +    printf ("\nListings:\n");
> +    ACPI_OPTION ("-l",              "Create mixed listing file (ASL source and AML) (*.lst)");
> +    ACPI_OPTION ("-lm",             "Create hardware summary map file (*.map)");
> +    ACPI_OPTION ("-ln",             "Create namespace file (*.nsp)");
> +    ACPI_OPTION ("-ls",             "Create combined source file (expanded includes) (*.src)");
> +    ACPI_OPTION ("-lx",             "Create cross-reference file (*.xrf)");
> +
> +    printf ("\nFirmware Support - C Text Output:\n");
> +    ACPI_OPTION ("-tc",             "Create hex AML table in C (*.hex)");
> +    ACPI_OPTION ("-sc",             "Create named hex AML arrays in C (*.c)");
> +    ACPI_OPTION ("-ic",             "Create include file in C for -sc symbols (*.h)");
> +    ACPI_OPTION ("-so",             "Create namespace AML offset table in C (*.offset.h)");
> +
> +    printf ("\nFirmware Support - Assembler Text Output:\n");
> +    ACPI_OPTION ("-ta",             "Create hex AML table in assembler (*.hex)");
> +    ACPI_OPTION ("-sa",             "Create named hex AML arrays in assembler (*.asm)");
> +    ACPI_OPTION ("-ia",             "Create include file in assembler for -sa symbols (*.inc)");
> +
> +    printf ("\nFirmware Support - ASL Text Output:\n");
> +    ACPI_OPTION ("-ts",             "Create hex AML table in ASL (Buffer object) (*.hex)");
> +
> +    printf ("\nLegacy-ASL to ASL+ Converter:\n");
> +    ACPI_OPTION ("-ca <file>",      "Convert legacy-ASL source file to new ASL+ file");
> +    ACPI_OPTION ("",                "  (Original comments are passed through to ASL+ file)");
> +
> +    printf ("\nData Table Compiler:\n");
> +    ACPI_OPTION ("-G",              "Compile custom table that contains generic operators");
> +    ACPI_OPTION ("-T <sig list>|ALL",   "Create ACPI table template/example files");
> +    ACPI_OPTION ("-T <count>",      "Emit DSDT and <count> SSDTs to same file");
> +    ACPI_OPTION ("-vt",             "Create verbose template files (full disassembly)");
> +
> +    printf ("\nAML Disassembler:\n");
> +    ACPI_OPTION ("-d  <f1 f2 ...>", "Disassemble or decode binary ACPI tables to file (*.dsl)");
> +    ACPI_OPTION ("",                "  (Optional, file type is automatically detected)");
> +    ACPI_OPTION ("-da <f1 f2 ...>", "Disassemble multiple tables from single namespace");
> +    ACPI_OPTION ("-db",             "Do not translate Buffers to Resource Templates");
> +    ACPI_OPTION ("-dc <f1 f2 ...>", "Disassemble AML and immediately compile it");
> +    ACPI_OPTION ("",                "  (Obtain DSDT from current system if no input file)");
> +    ACPI_OPTION ("-df",             "Force disassembler to assume table contains valid AML");
> +    ACPI_OPTION ("-dl",             "Emit legacy ASL code only (no C-style operators)");
> +    ACPI_OPTION ("-e  <f1 f2 ...>", "Include ACPI table(s) for external symbol resolution");
> +    ACPI_OPTION ("-fe <file>",      "Specify external symbol declaration file");
> +    ACPI_OPTION ("-in",             "Ignore NoOp opcodes");
> +    ACPI_OPTION ("-l",              "Disassemble to mixed ASL and AML code");
> +    ACPI_OPTION ("-vt",             "Dump binary table data in hex format within output file");
> +
> +    printf ("\nDebug Options:\n");
> +    ACPI_OPTION ("-bc",             "Create converter debug file (*.cdb)");
> +    ACPI_OPTION ("-bf",             "Create debug file (full output) (*.txt)");
> +    ACPI_OPTION ("-bs",             "Create debug file (parse tree only) (*.txt)");
> +    ACPI_OPTION ("-bp <depth>",     "Prune ASL parse tree");
> +    ACPI_OPTION ("-bt <type>",      "Object type to be pruned from the parse tree");
> +    ACPI_OPTION ("-f",              "Ignore errors, force creation of AML output file(s)");
> +    ACPI_OPTION ("-m <size>",       "Set internal line buffer size (in Kbytes)");
> +    ACPI_OPTION ("-n",              "Parse only, no output generation");
> +    ACPI_OPTION ("-oc",             "Display compile times and statistics");
> +    ACPI_OPTION ("-x <level>",      "Set debug level for trace output");
> +    ACPI_OPTION ("-z",              "Do not insert new compiler ID for DataTables");
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    FilenameHelp
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Display help message for output filename generation
> + *
> + ******************************************************************************/
> +
> +void
> +AslFilenameHelp (
> +    void)
> +{
> +
> +    printf ("\nAML output filename generation:\n");
> +    printf ("  Output filenames are generated by appending an extension to a common\n");
> +    printf ("  filename prefix. The filename prefix is obtained via one of the\n");
> +    printf ("  following methods (in priority order):\n");
> +    printf ("    1) The -p option specifies the prefix\n");
> +    printf ("    2) The prefix of the AMLFileName in the ASL Definition Block\n");
> +    printf ("    3) The prefix of the input filename\n");
> +    printf ("\n");
> +}
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslDisassemblyHelp
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Display help message for obtaining and disassembling AML/ASL
> + *              files.
> + *
> + ******************************************************************************/
> +
> +void
> +AslDisassemblyHelp (
> +    void)
> +{
> +
> +    printf ("\nObtaining binary ACPI tables and disassembling to ASL source code.\n\n");
> +    printf ("Use the following ACPICA toolchain:\n");
> +    printf ("  AcpiDump: Dump all ACPI tables to a hex ascii file\n");
> +    printf ("  AcpiXtract: Extract one or more binary ACPI tables from AcpiDump output\n");
> +    printf ("  iASL -d <file>: Disassemble a binary ACPI table to ASL source code\n");
> +    printf ("\n");
> +}
> diff --git a/src/acpica/source/compiler/aslmapenter.c b/src/acpica/source/compiler/aslmapenter.c
> new file mode 100644
> index 00000000..995ddc99
> --- /dev/null
> +++ b/src/acpica/source/compiler/aslmapenter.c
> @@ -0,0 +1,456 @@
> +/******************************************************************************
> + *
> + * Module Name: aslmapenter - Build resource descriptor/device maps
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions, and the following disclaimer,
> + *    without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + *    substantially similar to the "NO WARRANTY" disclaimer below
> + *    ("Disclaimer") and any redistribution must be conditioned upon
> + *    including a substantially similar Disclaimer requirement for further
> + *    binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + *    of any contributors may be used to endorse or promote products derived
> + *    from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +#include "acapps.h"
> +#include "aslcompiler.h"
> +
> +/* This module used for application-level code only */
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("aslmapenter")
> +
> +/* Local prototypes */
> +
> +static ACPI_GPIO_INFO *
> +MpCreateGpioInfo (
> +    UINT16                  PinNumber,
> +    char                    *DeviceName);
> +
> +static ACPI_SERIAL_INFO *
> +MpCreateSerialInfo (
> +    char                    *DeviceName,
> +    UINT16                  Address);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    MpSaveGpioInfo
> + *
> + * PARAMETERS:  Resource                - GPIO resource descriptor
> + *              PinCount                - From GPIO descriptor
> + *              PinList                 - From GPIO descriptor
> + *              DeviceName              - The "ResourceSource" name
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: External Interface.
> + *              Save GPIO resource descriptor information.
> + *              Creates new GPIO info blocks, one for each pin defined by the
> + *              GPIO descriptor.
> + *
> + ******************************************************************************/
> +
> +void
> +MpSaveGpioInfo (
> +    ACPI_PARSE_OBJECT       *Op,
> +    AML_RESOURCE            *Resource,
> +    UINT32                  PinCount,
> +    UINT16                  *PinList,
> +    char                    *DeviceName)
> +{
> +    ACPI_GPIO_INFO          *Info;
> +    UINT32                  i;
> +
> +
> +    /* Mapfile option enabled? */
> +
> +    if (!AslGbl_MapfileFlag)
> +    {
> +        return;
> +    }
> +
> +    /* Create an info block for each pin defined in the descriptor */
> +
> +    for (i = 0; i < PinCount; i++)
> +    {
> +        Info = MpCreateGpioInfo (PinList[i], DeviceName);
> +
> +        Info->Op = Op;
> +        Info->DeviceName = DeviceName;
> +        Info->PinCount = PinCount;
> +        Info->PinIndex = i;
> +        Info->PinNumber = PinList[i];
> +        Info->Type = Resource->Gpio.ConnectionType;
> +        Info->Direction = (UINT8) (Resource->Gpio.IntFlags & 0x0003);       /* _IOR, for IO descriptor */
> +        Info->Polarity = (UINT8) ((Resource->Gpio.IntFlags >> 1) & 0x0003); /* _POL, for INT descriptor */
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    MpSaveSerialInfo
> + *
> + * PARAMETERS:  Resource                - A Serial resource descriptor
> + *              DeviceName              - The "ResourceSource" name.
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: External Interface.
> + *              Save serial resource descriptor information.
> + *              Creates a new serial info block.
> + *
> + ******************************************************************************/
> +
> +void
> +MpSaveSerialInfo (
> +    ACPI_PARSE_OBJECT       *Op,
> +    AML_RESOURCE            *Resource,
> +    char                    *DeviceName)
> +{
> +    ACPI_SERIAL_INFO        *Info;
> +    UINT16                  Address;
> +    UINT32                  Speed;
> +
> +
> +    /* Mapfile option enabled? */
> +
> +    if (!AslGbl_MapfileFlag)
> +    {
> +        return;
> +    }
> +
> +    if (Resource->DescriptorType != ACPI_RESOURCE_NAME_SERIAL_BUS)
> +    {
> +        return;
> +    }
> +
> +    /* Extract address and speed from the resource descriptor */
> +
> +    switch (Resource->CommonSerialBus.Type)
> +    {
> +    case AML_RESOURCE_I2C_SERIALBUSTYPE:
> +
> +        Address = Resource->I2cSerialBus.SlaveAddress;
> +        Speed = Resource->I2cSerialBus.ConnectionSpeed;
> +        break;
> +
> +    case AML_RESOURCE_SPI_SERIALBUSTYPE:
> +
> +        Address = Resource->SpiSerialBus.DeviceSelection;
> +        Speed = Resource->SpiSerialBus.ConnectionSpeed;
> +        break;
> +
> +    case AML_RESOURCE_UART_SERIALBUSTYPE:
> +
> +        Address = 0;
> +        Speed = Resource->UartSerialBus.DefaultBaudRate;
> +        break;
> +
> +    default:    /* Invalid bus subtype */
> +        return;
> +    }
> +
> +    Info = MpCreateSerialInfo (DeviceName, Address);
> +
> +    Info->Op = Op;
> +    Info->DeviceName = DeviceName;
> +    Info->Resource = Resource;
> +    Info->Address = Address;
> +    Info->Speed = Speed;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    MpCreateGpioInfo
> + *
> + * PARAMETERS:  PinNumber               - GPIO pin number
> + *              DeviceName              - The "ResourceSource" name
> + *
> + * RETURN:      New GPIO info block.
> + *
> + * DESCRIPTION: Create a new GPIO info block and place it on the global list.
> + *              The list is sorted by GPIO device names first, and pin numbers
> + *              secondarily.
> + *
> + ******************************************************************************/
> +
> +static ACPI_GPIO_INFO *
> +MpCreateGpioInfo (
> +    UINT16                  PinNumber,
> +    char                    *DeviceName)
> +{
> +    ACPI_GPIO_INFO          *Info;
> +    ACPI_GPIO_INFO          *NextGpio;
> +    ACPI_GPIO_INFO          *PrevGpio;
> +    char                    *Buffer;
> +
> +
> +    /*
> +     * Allocate a new info block and insert it into the global GPIO list
> +     * sorted by both source device name and then the pin number. There is
> +     * one block per pin.
> +     */
> +    Buffer = UtLocalCacheCalloc (sizeof (ACPI_GPIO_INFO));
> +    Info = ACPI_CAST_PTR (ACPI_GPIO_INFO, Buffer);
> +
> +    NextGpio = AslGbl_GpioList;
> +    PrevGpio = NULL;
> +    if (!AslGbl_GpioList)
> +    {
> +        AslGbl_GpioList = Info;
> +        Info->Next = NULL;
> +        return (Info);
> +    }
> +
> +    /* Sort on source DeviceName first */
> +
> +    while (NextGpio &&
> +        (strcmp (DeviceName, NextGpio->DeviceName) > 0))
> +    {
> +        PrevGpio = NextGpio;
> +        NextGpio = NextGpio->Next;
> +    }
> +
> +    /* Now sort on the PinNumber */
> +
> +    while (NextGpio &&
> +        (NextGpio->PinNumber < PinNumber) &&
> +        !strcmp (DeviceName, NextGpio->DeviceName))
> +    {
> +        PrevGpio = NextGpio;
> +        NextGpio = NextGpio->Next;
> +    }
> +
> +    /* Finish the list insertion */
> +
> +    if (PrevGpio)
> +    {
> +        PrevGpio->Next = Info;
> +    }
> +    else
> +    {
> +        AslGbl_GpioList = Info;
> +    }
> +
> +    Info->Next = NextGpio;
> +    return (Info);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    MpCreateSerialInfo
> + *
> + * PARAMETERS:  DeviceName              - The "ResourceSource" name.
> + *              Address                 - Physical address for the device
> + *
> + * RETURN:      New Serial info block.
> + *
> + * DESCRIPTION: Create a new Serial info block and place it on the global list.
> + *              The list is sorted by Serial device names first, and addresses
> + *              secondarily.
> + *
> + ******************************************************************************/
> +
> +static ACPI_SERIAL_INFO *
> +MpCreateSerialInfo (
> +    char                    *DeviceName,
> +    UINT16                  Address)
> +{
> +    ACPI_SERIAL_INFO        *Info;
> +    ACPI_SERIAL_INFO        *NextSerial;
> +    ACPI_SERIAL_INFO        *PrevSerial;
> +    char                    *Buffer;
> +
> +
> +    /*
> +     * Allocate a new info block and insert it into the global Serial list
> +     * sorted by both source device name and then the address.
> +     */
> +    Buffer = UtLocalCacheCalloc (sizeof (ACPI_SERIAL_INFO));
> +    Info = ACPI_CAST_PTR (ACPI_SERIAL_INFO, Buffer);
> +
> +    NextSerial = AslGbl_SerialList;
> +    PrevSerial = NULL;
> +    if (!AslGbl_SerialList)
> +    {
> +        AslGbl_SerialList = Info;
> +        Info->Next = NULL;
> +        return (Info);
> +    }
> +
> +    /* Sort on source DeviceName */
> +
> +    while (NextSerial &&
> +        (strcmp (DeviceName, NextSerial->DeviceName) > 0))
> +    {
> +        PrevSerial = NextSerial;
> +        NextSerial = NextSerial->Next;
> +    }
> +
> +    /* Now sort on the Address */
> +
> +    while (NextSerial &&
> +        (NextSerial->Address < Address) &&
> +        !strcmp (DeviceName, NextSerial->DeviceName))
> +    {
> +        PrevSerial = NextSerial;
> +        NextSerial = NextSerial->Next;
> +    }
> +
> +    /* Finish the list insertion */
> +
> +    if (PrevSerial)
> +    {
> +        PrevSerial->Next = Info;
> +    }
> +    else
> +    {
> +        AslGbl_SerialList = Info;
> +    }
> +
> +    Info->Next = NextSerial;
> +    return (Info);
> +}
> diff --git a/src/acpica/source/compiler/asloptions.c b/src/acpica/source/compiler/asloptions.c
> new file mode 100644
> index 00000000..dc0b9079
> --- /dev/null
> +++ b/src/acpica/source/compiler/asloptions.c
> @@ -0,0 +1,1127 @@
> +/******************************************************************************
> + *
> + * Module Name: asloptions - compiler command line processing
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions, and the following disclaimer,
> + *    without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + *    substantially similar to the "NO WARRANTY" disclaimer below
> + *    ("Disclaimer") and any redistribution must be conditioned upon
> + *    including a substantially similar Disclaimer requirement for further
> + *    binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + *    of any contributors may be used to endorse or promote products derived
> + *    from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +#include "acapps.h"
> +#include "acdisasm.h"
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("asloption")
> +
> +
> +/* Local prototypes */
> +
> +static int
> +AslDoOptions (
> +    int                     argc,
> +    char                    **argv,
> +    BOOLEAN                 IsResponseFile);
> +
> +static void
> +AslMergeOptionTokens (
> +    char                    *InBuffer,
> +    char                    *OutBuffer);
> +
> +static int
> +AslDoResponseFile (
> +    char                    *Filename);
> +
> +
> +#define ASL_TOKEN_SEPARATORS    " \t\n"
> +#define ASL_SUPPORTED_OPTIONS   "@:a:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^q^r:s|t|T+G^v^w|x:z"
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslCommandLine
> + *
> + * PARAMETERS:  argc/argv
> + *
> + * RETURN:      Last argv index
> + *
> + * DESCRIPTION: Command line processing
> + *
> + ******************************************************************************/
> +
> +int
> +AslCommandLine (
> +    int                     argc,
> +    char                    **argv)
> +{
> +    int                     BadCommandLine = 0;
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Minimum command line contains at least the command and an input file */
> +
> +    if (argc < 2)
> +    {
> +        Usage ();
> +        exit (1);
> +    }
> +
> +    /* Process all command line options */
> +
> +    BadCommandLine = AslDoOptions (argc, argv, FALSE);
> +
> +    if (AslGbl_DoTemplates)
> +    {
> +        Status = DtCreateTemplates (argv);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            exit (-1);
> +        }
> +        exit (1);
> +    }
> +
> +    /* Next parameter must be the input filename */
> +
> +    if (!argv[AcpiGbl_Optind] &&
> +        !AcpiGbl_DisasmFlag)
> +    {
> +        printf ("Missing input filename\n");
> +        BadCommandLine = TRUE;
> +    }
> +
> +    if (AslGbl_DoSignon)
> +    {
> +        printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
> +        if (AslGbl_IgnoreErrors)
> +        {
> +            printf ("Ignoring all errors, forcing AML file generation\n\n");
> +        }
> +    }
> +
> +    if (BadCommandLine)
> +    {
> +        printf ("Use -h option for help information\n");
> +        exit (1);
> +    }
> +
> +    return (AcpiGbl_Optind);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslDoOptions
> + *
> + * PARAMETERS:  argc/argv           - Standard argc/argv
> + *              IsResponseFile      - TRUE if executing a response file.
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Command line option processing
> + *
> + ******************************************************************************/
> +
> +static int
> +AslDoOptions (
> +    int                     argc,
> +    char                    **argv,
> +    BOOLEAN                 IsResponseFile)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  j;
> +
> +
> +    /* Get the command line options */
> +
> +    while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
> +    {
> +    case '@':   /* Begin a response file */
> +
> +        if (IsResponseFile)
> +        {
> +            printf ("Nested command files are not supported\n");
> +            return (-1);
> +        }
> +
> +        if (AslDoResponseFile (AcpiGbl_Optarg))
> +        {
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'a':   /* Debug options */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case 'r':
> +
> +            AslGbl_EnableReferenceTypechecking = TRUE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -a%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +
> +        break;
> +
> +
> +    case 'b':   /* Debug options */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +
> +        case 'c':
> +
> +            printf ("Debug ASL to ASL+ conversion\n");
> +
> +            AslGbl_DoAslConversion = TRUE;
> +            AslGbl_FoldConstants = FALSE;
> +            AslGbl_IntegerOptimizationFlag = FALSE;
> +            AslGbl_ReferenceOptimizationFlag = FALSE;
> +            AslGbl_OptimizeTrivialParseNodes = FALSE;
> +            AcpiGbl_CaptureComments = TRUE;
> +            AcpiGbl_DoDisassemblerOptimizations = FALSE;
> +            AcpiGbl_DebugAslConversion = TRUE;
> +            AcpiGbl_DmEmitExternalOpcodes = TRUE;
> +            AslGbl_DoExternalsInPlace = TRUE;
> +
> +            return (0);
> +
> +        case 'f':
> +
> +            AslCompilerdebug = 1; /* same as yydebug */
> +            DtParserdebug = 1;
> +            PrParserdebug = 1;
> +            AslGbl_DebugFlag = TRUE;
> +            AslGbl_KeepPreprocessorTempFile = TRUE;
> +            break;
> +
> +        case 'p':   /* Prune ASL parse tree */
> +
> +            /* Get the required argument */
> +
> +            if (AcpiGetoptArgument (argc, argv))
> +            {
> +                return (-1);
> +            }
> +
> +            AslGbl_PruneParseTree = TRUE;
> +            AslGbl_PruneDepth = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
> +            break;
> +
> +        case 's':
> +
> +            AslGbl_DebugFlag = TRUE;
> +            break;
> +
> +        case 't':
> +
> +            /* Get the required argument */
> +
> +            if (AcpiGetoptArgument (argc, argv))
> +            {
> +                return (-1);
> +            }
> +
> +            AslGbl_PruneType = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -b%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +
> +        break;
> +
> +    case 'c':
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +
> +        case 'a':
> +
> +            printf ("Convert ASL to ASL+ with comments\n");
> +            AslGbl_DoAslConversion = TRUE;
> +            AslGbl_FoldConstants = FALSE;
> +            AslGbl_IntegerOptimizationFlag = FALSE;
> +            AslGbl_ReferenceOptimizationFlag = FALSE;
> +            AslGbl_OptimizeTrivialParseNodes = FALSE;
> +            AcpiGbl_CaptureComments = TRUE;
> +            AcpiGbl_DoDisassemblerOptimizations = FALSE;
> +            AcpiGbl_DmEmitExternalOpcodes = TRUE;
> +            AslGbl_DoExternalsInPlace = TRUE;
> +
> +            return (0);
> +
> +        case 'r':
> +
> +            AslGbl_NoResourceChecking = TRUE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'd':   /* Disassembler */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '^':
> +
> +            AslGbl_DoCompile = FALSE;
> +            break;
> +
> +        case 'a':
> +
> +            AslGbl_DoCompile = FALSE;
> +            AslGbl_DisassembleAll = TRUE;
> +            break;
> +
> +        case 'b':   /* Do not convert buffers to resource descriptors */
> +
> +            AcpiGbl_NoResourceDisassembly = TRUE;
> +            break;
> +
> +        case 'c':
> +
> +            break;
> +
> +        case 'f':
> +
> +            AcpiGbl_ForceAmlDisassembly = TRUE;
> +            break;
> +
> +        case 'l':   /* Use legacy ASL code (not ASL+) for disassembly */
> +
> +            AslGbl_DoCompile = FALSE;
> +            AcpiGbl_CstyleDisassembly = FALSE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +
> +        AcpiGbl_DisasmFlag = TRUE;
> +        break;
> +
> +    case 'D':   /* Define a symbol */
> +
> +        PrAddDefine (AcpiGbl_Optarg, NULL, TRUE);
> +        break;
> +
> +    case 'e':   /* External files for disassembler */
> +
> +        /* Get entire list of external files */
> +
> +        AcpiGbl_Optind--;
> +        argv[AcpiGbl_Optind] = AcpiGbl_Optarg;
> +
> +        while (argv[AcpiGbl_Optind] &&
> +              (argv[AcpiGbl_Optind][0] != '-'))
> +        {
> +            Status = AcpiDmAddToExternalFileList (argv[AcpiGbl_Optind]);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                printf ("Could not add %s to external list\n",
> +                    argv[AcpiGbl_Optind]);
> +                return (-1);
> +            }
> +
> +            AcpiGbl_Optind++;
> +        }
> +        break;
> +
> +    case 'f':
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '^':   /* Ignore errors and force creation of aml file */
> +
> +            AslGbl_IgnoreErrors = TRUE;
> +            break;
> +
> +        case 'e':   /* Disassembler: Get external declaration file */
> +
> +            if (AcpiGetoptArgument (argc, argv))
> +            {
> +                return (-1);
> +            }
> +
> +            AslGbl_ExternalRefFilename = AcpiGbl_Optarg;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -f%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'G':
> +
> +        AslGbl_CompileGeneric = TRUE;
> +        break;
> +
> +    case 'g':   /* Get all ACPI tables */
> +
> +        printf ("-g option is deprecated, use acpidump utility instead\n");
> +        exit (1);
> +
> +    case 'h':
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '^':
> +
> +            Usage ();
> +            exit (0);
> +
> +        case 'c':
> +
> +            UtDisplayConstantOpcodes ();
> +            exit (0);
> +
> +        case 'd':
> +
> +            AslDisassemblyHelp ();
> +            exit (0);
> +
> +        case 'f':
> +
> +            AslFilenameHelp ();
> +            exit (0);
> +
> +        case 'r':
> +
> +            /* reserved names */
> +
> +            ApDisplayReservedNames ();
> +            exit (0);
> +
> +        case 't':
> +
> +            UtDisplaySupportedTables ();
> +            exit (0);
> +
> +        default:
> +
> +            printf ("Unknown option: -h%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +
> +    case 'I':   /* Add an include file search directory */
> +
> +        FlAddIncludeDirectory (AcpiGbl_Optarg);
> +        break;
> +
> +    case 'i':   /* Output AML as an include file */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case 'a':
> +
> +            /* Produce assembly code include file */
> +
> +            AslGbl_AsmIncludeOutputFlag = TRUE;
> +            break;
> +
> +        case 'c':
> +
> +            /* Produce C include file */
> +
> +            AslGbl_C_IncludeOutputFlag = TRUE;
> +            break;
> +
> +        case 'n':
> +
> +            /* Compiler/Disassembler: Ignore the NOOP operator */
> +
> +            AcpiGbl_IgnoreNoopOperator = TRUE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -i%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'l':   /* Listing files */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '^':
> +
> +            /* Produce listing file (Mixed source/aml) */
> +
> +            AslGbl_ListingFlag = TRUE;
> +            AcpiGbl_DmOpt_Listing = TRUE;
> +            break;
> +
> +        case 'i':
> +
> +            /* Produce preprocessor output file */
> +
> +            AslGbl_PreprocessorOutputFlag = TRUE;
> +            break;
> +
> +        case 'm':
> +
> +            /* Produce hardware map summary file */
> +
> +            AslGbl_MapfileFlag = TRUE;
> +            break;
> +
> +        case 'n':
> +
> +            /* Produce namespace file */
> +
> +            AslGbl_NsOutputFlag = TRUE;
> +            break;
> +
> +        case 's':
> +
> +            /* Produce combined source file */
> +
> +            AslGbl_SourceOutputFlag = TRUE;
> +            break;
> +
> +        case 'x':
> +
> +            /* Produce cross-reference file */
> +
> +            AslGbl_CrossReferenceOutput = TRUE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -l%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'm':   /* Set line buffer size */
> +
> +        AslGbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024;
> +        if (AslGbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE)
> +        {
> +            AslGbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE;
> +        }
> +        printf ("Line Buffer Size: %u\n", AslGbl_LineBufferSize);
> +        break;
> +
> +    case 'n':   /* Parse only */
> +
> +        AslGbl_ParseOnlyFlag = TRUE;
> +        break;
> +
> +    case 'o':   /* Control compiler AML optimizations */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case 'a':
> +
> +            /* Disable all optimizations */
> +
> +            AslGbl_FoldConstants = FALSE;
> +            AslGbl_IntegerOptimizationFlag = FALSE;
> +            AslGbl_ReferenceOptimizationFlag = FALSE;
> +            AslGbl_OptimizeTrivialParseNodes = FALSE;
> +
> +            break;
> +
> +        case 'c':
> +
> +            /* Display compile time(s) */
> +
> +            AslGbl_CompileTimesFlag = TRUE;
> +            break;
> +
> +        case 'd':
> +
> +            /* Disable disassembler code optimizations */
> +
> +            AcpiGbl_DoDisassemblerOptimizations = FALSE;
> +            break;
> +
> +        case 'e':
> +
> +            /* Disassembler: Emit embedded external operators */
> +
> +            AcpiGbl_DmEmitExternalOpcodes = TRUE;
> +            break;
> +
> +        case 'E':
> +
> +            /*
> +             * iASL: keep External opcodes in place.
> +             * No affect if Gbl_DoExternals is false.
> +             */
> +
> +            AslGbl_DoExternalsInPlace = TRUE;
> +            break;
> +
> +        case 'f':
> +
> +            /* Disable folding on "normal" expressions */
> +
> +            AslGbl_FoldConstants = FALSE;
> +            break;
> +
> +        case 'i':
> +
> +            /* Disable integer optimization to constants */
> +
> +            AslGbl_IntegerOptimizationFlag = FALSE;
> +            break;
> +
> +        case 'n':
> +
> +            /* Disable named reference optimization */
> +
> +            AslGbl_ReferenceOptimizationFlag = FALSE;
> +            break;
> +
> +        case 't':
> +
> +            /* Disable heavy typechecking */
> +
> +            AslGbl_DoTypechecking = FALSE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'P':   /* Preprocessor options */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '^':   /* Proprocess only, emit (.i) file */
> +
> +            AslGbl_PreprocessOnly = TRUE;
> +            AslGbl_PreprocessorOutputFlag = TRUE;
> +            break;
> +
> +        case 'n':   /* Disable preprocessor */
> +
> +            AslGbl_PreprocessFlag = FALSE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -P%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'p':   /* Override default AML output filename */
> +
> +        AslGbl_OutputFilenamePrefix = AcpiGbl_Optarg;
> +        UtConvertBackslashes (AslGbl_OutputFilenamePrefix);
> +        AslGbl_UseDefaultAmlFilename = FALSE;
> +        break;
> +
> +    case 'q':   /* ASL/ASl+ converter: compile only and leave badaml. */
> +
> +        printf ("Convert ASL to ASL+ with comments\n");
> +        AslGbl_FoldConstants = FALSE;
> +        AslGbl_IntegerOptimizationFlag = FALSE;
> +        AslGbl_ReferenceOptimizationFlag = FALSE;
> +        AslGbl_OptimizeTrivialParseNodes = FALSE;
> +        AslGbl_DoExternalsInPlace = TRUE;
> +        AcpiGbl_CaptureComments = TRUE;
> +        return (0);
> +
> +    case 'r':   /* Override revision found in table header */
> +
> +        AslGbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
> +        break;
> +
> +    case 's':   /* Create AML in a source code file */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case 'a':
> +
> +            /* Produce assembly code output file */
> +
> +            AslGbl_AsmOutputFlag = TRUE;
> +            break;
> +
> +        case 'c':
> +
> +            /* Produce C hex output file */
> +
> +            AslGbl_C_OutputFlag = TRUE;
> +            break;
> +
> +        case 'o':
> +
> +            /* Produce AML offset table in C */
> +
> +            AslGbl_C_OffsetTableFlag = TRUE;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 't':   /* Produce hex table output file */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case 'a':
> +
> +            AslGbl_HexOutputFlag = HEX_OUTPUT_ASM;
> +            break;
> +
> +        case 'c':
> +
> +            AslGbl_HexOutputFlag = HEX_OUTPUT_C;
> +            break;
> +
> +        case 's':
> +
> +            AslGbl_HexOutputFlag = HEX_OUTPUT_ASL;
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'T':   /* Create a ACPI table template file */
> +
> +        AslGbl_DoTemplates = TRUE;
> +        break;
> +
> +    case 'v':   /* Version and verbosity settings */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '^':
> +
> +            printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
> +            exit (0);
> +
> +        case 'a':
> +
> +            /* Disable all error/warning/remark messages */
> +
> +            AslGbl_NoErrors = TRUE;
> +            break;
> +
> +        case 'd':
> +
> +            printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
> +            printf (ACPI_COMMON_BUILD_TIME);
> +            exit (0);
> +
> +        case 'e':
> +
> +            /* Disable all warning/remark messages (errors only) */
> +
> +            AslGbl_DisplayRemarks = FALSE;
> +            AslGbl_DisplayWarnings = FALSE;
> +            break;
> +
> +        case 'i':
> +            /*
> +             * Support for integrated development environment(s).
> +             *
> +             * 1) No compiler signon
> +             * 2) Send stderr messages to stdout
> +             * 3) Less verbose error messages (single line only for each)
> +             * 4) Error/warning messages are formatted appropriately to
> +             *    be recognized by MS Visual Studio
> +             */
> +            AslGbl_VerboseErrors = FALSE;
> +            AslGbl_DoSignon = FALSE;
> +            AslGbl_Files[ASL_FILE_STDERR].Handle = stdout;
> +            break;
> +
> +        case 'o':
> +
> +            AslGbl_DisplayOptimizations = TRUE;
> +            break;
> +
> +        case 'r':
> +
> +            AslGbl_DisplayRemarks = FALSE;
> +            break;
> +
> +        case 's':
> +
> +            AslGbl_DoSignon = FALSE;
> +            break;
> +
> +        case 't':
> +
> +            AslGbl_VerboseTemplates = TRUE;
> +            break;
> +
> +        case 'w':
> +
> +            /* Get the required argument */
> +
> +            if (AcpiGetoptArgument (argc, argv))
> +            {
> +                return (-1);
> +            }
> +
> +            Status = AslDisableException (AcpiGbl_Optarg);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (-1);
> +            }
> +            break;
> +
> +        case 'x':
> +
> +            /* Get the required argument */
> +
> +            if (AcpiGetoptArgument (argc, argv))
> +            {
> +                return (-1);
> +            }
> +
> +            Status = AslExpectException (AcpiGbl_Optarg);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (-1);
> +            }
> +            break;
> +
> +        default:
> +
> +            printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'w': /* Set warning levels */
> +
> +        switch (AcpiGbl_Optarg[0])
> +        {
> +        case '1':
> +
> +            AslGbl_WarningLevel = ASL_WARNING;
> +            break;
> +
> +        case '2':
> +
> +            AslGbl_WarningLevel = ASL_WARNING2;
> +            break;
> +
> +        case '3':
> +
> +            AslGbl_WarningLevel = ASL_WARNING3;
> +            break;
> +
> +        case 'e':
> +
> +            AslGbl_WarningsAsErrors = TRUE;
> +            break;
> +
> +        case 'w':
> +
> +            /* Get the required argument */
> +
> +            if (AcpiGetoptArgument (argc, argv))
> +            {
> +                return (-1);
> +            }
> +
> +            Status = AslElevateException (AcpiGbl_Optarg);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (-1);
> +            }
> +            break;
> +
> +
> +        default:
> +
> +            printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
> +            return (-1);
> +        }
> +        break;
> +
> +    case 'x':   /* Set debug print output level */
> +
> +        AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16);
> +        break;
> +
> +    case 'z':
> +
> +        AslGbl_UseOriginalCompilerId = TRUE;
> +        break;
> +
> +    default:
> +
> +        return (-1);
> +    }
> +
> +    return (0);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslMergeOptionTokens
> + *
> + * PARAMETERS:  InBuffer            - Input containing an option string
> + *              OutBuffer           - Merged output buffer
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Remove all whitespace from an option string.
> + *
> + ******************************************************************************/
> +
> +static void
> +AslMergeOptionTokens (
> +    char                    *InBuffer,
> +    char                    *OutBuffer)
> +{
> +    char                    *Token;
> +
> +
> +    *OutBuffer = 0;
> +
> +    Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS);
> +    while (Token)
> +    {
> +        strcat (OutBuffer, Token);
> +        Token = strtok (NULL, ASL_TOKEN_SEPARATORS);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslDoResponseFile
> + *
> + * PARAMETERS:  Filename        - Name of the response file
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Open a response file and process all options within.
> + *
> + ******************************************************************************/
> +
> +static int
> +AslDoResponseFile (
> +    char                    *Filename)
> +{
> +    char                    *argv = AslGbl_StringBuffer2;
> +    FILE                    *ResponseFile;
> +    int                     OptStatus = 0;
> +    int                     Opterr;
> +    int                     Optind;
> +
> +
> +    ResponseFile = fopen (Filename, "r");
> +    if (!ResponseFile)
> +    {
> +        printf ("Could not open command file %s, %s\n",
> +            Filename, strerror (errno));
> +        return (-1);
> +    }
> +
> +    /* Must save the current GetOpt globals */
> +
> +    Opterr = AcpiGbl_Opterr;
> +    Optind = AcpiGbl_Optind;
> +
> +    /*
> +     * Process all lines in the response file. There must be one complete
> +     * option per line
> +     */
> +    while (fgets (AslGbl_StringBuffer, ASL_STRING_BUFFER_SIZE, ResponseFile))
> +    {
> +        /* Compress all tokens, allowing us to use a single argv entry */
> +
> +        AslMergeOptionTokens (AslGbl_StringBuffer, AslGbl_StringBuffer2);
> +
> +        /* Process the option */
> +
> +        AcpiGbl_Opterr = 0;
> +        AcpiGbl_Optind = 0;
> +
> +        OptStatus = AslDoOptions (1, &argv, TRUE);
> +        if (OptStatus)
> +        {
> +            printf ("Invalid option in command file %s: %s\n",
> +                Filename, AslGbl_StringBuffer);
> +            break;
> +        }
> +    }
> +
> +    /* Restore the GetOpt globals */
> +
> +    AcpiGbl_Opterr = Opterr;
> +    AcpiGbl_Optind = Optind;
> +
> +    fclose (ResponseFile);
> +    return (OptStatus);
> +}
> diff --git a/src/acpica/source/compiler/fwts_iasl_interface.c b/src/acpica/source/compiler/fwts_iasl_interface.c
> index 2987723b..9679e272 100644
> --- a/src/acpica/source/compiler/fwts_iasl_interface.c
> +++ b/src/acpica/source/compiler/fwts_iasl_interface.c
> @@ -17,8 +17,6 @@
>   *
>   */
>  
> -#define _DECLARE_GLOBALS
> -
>  #include <unistd.h>
>  #include <stdbool.h>
>  #include <stdint.h>


Acked-by: Ivan Hu <ivan.hu at canonical.com>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20190306/10694aee/attachment-0001.sig>


More information about the fwts-devel mailing list