linker_set: fix globl/weak symbol redefinitions to work on clang 12
In clang 12.0.0.rc2, going from weak to global is now a hard error: ``` /usr/src/stand/libsa/amd64/_setjmp.S:67:25: error: _longjmp changed binding to STB_GLOBAL .text; .p2align 4,0x90; .globl _longjmp; .type _longjmp,@function; _longjmp:; .cfi_startproc ``` And the other way is a warning, but we have -Werror: ``` error: __start_set_Xcommand_set changed binding to STB_WEAK [-Werror,-Winline-asm] error: __stop_set_Xcommand_set changed binding to STB_WEAK [-Werror,-Winline-asm] ``` ref: https://reviews.llvm.org/D90108 Reviewed By: arichardson MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D29159
This commit is contained in:
parent
5a89498d19
commit
32231805fb
@ -563,8 +563,8 @@
|
|||||||
#endif /* __STDC__ */
|
#endif /* __STDC__ */
|
||||||
#endif /* __GNUC__ */
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
#define __GLOBL1(sym) __asm__(".globl " #sym)
|
#define __GLOBL(sym) __asm__(".globl " __XSTRING(sym))
|
||||||
#define __GLOBL(sym) __GLOBL1(sym)
|
#define __WEAK(sym) __asm__(".weak " __XSTRING(sym))
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
#define __IDSTRING(name,string) __asm__(".ident\t\"" string "\"")
|
#define __IDSTRING(name,string) __asm__(".ident\t\"" string "\"")
|
||||||
|
@ -60,8 +60,8 @@
|
|||||||
*/
|
*/
|
||||||
#ifdef __GNUCLIKE___SECTION
|
#ifdef __GNUCLIKE___SECTION
|
||||||
#define __MAKE_SET_QV(set, sym, qv) \
|
#define __MAKE_SET_QV(set, sym, qv) \
|
||||||
__GLOBL(__CONCAT(__start_set_,set)); \
|
__WEAK(__CONCAT(__start_set_,set)); \
|
||||||
__GLOBL(__CONCAT(__stop_set_,set)); \
|
__WEAK(__CONCAT(__stop_set_,set)); \
|
||||||
static void const * qv \
|
static void const * qv \
|
||||||
__set_##set##_sym_##sym __section("set_" #set) \
|
__set_##set##_sym_##sym __section("set_" #set) \
|
||||||
__nosanitizeaddress \
|
__nosanitizeaddress \
|
||||||
|
Loading…
Reference in New Issue
Block a user