diff mbox

[AArch64] elf toolchain does not pass -shared linker option

Message ID 55AFD147.4010106@arm.com
State New
Headers show

Commit Message

Szabolcs Nagy July 22, 2015, 5:22 p.m. UTC
Valid linker options should be treated for elf consistently
with the linux-gnu target.

I'm not sure about the undocumented -h option (blindly copied
LINUX_TARGET_LINK_SPEC from aarch64-linux without the
dynamic-linker flag).

(Not passing -shared can cause broken vdso.so in the linux
kernel when it is built with the elf toolchain.)

2015-07-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>

	* config/aarch64/aarch64-elf-raw.h (LINK_SPEC): Handle -h, -static,
	-shared, -symbolic, -rdynamic.

Comments

Marcus Shawcroft July 24, 2015, 1:20 p.m. UTC | #1
On 22 July 2015 at 18:22, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:

> 2015-07-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>
>
>         * config/aarch64/aarch64-elf-raw.h (LINK_SPEC): Handle -h, -static,
>         -shared, -symbolic, -rdynamic.

OK, this should be back ported to 5 and 4.9 aswell.

Thanks
/Marcus
Szabolcs Nagy July 24, 2015, 4:18 p.m. UTC | #2
On 24/07/15 14:20, Marcus Shawcroft wrote:
> On 22 July 2015 at 18:22, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:
> 
>> 2015-07-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>
>>
>>         * config/aarch64/aarch64-elf-raw.h (LINK_SPEC): Handle -h, -static,
>>         -shared, -symbolic, -rdynamic.
> 
> OK, this should be back ported to 5 and 4.9 aswell.

Committed to trunk in r226159.
Backported to 5 in r226166.
Backported to 4.9 in r226171.
Christophe Lyon Aug. 5, 2015, 11:49 a.m. UTC | #3
On 24 July 2015 at 18:18, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:
> On 24/07/15 14:20, Marcus Shawcroft wrote:
>> On 22 July 2015 at 18:22, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:
>>
>>> 2015-07-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>
>>>
>>>         * config/aarch64/aarch64-elf-raw.h (LINK_SPEC): Handle -h, -static,
>>>         -shared, -symbolic, -rdynamic.
>>
>> OK, this should be back ported to 5 and 4.9 aswell.
>
> Committed to trunk in r226159.
> Backported to 5 in r226166.
> Backported to 4.9 in r226171.
>
Hi,

Since these commits, I am seeing g++.dg/ipa/devirt-28a.C failing on
aarch64-none-elf target.
This is because the testcase uses -Wl,--no-undefined, and the linker
complains about undefined references to libc symbols.

As a workaround, I added '-lc' to the *libgloss entry in rdimon.specs.

Should this change be applied to newlib/libgloss, or did I
mis-configure something?

Thanks

Christophe.
diff mbox

Patch

diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index bd5e51c..d8c682f 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -44,7 +44,12 @@ 
 #endif
 
 #ifndef LINK_SPEC
-#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X \
+#define LINK_SPEC "%{h*}			\
+   %{static:-Bstatic}				\
+   %{shared:-shared}				\
+   %{symbolic:-Bsymbolic}			\
+   %{!static:%{rdynamic:-export-dynamic}}	\
+   %{mbig-endian:-EB} %{mlittle-endian:-EL} -X	\
   -maarch64elf%{mabi=ilp32*:32}%{mbig-endian:b}" \
   CA53_ERR_835769_SPEC \
   CA53_ERR_843419_SPEC