-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add hot reload flag #7
base: master
Are you sure you want to change the base?
Conversation
0df7960
to
b38dcda
Compare
compiler/plc_driver/src/pipelines.rs
Outdated
compile_options.online_change, | ||
)?; | ||
code_generator.generate(context, unit, &self.annotations, &self.index, &llvm_index) | ||
code_generator.generate( | ||
context, | ||
unit, | ||
&self.annotations, | ||
&self.index, | ||
&llvm_index, | ||
compile_options.online_change, | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not a fan of duplicating the parameter here, but they do the same for self.index
and it would require the introduction of one more "context-like" type to code_generator
. Do you think it's worth it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, I do feel like it might fit better as a parameter in the constructor, but I can't articulate precisely why! Online change does feel like a piece of information relevant to codegen at the same granularity as the optimization level or the debug level.
This looks good to me, my suggestion for how we deal with the |
b38dcda
to
03aa862
Compare
Current state looks good to me! |
* refactor(AST): introduce AstVisitor trait The AST-Visitor trait allows generic visiting of AST-nodes. A default Walking behavior is implemented for each AstStatement but it can be altered by any implementor. When overriding a visit_XXX method, the implementation can decide to continue with the default walking behavior (by calling the walk function on the passed AstStatement-Struct, to skip it, or to continue with an alternative walking bahavior. removed unused AST element CastStatement
03aa862
to
dd98502
Compare
…ions Move variables to ELF sections with mangled names
Encode complex types in section mangling
…n-mangler Add decoding to section mangler
Renamed the build workflow
This PR introduces llvm-lit, which at some point will replace our current correctness tests. For now only the functionality was introduced as well as GitHub workflows executing example lit tests.
…LC-lang#1248) * fix: for loop condition This PR fixes for loops executing once when the predicate already should not be met for decrementing loops. I have also re-implemented the codegen logic for for-loops, resulting in fewer predecessors and hopefully more readable IR. Resolves PLC-lang#1207
* add ast cli argument to print the AST to stdout * use pretty printed format Co-authored-by: Volkan <[email protected]> --------- Co-authored-by: Volkan <[email protected]>
This PR introduces two new keywords, namely `REF=` and `REFERENCE TO`: * `REF=` is essentially syntactic sugar for an assignment where the right-hand side is wrapped in a `REF()` function call. Therefore `foo := REF(bar)` and `foo REF= bar` are equivalent. * `REFERENCE TO` is identical to `REF_TO` with the exception of being auto-deref by default. A variable `foo` declared as `REFERENCE TO` will therefore auto-deref on assignments, i.e. `foo := 5` is equivalent to `foo^ := 5`. More information on CodeSys' [REF=](https://help.codesys.com/api-content/2/codesys/3.5.12.0/en/_cds_ref_assignment/) and [REFERENCE TO](https://help.codesys.com/api-content/2/codesys/3.5.12.0/en/_cds_datatype_reference/) documentation pages.
Prints any log calls in VSCodes debug console
Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.64 to 0.10.66. - [Release notes](https://github.com/sfackler/rust-openssl/releases) - [Commits](sfackler/rust-openssl@openssl-v0.10.64...openssl-v0.10.66) --- updated-dependencies: - dependency-name: openssl dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit introduces aliasing, where the `AT` keyword can be used on a reference declaration to create a `REFERENCE TO` pointer. Specifically `foo AT bar : DINT` internally resolves to `foo : REFERENCE TO DINT := REF(bar)`.
Fixes an issue where omitting a data-type in an alias variable would cause a panic in the parser. For example ``` FUNCTION main VAR s AT str; // omitted data-type END_VAR END_FUNCTION ```
This commit contains changes that are required to generate a global variable which will be used to store an array of addresses of other global variables in the program. The location of the globals within this array should be stable after a recompilation to support online change, so we support loading a pre-existing layout to ensure that for all globals that we see in both the current program and the pre-existing layout, their positions remain the same. Otherwise, any new globals will be placed in any empty spaces left by old globals, or appended on to the end of the array. The layout will then be saved back the the file used for saving and loading. Currently, to use this feature the flag `--got-layout-file=<file>` must be provided, which should specify the name of either a TOML or JSON file to use to save, and optionally load if the file already exists, the GOT layout. In future we will integrate this with a generic online change flag, whereby it will not be necessary to ask for a GOT layout file when we already know that we need it for online change.
This commit introduces the association of GOT indices to the LLVM index, which then allows us to utilise that when generating references to variables to check if a given variable has an entry in the GOT. If so, we obtain its index, and generate the necessary LLVM IR to access the address contained within the GOT rather than accessing the variable directly.
This change involves moving the generation of the GOT from variable_generator.rs to codegen.rs, in order to also cover not only global variables but also functions and 'programs' too. Once these have been given an associated index in the GOT we can use that to replace normal direct function calls with indirect calls to a function pointer stored in the GOT. We don't do this for calls with external linkage since these won't be subject to online change.
This commit also adds workarounds to make the integration of the generated code with our online change runtime work well. wip: almost done with Mutex hashmap NOTE: Reuse got_indices member from LlvmIndex instead wip: it works? src/test_utils: wip: Make these function compile after latest changes section_mangler: Fix emitted format wip codegen custom GOT as a non-external array wip: running onlinechangexmpl almost works! crashes on signal1() more hacks cleanup cleanup
dd98502
to
f18a4aa
Compare
f18a4aa
to
d4adaee
Compare
Add the
--online-change
option to enable mangling of functions, as well as globals once that bit is merged upstream. I'm guessing we might want to integrate this with thegot-layout-file
option you're adding in #6 but we can think about this later on