This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]


In NetBSD, we recently changed __cerror from being .hidden to .protected and the linker started to generate the following assertions:

mipseb--netbsd/bin/ld: BFD (NetBSD Binutils nb1) 2.21.1 assertion fail [...]/bfd/elfxx-mips.c:3157
mipseb--netbsd/bin/ld: BFD (NetBSD Binutils nb1) 2.21.1 assertion fail [...]/bfd/elfxx-mips.c:3161

This generates the 2nd assert:

	.protected __cerror

	.global	__cerror
        .ent    __cerror, 0
        .frame $29, 0, $31
	jr	$31
	.end	__cerror

	.global	foo
        .ent    foo, 0
        .frame $29, 0, $31
	.set	push
	.set	noreorder
	.cpload	$25
	.set	pop
	la	$25, __cerror
	jr	$25
	.end	foo

as -o bug.o bug.s
ld -o -shared bug.o

I came up with the following patch which seems to do the right thing
but I'm not that familiar with the mips backend so I'm not sure if this
is the right fix.  Could someone verify that this is right fix?

Index: elfxx-mips.c
RCS file: /cvs/src/src/bfd/elfxx-mips.c,v
retrieving revision 1.301
diff -u -p -r1.301 elfxx-mips.c
--- elfxx-mips.c	19 Dec 2011 07:58:00 -0000	1.301
+++ elfxx-mips.c	29 Feb 2012 17:18:56 -0000
@@ -5338,7 +5338,11 @@ mips_elf_calculate_relocation (bfd *abfd
 				&& (target_is_16_bit_code_p
 				    || target_is_micromips_code_p))));
-  local_p = h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->root);
+  local_p = h == NULL
+    || (h->got_only_for_calls
+	? SYMBOL_CALLS_LOCAL (info, &h->root)
+	: SYMBOL_REFERENCES_LOCAL (info, &h->root));
   gp0 = _bfd_get_gp_value (input_bfd);
   gp = _bfd_get_gp_value (abfd);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]