Commit Graph

28 Commits

Author SHA1 Message Date
Ivan Krysak 66c96fb128 ABI: improve RegisterStateDeductions
Split the interface into two functions: `enforce.*` returning the map by
value and `tryApply.*` returning an `std::optional`.

Improve non-positional single deduction function to better reflect
some corner cases (for example how a required `NoOrDead` register
argument is handled).

Enforce a position-based deduction corner case where it's impossible to
deduce whether the argument is passed in the GPR or the vector one -
now GPR takes precedence in those cases.
2022-04-15 18:25:11 +02:00
Ivan Krysak c374f8013a ABI: separate mips and mipsel ABIs 2022-04-15 18:25:11 +02:00
Ivan Krysak ddd2968faa ABI: make abi::RegisterState::Map assignable 2022-04-15 18:25:11 +02:00
Pietro Fezzardi b4c733ab57 Move Concepts.h into include/ADT for better reuse 2022-03-30 17:09:24 +02:00
Ivan Krysak 59b5d3dce4 Add runtime ABI trait access 2022-03-28 15:43:34 +02:00
Ivan Krysak a10415fd0b Make the function layout argument type aware 2022-03-28 15:43:34 +02:00
Ivan Krysak 1b03adca5e Make function type convertions self-sufficient 2022-03-28 15:38:04 +02:00
Ivan Krysak 20bb0a2b90 Fix some minor abi::FunctionType issues 2022-03-28 15:37:59 +02:00
Ivan Krysak 5108c3e50f Introduce ABI-based register sorting 2022-03-28 15:37:55 +02:00
Ivan Krysak 522b760a12 Fix a problem with SystemV_x86_64 abi::Trait 2022-03-28 15:34:42 +02:00
Ivan Krysak c6370816f7 Drop the abi::revng namespace 2022-03-28 15:32:06 +02:00
Alessandro Di Federico ea6383c476 mv {d,registerD}efaultFunctionPrototype 2022-03-17 14:10:50 +01:00
Alessandro Di Federico 5e38805063 Rename detail namespaces into revng::detail 2022-03-11 15:37:12 +01:00
Alessandro Di Federico 984aea88ae Minor changes 2022-02-25 00:32:46 +01:00
Ivan Krysak 868970c5e7 ABI: specify stack alignment 2022-02-25 00:32:01 +01:00
Ivan Krysak fca0df8dd2 ABI: specify who's responsible for stack cleanup 2022-02-25 00:31:37 +01:00
Ivan Krysak 2c35fc87d5 Conversion to RawFunctionType cannot fail 2022-02-25 00:31:14 +01:00
Ivan Krysak b14fee7515 Implement abi::FunctionType::layout()
The `Layout` data structure works as a common view over
`RawFunctionType` and `CABIFunctionType`.
2022-02-25 00:30:14 +01:00
Ivan Krysak 541643afc3 Move function type conversion to librevngABI 2022-02-24 23:56:30 +01:00
Ivan Krysak 371f5c4555 Implement ABI-based register state deductions
This will help EarlyFunctionAnalysis in providing more accurate results,
in case assumptions about the ABI can be made.
2022-02-14 13:35:37 +01:00
Ivan Krysak 9771ae29d6 Move RegisterState to ABI 2022-02-14 13:35:37 +01:00
Ivan Krysak cafe44097b ABI: introduce default function type generation 2022-02-14 13:35:37 +01:00
Ivan Krysak 5c671e8446 Add abi::Trait specialization for s390x ABI 2022-02-14 13:35:36 +01:00
Ivan Krysak 75c00f5112 Add abi::Trait specialization for mips ABI 2022-02-14 13:35:36 +01:00
Ivan Krysak c9daab2ce4 Add abi::Trait specializations for arm ABIs 2022-02-14 13:35:36 +01:00
Ivan Krysak 4069d547b6 Add abi::Trait specializations for x86 ABIs 2022-02-14 13:35:36 +01:00
Ivan Krysak 756d0f7376 Add abi::Trait specializations for x86_64 ABIs 2022-02-14 13:35:36 +01:00
Ivan Krysak d30c4c54fb Introduce trait to describe ABIs 2022-02-14 13:35:36 +01:00