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 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 . >> +*/ >> + >> +#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 /* ifndef inhibit_libc */ >> -- >> 2.35.1 >> >> > > -- > Flávio Cruz / flaviocruz@gmail.com >