Port-sh5 archive

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

Getting rid of sh5 support in sh3 binutils and gdb?



[cc'ed to port lists, reply-to set to tech-toolchain, please follow up there]
GNU toolchain seems to insists on including sh5 support for sh*-*
targets, so we end up with sh5 support in sh3 toolchain.
That adds a bit of bloat, but that's not the main problem.
The problem is trying to make gdb6 build.
See gdb/infptrace.c:child_xfer_memory. When we configure gdb6 for sh3
target (sh{,le}--netbsdelf) sh5 support gets sucked in, causing
bfd_vma to be 64-bit, hence gdb's CORE_ADDR is 64-bit, and then gcc
complains when CORE_ADDR is passed to ptrace() where a poitner is
expected.
Attached patch teaches gdb to not include sh5 support for sh3 targets.
I don't know why toolchain people made the decision to include sh5
support by default, i don't think this is usually the case for either
sparc (vs sparc64), i386 (vs amd64), ppc (vs ppc64) - where 64 bit
variant needs to be requested explicitely.
With this patch gdb6 for sh3 passes mknative + in-tree cross-build.
I haven't tested sh5 build yet.
I wonder if we should also apply relevant parts to binutils as well.
Summary of changes:
bfd/config.bfd
 Move sh64 vectors ito targ64_selvecs for netbsd targets that are
 not explicitely sh5- or sh64-, so that they are enabled only if
 explicitely requested. This is what is done for most other arches
 with 32/64 bit variants (grep for targ64_selvecs)
opcodes/configure{,.in}
 Do not add sh5 support for netbsd sh* targets unless the target is
 explicitely sh5* or sh64* (to match the config.bfd change)
gdb/sh-tdep.c
 Wrap the only sh5 reference (calling sh64_gdbarch_init() that is
 in sh64-tdep.c) into #ifdef BFD64.
 BTW, config/sh/nbsd.mt doesn't include sh64-tdep.c anyway.
Comments?
SY, Uwe
-- 
uwe%ptc.spbu.ru@localhost | Zu Grunde kommen
http://snark.ptc.spbu.ru/~uwe/ | Ist zu Grunde gehen
Index: bfd/config.bfd
===================================================================
RCS file: /cvsroot/src/gnu/dist/gdb6/bfd/config.bfd,v
retrieving revision 1.3
diff -u -r1.3 config.bfd
--- bfd/config.bfd 2 Jul 2006 21:04:40 -0000 1.3
+++ bfd/config.bfd 24 Nov 2006 03:02:53 -0000
@@ -1166,14 +1166,14 @@
 targ_defvec=bfd_elf32_shlnbsd_vec
 targ_selvecs="bfd_elf32_shnbsd_vec shcoff_vec shlcoff_vec"
 #ifdef BFD64
- targ_selvecs="${targ_selvecs} bfd_elf32_sh64lnbsd_vec 
bfd_elf32_sh64nbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
+ targ64_selvecs="bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec 
bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
 #endif
 ;;
 sh*-*-netbsdelf*)
 targ_defvec=bfd_elf32_shnbsd_vec
 targ_selvecs="bfd_elf32_shlnbsd_vec shcoff_vec shlcoff_vec"
 #ifdef BFD64
- targ_selvecs="${targ_selvecs} bfd_elf32_sh64lnbsd_vec 
bfd_elf32_sh64nbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
+ targ64_selvecs="bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec 
bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
 #endif
 ;;
 
Index: opcodes/configure.in
===================================================================
RCS file: /cvsroot/src/gnu/dist/gdb6/opcodes/configure.in,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 configure.in
--- opcodes/configure.in 2 Jul 2006 20:22:09 -0000 1.1.1.2
+++ opcodes/configure.in 24 Nov 2006 03:02:53 -0000
@@ -206,6 +206,14 @@
 # specified, as in sh3-elf, sh3b-linux-gnu, etc.
 # Include it just for ELF targets, since the SH5 bfd:s are ELF only.
 for t in $target $canon_targets; do
+ # For NetBSD we do NOT want SH5 support unless sh5 or sh64
+ # is specified
+ case $t in
+ sh5*-* | sh64*-*) # let the case below handle it
+ ;;
+ sh*-*-netbsdelf* | sh*l*-*-netbsdelf*)
+ break;;
+ esac;
 case $t in
 all | sh5*-* | sh64*-* | sh-*-*elf* | shl*-*-*elf* | \
 sh-*-linux* | shl-*-linux*)
Index: opcodes/configure
===================================================================
RCS file: /cvsroot/src/gnu/dist/gdb6/opcodes/configure,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 configure
--- opcodes/configure 2 Jul 2006 20:22:09 -0000 1.1.1.2
+++ opcodes/configure 24 Nov 2006 03:03:01 -0000
@@ -8854,6 +8854,14 @@
 # specified, as in sh3-elf, sh3b-linux-gnu, etc.
 # Include it just for ELF targets, since the SH5 bfd:s are ELF only.
 for t in $target $canon_targets; do
+ # For NetBSD we do NOT want SH5 support unless sh5 or sh64
+ # is specified
+ case $t in
+ sh5*-* | sh64*-*) # let the case below handle it
+ ;;
+ sh*-*-netbsdelf* | sh*l*-*-netbsdelf*)
+ break;;
+ esac;
 case $t in
 all | sh5*-* | sh64*-* | sh-*-*elf* | shl*-*-*elf* | \
 sh-*-linux* | shl-*-linux*)
Index: gdb/sh-tdep.c
===================================================================
RCS file: /cvsroot/src/gnu/dist/gdb6/gdb/sh-tdep.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 sh-tdep.c
--- gdb/sh-tdep.c 2 Jul 2006 20:15:05 -0000 1.1.1.2
+++ gdb/sh-tdep.c 24 Nov 2006 03:03:02 -0000
@@ -2485,10 +2485,12 @@
 sh_show_regs = sh4_nofpu_show_regs;
 break;
 
+#ifdef BFD64
 case bfd_mach_sh5:
 sh_show_regs = sh64_show_regs;
 /* SH5 is handled entirely in sh64-tdep.c */
 return sh64_gdbarch_init (info, arches);
+#endif
 }
 
 /* If there is already a candidate, use it. */


Home | Main Index | Thread Index | Old Index

AltStyle によって変換されたページ (->オリジナル) /