浏览代码

add back in the LDPIEFLAG since -fPIE does not imply -pie

Mike Frysinger 20 年之前
父节点
当前提交
afd3f33a07
共有 1 个文件被更改,包括 17 次插入1 次删除
  1. 17 1
      Rules.mak

+ 17 - 1
Rules.mak

@@ -222,6 +222,12 @@ endif
 ifeq ($(strip $(TARGET_ARCH)),frv)
 	CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd
 	CPU_CFLAGS-$(CONFIG_FRV)+=-mfdpic
+	# Using -pie causes the program to have an interpreter, which is
+	# forbidden, so we must make do with -shared.  Unfortunately,
+	# -shared by itself would get us global function descriptors
+	# and calls through PLTs, dynamic resolution of symbols, etc,
+	# which would break as well, but -Bsymbolic comes to the rescue.
+	export LDPIEFLAG:=-shared -Bsymbolic
 	UCLIBC_LDSO=ld.so.1
 endif
 
@@ -230,7 +236,17 @@ ifndef PIEFLAG
 ifneq ($(UCLIBC_BUILD_PIE),y)
 export PIEFLAG:=
 else
-export PIEFLAG:=$(call check_gcc,$(PIEFLAG_NAME),)
+export PIEFLAG:=$(call check_gcc,$(PIEFLAG_NAME),$(PICFLAG))
+endif
+endif
+# We need to keep track of both the CC PIE flag (above) as 
+# well as the LD PIE flag (below) because we can't rely on 
+# gcc passing -pie if we used -fPIE
+ifndef LDPIEFLAG
+ifneq ($(UCLIBC_BUILD_PIE),y)
+export LDPIEFLAG:=
+else
+export LDPIEFLAG:=$(shell $(LD) --help | grep -q pie && echo "-Wl,-pie")
 endif
 endif