Commit Graph

3168 Commits

Author SHA1 Message Date
Ivan Krysak 78d0802f74 EFA: turn importPrototype into a helper struct 2024-03-18 19:32:34 +01:00
Ivan Krysak 9c9e642589 EnforceABI: stop using Layout 2024-03-18 19:32:34 +01:00
Ivan Krysak b1c2683b87 EFA: stop using Layout 2024-03-18 19:32:34 +01:00
Ivan Krysak c9c4d5c8b6 Lift: stop using Layout 2024-03-18 19:32:34 +01:00
Ivan Krysak dc16217f6d Layout: introduce usedRegisters helper 2024-03-18 19:32:34 +01:00
Ivan Krysak 0d5c93ed36 Distributor: add nextPositionBasedIndex 2024-03-18 19:32:34 +01:00
Ivan Krysak 408c37caf2 Layout: introduce finalStackOffset helper 2024-03-18 19:32:34 +01:00
Ivan Krysak 58e5fffb14 Layout: rework dump 2024-03-18 19:32:34 +01:00
Ivan Krysak cb113db124 PromoteSP: stop using Layout 2024-03-18 17:24:01 +01:00
Ivan Krysak f2ab83489c Yield: fix missing delay slots
When converting to PTML half of the delay slot logic
2024-03-18 11:40:32 +00:00
Ivan Krysak 44e5328477 Yield: add explicit directive support 2024-03-18 11:40:32 +00:00
Ivan Krysak 346cb498d3 Yield: make disassembly output objdump-like 2024-03-18 11:02:21 +00:00
Ivan Krysak 77fb7e6e5b Yield: introduce BasicBlockPrefix option 2024-03-18 10:58:55 +00:00
Ivan Krysak e5328290c6 Yield: reorder disassembly processing
This commit moves stuff around to enforce complete information being
present by the time the "Internal" assembly output is ready.

Because of that, the "Internal" format needed to change, now it uses
tag representation close to PTML as opposed to the one close to LLVM's
used before now.
2024-03-18 10:58:52 +00:00
Ivan Krysak 948d905752 Add PrintFullMetaAddress configuration option 2024-03-18 11:58:11 +01:00
Ivan Krysak 4d7785f0bb Yield: remove unused 'plain' assembly style
When needed similar results can be achieved using `GenerateTagLessPTML`
option of the `PTMLBuilder`.
2024-03-18 11:58:11 +01:00
Ivan Krysak e2018fa1c3 MetaAddress: add partial serialization option 2024-03-18 11:58:11 +01:00
Ivan Krysak 86fdb19b9f MetaAddress: pull separator into the header 2024-03-18 11:58:11 +01:00
Ivan Krysak 001afd7eea PermutationSelection: rethink iteration count
This change slightly improves the performance on slow to medium graphs
while leaving the performance on somewhat big ones untouched and
making the extremely big ones a lot worse. It also greatly improves
performance in the general case.
2024-03-18 11:58:11 +01:00
Ivan Krysak 7634b67153 PremutationSelection: introduce a bail condition
This allows algorithm to avoid spinning unnecessary where we choose
an overly-big iteration count.
2024-03-18 11:58:11 +01:00
Ivan Krysak 67c4a65122 Minor improvements 2024-03-18 11:58:11 +01:00
Ivan Krysak 2bffccaaf6 Move ImmediateStyle configuration to the model 2024-03-18 11:58:11 +01:00
Ivan Krysak 184aa03847 Move AddressStyle configuration to the model 2024-03-18 11:58:11 +01:00
Ivan Krysak 2827c9d7f7 Move UseATTSyntax configuration to the model 2024-03-18 11:58:11 +01:00
Ivan Krysak d781f3ae79 Yield: make disassembler config-aware 2024-03-18 07:20:41 +00:00
Ivan Krysak 371784afbd Model: introduce basic disassembly configuration 2024-03-18 07:20:41 +00:00
Ivan Krysak 870efbf201 Yield: introduce a conditional instruction prefix 2024-03-18 07:20:41 +00:00
Ivan Krysak a88b03aef8 Backend: fix an assertion on a lost typedef 2024-03-15 19:05:10 +01:00
Ivan Krysak 08041ba771 ToCFT: fix last stack argument verification
It was still broken, even after `feature/alignment-fixes`, so
this commit softens requirements even further, to allow some of
the desired cases to pass through the verifier.
2024-03-15 19:05:10 +01:00
Alessandro Di Federico 250354bd27 ValueMaterializer: work around unreachable blocks 2024-03-15 19:05:10 +01:00
Andrea Gussoni 55959f3fe5 InlineDispatcherSwitch: simplifySwitchBreak
Implement a new beautify pass which simplifies away `SwitchBreakNode`s
that constitute the entire body of `case`s in `switch`es, that do not,
have a `default` case. In such situations indeed, the semantics is,
preserved by removing the `SwitchBreakNode`s.
2024-03-15 14:50:42 +01:00
Andrea Gussoni a13c7677cf InlineDispatcherSwitch: generic weaved switches
We drop the assumption that each weaved `switch` must be nested inside
its related main `switch`, as a consequence of having generalized the
tiling algorithm in order to be able to emit a weaved `switch` as a AST
successors of the related main `switch`.
2024-03-15 14:27:00 +01:00
Andrea Gussoni 3defc2d431 InlineDispatcherSwitch: remove empty cases
Remove `switch` cases that may be simplified during the
`InlineDispatcherSwitch` beautify.
2024-03-15 14:27:00 +01:00
Andrea Gussoni 6c8d963f69 RestructureCFG: Reorganize debug graphs
Various improvements to the debug graphs for `restructure-cfg` and
`beautify`:
- Normalize casing and syntax of debug graphs.
- Improve the graph folders name and layout.
- Implement `CFGDumper` and `ASTDumper` for when we need a serialization
  with incremental indexes.
- Remove old and stale graph serializations.
2024-03-11 19:08:34 +01:00
Alessandro Di Federico 3fb9e58b0a Progress: cap line length to terminal size 2024-03-01 17:47:28 +01:00
Alessandro Di Federico 8939e2ad2a MakeModelGEPPass: do not use trySize 2024-03-01 16:11:28 +01:00
Alessandro Di Federico 308e7eccd9 MakeSegmentRef: limit strings to pointer-sized int 2024-03-01 16:11:28 +01:00
Giacomo Vercesi f8e50acc49 ImportFromCAnalysis: fix getOptionsfromCFGFile
Rewrite the `getOptionsfromCFGFile` function using llvm facilities.
The new code has the following features.
- It avoids the default behaviour of `std::fstream` of opening the file
in read-write.
- It's stricter should an error occur when opening the file.
2024-03-01 16:07:45 +01:00
Giacomo Vercesi 94904b2ad8 HeaderToModel: output all error lines
Change the behaviour of `HeaderToModelDiagnosticConsumer` to report all
error lines instead of the last one.
2024-03-01 16:07:45 +01:00
Alessandro Di Federico aec4be9b07 AttachDebugInfo: improve docs 2024-03-01 14:53:07 +01:00
Alessandro Di Federico ffe93548c5 Model ::size(): do not suspend tracking 2024-03-01 14:53:07 +01:00
Alessandro Di Federico 7f1a15d1bb Model: ignore empty ExportedNames 2024-03-01 14:53:07 +01:00
Alessandro Di Federico db4e5c4a5e Introduce dumpModel 2024-03-01 14:53:07 +01:00
Alessandro Di Federico c346e60ee7 PromoteOriginalName: no globals with local names
This commit ensures we do not introduce new global symbols that would
make local symbols invalid.
2024-03-01 14:53:06 +01:00
Alessandro Di Federico 6f4923265e Type verify: improve error reporting 2024-03-01 14:53:06 +01:00
Alessandro Di Federico 3cfd01e617 DwarfImporter: correctly handle Expected 2024-03-01 14:53:06 +01:00
Alessandro Di Federico c7868b4e7d Runner: improve logging 2024-03-01 14:53:06 +01:00
Alessandro Di Federico 0da9d1e1a4 Model: fix handling of 0-sized arguments
We used to support having a single `void` argument. It was for some
C-compatibility ambitions, but just omitting the argument is perfectly
fine.

Also, the DWARF importer has been fixed to handle typedef'd void as
arguments.

More in general, arguments are now required to always have a size.
2024-03-01 14:53:06 +01:00
Alessandro Di Federico d9e649d272 Importer/Binary: improve logging 2024-03-01 14:53:06 +01:00
Alessandro Di Federico aa882f1bef Importer/Binary: fix default XDG cache path 2024-03-01 14:53:06 +01:00