Subject: Re: hp700 part of next release?
To: None <michael@nosflow.com>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: port-hp700
Date: 05/10/2003 18:05:03
In article <v03130302bae234c1fa89@[10.0.1.2]>
michael@nosflow.com wrote:

> :)There are a log of work for hp700 to catch up current MI changes,
> :)but I don't know if anyone is working to fix them.
> 
> Sounds grim.  Disappointing, but thanks for the status update.  I'll hold
> off for now.

Just FYI:

(1) There is working cross toolchain for i386:
ftp://ftp.netbsd.org/pub/NetBSD/misc/fredette/hp700/cross-hppa-netbsd-1.1.0.1.tgz
    (you can use it by pkg_add(1) on i386)

    arch/stand/mkboot can compile on i386 as a host tool (fixed by chuq),
    so I think you can still try pre-SA (prior 1.6P) kernel.

(2) I tried to fix gcc-3.3_branch but it stuck. (non-working patch attached)
    Maybe we should not use dbxelf.h and elfos.h, but not sure.

(3) Diskless NetBSD How-to for hp700 is quite enough:
http://www.netbsd.org/Documentation/network/netboot/intro.hp700.html

    For some newer machines (like 712/60) requires dhcpd patch:
http://mail-index.netbsd.org/port-hp700/2002/03/04/0000.html
    but I don't know it is fixed the recent dhcp in -current.

(4) When I checked osiop(4) and oosiop(4) on hp700 (with 1.6P sources),
    it seems there are some pmap/vm bugs. I've filed one of them
    (port-hppa/20933) and physio works fine with the patch, but
    executing binaries on disks still has some problem.

etc. etc.
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp

Index: gcc/config.gcc
===================================================================
RCS file: /cvsroot/gcc/gcc/gcc/config.gcc,v
retrieving revision 1.266.2.6
diff -u -r1.266.2.6 config.gcc
--- gcc/config.gcc	2 Mar 2003 01:31:01 -0000	1.266.2.6
+++ gcc/config.gcc	10 May 2003 08:55:29 -0000
@@ -769,6 +769,11 @@
 		 pa/pa32-regs.h pa/pa32-linux.h"
 	tmake_file="t-slibgcc-elf-ver t-linux pa/t-linux"
 	;;
+hppa*-*-netbsd*)
+	tm_file="${tm_file} dbxelf.h elfos.h netbsd.h netbsd-elf.h pa/netbsd.h"
+	tmake_file=t-netbsd
+	fixincludes=fixinc.wrap
+	;;
 hppa*-*-openbsd*)
 	target_cpu_default="MASK_PA_11"
 	tmake_file=pa/t-bsd
--- /dev/null	2003-05-10 12:50:25.000000000 +0900
+++ gcc/config/pa/netbsd.h	2003-03-30 01:37:29.000000000 +0900
@@ -0,0 +1,152 @@
+/*  Definitions for PA_RISC with ELF format on NetBSD
+ *  Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+ *  Copyright (C) 2000 Eric Schnoebelen, the Central Iowa (Model) Railroad
+ *
+ *  This file is part of GNU CC.
+ *
+ *  GNU CC 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 2, or (at your option)
+ *  any later version.
+ *
+ *  GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 59 Temple Place - Suite 330,
+ *  Boston, MA 02111-1307, USA.  
+ */
+
+/* This is used on hppa platforms that use the ELF format.
+ * This was taken from the Linux (and NetBSD/Alpha) configuration, 
+ * and modified for NetBSD/hppa by Eric Schnoebelen <eric@cirr.com> 
+ */
+
+#include <pa/pa32-regs.h>
+
+/* So we can conditionalize small amounts of code in pa.c or pa.md.  */
+#define OBJ_ELF
+
+#define TEXT_SECTION_ASM_OP "\t.text"
+#define DATA_SECTION_ASM_OP "\t.data"
+#define BSS_SECTION_ASM_OP "\t.section\t.bss"
+
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) \
+do {  \
+     if (TARGET_PA_20) \
+       fputs("\t.LEVEL 2.0\n", FILE); \
+     else if (TARGET_PA_11) \
+       fputs("\t.LEVEL 1.1\n", FILE); \
+     else \
+       fputs("\t.LEVEL 1.0\n", FILE); \
+     if (profile_flag)\
+       fprintf (FILE, "\t.IMPORT _mcount, ENTRY\n");\
+     if (write_symbols != NO_DEBUG) \
+       output_file_directive ((FILE), main_input_filename); \
+   } while (0)
+
+#undef ASM_DECLARE_FUNCTION_NAME
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
+do {  \
+  if (TREE_PUBLIC (DECL)) \
+    { \
+      fputs ("\t.EXPORT ", FILE); \
+      assemble_name (FILE, NAME); \
+      fputs (",ENTRY\n", FILE); \
+    } \
+   } while (0)
+
+#undef SIZE_TYPE
+#define SIZE_TYPE "unsigned int"
+
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "int"
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() NETBSD_OS_CPP_BUILTINS_ELF();
+
+#undef CPP_SPEC
+#define CPP_SPEC "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{mhppa:-D__hppa__} %{posix:-D_POSIX_SOURCE} -D__hp9000s700 -D_PA_RISC1_1"
+
+/* should be auto defined in defaults.h */
+#define SUPPORTS_WEAK  1
+
+#undef TARGET_DEFAULT
+#define TARGET_DEFAULT	(MASK_GAS|MASK_JUMP_IN_DELAY|MASK_PA_11)
+
+#undef TARGET_ELF32
+#define TARGET_ELF32 1
+
+/* This says how to output an assembler line to define a global common symbol
+   with size SIZE (in bytes) and alignment ALIGN (in bits).  */
+
+#undef ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGNED)		\
+do { bss_section ();							\
+  assemble_name ((FILE), (NAME));					\
+  fputs ("\t.comm\t", (FILE));						\
+  fprintf ((FILE), "%d\n", MAX ((SIZE), ((ALIGNED) / BITS_PER_UNIT)));	\
+} while (0)
+
+/* This says how to output an assembler line to define a local common symbol
+   with size SIZE (in bytes) and alignment ALIGN (in bits).  */
+
+#undef ASM_OUTPUT_ALIGNED_LOCAL
+#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGNED)		\
+do { bss_section ();							\
+  fprintf ((FILE), "\t.align\t%d\n", ((ALIGNED) / BITS_PER_UNIT));	\
+  assemble_name ((FILE), (NAME));					\
+  fprintf ((FILE), "\n\t.block\t%d\n", (SIZE));				\
+} while (0)
+
+/* Define these to generate the Linux/ELF/SysV style of internal
+   labels all the time - i.e. to be compatible with
+   ASM_GENERATE_INTERNAL_LABEL in <elfos.h>.  Compare these with the
+   ones in pa.h and note the lack of dollar signs in these.  FIXME:
+   shouldn't we fix pa.h to use ASM_GENERATE_INTERNAL_LABEL instead? */
+
+#undef ASM_OUTPUT_ADDR_VEC_ELT
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+  if (TARGET_BIG_SWITCH)					\
+    fprintf (FILE, "\tstw %%r1,-16(%%r30)\n\tldil LR'.L%d,%%r1\n\tbe RR'.L%d(%%sr4,%%r1)\n\tldw -16(%%r30),%%r1\n", VALUE, VALUE);		\
+  else								\
+    fprintf (FILE, "\tb .L%d\n\tnop\n", VALUE)
+
+#undef ASM_OUTPUT_ADDR_DIFF_ELT
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
+  if (TARGET_BIG_SWITCH)					\
+    fprintf (FILE, "\tstw %%r1,-16(%%r30)\n\tldw T'.L%d(%%r19),%%r1\n\tbv %%r0(%%r1)\n\tldw -16(%%r30),%%r1\n", VALUE);				\
+  else								\
+    fprintf (FILE, "\tb .L%d\n\tnop\n", VALUE)
+
+#if 0
+/* Use the default.  */
+#undef ASM_OUTPUT_LABEL
+#endif
+
+/* NOTE: ASM_OUTPUT_INTERNAL_LABEL() is defined for us by elfos.h, and
+   does what we want (i.e. uses colons).  It must be compatible with
+   ASM_GENERATE_INTERNAL_LABEL(), so do not define it here.  */
+
+/* Use the default.  */
+#undef TARGET_ASM_GLOBALIZE_LABEL
+/* Globalizing directive for a label.  */
+#define GLOBAL_ASM_OP "\t.globl\t"
+
+/* Output a definition */
+#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)				\
+do {									\
+    fprintf ((FILE), "\t%s\t", SET_ASM_OP);				\
+    assemble_name (FILE, LABEL1);					\
+    fprintf (FILE, ",");						\
+    assemble_name (FILE, LABEL2);					\
+    fprintf (FILE, "\n");						\
+} while (0)
+
+/*  NetBSD always uses gas.  */
+#undef TARGET_GAS
+#define TARGET_GAS 1