@@ -68,6 +68,10 @@ pub enum AbiValue {
6868 /// Whether unwinding across this abi boundary is allowed (`*-unwind`).
6969 unwind : bool ,
7070 } ,
71+
72+ /* Other */
73+ /// UEFI ABI, usually an alias of C, but sometimes an arch-specific alias.
74+ EfiApi ,
7175}
7276
7377impl AbiValue {
@@ -76,6 +80,7 @@ impl AbiValue {
7680 pub const fn allows_unwind ( & self ) -> bool {
7781 match * self {
7882 AbiValue :: Rust => true ,
83+ AbiValue :: EfiApi => false ,
7984 AbiValue :: C { unwind }
8085 | AbiValue :: System { unwind }
8186 | AbiValue :: Aapcs { unwind }
@@ -106,6 +111,8 @@ impl AbiValue {
106111 let arch_arm = cfg ! ( target_arch = "arm" ) ;
107112 let arch_aarch64 = cfg ! ( target_arch = "aarch64" ) ;
108113 let arch_arm_any = arch_arm || arch_aarch64;
114+ let arch_riscv32 = cfg ! ( target_arch = "riscv32" ) ;
115+ let arch_riscv64 = cfg ! ( target_arch = "riscv64" ) ;
109116
110117 #[ allow( clippy:: match_same_arms) ]
111118 let out = match self {
@@ -144,6 +151,13 @@ impl AbiValue {
144151 AbiValue :: SysV64 { unwind } if arch_x86_64 => AbiValue :: SysV64 { unwind } ,
145152 AbiValue :: Win64 { unwind } if arch_x86_64 => AbiValue :: Win64 { unwind } ,
146153 AbiValue :: SysV64 { .. } | AbiValue :: Win64 { .. } => return None ,
154+
155+ AbiValue :: EfiApi if arch_x86_64 => AbiValue :: Win64 { unwind : false } ,
156+ AbiValue :: EfiApi if arch_arm => AbiValue :: Aapcs { unwind : false } ,
157+ AbiValue :: EfiApi if arch_x86 || arch_aarch64 || arch_riscv32 || arch_riscv64 => {
158+ AbiValue :: C { unwind : false }
159+ }
160+ AbiValue :: EfiApi => return None ,
147161 } ;
148162
149163 Some ( out)
@@ -160,8 +174,8 @@ macro_rules! abi_kind_impl {
160174 (
161175 $t: ty => {
162176 $(
163- $variant: ident $( { unwind: $uw: literal } ) ? => $tok: literal,
164- ) *
177+ $variant: ident $( { unwind: $uw: literal } ) ? => $tok: literal
178+ ) , * $ ( , ) ?
165179 }
166180 ) => {
167181 impl $t {
@@ -220,4 +234,5 @@ abi_kind_impl!(AbiValue => {
220234 SysV64 { unwind: true } => "sysv64-unwind" ,
221235 Win64 { unwind: false } => "win64" ,
222236 Win64 { unwind: true } => "win64-unwind" ,
237+ EfiApi => "efiapi"
223238} ) ;
0 commit comments