mirror of
https://github.com/partic2/libffi
synced 2026-11-11 02:27:19 +00:00
i386: Fix missing break; in case statement leading to incorrectly returned FFI_BAD_ABI (#437)
* i386: Add missing break triggering dead store static analyzer checks. Register calling sequence is being reported as bad ABI instead of working as intended. Found-by: Clang Static Analysis Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@macports.org> * Mark ffi arm sysv entry points as private_extern. Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@macports.org> * x86_64: Add implementation of compact unwind for ffi_call_unix64. Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
This commit is contained in:
committed by
Anthony Green
parent
b55baf0b50
commit
1d704051b2
@@ -85,6 +85,7 @@
|
|||||||
|
|
||||||
#define ARM_FUNC_START(name) \
|
#define ARM_FUNC_START(name) \
|
||||||
.globl CNAME(name); \
|
.globl CNAME(name); \
|
||||||
|
.private_extern CNAME(name); \
|
||||||
FFI_HIDDEN(CNAME(name)); \
|
FFI_HIDDEN(CNAME(name)); \
|
||||||
ARM_FUNC_START_LOCAL(name)
|
ARM_FUNC_START_LOCAL(name)
|
||||||
|
|
||||||
|
|||||||
@@ -545,6 +545,7 @@ ffi_prep_closure_loc (ffi_closure* closure,
|
|||||||
case FFI_REGISTER:
|
case FFI_REGISTER:
|
||||||
dest = ffi_closure_REGISTER;
|
dest = ffi_closure_REGISTER;
|
||||||
op = 0x68; /* pushl imm */
|
op = 0x68; /* pushl imm */
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return FFI_BAD_ABI;
|
return FFI_BAD_ABI;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -517,6 +517,47 @@ L(SFDE5):
|
|||||||
L(EFDE5):
|
L(EFDE5):
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
.subsections_via_symbols
|
.subsections_via_symbols
|
||||||
|
.section __LD,__compact_unwind
|
||||||
|
|
||||||
|
/* compact unwind for ffi_call_unix64 */
|
||||||
|
.quad C(ffi_call_unix64)
|
||||||
|
.set L1,L(UW4)-L(UW0)
|
||||||
|
.long L1
|
||||||
|
.long 0x04000000 /* use dwarf unwind info */
|
||||||
|
.quad 0
|
||||||
|
.quad 0
|
||||||
|
|
||||||
|
/* compact unwind for ffi_closure_unix64_sse */
|
||||||
|
.quad C(ffi_closure_unix64_sse)
|
||||||
|
.set L2,L(UW7)-L(UW5)
|
||||||
|
.long L2
|
||||||
|
.long 0x04000000 /* use dwarf unwind info */
|
||||||
|
.quad 0
|
||||||
|
.quad 0
|
||||||
|
|
||||||
|
/* compact unwind for ffi_closure_unix64 */
|
||||||
|
.quad C(ffi_closure_unix64)
|
||||||
|
.set L3,L(UW11)-L(UW8)
|
||||||
|
.long L3
|
||||||
|
.long 0x04000000 /* use dwarf unwind info */
|
||||||
|
.quad 0
|
||||||
|
.quad 0
|
||||||
|
|
||||||
|
/* compact unwind for ffi_go_closure_unix64_sse */
|
||||||
|
.quad C(ffi_go_closure_unix64_sse)
|
||||||
|
.set L4,L(UW14)-L(UW12)
|
||||||
|
.long L4
|
||||||
|
.long 0x04000000 /* use dwarf unwind info */
|
||||||
|
.quad 0
|
||||||
|
.quad 0
|
||||||
|
|
||||||
|
/* compact unwind for ffi_go_closure_unix64 */
|
||||||
|
.quad C(ffi_go_closure_unix64)
|
||||||
|
.set L5,L(UW17)-L(UW15)
|
||||||
|
.long L5
|
||||||
|
.long 0x04000000 /* use dwarf unwind info */
|
||||||
|
.quad 0
|
||||||
|
.quad 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __x86_64__ */
|
#endif /* __x86_64__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user