Commit 34f1ee9b authored by Jan Beulich's avatar Jan Beulich

Force out-of-line instances of inline functions into .init.text in init-only code

Some compiler versions may choose to not inline certain functions, but
the check introduced in c/s 23003:768269c43914 wants .text to be

Also make sure an eventual error gets properly propagated even on the
first section of an object (.text typically being the first one), and
cover a broader set of sections.
Signed-off-by: default avatarJan Beulich <>
parent ef0b4142
......@@ -100,6 +100,8 @@ obj-y := $(patsubst %/,%/built-in.o,$(obj-y))
subdir-all := $(subdir-y) $(subdir-n)
$(filter %.init.o,$(obj-y) $(obj-bin-y)): CFLAGS += -DINIT_SECTIONS_ONLY
ifeq ($(lto),y)
# Would like to handle all object files as bitcode, but objects made from
# pure asm are in a different format and have to be collected separately.
......@@ -158,8 +160,10 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach n,1 2 4 8,rodata.str1.$(n)) \
%.init.o: %.o Makefile
$(OBJDUMP) -h $< | sed -n '/[0-9]/{s,00*,0,g;p}' | while read idx name sz rest; do \
case "$$name" in \
.text|.data|.bss) test $$sz = 0 || \
{ echo "Error: size of $<:$$name is 0x$$sz" >&2; exit $$idx; };; \
.text|.text.*|.data|.data.*|.bss) \
test $$sz != 0 || continue; \
echo "Error: size of $<:$$name is 0x$$sz" >&2; \
exit $(shell expr $$idx + 1);; \
esac; \
$(OBJCOPY) $(foreach s,$(SPECIAL_DATA_SECTIONS),--rename-section .$(s)=.init.$(s)) $< $@
......@@ -14,6 +14,15 @@
#define always_inline __inline__ __attribute__ ((always_inline))
#define noinline __attribute__((noinline))
* For sources indicated to have only init code, make sure even
* inline functions not expanded inline get placed in .init.text.
#include <xen/init.h>
#define __inline__ __inline__ __init
#define __attribute_pure__ __attribute__((pure))
#define __attribute_const__ __attribute__((__const__))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment