Age | Commit message (Collapse) | Author | Files | Lines |
|
This is a partial reversion of the changes in r13-5373-g80cf2c5e8f496b.
As observed in the PR, handling the C and Driver options in the Modula-2
lang-specific code could be difficult to emulate; This reverts to adding
the required options to the language-specific .opt file.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108555
PR modula2/108182
PR modula2/102343
gcc/m2/ChangeLog:
* gm2-lang.cc (gm2_langhook_option_lang_mask): Do not claim CL_C
or CL_DRIVER.
(gm2_langhook_init_options): Handle options that we want to pass
to the preprocessor.
* lang-specs.h: Pass -B and -save-temps to regular compile lines.
* lang.opt: Add C and Driver options that Modula-2 intercepts for
internal use. Reorder options into two sections and to collate.
|
|
|
|
cc1gm2 generates an error: control reaches end of non-void function when
compiling Termbase.mod if -Werror=return-type is present.
../gcc/m2/gm2-libs-pim/Termbase.mod: In function 'Termbase_KeyPressed':
../gcc/m2/gm2-libs-pim/Termbase.mod:128:1: error: control reaches end
of non-void function [-Werror=return-type]
128 | END KeyPressed ;
| ^~~
This occurs as cc1gm2 does skips over the <* noreturn *> attribute. This
patch records the <* noreturn *> attribute in the m2 symbol table and
later on sets TREE_THIS_VOLATILE when creating the function decl.
The patch also contains a fix for the main scaffold which also omitted
a return 0 after the exception handler code.
gcc/m2/ChangeLog:
* gm2-compiler/M2GCCDeclare.mod: Import IsProcedureNoReturn.
(DeclareProcedureToGccWholeProgram): New variable declared and set
returnType. Pass returnType to BuildEndFunctionDeclaration.
Extra parameter IsProcedureNoReturn passed to
BuildEndFunctionDeclaration.
* gm2-compiler/M2Quads.mod (BuildM2MainFunction): Correct
scaffold comment and add extra return 0.
* gm2-compiler/P2Build.bnf: Import BuildNoReturnAttribute.
(ProcedureHeading): Process EndBuildFormalParameters before
parsing AttributeNoReturn.
(DefProcedureHeading): Process EndBuildFormalParameters before
parsing AttributeNoReturn.
(AttributeNoReturn): Call BuildNoReturnAttribute.
* gm2-compiler/P2SymBuild.def (BuildNoReturnAttribute): New
procedure.
* gm2-compiler/P2SymBuild.mod (BuildNoReturnAttribute): New
procedure.
* gm2-compiler/SymbolTable.def (PutProcedureInline): Corrected
comment.
(PutProcedureNoReturn): New procedure.
(IsProcedureNoReturn): New procedure function.
* gm2-compiler/SymbolTable.mod (SymProcedure): IsNoReturn
new field.
(MakeProcedure): Initialize IsNoReturn to FALSE.
(PutProcedureNoReturn): New procedure.
(IsProcedureNoReturn): New procedure function.
* gm2-gcc/m2decl.cc (m2decl_BuildEndFunctionDeclaration):
Add extra parameter isnoreturn. Set TREE_THIS_VOLATILE
to isnoreturn.
* gm2-gcc/m2decl.def (BuildEndFunctionDeclaration): Add
extra parameter isnoreturn.
* gm2-gcc/m2decl.h (m2decl_BuildEndFunctionDeclaration): Add
extra parameter isnoreturn.
* gm2-gcc/m2except.cc (m2except_InitExceptions): Change all
function decl to pass an extra parameter isnoreturn.
gcc/testsuite/ChangeLog:
* gm2/warnings/returntype/fail/badreturn.mod: New test.
* gm2/warnings/returntype/fail/warnings-returntype-fail.exp:
New test.
* gm2/warnings/returntype/pass/Termbase.mod: New test.
* gm2/warnings/returntype/pass/goodreturn.mod: New test.
* gm2/warnings/returntype/pass/keypressedsimple.mod: New test.
* gm2/warnings/returntype/pass/warnings-returntype-pass.exp:
New test.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
The block comment in m2.flex associated with splitSlashStar
contains /* which causes a warning. This patch obfuscates
the comment /* symbols.
* m2.flex (splitSlashStar): Fix comment so that /* does not
appear inside the comment.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
Remove debugging code accidentally left in place in r13-5373-g80cf2c5e8f496b.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108553
gcc/m2/ChangeLog:
* gm2-lang.cc (gm2_langhook_init_options): Remove debug code.
|
|
PR-108135 gcc/m2/configure generates gm2config.h and
automatically adds PACKAGE defines. gcc/m2/Make-lang.in
now removes these PACKAGE definitions. The patch also
contains fixes to remove an unused variable Dim from
BuildConstHighFromSym and also uses withTok in StartBuildWith.
StartBuildWith will generate a nop (for improved debugging)
if requested.
gcc/m2/ChangeLog:
* Make-lang.in (m2/gm2config.h): Rewrite rule to be
dependent upon m2/gm2config.aci.
(m2/gm2config.aci): Newrule.
* configure.ac (AC_CONFIG_HEADERS): Change destination
to gm2config.aci.
* configure: Regenerate.
* gm2-libs/config-host: Regenerate.
* gm2-compiler/M2GCCDeclare.mod (AddSymToWatch): Comment
out.
* gm2-compiler/M2Quads.mod (BuildConstHighFromSym): Remove
Dim.
(StartBuildWith): Call BuildStmtNoteTok.
(BuildStmtNoteTok): New procedure.
(BuildStmtNote): Re-implement re-factor into two
procedures and call BuildStmtNoteTok.
* gm2config.h.in: Remove.
* gm2config.aci.in: New file.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
Modula-2 uses the C preprocessor to implement handling for conditional
code and macros. However, this is not done directly, because the process
is applied recursively to imported definitions and modules.
The cc1gm2 executable records the parameters as a template command line
needed to create a composite 'cc1 -E' for each file to be preprocessed
starting with the main file from the original command line.
This patch fixes the capture of the C preprocessor template to include
the target information needed for correct multilib operation.
In order to match the existing semantics of '-E, -M and -MM' these have
to be handled as a 'pre-processor only' job (i.e. the recursion is omitted
and only the main file is processed).
Whereas C-family front ends always pre-process, Modula-2 only does so
when specifically requested (via the -fcpp option).
'-MD, -MMD and -MQ' also require special handling, since (in principle)
these options can be applied to any command line (with -fcpp) providing
dependency information as a by-product.
TODO: the preprocessor is not able to determine def and mod dependencies
for Modula-2 and so the output of this only shows the object to module
dep. We should be able to append the .def and .mod dependencies.
The patch amends save-temps handling to cater for the preprocessor
recursion and to avoid writing saved files into the source directories.
The patch changes the extension for Modula-2 preprocessed source to .m2i
to avoid clashes with .i.
The main driver code is amended to add default handlers for .mod and .m2i
so that a useful error message will be emitted if the Modula-2 compiler
is not built-in.
The compiler will now also handle code generation from a .m2i preprocessed
source.
TODO: We should not need to pass the '-c' option to the compiler to alter
the processing of init code.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/102343
PR modula2/108182
gcc/ChangeLog:
* gcc.cc: Provide default specs for Modula-2 so that when the
language is not built-in better diagnostics are emitted for
attempts to use .mod or .m2i file extensions.
gcc/m2/ChangeLog:
* gm2-compiler/M2Comp.mod: Early exit for pre-processor-only jobs.
* gm2-compiler/M2Options.def (SetPPOnly, GetPPOnly, SetMD, GetMD,
SetMMD, GetMMD, SetMQ, GetMQ, SetObj, GetObj, SetDumpDir,
GetDumpDir):New.
* gm2-compiler/M2Options.mod:(SetPPOnly, GetPPOnly, SetMD, GetMD,
SetMMD, GetMMD, SetMQ, GetMQ, SetObj, GetObj, SetDumpDir,
GetDumpDir):New.
* gm2-compiler/M2Preprocess.def (PreprocessModule): Add flag to
indicate the main file.
* gm2-compiler/M2Preprocess.mod: Handle Preprocess-only jobs,
handle MD, MMD and MQ options.
* gm2-gcc/m2options.h (M2Options_SetPPOnly, M2Options_GetPPOnly,
M2Options_SetDumpDir, M2Options_SetMD, M2Options_GetMD,
M2Options_SetMMD, M2Options_GetMMD, M2Options_SetMQ, M2Options_GetMQ,
M2Options_SetObj, M2Options_GetObj): New.
* gm2-gcc/m2type.cc (m2type_InitBaseTypes): Early exit for pre-
processor-only jobs.
* gm2-lang.cc (gm2_langhook_init): Handle preprocess-only commands.
(gm2_langhook_option_lang_mask): Claim C and Driver options so that
we can intercept them for building pre-processor commands.
(gm2_langhook_init_options): Collect the preprocessor line here.
Save options that have different actions for preprocessor and compile
commands.
(gm2_langhook_handle_option): Only handle the modula-2 options here.
(gm2_langhook_post_options): Do not create a back-end for pre-
processor-only jobs.
* gm2spec.cc (lang_specific_driver): Ignore PCH options, append a
scaffold-main for cases where we are building a main module with
-c.
* lang-specs.h: Revise to handle preprocessor-only jobs and to
consume pre-processed files.
* lang.opt: Remove Driver and C options copies (we claim these
separately).
|
|
|
|
Introduce a simple DynamicStringPath module to allow the front end
to create and modify a search path from dynamic strings.
gcc/m2/ChangeLog:
* Make-lang.in (GM2-COMP-BOOT-DEFS): Add
DynamicStringPath.def.
(GM2-COMP-BOOT-MODS): Add DynamicStringPath.mod.
(GM2-COMP-DEFS): Add DynamicStringPath.def.
(GM2-COMP-MODS): Add DynamicStringPath.mod.
($(objdir)/m2/gm2-libs-min/SYSTEM.def): Split path into
multiple -I components.
($(objdir)/m2/gm2-libs/SYSTEM.def): Ditto.
($(objdir)/m2/gm2-libs-coroutines/SYSTEM.def): Ditto.
* gm2-compiler/M2Options.mod: Import DynamicStringPath.
(SetSearchPath): Reimplement using DynamicStringPath
procedures.
* gm2-compiler/M2Search.def (InitSearchPath): Remove.
(PrependSearchPath): Remove.
* gm2-compiler/M2Search.mod (SFIO): Remove import.
(DynamicStringPath): Add import.
(Directory): Remove.
(UserPath): Remove.
(InitialPath): Remove.
(InitSearchPath): Remove.
(PrependSearchPath): Remove.
(FindSourceFile): Re-implement.
(FindSourceDefFile): Re-implement.
(FindSourceModFile): Re-implement.
* gm2-gcc/init.cc (_M2_DynamicStringPath_init):
New prototype.
(init_FrontEndInit): Call _M2_DynamicStringPath_init.
* tools-src/makeSystem: Allow multiple -I paths.
* gm2-compiler/DynamicStringPath.def: New file.
* gm2-compiler/DynamicStringPath.mod: New file.
* gm2-gcc/m2options.h (M2Options_SetMakeIncludePath): Add
prototype.
Co-Authored by: Iain Sandoe <iain@sandoe.co.uk>
libgm2/ChangeLog:
* libm2cor/Makefile.am (SYSTEM.def): Split path into
multiple -I components.
* libm2cor/Makefile.in: Rebuild.
* libm2min/Makefile.am (SYSTEM.def): Split path into
multiple -I components.
* libm2min/Makefile.in: Rebuild.
* libm2iso/Makefile.am (SYSTEM.def): Split path into
multiple -I components.
* libm2iso/Makefile.in: Rebuild.
Co-Authored by: Iain Sandoe <iain@sandoe.co.uk>
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
This patch allows a subsequent patch to turn on/off the consuming
of C comments.
gcc/m2/ChangeLog:
* m2.flex (cpreprocessor): Add temporary variable
which is initialized to 0.
(commentCLevel): New variable.
(endOfCComment): New function.
(splitSlashStar): New function to split /* into / and *
tokens.
(COMMENTC): New flex state.
("/*"): New rule to test whether we should treat /*
as a single token or as two tokens.
(<COMMENTC>.): New rule to skip a character.
(<COMMENTC>\n.*): New rule to consume the line.
(<COMMENTC>"*/"): New rule to call endOfCComment.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
RTco is a definition for C module and therefore there is no
RTco.mod. The RTco.cc uses RTentity and the import in RTco.def
ensures that cc1gm2 can build a graph of all dependencies
should -fscaffold-static be used.
gcc/m2/ChangeLog:
* gm2-libs-iso/RTco.def: Import RTentity.
Declare RTco as a definition for C module.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
The adds the includes in the FE as done in other GCC languages.
It also revises the library handling to avoid additional -L options
from hiding LIBDIR.
For the include/import paths as presented to the front end initialisation,
we capture them and then arrange to emit the 'standard library' paths in
the same order as specified for C.
The specs are tidied up.
The use of the internal prefix also fixes searching in a relocated compiler.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108182
PR modula2/108480
gcc/m2/ChangeLog:
* Make-lang.in: Pass libsubdir to the language init
build.
* gm2-lang.cc (INCLUDE_VECTOR): Define.
(add_one_import_path): New.
(add_m2_import_paths): New.
(gm2_langhook_post_options): Arrange to add the include
paths (and add the system ones) in the same order as C
uses.
* gm2spec.cc (build_archive_path): Remove.
(add_default_combination): Remove.
(add_default_archives): Remove.
(add_default_libs): We no longer need a '-L' option, just
emit the -l and each library in use.
(build_include_path): Remove.
(add_include): Remove.
(add_default_includes): Remove.
(library_installed): Remove.
(check_valid_library): Remove.
(check_valid_list): Remove.
(convert_abbreviation): Diagnose unhandled cases.
(lang_specific_driver): Skip options where we will add back
a validated version.
* lang-specs.h (M2CPP): Reformat, append %I when -fcpp is not
in use. Revise the cc1gm2 spec to omit mentioning options that
are handled in the c pre-processor line.
* lang.opt: Allow preprocessing and path options as input to the
cc1gm2 invocation, so that they can be passed to the preprocessor
invocation.
|
|
As noted in the PR, the problem is that we make a request for additional
stack that violates the constraints on some systems.
This patch chooses a value that is divisible by common OS page sizes.
TODO: the user value should be checked and then an exception thrown if it
is not suitable.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108405
gcc/m2/ChangeLog:
* gm2-libs-iso/Preemptive.mod (initPreemptive): Use a value for
extra space that is divisible by common OS pagesizes.
|
|
|
|
R-108136 modula-2 meets cppcheck part 2
This patch addresses the style warnings mentioned in the PR.
The array high style fixes to mc/keyc.mod and
gm2-libs/M2Dependent.mod provoke a rebuild of pge and mc.
gcc/m2/ChangeLog:
* gm2-libs/Args.mod (GetArg): Check index before
accessing array.
* gm2-libs/M2Dependent.mod (toCString): Check index
before accessing array.
* mc-boot/GArgs.c: Rebuilt.
* mc-boot/GM2Dependent.c: Rebuilt.
* mc-boot/Gkeyc.c: Rebuilt.
* mc/keyc.mod (seenUIntMin): Initialize once.
(seenUIntMax): Initialize once.
(checkLimits): Only test seenUIntMin and seenUIntMax
once.
* pge-boot/GArgs.c: Rebuilt.
* pge-boot/GM2Dependent.c: Rebuilt.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
These patches fix warnings (and a bug) discovered by clang. The
patch set looks longer than the changes as pge and mc needed to be
rebuilt (due to a change in the gcc/m2/gm2-libs/DynamicString.mod
library).
gcc/m2/ChangeLog:
* gm2-gcc/m2statement.cc (gm2_gimplify_function_node):
Remove.
* gm2-libs/DynamicStrings.mod (Equal): Remove dead code.
* m2.flex (<COMMENT>"<*"): Add {} for else statement.
* m2pp.cc (hextree): Add conditional #ifdef DEBUGGING.
* mc-boot/GDynamicStrings.c: Rebuild.
* pge-boot/GDynamicStrings.c: Rebuild.
* pge-boot/GFIO.c: Rebuild.
* pge-boot/GIndexing.c: Rebuild.
* pge-boot/GM2EXCEPTION.c: Rebuild.
* pge-boot/GM2RTS.c: Rebuild.
* pge-boot/GNameKey.c: Rebuild.
* pge-boot/GPushBackInput.c: Rebuild.
* pge-boot/GRTExceptions.c: Rebuild.
* pge-boot/GStdIO.c: Rebuild.
* pge-boot/GSymbolKey.c: Rebuild.
* pge-boot/GSysStorage.c: Rebuild.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
Obfuscate the copyright text in gcc/m2/mc/mcOptions.mod so that the
year change script does not attempt to modify the text. The year
is determined at runtime and therefore the text requires
no modification. The middle printf (C) can be replaced by
a unicode character in the future.
gcc/m2/ChangeLog:
* mc-boot/GM2RTS.c: Rebuilt.
* mc-boot/GM2RTS.h: Rebuilt.
* mc-boot/Gdecl.c: Rebuilt.
* mc-boot/GmcOptions.c: Rebuilt.
* mc/mcOptions.mod (displayVersion):
Split first printf into three components
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
PR-108404 occurs because the C prototype does not match the Modula-2
procedure M2RTS_Halt. This patch provides a new procedure M2RTS_HaltC
which avoids the C/C++ code from having to fabricate a Modula-2 string.
gcc/m2/ChangeLog:
* gm2-libs-iso/M2RTS.def (Halt): Parameter file renamed to filename.
(HaltC): New procedure declaration.
(ErrorMessage): Parameter file renamed to filename.
* gm2-libs-iso/M2RTS.mod (Halt): Parameter file renamed to
filename.
(HaltC): New procedure implementation.
(ErrorStringC): New procedure implementation.
(ErrorMessageC): New procedure implementation.
* gm2-libs/M2RTS.def (Halt): Parameter file renamed to filename.
(HaltC): New procedure declaration.
(ErrorMessage): Parameter file renamed to filename.
* gm2-libs/M2RTS.mod (Halt): Parameter file renamed to filename.
(HaltC): New procedure implementation.
(ErrorStringC): New procedure implementation.
(ErrorMessageC): New procedure implementation.
libgm2/ChangeLog:
* libm2iso/RTco.cc (_M2_RTco_fini): Call M2RTS_HaltC.
(newSem): Call M2RTS_HaltC.
(currentThread): Call M2RTS_HaltC.
(never): Call M2RTS_HaltC.
(defined): Call M2RTS_HaltC.
(initThread): Call M2RTS_HaltC.
(RTco_transfer): Call M2RTS_HaltC.
* libm2iso/m2rts.h (M2RTS_Halt): Provide parameter names.
(M2RTS_HaltC): New procedure declaration.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
This patch removes the hard coded constant YEAR and replaces
its use by a call to a new procedure function getYear.
It also emits a GPL v3 boilerplate.
gcc/m2/ChangeLog:
* mc-boot-ch/Glibc.c (libc_time): New function.
(libc_localtime): New function.
* mc-boot/GDynamicStrings.c: Regenerate.
* mc-boot/GFIO.c: Regenerate.
* mc-boot/GFormatStrings.c: Regenerate.
* mc-boot/GIndexing.c: Regenerate.
* mc-boot/GM2Dependent.c: Regenerate.
* mc-boot/GM2EXCEPTION.c: Regenerate.
* mc-boot/GPushBackInput.c: Regenerate.
* mc-boot/GRTExceptions.c: Regenerate.
* mc-boot/GRTint.c: Regenerate.
* mc-boot/GStdIO.c: Regenerate.
* mc-boot/GStringConvert.c: Regenerate.
* mc-boot/GSysStorage.c: Regenerate.
* mc-boot/Gdecl.c: Regenerate.
* mc-boot/GmcComment.c: Regenerate.
* mc-boot/GmcComp.c: Regenerate.
* mc-boot/GmcDebug.c: Regenerate.
* mc-boot/GmcMetaError.c: Regenerate.
* mc-boot/GmcOptions.c: Regenerate.
* mc-boot/GmcStack.c: Regenerate.
* mc-boot/GnameKey.c: Regenerate.
* mc-boot/GsymbolKey.c: Regenerate.
* mc-boot/Gkeyc.c: Regenerate.
* mc/decl.mod (putFieldRecord): Change NulName to NulKey
and fix type comparision.
* mc/mcOptions.mod (YEAR): Remove.
(getYear): New procedure function.
(displayVersion): Use result from getYear instead of YEAR.
Emit boilerplate for GPL v3.
(gplBody): Use result from getYear instead of YEAR.
(glplBody): Use result from getYear instead of YEAR.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
Attempting to dereference an undeclared variable will cause an ICE.
Also attempting to pass an undeclared variable as an array of type
will also cause an ICE. This patch detects both conditions and
generates an appropriate error.
gcc/m2/ChangeLog:
* gm2-compiler/M2Quads.mod (AssignUnboundedVar): Check Type
against NulSym and call MetaErrorT1 if necessary.
(AssignUnboundedNonVar): Check Type against NulSym and
call MetaErrorT1 if necessary.
(BuildDesignatorPointer): Check Type1 against NulSym and
call MetaErrorT1 if necessary.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
Annual update of dates. Also change the GPL boilerplate
emitted to GPL v3.
gcc/m2/ChangeLog:
* mc/mcOptions.mod (displayVersion): Change GPLv2 to GPLv3.
(YEAR) set to 2023.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
|
|
This bug is exposed on the ppc64le platform. The expression
parser P3Build.bnf (and PHBuild.bnf) BuiltNot omitted to record
the current token position on the quad stack. The patch changes
all occurances of NEW to newBoolFrame to ensure that the tokenno
recorded in the bool frame is set to a sensible value.
BuildNot is fixed and improved to generate a virtual token
recording the position of the subexpression.
gcc/m2/ChangeLog:
* gm2-compiler/M2LexBuf.mod (isSrcToken): Add block comment.
Remove dead code.
* gm2-compiler/M2Quads.def (BuildNot): Add notTokPos parameter.
* gm2-compiler/M2Quads.mod (BuildNot): Add notTokPos parameter.
Create and push virtual token.
(PopBooltok): New procedure.
(PushBooltok): New procedure.
(PushBool): Re-implement using PushBooltok.
(PopBool): Re-implement using PopBooltok.
* gm2-compiler/P3Build.bnf (ConstFactor): Record token
position of NOT.
(Factor): Record token position of NOT.
* gm2-compiler/PHBuild.bnf (ConstFactor): Record token
position of NOT.
(Relation): Push token position.
(UnaryOrConstTerm): Push token position.
(AddOperator): Push token position.
(MulOperator): Push token position.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
Somehow this setting had been missed, and we really need the verbose
flag to enable useful debug output.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/m2/ChangeLog:
* gm2-gcc/m2options.h (M2Options_SetVerbose): Export the
function.
* gm2-lang.cc: Handle OPT_v, passing it to the compiler.
* lang-specs.h: Pass -v to cc1gm2.
|
|
Clang found an exit path from function with non-void return type
that has missing return statement [missingReturn].
gcc/m2/ChangeLog:
* mc-boot-ch/GRTco.c (RTco_select): Add return 0.
* pge-boot/GRTco.c (RTco_select): Add return 0.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
The dependency m2/gm2-libs/gm2-libs-host.h is missing from
two m2/mc-boot rules.
gcc/m2/ChangeLog:
* Make-lang.in (m2/mc-boot/$(SRC_PREFIX)%.o): Add
m2/gm2-libs/gm2-libs-host.h dependency.
(m2/mc-boot-ch/$(SRC_PREFIX)%.o): Add
m2/gm2-libs/gm2-libs-host.h dependency.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
PR-108142 Modula-2 configure generates many subdirectories in the top
build directory. This patch dynamically creates subdirectories under
gcc/m2 if and when required.
Bootstrapped on x86_64 gnu/linux, ok for master?
gcc/m2/ChangeLog:
* Make-lang.in (GM2_1): Change -B path to m2/stage1.
($(objdir)/m2/images/gnu.eps): Check and create dest dir
if necessary.
(gm2-libs.texi-check): Check and create dir m2/gm2-libs-pim,
m2/gm2-libs-iso and m2/gm2-libs if necessary.
($(objdir)/m2/gm2-compiler-boot): Remove.
($(objdir)/m2/gm2-libs-boot): Remove.
($(objdir)/m2/gm2-libs-libiberty): Remove.
($(objdir)/m2/gm2-libiberty): Remove.
($(objdir)/m2/gm2-gcc): Remove.
($(objdir)/m2/gm2-compiler): Remove.
($(objdir)/m2/gm2-libs): Remove.
($(objdir)/m2/gm2-libs-iso): Remove.
($(objdir)/m2/gm2-libs-min): Remove.
($(objdir)/m2/gm2-compiler-paranoid): Remove.
($(objdir)/m2/gm2-libs-paranoid): Remove.
($(objdir)/m2/gm2-compiler-verify): Remove.
($(objdir)/m2/boot-bin): Remove.
($(objdir)/m2/gm2-libs-pim): Remove.
($(objdir)/m2/gm2-libs-coroutines): Remove.
(stage1/m2): Remove.
(stage2/m2): Remove.
(stage3/m2): Remove.
(m2.stageprofile): New rule.
(m2.stagefeedback): New rule.
(cc1gm2$(exeext)): Change dependent name.
(m2/stage2/cc1gm2$(exeext)): Change dependent name.
Check and create dest dir.
(m2/stage1/cc1gm2$(exeext)): Check and create dest dir
if necessary.
(m2/gm2-gcc/%.o): Ditto.
(m2/gm2-gcc/rtegraph.o): Ditto.
(m2/gm2-gcc/$(SRC_PREFIX)%.h): Ditto.
(m2/gm2-gcc/$(SRC_PREFIX)%.h): Ditto.
(m2/mc-boot): Ditto.
(m2/mc-boot-ch): Ditto.
(m2/gm2-libs-boot): Ditto.
(m2/gm2-compiler-boot): Ditto.
(m2/gm2-compiler): Ditto.
(m2/gm2-libiberty): Ditto.
(m2/gm2-compiler): Ditto.
(m2/gm2-libs-iso): Ditto.
(m2/gm2-libs): Ditto.
(m2/gm2-libs-min): Ditto.
(m2/gm2-libs-coroutines): Ditto.
(m2/boot-bin): Ditto.
(m2/pge-boot): Ditto.
(m2/pge-boot): Ditto.
* Make-maintainer.in (m2/gm2-ppg-boot): Check and create
dest dir if necessary.
(m2): Ditto.
(m2/gm2-ppg-boot): Ditto.
(m2/gm2-pg-boot): Ditto.
(m2/gm2-auto): Ditto.
(m2/gm2-pg-boot): Ditto.
(m2/gm2-pge-boot): Ditto.
($(objdir)/plugin): Ditto.
($(objdir)/m2/mc-boot-ch): Ditto.
($(objdir)/m2/mc-boot-gen): Ditto.
(m2/boot-bin): Ditto.
(m2/mc): Ditto.
(m2/mc-obj): Ditto.
($(objdir)/m2/gm2-ppg-boot): Ditto.
($(objdir)/m2/gm2-pg-boot): Ditto.
($(objdir)/m2/gm2-pge-boot): Ditto.
(m2/mc-boot-gen): Ditto.
(m2/m2obj3): Ditto.
(m2/gm2-libs-paranoid): Ditto.
(m2/gm2-compiler-paranoid): Ditto.
(m2/gm2-libs-paranoid): Ditto.
(m2/gm2-compiler-paranoid): Ditto.
(m2/gm2-libs-paranoid): Ditto.
(m2/gm2-compiler-paranoid): Ditto.
* config-lang.in (m2/gm2-compiler-boot): Remove mkdir.
(m2/gm2-libs-boot): Ditto.
(m2/gm2-ici-boot): Ditto.
(m2/gm2-libiberty): Ditto.
(m2/gm2-gcc): Ditto.
(m2/gm2-compiler): Ditto.
(m2/gm2-libs): Ditto.
(m2/gm2-libs-iso): Ditto.
(m2/gm2-compiler-paranoid): Ditto.
(m2/gm2-libs-paranoid): Ditto.
(m2/gm2-compiler-verify): Ditto.
(m2/boot-bin): Ditto.
(m2/gm2-libs-pim): Ditto.
(m2/gm2-libs-coroutines): Ditto.
(m2/gm2-libs-min): Ditto.
(m2/pge-boot): Ditto.
(plugin): Ditto.
(stage1/m2): Ditto.
(stage2/m2): Ditto.
(stage3/m2): Ditto.
(stage4/m2): Ditto.
(m2/gm2-auto): Ditto.
(m2/gm2-pg-boot): Ditto.
(m2/gm2-pge-boot): Ditto.
(m2/gm2-ppg-boot): Ditto.
(m2/mc-boot): Ditto.
(m2/mc-boot-ch): Ditto.
(m2/mc-boot-gen): Ditto.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
Add missing dependency m2/gm2config.h to the m2/pge-boot/%.o
rules. Also regenerate gm2-libs/config-host with
autoconf-2.69.
gcc/m2/ChangeLog:
* Make-lang.in (m2/pge-boot/%.o): Add m2/gm2config.h.
* gm2-libs/config-host: Regenerate.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|
|
The build is currently emitting a warning that abort() is declared differently
from the built-in. This updates the declaration to match expectations.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/m2/ChangeLog:
* gm2-libs-min/libc.c (abort): Update declaration to match the
expected form, add no-return attribute.
(exit): Add no-return attribute.
|
|
|
|
The scalb*() functions are obsolete in Posix from 2004 and removed in
2008.
The significand*() functions are glibc-only and considered there to be
obsolescent (not supported for types such as _Float128).
We can remove them from Modula-2 since they are not required for ISO
support, but we need to provide an implementation of significand* for
the "fraction()" functions.
PR modula2/107631
gcc/m2/ChangeLog:
* gm2-gcc/m2builtins.cc: Remove scalb, scalbf, scalbl,
significand, significandf, significandl.
* gm2-libs/Builtins.def (significand): Likewise.
* gm2-libs/Builtins.mod: Likewise.
* target-independent/Builtins.texi: Likewise.
* gm2-libs-iso/LowLong.mod: Implement fraction with scalbn*() and
ilogb*().
* gm2-libs-iso/LowReal.mod: Likewise.
* gm2-libs-iso/LowShort.mod: Likewise.
|
|
This patch adds two missing procedures to
gcc/m2/gm2-libs-min/M2RTS.{def,mod} required for linking. The
patch also includes test code, changes to
gcc/testsuite/lib/gm2.exp and an expect tcl script to test the
min libraries.
gcc/m2/ChangeLog:
* gm2-libs-min/M2RTS.def (ConstructModules): New procedure
declaration.
(DeconstructModules): New procedure declaration.
* gm2-libs-min/M2RTS.mod (ConstructModules): New procedure
dummy implementation.
(DeconstructModules): New procedure dummy implementation.
gcc/testsuite:
* lib/gm2.exp (gm2_init_minx): New procedure.
(gm2_init_min): New procedure calls gm2_init_min with
dialect flags.
* gm2/link/min/pass/tiny.mod: New test case.
* gm2/link/min/pass/link-min-pass.exp: New file.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
|
|
This was unimplemented so far.
gcc/ChangeLog:
* common.opt: Add -static-libgm2.
* config/darwin.h (LINK_SPEC): Handle static-libgm2.
* doc/gm2.texi: Document static-libgm2.
* gcc.cc (driver_handle_option): Allow static-libgm2.
gcc/m2/ChangeLog:
* gm2spec.cc (lang_specific_driver): Handle static-libgm2.
* lang.opt: Add static-libgm2.
|
|
The follows the pattern used in C++ and D drivers to pass -static-libstdc++
onto the target driver to allow spec substitution of static libraries.
NOTE: The handling of Bstatic/dynamic and the possible use of static libgm2
libraries is unimplemented in this driver so far.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/m2/ChangeLog:
* gm2spec.cc (lang_specific_driver): Pass -static-libstdc++ on to
the target driver if the linker does not support Bstatic/dynamic.
|
|
|
|
This reworks the mechanism used for module registration to use init-
time constructors. The order of registration is not important, the
actual initialization dependency tree will be computed early in the
execution (all that matters is that we have registered before that).
This fixes a potential issue in which the external name known to the
m2 system is of the form _M2_XXXXXX_ctor() but the C++ code was
producing a static variable instance with the same name.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108183
gcc/m2/ChangeLog:
* gm2-libs-ch/UnixArgs.cc (_M2_UnixArgs_ctor): Rework to use
an extern "C" function with 'constructor' attribute.
* gm2-libs-ch/dtoa.cc (_M2_dtoa_ctor): Likewise.
* gm2-libs-ch/ldtoa.cc (_M2_ldtoa_ctor): Likewise.
libgm2/ChangeLog:
* libm2cor/KeyBoardLEDs.cc (_M2_KeyBoardLEDs_ctor): Rework to use
an extern "C" function with 'constructor' attribute.
* libm2iso/ErrnoCategory.cc (_M2_ErrnoCategory_ctor): Likewise.
* libm2iso/RTco.cc (_M2_RTco_ctor): Likewise.
* libm2pim/Selective.cc (_M2_Selective_ctor): Likewise.
* libm2pim/SysExceptions.cc (_M2_SysExceptions_ctor): Likewise.
* libm2pim/UnixArgs.cc (_M2_UnixArgs_ctor): Likewise.
* libm2pim/cgetopt.cc (_M2_cgetopt_ctor): Likewise.
* libm2pim/dtoa.cc (_M2_dtoa_ctor): Likewise.
* libm2pim/errno.cc (_M2_errno_ctor): Likewise.
* libm2pim/ldtoa.cc (_M2_ldtoa_ctor): Likewise.
* libm2pim/sckt.cc (_M2_sckt_ctor): Likewise.
* libm2pim/termios.cc (_M2_termios_ctor): Likewise.
* libm2pim/wrapc.c: Add a new line to the file end.
|
|
In the current design the main executable links explicitly to the module
registration construtors that it uses. This means that they must be
visible in shared libraries.
PR modula2/108259
gcc/m2/ChangeLog:
* gm2-gcc/m2decl.cc (m2decl_DeclareModuleCtor): Make module
registration constructors visible.
|
|
This also uses the configured $(TEXI2DVI) and $(TEXI2PDF) to deal with those
targets (since we cannot assume to know what the use might have installed).
gcc/m2/ChangeLog:
* Make-lang.in (dvi, ps, pdf): Build in the gcc/doc directory, also
use the configured tools for texi -> dvi and texi -> pdf.
|
|
|
|
The symbols for module registration constructors need to be external
or we get wrong code generated for targets that allow direct access to
local symbol definitions.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108183
gcc/m2/ChangeLog:
* gm2-compiler/M2GCCDeclare.mod: Module registration constructors are
externs to the builder of m2_link.
Co-Authored-By: Gaius Mulley <gaiusmod2@gmail.com>
|
|
|