Re: [PATCH] Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd

2023-02-01 Thread Jan-Benedict Glaw
Hi Flávio and Thomas!

On Mon, 2023-01-30 16:44:29 +0100, Thomas Schwinge  
wrote:
> On 2023-01-27T21:15:01-0500, Flávio Cruz  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

-- 


signature.asc
Description: PGP signature


Re: [PATCH] Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd

2023-01-30 Thread Thomas Schwinge
Hi!

On 2023-01-27T21:15:01-0500, Flávio Cruz  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 
> wrote:
>
>> Hi Flavio!
>>
>> Sorry to bother you one last time (hopefully):
>>
>> On 2023-01-27T01:49:25-0500, Flavio Cruz  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
>From 5f8950b403f6351f125d8281d2e7430a43e7d125 Mon Sep 17 00:00:00 2001
From: Flavio Cruz 
Date: Thu, 26 Jan 2023 22:45:27 -0500
Subject: [PATCH] Add support for x86_64-*-gnu-* targets to build x86_64
 gnumach/hurd

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 
---
 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 744b46fb3b0..f0958e1c959 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 000..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 op

Re: [PATCH] Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd

2023-01-26 Thread Flavio Cruz via Gcc-patches

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 
---

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 
 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), ?


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 000..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 .
+*/
+
+#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: 

Re: [PATCH] Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd

2023-01-26 Thread Thomas Schwinge
Hi Flavio!

On 2022-12-26T12:34:28-0500, Flavio Cruz via Gcc-patches 
 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), ?


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


Re: [PATCH] Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd

2023-01-25 Thread Flávio Cruz via Gcc-patches
Ping

On Mon, Jan 9, 2023 at 1:00 PM Flávio Cruz  wrote:

> Friendly ping
>
> On Mon, Dec 26, 2022 at 12:34 PM Flavio Cruz  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 000..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 .
>> +*/
>> +
>> +#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
>> --- 

Re: [PATCH] Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd

2023-01-09 Thread Flávio Cruz via Gcc-patches
Friendly ping

On Mon, Dec 26, 2022 at 12:34 PM Flavio Cruz  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 000..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 .
> +*/
> +
> +#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 
>
> +#ifdef __x86_64__
> +
> +/*

[PATCH] Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd

2022-12-26 Thread Flavio Cruz via Gcc-patches
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 000..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 .
+*/
+
+#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 
 
+#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 /*