include $(common-objpfx)cflags-mcmodel-large.mk # Check for gcc to support the command-line switch, and for # binutils to support the hwN_plt() assembly operators and relocations. $(common-objpfx)cflags-mcmodel-large.mk: $(common-objpfx)config.make mcmodel=no; \ (echo 'int main() { return getuid(); }' | \ $(CC) -o /dev/null -xc - -mcmodel=large -fpic) && mcmodel=yes; \ echo "cflags-mcmodel-large = $$mcmodel" > $@ ifeq (yes,$(cflags-mcmodel-large)) ifeq ($(subdir),csu) # elf-init.c is in libc_nonshared.o (the end of the shared object) but # must reach the _init symbol at the very start of the shared object. CFLAGS-elf-init.c += -mcmodel=large # __gmon_start__ is at the very start of the shared object when linked # with profiling, but calls to libc.so via the PLT at the very end. CFLAGS-gmon-start.c += -mcmodel=large endif else # Don't try to compile assembly code with hwN_plt() directives if the # toolchain doesn't support -mcmodel=large. ifeq ($(subdir),csu) CPPFLAGS-start.S += -DNO_PLT_PCREL CPPFLAGS-crti.S += -DNO_PLT_PCREL endif ifeq ($(subdir),nptl) CPPFLAGS-pt-crti.S += -DNO_PLT_PCREL endif endif