aboutsummaryrefslogtreecommitdiff
blob: dcb8777a54ac186dda1878dfea147bbd0de86e83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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