diff options
author | Nick Clifton <nickc@redhat.com> | 2004-11-08 08:51:47 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2004-11-08 08:51:47 +0000 |
commit | 0c429e071142f6f8a94bb5eefa2270551b7ae0f4 (patch) | |
tree | 6c2e775a7c49d8679080b363b13ab46c49c44c9f /bfd/cofflink.c | |
parent | 977cdf5aa7f4f2183060c150041405abbc2410a9 (diff) | |
download | gdb-0c429e071142f6f8a94bb5eefa2270551b7ae0f4.zip gdb-0c429e071142f6f8a94bb5eefa2270551b7ae0f4.tar.gz gdb-0c429e071142f6f8a94bb5eefa2270551b7ae0f4.tar.bz2 |
oops - omitted fom previous delta
Diffstat (limited to 'bfd/cofflink.c')
-rw-r--r-- | bfd/cofflink.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/bfd/cofflink.c b/bfd/cofflink.c index c277b85..815c8d5 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -1976,7 +1976,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd) auxp->x_file.x_n.x_offset = STRING_SIZE_SIZE + indx; } } - else if (isymp->n_sclass != C_STAT || isymp->n_type != T_NULL) + else if ((isymp->n_sclass != C_STAT || isymp->n_type != T_NULL) + && isymp->n_sclass != C_NT_WEAK) { unsigned long indx; @@ -2935,25 +2936,32 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, if (h->class == C_NT_WEAK && h->numaux == 1) { /* See _Microsoft Portable Executable and Common Object - * File Format Specification_, section 5.5.3. - * Note that weak symbols without aux records are a GNU - * extension. - * FIXME: All weak externals are treated as having - * characteristics IMAGE_WEAK_EXTERN_SEARCH_LIBRARY (2). - * There are no known uses of the other two types of - * weak externals. - */ + File Format Specification_, section 5.5.3. + Note that weak symbols without aux records are a GNU + extension. + FIXME: All weak externals are treated as having + characteristics IMAGE_WEAK_EXTERN_SEARCH_LIBRARY (2). + There are no known uses of the other two types of + weak externals. */ asection *sec; struct coff_link_hash_entry *h2 = input_bfd->tdata.coff_obj_data->sym_hashes[ h->aux->x_sym.x_tagndx.l]; - sec = h2->root.u.def.section; - val = h2->root.u.def.value + sec->output_section->vma - + sec->output_offset; + if (!h2 || h2->root.type == bfd_link_hash_undefined) + { + sec = bfd_abs_section_ptr; + val = 0; + } + else + { + sec = h2->root.u.def.section; + val = h2->root.u.def.value + + sec->output_section->vma + sec->output_offset; + } } else - /* This is a GNU extension. */ + /* This is a GNU extension. */ val = 0; } |