Allow dso_local on ifunc.
It was never fully disallowed. We were rejecting it in the asm parser, but not in the verifier. Currently TargetMachine::shouldAssumeDSOLocal returns true for hidden ifuncs. I considered changing it and moving the check from the asm parser to the verifier. The reason for deciding to allow it instead is that all linkers handle a direct reference just fine. They use the plt address as the address of the function. In fact doing that means that clang doesn't have the same bug as gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83782. This patch then removes the check from the asm parser and updates the bitcode reader and writer. llvm-svn: 322378
This commit is contained in:
@@ -1302,7 +1302,7 @@ void ModuleBitcodeWriter::writeModuleInfo() {
|
||||
// Emit the ifunc information.
|
||||
for (const GlobalIFunc &I : M.ifuncs()) {
|
||||
// IFUNC: [strtab offset, strtab size, ifunc type, address space, resolver
|
||||
// val#, linkage, visibility]
|
||||
// val#, linkage, visibility, DSO_Local]
|
||||
Vals.push_back(addToStrtab(I.getName()));
|
||||
Vals.push_back(I.getName().size());
|
||||
Vals.push_back(VE.getTypeID(I.getValueType()));
|
||||
@@ -1310,6 +1310,7 @@ void ModuleBitcodeWriter::writeModuleInfo() {
|
||||
Vals.push_back(VE.getValueID(I.getResolver()));
|
||||
Vals.push_back(getEncodedLinkage(I));
|
||||
Vals.push_back(getEncodedVisibility(I));
|
||||
Vals.push_back(I.isDSOLocal());
|
||||
Stream.EmitRecord(bitc::MODULE_CODE_IFUNC, Vals);
|
||||
Vals.clear();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user