public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* RFC: Extending --with-advance-toolchain to aarch64
@ 2019-10-09 22:30 Steve Ellcey
  2019-10-10  0:19 ` Alan Modra
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Steve Ellcey @ 2019-10-09 22:30 UTC (permalink / raw)
  To: gcc, tuliom

I have a question about building a toolchain that uses (at run time) a
dynamic linker and system libraries and headers that are in a non-standard
place.

I just noticed the IBM --with-advance-toolchain option and I would
like to replicate it for aarch64.

Let me first describe what I do now:

configure/build BINUTILS with --prefix=${X} --with-sysroot=${X}
configure/build an initial GCC (all-gcc all-target-libgcc) with
	--prefix=${X} --with-sysroot=${X}
configure/build GLIBC, using that GCC, with --prefix=/usr,
	followed by install with DESTDIR=${X}
configure/build final GCC with --prefix=${X} --with-sysroot=${X}

This all works, but if I want my executables to find the shared libraries and
dynamic linker from ${X} when they are running, I need to compile things with:

   -Wl,--rpath=${X}/lib64 -Wl,--dynamic-linker=${X}/lib/ld-linux-aarch64.so.1

I would like these used by default so I took some ideas from
--with-advance-toolchain and used that to automatically add these options
to LINK_SPEC (see attached patch).  I can compile and link a program with
this setup, but when I run the program I get:

% ./x
Inconsistency detected by ld.so: get-dynamic-info.h: 147: elf_get_dynamic_info: 
Assertion `info[DT_RPATH] == NULL' failed!

I am not sure why this doesn't work.  Can anyone help me understand
why this doesn't work or help me figure out how else I might be able to
get the functionality I want. That is: to use shared libraries and a dynamic
linker (at run time) that are in a non-standard location without needing
to compile or link with special flags.

Steve Ellcey
sellcey@marvell.com


Here is the patch I am trying, I use the --with-advance-toolchain option as
an absolute pathname instead of relative to /opt like IBM does and I set it
to ${X} in a build that otherwise looks like what I describe above.  Everything
works until I start the final GCC build which is when I get the assertion.


diff --git a/gcc/config.gcc b/gcc/config.gcc
index 481bc9586a7..0532139b0b1 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -3879,7 +3879,7 @@ fi
 supported_defaults=
 case "${target}" in
        aarch64*-*-*)
-               supported_defaults="abi cpu arch"
+               supported_defaults="abi cpu arch advance_toolchain"
                for which in cpu arch; do
 
                        eval "val=\$with_$which"
@@ -3981,6 +3981,23 @@ case "${target}" in
                          exit 1
                        fi
                done
+               if test "x$with_advance_toolchain" != x; then
+                   at=$with_advance_toolchain
+                   if test -d "$at/." -a -d "$at/include/."; then
+                       tm_file="$tm_file ./advance-toolchain.h"
+                       (
+                        echo "/* Use Advance Toolchain $at */"
+                        echo "#undef  LINK_ADVANCE_SPEC"
+                        echo "#define LINK_ADVANCE_SPEC" \
+                          "\"--rpath=$at/lib%{mabi=ilp32:ilp32}%{mabi=lp64:64} \
+                          "--rpath=$at/usr/lib%{mabi=ilp32:ilp32}%{mabi=lp64:64} \
+                          "--dynamic-linker=$at/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1\""
+                       ) > advance-toolchain.h
+                   else
+                       echo "Unknown advance-toolchain $at"
+                       exit 1
+                   fi
+               fi
                ;;
 
        alpha*-*-*)
diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
index 6ff2163b633..d76fa56c73e 100644
--- a/gcc/config/aarch64/aarch64-linux.h
+++ b/gcc/config/aarch64/aarch64-linux.h
@@ -47,7 +47,10 @@
    -maarch64linux%{mabi=ilp32:32}%{mbig-endian:b}"
 
 
-#define LINK_SPEC LINUX_TARGET_LINK_SPEC AARCH64_ERRATA_LINK_SPEC
+#ifndef LINK_ADVANCE_SPEC
+#define LINK_ADVANCE_SPEC
+#endif
+#define LINK_SPEC LINUX_TARGET_LINK_SPEC AARCH64_ERRATA_LINK_SPEC LINK_ADVANCE_SPEC
 
 #define GNU_USER_TARGET_MATHFILE_SPEC \
   "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-10-11  8:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-09 22:30 RFC: Extending --with-advance-toolchain to aarch64 Steve Ellcey
2019-10-10  0:19 ` Alan Modra
2019-10-10 16:18   ` Steve Ellcey
2019-10-10 16:41 ` Florian Weimer
2019-10-10 17:55   ` Steve Ellcey
2019-10-11  8:28     ` Florian Weimer
2019-10-10 18:38 ` Tulio Magno Quites Machado Filho
2019-10-10 23:21   ` Steve Ellcey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).