Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd
Checks
Commit Message
Tested by building a toolchain and compiling gnumach for x86_64 [1].
This is the basic version without unwind support which I think is only required to
implement exceptions.
[1] https://github.com/flavioc/cross-hurd/blob/master/bootstrap-kernel.sh.
---
gcc/config.gcc | 5 ++++-
gcc/config/i386/gnu64.h | 40 +++++++++++++++++++++++++++++++++
libgcc/config.host | 8 ++++++-
libgcc/config/i386/gnu-unwind.h | 10 +++++++++
4 files changed, 61 insertions(+), 2 deletions(-)
create mode 100644 gcc/config/i386/gnu64.h
Comments
Friendly ping
On Mon, Dec 26, 2022 at 12:34 PM Flavio Cruz <flaviocruz@gmail.com> wrote:
> Tested by building a toolchain and compiling gnumach for x86_64 [1].
> This is the basic version without unwind support which I think is only
> required to
> implement exceptions.
>
> [1] https://github.com/flavioc/cross-hurd/blob/master/bootstrap-kernel.sh.
>
> ---
> gcc/config.gcc | 5 ++++-
> gcc/config/i386/gnu64.h | 40 +++++++++++++++++++++++++++++++++
> libgcc/config.host | 8 ++++++-
> libgcc/config/i386/gnu-unwind.h | 10 +++++++++
> 4 files changed, 61 insertions(+), 2 deletions(-)
> create mode 100644 gcc/config/i386/gnu64.h
>
> diff --git a/gcc/config.gcc b/gcc/config.gcc
> index 95190233820..0e2b15768bf 100644
> --- a/gcc/config.gcc
> +++ b/gcc/config.gcc
> @@ -1955,7 +1955,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu |
> i[34567]86-*-gnu* | i[34567]8
> ;;
> esac
> ;;
> -x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
> +x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-gnu*)
> tm_file="${tm_file} i386/unix.h i386/att.h elfos.h gnu-user.h
> glibc-stdint.h \
> i386/x86-64.h i386/gnu-user-common.h i386/gnu-user64.h"
> case ${target} in
> @@ -1966,6 +1966,9 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
> x86_64-*-kfreebsd*-gnu)
> tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu64.h"
> ;;
> + x86_64-*-gnu*)
> + tm_file="${tm_file} gnu.h i386/gnu64.h"
> + ;;
> esac
> tmake_file="${tmake_file} i386/t-linux64"
> x86_multilibs="${with_multilib_list}"
> diff --git a/gcc/config/i386/gnu64.h b/gcc/config/i386/gnu64.h
> new file mode 100644
> index 00000000000..a1ecfaa1cdb
> --- /dev/null
> +++ b/gcc/config/i386/gnu64.h
> @@ -0,0 +1,40 @@
> +/* Configuration for an x86_64 running GNU with ELF as the target
> machine. */
> +
> +/*
> +Copyright (C) 2022 Free Software Foundation, Inc.
> +
> +This file is part of GCC.
> +
> +GCC is free software: you can redistribute it and/or modify
> +it under the terms of the GNU General Public License as published by
> +the Free Software Foundation, either version 3 of the License, or
> +(at your option) any later version.
> +
> +GCC is distributed in the hope that it will be useful,
> +but WITHOUT ANY WARRANTY; without even the implied warranty of
> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +GNU General Public License for more details.
> +
> +You should have received a copy of the GNU General Public License
> +along with GCC. If not, see <http://www.gnu.org/licenses/>.
> +*/
> +
> +#define GNU_USER_LINK_EMULATION32 "elf_i386"
> +#define GNU_USER_LINK_EMULATION64 "elf_x86_64"
> +#define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
> +
> +#undef GNU_USER_DYNAMIC_LINKER
> +#define GNU_USER_DYNAMIC_LINKER32 "/lib/ld.so.1"
> +#define GNU_USER_DYNAMIC_LINKER64 "/lib/ld-x86-64.so.1"
> +#define GNU_USER_DYNAMIC_LINKERX32 "/lib/ld-x32.so.1"
> +
> +#undef STARTFILE_SPEC
> +#if defined HAVE_LD_PIE
> +#define STARTFILE_SPEC \
> + "%{!shared:
> %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};pie:Scrt1.o%s;static:crt0.o%s;:crt1.o%s}}
> \
> + crti.o%s
> %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
> +#else
> +#define STARTFILE_SPEC \
> + "%{!shared:
> %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};static:crt0.o%s;:crt1.o%s}} \
> + crti.o%s
> %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
> +#endif
> diff --git a/libgcc/config.host b/libgcc/config.host
> index eb23abe89f5..75fd1b778fe 100644
> --- a/libgcc/config.host
> +++ b/libgcc/config.host
> @@ -751,6 +751,12 @@ x86_64-*-kfreebsd*-gnu)
> tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff
> t-dfprules"
> tm_file="${tm_file} i386/elf-lib.h"
> ;;
> +x86_64-*-gnu*)
> + extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o
> crtfastmath.o"
> + tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff
> t-dfprules"
> + tm_file="${tm_file} i386/elf-lib.h"
> + md_unwind_header=i386/gnu-unwind.h
> + ;;
> i[34567]86-pc-msdosdjgpp*)
> ;;
> i[34567]86-*-lynxos*)
> @@ -1523,7 +1529,7 @@ esac
> case ${host} in
> i[34567]86-*-linux* | x86_64-*-linux* | \
> i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
> - i[34567]86-*-gnu*)
> + i[34567]86-*-gnu* | x86_64-*-gnu*)
> tmake_file="${tmake_file} t-tls i386/t-linux i386/t-msabi
> t-slibgcc-libgcc"
> if test "$libgcc_cv_cfi" = "yes"; then
> tmake_file="${tmake_file} t-stack i386/t-stack-i386"
> diff --git a/libgcc/config/i386/gnu-unwind.h
> b/libgcc/config/i386/gnu-unwind.h
> index 25eb690e370..2cbfc40ea7e 100644
> --- a/libgcc/config/i386/gnu-unwind.h
> +++ b/libgcc/config/i386/gnu-unwind.h
> @@ -30,6 +30,14 @@ see the files COPYING3 and COPYING.RUNTIME
> respectively. If not, see
>
> #include <signal.h>
>
> +#ifdef __x86_64__
> +
> +/*
> + * TODO: support for 64 bits needs to be implemented.
> + */
> +
> +#else /* ifdef __x86_64__ */
> +
> #define MD_FALLBACK_FRAME_STATE_FOR x86_gnu_fallback_frame_state
>
> static _Unwind_Reason_Code
> @@ -138,4 +146,6 @@ x86_gnu_fallback_frame_state
> return _URC_NO_REASON;
> }
>
> +#endif /* ifdef __x86_64__ */
> +
> #endif /* ifndef inhibit_libc */
> --
> 2.35.1
>
>
Ping
On Mon, Jan 9, 2023 at 1:00 PM Flávio Cruz <flaviocruz@gmail.com> wrote:
> Friendly ping
>
> On Mon, Dec 26, 2022 at 12:34 PM Flavio Cruz <flaviocruz@gmail.com> wrote:
>
>> Tested by building a toolchain and compiling gnumach for x86_64 [1].
>> This is the basic version without unwind support which I think is only
>> required to
>> implement exceptions.
>>
>> [1] https://github.com/flavioc/cross-hurd/blob/master/bootstrap-kernel.sh
>> .
>>
>> ---
>> gcc/config.gcc | 5 ++++-
>> gcc/config/i386/gnu64.h | 40 +++++++++++++++++++++++++++++++++
>> libgcc/config.host | 8 ++++++-
>> libgcc/config/i386/gnu-unwind.h | 10 +++++++++
>> 4 files changed, 61 insertions(+), 2 deletions(-)
>> create mode 100644 gcc/config/i386/gnu64.h
>>
>> diff --git a/gcc/config.gcc b/gcc/config.gcc
>> index 95190233820..0e2b15768bf 100644
>> --- a/gcc/config.gcc
>> +++ b/gcc/config.gcc
>> @@ -1955,7 +1955,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu |
>> i[34567]86-*-gnu* | i[34567]8
>> ;;
>> esac
>> ;;
>> -x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
>> +x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-gnu*)
>> tm_file="${tm_file} i386/unix.h i386/att.h elfos.h gnu-user.h
>> glibc-stdint.h \
>> i386/x86-64.h i386/gnu-user-common.h i386/gnu-user64.h"
>> case ${target} in
>> @@ -1966,6 +1966,9 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
>> x86_64-*-kfreebsd*-gnu)
>> tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu64.h"
>> ;;
>> + x86_64-*-gnu*)
>> + tm_file="${tm_file} gnu.h i386/gnu64.h"
>> + ;;
>> esac
>> tmake_file="${tmake_file} i386/t-linux64"
>> x86_multilibs="${with_multilib_list}"
>> diff --git a/gcc/config/i386/gnu64.h b/gcc/config/i386/gnu64.h
>> new file mode 100644
>> index 00000000000..a1ecfaa1cdb
>> --- /dev/null
>> +++ b/gcc/config/i386/gnu64.h
>> @@ -0,0 +1,40 @@
>> +/* Configuration for an x86_64 running GNU with ELF as the target
>> machine. */
>> +
>> +/*
>> +Copyright (C) 2022 Free Software Foundation, Inc.
>> +
>> +This file is part of GCC.
>> +
>> +GCC is free software: you can redistribute it and/or modify
>> +it under the terms of the GNU General Public License as published by
>> +the Free Software Foundation, either version 3 of the License, or
>> +(at your option) any later version.
>> +
>> +GCC is distributed in the hope that it will be useful,
>> +but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +GNU General Public License for more details.
>> +
>> +You should have received a copy of the GNU General Public License
>> +along with GCC. If not, see <http://www.gnu.org/licenses/>.
>> +*/
>> +
>> +#define GNU_USER_LINK_EMULATION32 "elf_i386"
>> +#define GNU_USER_LINK_EMULATION64 "elf_x86_64"
>> +#define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
>> +
>> +#undef GNU_USER_DYNAMIC_LINKER
>> +#define GNU_USER_DYNAMIC_LINKER32 "/lib/ld.so.1"
>> +#define GNU_USER_DYNAMIC_LINKER64 "/lib/ld-x86-64.so.1"
>> +#define GNU_USER_DYNAMIC_LINKERX32 "/lib/ld-x32.so.1"
>> +
>> +#undef STARTFILE_SPEC
>> +#if defined HAVE_LD_PIE
>> +#define STARTFILE_SPEC \
>> + "%{!shared:
>> %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};pie:Scrt1.o%s;static:crt0.o%s;:crt1.o%s}}
>> \
>> + crti.o%s
>> %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
>> +#else
>> +#define STARTFILE_SPEC \
>> + "%{!shared:
>> %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};static:crt0.o%s;:crt1.o%s}} \
>> + crti.o%s
>> %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
>> +#endif
>> diff --git a/libgcc/config.host b/libgcc/config.host
>> index eb23abe89f5..75fd1b778fe 100644
>> --- a/libgcc/config.host
>> +++ b/libgcc/config.host
>> @@ -751,6 +751,12 @@ x86_64-*-kfreebsd*-gnu)
>> tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff
>> t-dfprules"
>> tm_file="${tm_file} i386/elf-lib.h"
>> ;;
>> +x86_64-*-gnu*)
>> + extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o
>> crtfastmath.o"
>> + tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff
>> t-dfprules"
>> + tm_file="${tm_file} i386/elf-lib.h"
>> + md_unwind_header=i386/gnu-unwind.h
>> + ;;
>> i[34567]86-pc-msdosdjgpp*)
>> ;;
>> i[34567]86-*-lynxos*)
>> @@ -1523,7 +1529,7 @@ esac
>> case ${host} in
>> i[34567]86-*-linux* | x86_64-*-linux* | \
>> i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
>> - i[34567]86-*-gnu*)
>> + i[34567]86-*-gnu* | x86_64-*-gnu*)
>> tmake_file="${tmake_file} t-tls i386/t-linux i386/t-msabi
>> t-slibgcc-libgcc"
>> if test "$libgcc_cv_cfi" = "yes"; then
>> tmake_file="${tmake_file} t-stack i386/t-stack-i386"
>> diff --git a/libgcc/config/i386/gnu-unwind.h
>> b/libgcc/config/i386/gnu-unwind.h
>> index 25eb690e370..2cbfc40ea7e 100644
>> --- a/libgcc/config/i386/gnu-unwind.h
>> +++ b/libgcc/config/i386/gnu-unwind.h
>> @@ -30,6 +30,14 @@ see the files COPYING3 and COPYING.RUNTIME
>> respectively. If not, see
>>
>> #include <signal.h>
>>
>> +#ifdef __x86_64__
>> +
>> +/*
>> + * TODO: support for 64 bits needs to be implemented.
>> + */
>> +
>> +#else /* ifdef __x86_64__ */
>> +
>> #define MD_FALLBACK_FRAME_STATE_FOR x86_gnu_fallback_frame_state
>>
>> static _Unwind_Reason_Code
>> @@ -138,4 +146,6 @@ x86_gnu_fallback_frame_state
>> return _URC_NO_REASON;
>> }
>>
>> +#endif /* ifdef __x86_64__ */
>> +
>> #endif /* ifndef inhibit_libc */
>> --
>> 2.35.1
>>
>>
>
> --
> Flávio Cruz / flaviocruz@gmail.com
>
Hi Flavio!
On 2022-12-26T12:34:28-0500, Flavio Cruz via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
> Tested by building a toolchain and compiling gnumach for x86_64
Oh, wow, so this is indeed happening, finally! :-D
> This is the basic version without unwind support which I think is only required to
> implement exceptions.
ACK, this can all be tuned later. We understand that ABI to be
completely unstable at this point.
Your patch generally looks good, and I'll drop it into my regular
x86_64-pc-linux-gnu testing, to verify that we don't accidentally break
things re 'x86_64-*-gnu*' matching (but I think we're safe).
As you don't have FSF Copyright Assignment on file for GCC (as far as I
can tell), are you either going to get that, or re-submit this patch with
DCO ('Signed-off-by:' tag), <https://gcc.gnu.org/contribute.html#legal>?
While at that, please also adjust:
> --- /dev/null
> +++ b/gcc/config/i386/gnu64.h
> @@ -0,0 +1,40 @@
> +/* Configuration for an x86_64 running GNU with ELF as the target machine. */
> +
> +/*
> +Copyright (C) 2022 Free Software Foundation, Inc.
^ 2023 ;-)
Grüße
Thomas
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
Tested by building a toolchain and compiling gnumach for x86_64 [1].
This is the basic version without unwind support which I think is only
required to implement exceptions.
[1]
https://github.com/flavioc/cross-hurd/blob/master/bootstrap-kernel.sh.
gcc/ChangeLog:
* config.gcc: Recognize x86_64-*-gnu* targets and include
i386/gnu64.h.
* config/i386/gnu64.h: Define configuration for new target
including ld.so location.
libgcc/ChangeLog:
* config.host: Recognize x86_64-*-gnu* targets.
* config/i386/gnu-unwind.h: Update to handle __x86_64__ with a
TODO for now.
Signed-off-by: Flavio Cruz <flaviocruz@gmail.com>
---
On Thu, Jan 26, 2023 at 09:34:16AM +0100, Thomas Schwinge wrote:
>Hi Flavio!
Hi Thomas!
>
>On 2022-12-26T12:34:28-0500, Flavio Cruz via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
>> Tested by building a toolchain and compiling gnumach for x86_64
>
>Oh, wow, so this is indeed happening, finally! :-D
>
>> This is the basic version without unwind support which I think is only required to
>> implement exceptions.
>
>ACK, this can all be tuned later. We understand that ABI to be
>completely unstable at this point.
>
>
>Your patch generally looks good, and I'll drop it into my regular
>x86_64-pc-linux-gnu testing, to verify that we don't accidentally break
>things re 'x86_64-*-gnu*' matching (but I think we're safe).
That sounds good.
>
>
>As you don't have FSF Copyright Assignment on file for GCC (as far as I
>can tell), are you either going to get that, or re-submit this patch with
>DCO ('Signed-off-by:' tag), <https://gcc.gnu.org/contribute.html#legal>?
Yes, I think I have it for Hurd related projects but not GCC. Added Signed-off-by.
>
>
>While at that, please also adjust:
>
>> --- /dev/null
>> +++ b/gcc/config/i386/gnu64.h
>> @@ -0,0 +1,40 @@
>> +/* Configuration for an x86_64 running GNU with ELF as the target machine. */
>> +
>> +/*
>> +Copyright (C) 2022 Free Software Foundation, Inc.
>
>^ 2023 ;-)
Done
Revisted patch is inlined below. Also added the ChangeLog details.
Thanks a lot for your help!
>
>
>Grüße
> Thomas
>-----------------
>Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
gcc/config.gcc | 5 ++++-
gcc/config/i386/gnu64.h | 40 +++++++++++++++++++++++++++++++++
libgcc/config.host | 8 ++++++-
libgcc/config/i386/gnu-unwind.h | 10 +++++++++
4 files changed, 61 insertions(+), 2 deletions(-)
create mode 100644 gcc/config/i386/gnu64.h
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 89f56047cfe..ff6166a429b 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1971,7 +1971,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-gnu* | i[34567]8
;;
esac
;;
-x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
+x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-gnu*)
tm_file="${tm_file} i386/unix.h i386/att.h elfos.h gnu-user.h glibc-stdint.h \
i386/x86-64.h i386/gnu-user-common.h i386/gnu-user64.h"
case ${target} in
@@ -1982,6 +1982,9 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
x86_64-*-kfreebsd*-gnu)
tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu64.h"
;;
+ x86_64-*-gnu*)
+ tm_file="${tm_file} gnu.h i386/gnu64.h"
+ ;;
esac
tmake_file="${tmake_file} i386/t-linux64"
x86_multilibs="${with_multilib_list}"
diff --git a/gcc/config/i386/gnu64.h b/gcc/config/i386/gnu64.h
new file mode 100644
index 00000000000..a411f0e802a
--- /dev/null
+++ b/gcc/config/i386/gnu64.h
@@ -0,0 +1,40 @@
+/* Configuration for an x86_64 running GNU with ELF as the target machine. */
+
+/*
+Copyright (C) 2023 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#define GNU_USER_LINK_EMULATION32 "elf_i386"
+#define GNU_USER_LINK_EMULATION64 "elf_x86_64"
+#define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
+
+#undef GNU_USER_DYNAMIC_LINKER
+#define GNU_USER_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GNU_USER_DYNAMIC_LINKER64 "/lib/ld-x86-64.so.1"
+#define GNU_USER_DYNAMIC_LINKERX32 "/lib/ld-x32.so.1"
+
+#undef STARTFILE_SPEC
+#if defined HAVE_LD_PIE
+#define STARTFILE_SPEC \
+ "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};pie:Scrt1.o%s;static:crt0.o%s;:crt1.o%s}} \
+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+#else
+#define STARTFILE_SPEC \
+ "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};static:crt0.o%s;:crt1.o%s}} \
+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+#endif
diff --git a/libgcc/config.host b/libgcc/config.host
index 18fe2f9ea17..70d47e08e40 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -751,6 +751,12 @@ x86_64-*-kfreebsd*-gnu)
tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules"
tm_file="${tm_file} i386/elf-lib.h"
;;
+x86_64-*-gnu*)
+ extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
+ tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules"
+ tm_file="${tm_file} i386/elf-lib.h"
+ md_unwind_header=i386/gnu-unwind.h
+ ;;
i[34567]86-pc-msdosdjgpp*)
;;
i[34567]86-*-lynxos*)
@@ -1523,7 +1529,7 @@ esac
case ${host} in
i[34567]86-*-linux* | x86_64-*-linux* | \
i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
- i[34567]86-*-gnu*)
+ i[34567]86-*-gnu* | x86_64-*-gnu*)
tmake_file="${tmake_file} t-tls i386/t-linux i386/t-msabi t-slibgcc-libgcc"
if test "$libgcc_cv_cfi" = "yes"; then
tmake_file="${tmake_file} t-stack i386/t-stack-i386"
diff --git a/libgcc/config/i386/gnu-unwind.h b/libgcc/config/i386/gnu-unwind.h
index 7cb1c7aca4d..85aa2d61b63 100644
--- a/libgcc/config/i386/gnu-unwind.h
+++ b/libgcc/config/i386/gnu-unwind.h
@@ -30,6 +30,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include <signal.h>
+#ifdef __x86_64__
+
+/*
+ * TODO: support for 64 bits needs to be implemented.
+ */
+
+#else /* ifdef __x86_64__ */
+
#define MD_FALLBACK_FRAME_STATE_FOR x86_gnu_fallback_frame_state
static _Unwind_Reason_Code
@@ -138,4 +146,6 @@ x86_gnu_fallback_frame_state
return _URC_NO_REASON;
}
+#endif /* ifdef __x86_64__ */
+
#endif /* ifndef inhibit_libc */
Hi!
On 2023-01-27T21:15:01-0500, Flávio Cruz <flaviocruz@gmail.com> wrote:
> Not sure what happened, but here's the patch as an attachment. Thanks for
> your patience.
Thanks, that worked. Without any changes now pushed to master branch in
commit 5f8950b403f6351f125d8281d2e7430a43e7d125
"Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd",
see attached.
I'll watch how x86_64 GNU/Hurd develops! :-)
Grüße
Thomas
> On Fri, Jan 27, 2023 at 4:16 PM Thomas Schwinge <thomas@codesourcery.com>
> wrote:
>
>> Hi Flavio!
>>
>> Sorry to bother you one last time (hopefully):
>>
>> On 2023-01-27T01:49:25-0500, Flavio Cruz <flaviocruz@gmail.com> wrote:
>> > On Thu, Jan 26, 2023 at 09:34:16AM +0100, Thomas Schwinge wrote:
>> >>As you don't have FSF Copyright Assignment on file for GCC (as far as I
>> >>can tell), are you either going to get that, or re-submit this patch with
>> >>DCO ('Signed-off-by:' tag), <https://gcc.gnu.org/contribute.html#legal>?
>> >
>> > Yes, I think I have it for Hurd related projects
>>
>> Yes.
>>
>> > but not GCC. Added Signed-off-by.
>>
>> ACK, thanks.
>>
>> > Revisted patch is inlined below. Also added the ChangeLog details.
>>
>> Thanks!
>>
>> If I 'git am' that one, I get:
>>
>> warning: Patch sent with format=flowed; space at the end of lines might be lost.
>> Applying: Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd
>> error: corrupt patch at line 180
>> Patch failed at 0001 Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd
>> [...]
>>
>> That's due to:
>>
>> Content-Type: text/plain; charset="iso-8859-1"; format=flowed
>>
>> Is it easy for you to re-send that "differently"? (Or, just attach the
>> file generated by 'git format-patch'.) If that's inconvenient, then I'll
>> fix it up manually, no worries.
>>
>>
>> Grüße
>> Thomas
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
Hi Flávio and Thomas!
On Mon, 2023-01-30 16:44:29 +0100, Thomas Schwinge <thomas@codesourcery.com> wrote:
> On 2023-01-27T21:15:01-0500, Flávio Cruz <flaviocruz@gmail.com> wrote:
> > Not sure what happened, but here's the patch as an attachment. Thanks for
> > your patience.
>
> Thanks, that worked. Without any changes now pushed to master branch in
> commit 5f8950b403f6351f125d8281d2e7430a43e7d125
> "Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd",
> see attached.
>
> I'll watch how x86_64 GNU/Hurd develops! :-)
Please also add this target configuration to contrib/config-list.mk
Thanks,
Jan-Benedict
--
@@ -1955,7 +1955,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-gnu* | i[34567]8
;;
esac
;;
-x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
+x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-gnu*)
tm_file="${tm_file} i386/unix.h i386/att.h elfos.h gnu-user.h glibc-stdint.h \
i386/x86-64.h i386/gnu-user-common.h i386/gnu-user64.h"
case ${target} in
@@ -1966,6 +1966,9 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
x86_64-*-kfreebsd*-gnu)
tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu64.h"
;;
+ x86_64-*-gnu*)
+ tm_file="${tm_file} gnu.h i386/gnu64.h"
+ ;;
esac
tmake_file="${tmake_file} i386/t-linux64"
x86_multilibs="${with_multilib_list}"
new file mode 100644
@@ -0,0 +1,40 @@
+/* Configuration for an x86_64 running GNU with ELF as the target machine. */
+
+/*
+Copyright (C) 2022 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#define GNU_USER_LINK_EMULATION32 "elf_i386"
+#define GNU_USER_LINK_EMULATION64 "elf_x86_64"
+#define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
+
+#undef GNU_USER_DYNAMIC_LINKER
+#define GNU_USER_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GNU_USER_DYNAMIC_LINKER64 "/lib/ld-x86-64.so.1"
+#define GNU_USER_DYNAMIC_LINKERX32 "/lib/ld-x32.so.1"
+
+#undef STARTFILE_SPEC
+#if defined HAVE_LD_PIE
+#define STARTFILE_SPEC \
+ "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};pie:Scrt1.o%s;static:crt0.o%s;:crt1.o%s}} \
+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+#else
+#define STARTFILE_SPEC \
+ "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};static:crt0.o%s;:crt1.o%s}} \
+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+#endif
@@ -751,6 +751,12 @@ x86_64-*-kfreebsd*-gnu)
tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules"
tm_file="${tm_file} i386/elf-lib.h"
;;
+x86_64-*-gnu*)
+ extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
+ tmake_file="${tmake_file} i386/t-crtpc t-crtfm i386/t-crtstuff t-dfprules"
+ tm_file="${tm_file} i386/elf-lib.h"
+ md_unwind_header=i386/gnu-unwind.h
+ ;;
i[34567]86-pc-msdosdjgpp*)
;;
i[34567]86-*-lynxos*)
@@ -1523,7 +1529,7 @@ esac
case ${host} in
i[34567]86-*-linux* | x86_64-*-linux* | \
i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
- i[34567]86-*-gnu*)
+ i[34567]86-*-gnu* | x86_64-*-gnu*)
tmake_file="${tmake_file} t-tls i386/t-linux i386/t-msabi t-slibgcc-libgcc"
if test "$libgcc_cv_cfi" = "yes"; then
tmake_file="${tmake_file} t-stack i386/t-stack-i386"
@@ -30,6 +30,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include <signal.h>
+#ifdef __x86_64__
+
+/*
+ * TODO: support for 64 bits needs to be implemented.
+ */
+
+#else /* ifdef __x86_64__ */
+
#define MD_FALLBACK_FRAME_STATE_FOR x86_gnu_fallback_frame_state
static _Unwind_Reason_Code
@@ -138,4 +146,6 @@ x86_gnu_fallback_frame_state
return _URC_NO_REASON;
}
+#endif /* ifdef __x86_64__ */
+
#endif /* ifndef inhibit_libc */