Re: toolchain

Matt Fredette <[email protected]>
Newsgroups gmane.os.netbsd.ports.hp700
Message-ID <[email protected]>
>  > by me for hppa--netbsdelf.  While it is possible to arrange everything
>  > into a tree that builds, it's hairy.  Maybe only a good source of diffs
>  > back to gcc-current, binutils-current?
> 
> binutils 2.12 and -current already have an hppa-netbsd configuration,
> which uses the elf32-hppa format.  Are you using elf32-hppa or
> elf32-hppa-linux?

elf32-hppa.  You're right, my binutils diffs (attached) are shorter than 
I thought they were.  I did have to do some work on ld/scripttempl/hppaelf.sc.
The .note section thing is one thing I know is a bad hack, and there are 
probably others.

>  > I've only ever used this cross-toolchain to make statically linked 
>  > binaries.  I would be surprised if it could make dynamic libraries 
>  > and executables.
> 
> It will probably work fine, just ld.elf_so work is needed, I guess.

Ya.

Matt

-- 
Matt Fredette

[snip]
Index: gnusrc/gnu/dist/toolchain/configure.in
diff -u gnusrc/gnu/dist/toolchain/configure.in:1.1.1.1 gnusrc/gnu/dist/toolchain/configure.in:1.3
--- gnusrc/gnu/dist/toolchain/configure.in:1.1.1.1	Thu Oct  4 12:30:24 2001
+++ gnusrc/gnu/dist/toolchain/configure.in	Wed Nov 21 16:44:08 2001
@@ -691,6 +691,10 @@
   h8500-*-*)
     noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss target-libffi"
     ;;
+  hppa*-*-netbsdelf*)
+    # No C++ support yet.
+    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss target-libffi"
+    ;;
   hppa*-*-*elf* | \
   hppa*-*-linux-gnu* | \
   hppa*-*-lites* | \
Index: gnusrc/gnu/dist/toolchain/gas/configure.in
diff -u gnusrc/gnu/dist/toolchain/gas/configure.in:1.1.1.1 gnusrc/gnu/dist/toolchain/gas/configure.in:1.2
--- gnusrc/gnu/dist/toolchain/gas/configure.in:1.1.1.1	Thu Oct  4 12:31:18 2001
+++ gnusrc/gnu/dist/toolchain/gas/configure.in	Fri Oct 26 11:32:39 2001
@@ -214,6 +214,7 @@
 				hppa*)
 					fmt=elf em=linux;;
 			    esac ;;
+      hppa-*-netbsdelf*)    fmt=elf em=nbsd ;;
       hppa-*-*elf*)         fmt=elf em=hppa ;;
       hppa-*-lites*)        fmt=elf em=hppa ;;
       hppa-*-osf*)          fmt=som em=hppa ;;
Index: gnusrc/gnu/dist/toolchain/gas/config/tc-hppa.h
diff -u gnusrc/gnu/dist/toolchain/gas/config/tc-hppa.h:1.1.1.1 gnusrc/gnu/dist/toolchain/gas/config/tc-hppa.h:1.2
--- gnusrc/gnu/dist/toolchain/gas/config/tc-hppa.h:1.1.1.1	Thu Oct  4 12:31:27 2001
+++ gnusrc/gnu/dist/toolchain/gas/config/tc-hppa.h	Fri Oct 26 11:32:39 2001
@@ -85,6 +85,13 @@
 
 #define ASEC_NULL (asection *)0
 
+#ifdef TE_NetBSD
+/* XXX fredette - the OpenBSD code requires this.  perhaps
+   we can add colons to it someday? */
+/* Labels are not required to have a colon for a suffix.  */
+#define LABELS_WITHOUT_COLONS 1
+#endif
+
 /* pa_define_label gets used outside of tc-hppa.c via tc_frob_label.  */
 extern void pa_define_label PARAMS ((symbolS *));
 
Index: gnusrc/gnu/dist/toolchain/ld/scripttempl/hppaelf.sc
diff -u gnusrc/gnu/dist/toolchain/ld/scripttempl/hppaelf.sc:1.1.1.1 gnusrc/gnu/dist/toolchain/ld/scripttempl/hppaelf.sc:1.4
--- gnusrc/gnu/dist/toolchain/ld/scripttempl/hppaelf.sc:1.1.1.1	Thu Oct  4 12:36:33 2001
+++ gnusrc/gnu/dist/toolchain/ld/scripttempl/hppaelf.sc	Fri Feb  1 11:21:34 2002
@@ -1,23 +1,38 @@
 DATA_ADDR=0x40000000
 test "$LD_FLAG" = "N" && DATA_ADDR=.
+INTERP=".interp   ${RELOCATING-0} : { *(.interp)	}"
 cat <<EOF
 OUTPUT_FORMAT("${OUTPUT_FORMAT}")
 OUTPUT_ARCH(${ARCH})
 ENTRY("\$START\$")
 ${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING- /* Currently, GNU ld tries to assign section VMAs even under
+   -r, which seems to be a bug, because these section VMAs end up making
+   symbol offsets not line up with their section contents, screwing up 
+   future linking.  elf.sc seems to note the same problem by saying
+   "For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works."  So we do the same. */}
 SECTIONS
 {
-  .text 0x1000 ${RELOCATING++${TEXT_START_ADDR}}:
+  /* XXX fredette - gross hack, be sure to keep the size of the
+     .note section <= 0x200 */
+  . = 0x1e00;
+  ${CREATE_SHLIB-${INTERP}}
+  .text ${RELOCATING-0} ${RELOCATING+0x1000+${TEXT_START_ADDR}}:
   {
     ${RELOCATING+__text_start = .};
     CREATE_OBJECT_SYMBOLS
     *(.PARISC.stubs)
     *(.text)
+    ${RELOCATING+*(.text.*)}
     ${RELOCATING+etext = .};
     ${RELOCATING+_etext = .};
   }
+  .PARISC.unwind : { *(.PARISC.unwind) }
   ${RELOCATING+. = ${DATA_ADDR};}
-  .data :
+  .data ${RELOCATING-0} :
   {
     ${RELOCATING+ . = . + 0x1000 };
     ${RELOCATING+__data_start = .};
@@ -26,8 +41,20 @@
     ${RELOCATING+edata = .};
     ${RELOCATING+_edata = .};
   }
-  ${RELOCATING+. = ${DATA_ADDR} + SIZEOF(.data);}
-  .bss :
+  .ctors ${RELOCATING-0} :
+  {
+    *(.ctors)
+  }
+  .dtors ${RELOCATING-0} :
+  {
+    *(.dtors)
+  }
+  .eh_frame ${RELOCATING-0} :
+  {
+    *(.eh_frame)
+  }
+  ${RELOCATING+. = ${DATA_ADDR} + SIZEOF(.data) + SIZEOF(.ctors) + SIZEOF(.dtors) + SIZEOF(.eh_frame);}
+  .bss ${RELOCATING-0} :
   {
    *(.bss)
    *(COMMON)
[snip]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.