summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/ld/ld.c
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1993-12-22 23:28:35 +0000
committerjkh <jkh@FreeBSD.org>1993-12-22 23:28:35 +0000
commit03fd21e05b8bc2f6db3ccad69f0e12436a6dea7a (patch)
tree178b158232c373cae5a5c6eb3b46e5148b27b107 /gnu/usr.bin/ld/ld.c
parentba8f800748128912d4553f63373a7dcb4d3e5f37 (diff)
downloadFreeBSD-src-03fd21e05b8bc2f6db3ccad69f0e12436a6dea7a.zip
FreeBSD-src-03fd21e05b8bc2f6db3ccad69f0e12436a6dea7a.tar.gz
C++ support changes (+misc fixes) from Paul K.
Diffstat (limited to 'gnu/usr.bin/ld/ld.c')
-rw-r--r--gnu/usr.bin/ld/ld.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/gnu/usr.bin/ld/ld.c b/gnu/usr.bin/ld/ld.c
index 567b536..a11cd22 100644
--- a/gnu/usr.bin/ld/ld.c
+++ b/gnu/usr.bin/ld/ld.c
@@ -32,7 +32,7 @@ static char sccsid[] = "@(#)ld.c 6.10 (Berkeley) 5/22/91";
Set, indirect, and warning symbol features added by Randy Smith. */
/*
- * $Id: ld.c,v 1.15 1993/12/04 00:52:56 jkh Exp $
+ * $Id: ld.c,v 1.16 1993/12/11 11:58:24 jkh Exp $
*/
/* Define how to initialize system-dependent header fields. */
@@ -1587,6 +1587,12 @@ digest_pass1()
/* Keep count and remember symbol */
sp->setv_count++;
set_vectors[setv_fill_count++] = (long)p;
+ if (building_shared_object) {
+ struct relocation_info reloc;
+ RELOC_ADDRESS(&reloc) =
+ setv_fill_count * sizeof(long);
+ alloc_rrs_segment_reloc(NULL, &reloc);
+ }
} else if ((type & N_EXT) && type != (N_UNDF | N_EXT)
&& (type & N_TYPE) != N_FN
@@ -1711,6 +1717,16 @@ digest_pass2()
set_vectors[1+i+length_word_index];
set_vectors[1+i+length_word_index] = p->n_value;
+ if (building_shared_object) {
+ struct relocation_info reloc;
+ RELOC_ADDRESS(&reloc) =
+ (1 + i + length_word_index) *
+ sizeof(long)
+ + set_sect_start;
+ RELOC_TYPE(&reloc) =
+ (sp->defined & N_TYPE);
+ claim_rrs_segment_reloc(NULL, &reloc);
+ }
}
/*
@@ -2285,8 +2301,8 @@ write_data ()
*/
if (set_vector_count) {
- swap_longs(set_vectors, 2 * set_symbol_count + set_vector_count);
- mywrite (set_vectors, 2 * set_symbol_count + set_vector_count,
+ swap_longs(set_vectors, set_symbol_count + 2*set_vector_count);
+ mywrite (set_vectors, set_symbol_count + 2*set_vector_count,
sizeof (unsigned long), outdesc);
}
OpenPOWER on IntegriCloud