Skip to content
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

Improve online change flag behavior #8

Open
wants to merge 45 commits into
base: master
Choose a base branch
from

Conversation

CohenArthur
Copy link
Member

Only review af56f91

This commit makes it so that --got-layout-file is no longer optional, and makes the VariableGenerator keep track of the OnlineChange state passed through the command line.

ghaith and others added 2 commits June 12, 2024 08:27
* 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
@lewis-revill
Copy link

Perfect, looks good to me!

@CohenArthur
Copy link
Member Author

oh, one thing that is probably missing is not reading/writing the GOT file unless the user passed --online-change

CohenArthur and others added 25 commits June 12, 2024 17:43
…ions

Move variables to ELF sections with mangled names
Encode complex types in section mangling
…n-mangler

Add decoding to section mangler
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.
volsa and others added 15 commits June 19, 2024 15:51
…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
@CohenArthur CohenArthur force-pushed the improve-online-change-flag-behavior branch 2 times, most recently from daa7fad to 21340e6 Compare July 30, 2024 15:23
@CohenArthur CohenArthur force-pushed the improve-online-change-flag-behavior branch 2 times, most recently from 8d8e94e to 11b09bf Compare July 30, 2024 16:05
@CohenArthur CohenArthur force-pushed the improve-online-change-flag-behavior branch from 11b09bf to 3382d26 Compare July 30, 2024 16:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants