summaryrefslogtreecommitdiffstats
path: root/trunk/src/cxx.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/cxx.c')
-rw-r--r--trunk/src/cxx.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/trunk/src/cxx.c b/trunk/src/cxx.c
index e7dc4f5..5922a02 100644
--- a/trunk/src/cxx.c
+++ b/trunk/src/cxx.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2002, 2003, 2007 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2007, 2009 Red Hat, Inc.
Written by Jakub Jelinek <jakub@redhat.com>, 2001.
This program is free software; you can redistribute it and/or modify
@@ -307,6 +307,7 @@ remove_redundant_cxx_conflicts (struct prelink_info *info)
struct find_cxx_sym_cache **cache;
struct find_cxx_sym_cache *binsymcache = NULL;
int ret = 0;
+ int rtype_class_valid;
/* Don't bother doing this for non-C++ programs. */
for (i = 0; i < info->ent->ndepends; ++i)
@@ -324,6 +325,8 @@ remove_redundant_cxx_conflicts (struct prelink_info *info)
assert (elf_getdata (scn, binsymtab) == NULL);
}
+ rtype_class_valid = info->dso->arch->rtype_class_valid;
+
state = 0;
memset (&fcs1, 0, sizeof (fcs1));
memset (&fcs2, 0, sizeof (fcs2));
@@ -401,7 +404,7 @@ remove_redundant_cxx_conflicts (struct prelink_info *info)
for (conflict = info->conflicts[fcs1.n].hash[cidx]; conflict;
conflict = conflict->next)
if (conflict->symoff == symoff
- && conflict->reloc_class == RTYPE_CLASS_VALID)
+ && conflict->reloc_class == rtype_class_valid)
break;
if (conflict == NULL)
@@ -558,7 +561,7 @@ check_pltref:
for (l = 0; l < 251; l++)
for (conflict = info->conflicts[fcs1.n].hash[l];
conflict; conflict = conflict->next)
- if (conflict->reloc_class == RTYPE_CLASS_VALID
+ if (conflict->reloc_class == rtype_class_valid
&& conflict->conflict.ent)
{
size_t ccidx
@@ -595,7 +598,7 @@ check_pltref:
&& conflict->conflict.ent
&& (conflict->conflict.ent->base
+ conflict->conflictval == s->u.ent->base + s->value)
- && conflict->reloc_class == RTYPE_CLASS_VALID)
+ && conflict->reloc_class == rtype_class_valid)
{
pltref_remove:
if (verbose > 3)