diff options
author | jkh <jkh@FreeBSD.org> | 1993-12-22 23:28:35 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1993-12-22 23:28:35 +0000 |
commit | 03fd21e05b8bc2f6db3ccad69f0e12436a6dea7a (patch) | |
tree | 178b158232c373cae5a5c6eb3b46e5148b27b107 /gnu/usr.bin/ld/ld.c | |
parent | ba8f800748128912d4553f63373a7dcb4d3e5f37 (diff) | |
download | FreeBSD-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.c | 22 |
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); } |