mirror of
https://github.com/xcat2/xNBA.git
synced 2024-12-24 12:11:33 +00:00
[build] Mark weak functions noinline
Weak functions whose visibility is hidden may be inlined due to a bug in GCC. Explicitly mark weak functions noinline to work around the problem. This makes the PXE_MENU config option work again, the PXE boot menu was never being called because the compiler inlined a weak stub function. The GCC bug was identified and fixed by Richard Sandiford <rdsandiford@googlemail.com> but in the meantime iPXE needs to implement a workaround. Reported-by: Steve Jones <steve@squaregoldfish.co.uk> Reported-by: Shao Miller <shao.miller@yrdsb.edu.on.ca> Suggested-by: Joshua Oreman <oremanj@rwcr.net> Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
3338a03982
commit
8ee6d216e4
@ -181,8 +181,15 @@ REQUEST_EXPANDED ( CONFIG_SYMBOL );
|
||||
|
||||
#ifndef ASSEMBLY
|
||||
|
||||
/** Declare a function as weak (use *before* the definition) */
|
||||
#define __weak __attribute__ (( weak ))
|
||||
/** Declare a function as weak (use *before* the definition)
|
||||
*
|
||||
* Due to a bug in at least GCC 4.4.4 and earlier, weak symbols may be
|
||||
* inlined if they have hidden visibility (see above for why hidden
|
||||
* visibility is used). This results in the non-weak symbol never
|
||||
* being used, so explicitly mark the function as noinline to prevent
|
||||
* inlining.
|
||||
*/
|
||||
#define __weak __attribute__ (( weak, noinline ))
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user