rtld/arm64: Remove checks for undefined symbols when processing TPREL64

lld emits several GOT relocations referencing the null sumbol in libc.so
when compiled with -ftls-model=initial-exec.  This symbol is specified
to be undefined.

We generally do not handle dynamic TLS relocations against weak,
undefined symbols, so avoid printing a warning here.  This makes it
possible to compile libc.so using the initial-exec TLS model on arm64.

Reviewed by:	jrtc27, kib
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D31069
This commit is contained in:
Mark Johnston 2021-07-15 22:26:25 -04:00
parent ad1f608fb2
commit f238ebd142

View File

@ -479,25 +479,8 @@ reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld, int flags,
return (-1);
}
}
/* Test weak undefined thread variable */
if (def->st_shndx != SHN_UNDEF) {
*where = def->st_value + rela->r_addend +
defobj->tlsoffset;
} else {
/*
* XXX We should relocate undefined thread
* weak variable address to NULL, but how?
* Can we return error in this situation?
*/
rtld_printf("%s: Unable to relocate undefined "
"weak TLS variable\n", obj->path);
#if 0
return (-1);
#else
*where = def->st_value + rela->r_addend +
defobj->tlsoffset;
#endif
}
*where = def->st_value + rela->r_addend +
defobj->tlsoffset;
break;
/*