c – کامپایل کردن با پرچم های GPC retpoline

از نسخه 8 (بعدا به 7.3 ارسال شد)، GCC پشتیبانی Retpoline [0] را اضافه کرده است. در حالی که متوجه شدم که [citation needed] برای استفاده در پچ کردن کرنل برای Spectre (یعنی: [1][2]) در نظر گرفته شده است، که از برنامهنویسان معمولی از استفاده از این پرچم جلوگیری نمی کند.

بنابراین، آیا باید از پرچم های Retpoline ( -mindirect-branch ، -mfunction-return ، و مرتبط با آن؟

به عنوان مثال، من یک برنامه تولید رمز عبور رمزنگاری رمزنگاری شده را در C [3] نوشته ام. هنگامی که با استفاده از -mindirect-branch = thunk -mfunction-return = thunk کامپایل می شود، باینری حاصل از آن متفاوت است بدون استفاده از آن پرچم ها. آیا هیچ دلیلی برای انجام این کار وجود دارد یا هر مزیتی از منظر امنیتی؟