Subject: bin/2103: programs using shared c++ libraries always dump core on ns32k systems
To: None <gnats-bugs@NetBSD.ORG>
From: None <ra!leo@marco.de>
List: netbsd-bugs
Date: 02/19/1996 09:07:48
>Number: 2103
>Category: bin
>Synopsis: programs using shared c++ libraries always dump core on ns32k systems
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: bin-bug-people (Utility Bug People)
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Feb 21 04:50:01 1996
>Last-Modified:
>Originator: Matthias Pfaller
>Organization:
leo@dachau.marco.de in real life: Matthias Pfaller
marco GmbH, 85221 Dachau, Germany tel: +49 8131 516142
>Release: 960209
>Environment:
<machine, os, target, libraries (multiple lines)>
System: NetBSD klondike 1.1A NetBSD 1.1A (KLONDIKE) #48: Sun Feb 18 13:12:42 MET 1996 leo@klondike:/usr/src/sys/arch/pc532/compile/KLONDIKE pc532
>Description:
The ns32k series cpus use three different methods to store constants.
- Constants in data memory are stored in little endian byte order.
- Immediate constants in the instruction stream are stored in
big endian byte order.
- Immediate addresses in the instruction stream are stored rll
encoded in big endian byte order.
The ns32k relocation records encode this in the r_disp field.
gas/ns32k sets this field correctly. But relocation records
for vector fields created by ld have not set this field correctly.
Due to this entries in the global destructor/constructor table are
stored in the wrong byte order.
>How-To-Repeat:
Try to run a program that uses libg++.
>Fix:
Apply the following patch to ld. I hope RELOC_INIT_SEGMENT_RELOC
is intended for this purpose.
--- src/gnu/usr.bin/ld/ld.h.orig Sun Feb 11 11:44:25 1996
+++ src/gnu/usr.bin/ld/ld.h Sun Feb 11 11:44:49 1996
@@ -157,7 +157,9 @@
#define RELOC_PIC_TYPE(r) ((r)->r_baserel? \
PIC_TYPE_LARGE:PIC_TYPE_NONE)
+#ifndef RELOC_INIT_SEGMENT_RELOC
#define RELOC_INIT_SEGMENT_RELOC(r)
+#endif
#endif
--- src/gnu/usr.bin/ld/ns32k/md.h.orig Sun Feb 11 11:44:16 1996
+++ src/gnu/usr.bin/ld/ns32k/md.h Sun Feb 11 11:44:10 1996
@@ -29,6 +29,7 @@
#define RELOC_STATICS_THROUGH_GOT_P(r) (1)
#define JMPSLOT_NEEDS_RELOC (0)
+#define RELOC_INIT_SEGMENT_RELOC(r) ((r)->r_disp = 2)
#define md_got_reloc(r) (0)
>Audit-Trail:
>Unformatted: