glibc-bsd-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Glibc-bsd-hackers] Re: [PATCH] GNU/k*BSD support (with ChangeLog) for g


From: Jim Wilson
Subject: [Glibc-bsd-hackers] Re: [PATCH] GNU/k*BSD support (with ChangeLog) for gcc
Date: Wed, 14 Apr 2004 18:27:22 -0700
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.2) Gecko/20030716

Robert Millan wrote:
        * libtool.m4: Add kfreebsd*-gnu and knetbsd*-gnu.
        * ltconfig: Likewise.
        * ltcf-c.sh: Likewise.
        * ltcf-cxx.sh: Likewise.
        * ltcf-gcj.sh: Likewise.

These files are from the upstream package libtool. Our rules say that the patches have to be submitted to and accepted by the libtool maintainers first. Once that is done, they can be merged into the gcc tree without further approval.

diff -Nur gcc.old/gcc/config/i386/linux.h gcc/gcc/config/i386/linux.h
--- gcc.old/gcc/config/i386/linux.h     2003-11-29 04:08:10.000000000 +0100
+++ gcc/gcc/config/i386/linux.h 2004-03-22 20:45:45.000000000 +0100
+#undef  SUBTARGET_EXTRA_SPECS  /* i386.h bogusly defines it.  */

The definition in i386.h isn't bogus. It has to be there. SUBTARGET_EXTRA_SPECS is an optional macro. An OS port defines it only if it needs it. If an OS port doesn't need it, then we use the default definition in i386.h.

+/* Unify sc_* declarations on all platforms */
+#ifndef sc_eax
+#define sc_eax eax
+#define sc_ebx ebx
+#define sc_ecx ecx
+#define sc_edx edx
+#define sc_esi esi
+#define sc_edi edi
+#define sc_ebp ebp
+#define sc_eip eip
+#endif

This seems unnecessarily wordy.  Couldn't you just have something like
#define REG_NAME(reg) reg

and then in the k*bsd-gnu files this becomes something like
#define REG_NAME (reg) sc_ ## reg
This might have to be written differently, but there should be some way to use token pasting here.


diff -Nur gcc.old/gcc/config/kfreebsd-gnu.h gcc/gcc/config/kfreebsd-gnu.h
--- gcc.old/gcc/config/kfreebsd-gnu.h   1970-01-01 01:00:00.000000000 +0100
+++ gcc/gcc/config/kfreebsd-gnu.h       2004-03-22 20:46:33.000000000 +0100

+#define LINK_EMULATION "elf_i386_fbsd"

This can't be right. This is a target file that should apply to kfreebsd-gnu for all architectures, but this is an obvious i386 dependence. Hence it should be in a config/i386/kfreebsd-gnu.h file. Also, it is overriding a macro that only exists in config/i386/linux.h, and hence it makes no sense to put it in a target independent config file. Same this for DYNAMIC_LINKER which is i386 specific macro.

This is a problem you have inherited from the current kfreebsdgnu.h file which has the same problem.

+/* These must be macros so that i386/linux.h can check for them */
+#define sc_eax sc_eax

Again, you have architecture dependent stuff in an architecture independent file. This should instead be in a config/i386/kfreebsd-gnu.h file.


diff -Nur gcc.old/gcc/config/knetbsd-gnu.h gcc/gcc/config/knetbsd-gnu.h
--- gcc.old/gcc/config/knetbsd-gnu.h    1970-01-01 01:00:00.000000000 +0100
+++ gcc/gcc/config/knetbsd-gnu.h        2004-03-22 20:46:51.000000000 +0100

+#define DYNAMIC_LINKER "/lib/ld.so.1"
+/* These must be macros so that i386/linux.h can check for them */
+#define sc_eax sc_eax

Same as above. You shouldn't have architecture dependent macros in an architecture independent file.

diff -Nur gcc.old/gcc/config.gcc gcc/gcc/config.gcc
--- gcc.old/gcc/config.gcc      2004-03-14 18:24:36.000000000 +0100
+++ gcc/gcc/config.gcc  2004-03-22 20:32:27.000000000 +0100

-       tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h 
i386/linux.h"
+       tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h"
+       case ${target} in
+       i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;;
+       i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h" ;;
+       esac
+       tm_file="${tm_file} linux.h i386/linux.h"

I think you made the wrong choice here. kfreebsd-gnu.h and knetbsd-gnu.h should come after linux.h instead of before it, since you are trying to override macros defined in the linux.h files.

With this change, the patch gets simpler. You no longer need any config/linux.h change at all. You no longer need the #ifndef changes in the config/i386/linux.h file. This makes the patch friendlier to the linux maintainers.

This does mean a few extra #undef need to be added to the kfreebsd-gnu.h and knetbsd-gnu.h files, but that just helps make it obvious that we are overriding linux defaults.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com





reply via email to

[Prev in Thread] Current Thread [Next in Thread]