| 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 |
| |
| # We don't support long doubles as a distinct type. We don't need to set |
| # this variable; it's here mostly for documentational purposes. |
| |
| long-double-fcts = no |
| |
| ifeq ($(subdir),gmon) |
| sysdep_routines += _mcount |
| endif |
| |
| ifeq ($(subdir),elf) |
| # Extra shared linker files to link only into dl-allobjs.so. |
| sysdep-rtld-routines += dl-start __tls_get_addr |
| endif |