■ ■ ■ ■ ■ ■
compel/arch/x86/src/lib/include/uapi/asm/sigframe.h
skipped 2 lines 3 3 4 4 #include <stdint.h> 5 5 #include <stdbool.h> 6 + #include <string.h> 6 7 7 8 #include <compel/asm/fpu.h> 8 9 #include <compel/plugins/std/syscall-codes.h> skipped 66 lines 75 76 76 77 typedef uint32_t compat_uptr_t; 77 78 typedef uint32_t compat_size_t; 79 + typedef uint32_t compat_sigset_word; 78 80 79 81 typedef struct compat_siginfo { 80 82 int si_signo; skipped 8 lines 89 91 compat_size_t ss_size; 90 92 } compat_stack_t; 91 93 94 + #define _COMPAT_NSIG 64 95 + #define _COMPAT_NSIG_BPW 32 96 + #define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) 97 + 98 + typedef struct { 99 + compat_sigset_word sig[_COMPAT_NSIG_WORDS]; 100 + } compat_sigset_t; 101 + 92 102 struct ucontext_ia32 { 93 103 unsigned int uc_flags; 94 104 unsigned int uc_link; 95 105 compat_stack_t uc_stack; 96 106 struct rt_sigcontext_32 uc_mcontext; 97 - k_rtsigset_t uc_sigmask; /* mask last for extensibility */ 107 + compat_sigset_t uc_sigmask; /* mask last for extensibility */ 98 108 }; 99 109 100 110 struct rt_sigframe_ia32 { skipped 26 lines 127 137 bool is_native; 128 138 }; 129 139 130 - #define RT_SIGFRAME_UC_SIGMASK(rt_sigframe) \ 131 - ((rt_sigframe->is_native) ? \ 132 - (&rt_sigframe->native.uc.uc_sigmask) : \ 133 - ((k_rtsigset_t *)(void *)&rt_sigframe->compat.uc.uc_sigmask)) 140 + static inline 141 + void rt_sigframe_copy_sigset(struct rt_sigframe *to, k_rtsigset_t *from) 142 + { 143 + size_t sz = sizeof(k_rtsigset_t); 144 + 145 + BUILD_BUG_ON(sz != sizeof(compat_sigset_t)); 146 + if (to->is_native) 147 + memcpy(&to->native.uc.uc_sigmask, from, sz); 148 + else 149 + memcpy(&to->compat.uc.uc_sigmask, from, sz); 150 + } 151 + 152 + static inline 153 + void rt_sigframe_erase_sigset(struct rt_sigframe *sigframe) 154 + { 155 + size_t sz = sizeof(k_rtsigset_t); 156 + 157 + if (sigframe->is_native) 158 + memset(&sigframe->native.uc.uc_sigmask, 0, sz); 159 + else 160 + memset(&sigframe->compat.uc.uc_sigmask, 0, sz); 161 + } 134 162 135 163 #define RT_SIGFRAME_REGIP(rt_sigframe) \ 136 164 ((rt_sigframe->is_native) ? \ skipped 57 lines