mirror of
https://github.com/golang/go.git
synced 2024-09-29 14:26:50 +00:00
cmd/ld: handle weak symbols
compiler_rt introduces a weak and hidden symbol compilerrt_abort_impl into our pre-linked _all.o object, we have to handle it. Fixes #4273. R=iant, rsc, r CC=golang-dev https://golang.org/cl/6783050
This commit is contained in:
parent
be6afde348
commit
78a6f75241
10
misc/cgo/test/issue4273.c
Normal file
10
misc/cgo/test/issue4273.c
Normal file
@ -0,0 +1,10 @@
|
||||
// Copyright 2012 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
#ifdef __ELF__
|
||||
__attribute__((weak))
|
||||
__attribute__((visibility("hidden")))
|
||||
void _compilerrt_abort_impl(const char *file, int line, const char *func) {
|
||||
}
|
||||
#endif
|
11
misc/cgo/test/issue4273b.c
Normal file
11
misc/cgo/test/issue4273b.c
Normal file
@ -0,0 +1,11 @@
|
||||
// Copyright 2012 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
#ifdef __ELF__
|
||||
extern void _compilerrt_abort_impl(const char *file, int line, const char *func);
|
||||
|
||||
void __my_abort(const char *file, int line, const char *func) {
|
||||
_compilerrt_abort_impl(file, line, func);
|
||||
}
|
||||
#endif
|
@ -807,6 +807,13 @@ readsym(ElfObj *obj, int i, ElfSym *sym, int needSym)
|
||||
s->type = SHIDDEN;
|
||||
}
|
||||
break;
|
||||
case ElfSymBindWeak:
|
||||
if(needSym) {
|
||||
s = newsym(sym->name, 0);
|
||||
if(sym->other == 2)
|
||||
s->type = SHIDDEN;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
werrstr("%s: invalid symbol binding %d", sym->name, sym->bind);
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user