forked from OSchip/llvm-project
[LLD][COFF] Ignore DEBUG_S_XFGHASH_TYPE/VIRTUAL
These are new debug types that ships with the latest Windows SDK and would warn and finally fail lld-link. The symbols seems to be related to Microsoft's XFG which is their version of CFG. We can't handle any of this yet, so for now we can just ignore these types so that lld doesn't fail with a new version of Windows SDK. Fixes: #56285 Reviewed By: rnk Differential Revision: https://reviews.llvm.org/D129378
This commit is contained in:
parent
dc07d2c91d
commit
576375a2d6
|
@ -811,6 +811,10 @@ void DebugSHandler::handleDebugS(SectionChunk *debugChunk) {
|
|||
// Unclear what this is for.
|
||||
break;
|
||||
|
||||
case DebugSubsectionKind::XfgHashType:
|
||||
case DebugSubsectionKind::XfgHashVirtual:
|
||||
break;
|
||||
|
||||
default:
|
||||
warn("ignoring unknown debug$S subsection kind 0x" +
|
||||
utohexstr(uint32_t(ss.kind())) + " in file " + toString(&file));
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
# RUN: llvm-pdbutil dump -symbols %t.pdb | FileCheck %s
|
||||
|
||||
# WARNING-NOT: ignoring unknown
|
||||
# WARNING: ignoring unknown debug$S subsection kind 0xFF
|
||||
# WARNING: ignoring unknown debug$S subsection kind 0x1FF
|
||||
# WARNING-NOT: ignoring unknown
|
||||
|
||||
# CHECK: Symbols
|
||||
|
@ -43,7 +43,7 @@ ret
|
|||
.p2align 2
|
||||
.Ltmp8:
|
||||
.Ltmp6:
|
||||
.long 0xFF # Unknown subsection kind
|
||||
.long 0x1FF # Unknown subsection kind
|
||||
.long 4 # Subsection size
|
||||
.long 0
|
||||
.long 0x800000F1 # Unknown subsection kind
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
// Check that we ignore XFG subsections in CodeView information.
|
||||
// This test should be removed if we ever end up adding XFG support to lld.
|
||||
|
||||
# REQUIRES: x86
|
||||
# RUN: llvm-mc -triple=i386-pc-win32 -filetype=obj -o %t.obj %s
|
||||
# RUN: lld-link -verbose -safeseh:no -subsystem:console -debug -nodefaultlib -entry:foo -out:%t.exe -pdb:%t.pdb %t.obj 2>&1 | FileCheck %s
|
||||
|
||||
// XFGHashType should not generate a warning
|
||||
# CHECK-NOT: ignoring unknown debug$S subsection kind 0xFF
|
||||
// XFGHashVirtual should not generate a warning
|
||||
# CHECK-NOT: ignoring unknown debug$S subsection kind 0x100
|
||||
|
||||
.text
|
||||
_foo:
|
||||
ret
|
||||
|
||||
.global _foo
|
||||
|
||||
.section .debug$S,"dr"
|
||||
.p2align 2
|
||||
.long 4 # Debug section magic
|
||||
.long 0xF1 # Symbol subsection
|
||||
.long .Ltmp6-.Ltmp5 # Subsection size
|
||||
.Ltmp5:
|
||||
.short .Ltmp8-.Ltmp7 # Record length
|
||||
.Ltmp7:
|
||||
.short 4412 # Record kind: S_COMPILE3
|
||||
.long 0 # Flags and language
|
||||
.short 208 # CPUType
|
||||
.short 9 # Frontend version
|
||||
.short 0
|
||||
.short 0
|
||||
.short 0
|
||||
.short 9000 # Backend version
|
||||
.short 0
|
||||
.short 0
|
||||
.short 0
|
||||
.asciz "clang version SENTINEL" # Null-terminated compiler version string
|
||||
.p2align 2
|
||||
.Ltmp8:
|
||||
.Ltmp6:
|
||||
.long 0xFF # XFGHashType subsection
|
||||
.long 4 # Subsection size
|
||||
.long 0
|
||||
.long 0x100 # XFGHashVirtual subsection
|
||||
.long 4 # Subsection size
|
||||
.long 0
|
|
@ -330,6 +330,9 @@ enum class DebugSubsectionKind : uint32_t {
|
|||
MergedAssemblyInput = 0xfc,
|
||||
|
||||
CoffSymbolRVA = 0xfd,
|
||||
|
||||
XfgHashType = 0xff,
|
||||
XfgHashVirtual = 0x100,
|
||||
};
|
||||
|
||||
/// Equivalent to CV_ptrtype_e.
|
||||
|
|
|
@ -66,6 +66,8 @@ std::string llvm::pdb::formatChunkKind(DebugSubsectionKind Kind,
|
|||
RETURN_CASE(DebugSubsectionKind, MergedAssemblyInput,
|
||||
"merged assembly input");
|
||||
RETURN_CASE(DebugSubsectionKind, CoffSymbolRVA, "coff symbol rva");
|
||||
RETURN_CASE(DebugSubsectionKind, XfgHashType, "xfg hash type");
|
||||
RETURN_CASE(DebugSubsectionKind, XfgHashVirtual, "xfg hash virtual");
|
||||
}
|
||||
} else {
|
||||
switch (Kind) {
|
||||
|
@ -89,6 +91,11 @@ std::string llvm::pdb::formatChunkKind(DebugSubsectionKind Kind,
|
|||
"DEBUG_S_MERGED_ASSEMBLYINPUT");
|
||||
RETURN_CASE(DebugSubsectionKind, CoffSymbolRVA,
|
||||
"DEBUG_S_COFF_SYMBOL_RVA");
|
||||
RETURN_CASE(DebugSubsectionKind, XfgHashType,
|
||||
"DEBUG_S_XFGHASH_TYPE");
|
||||
RETURN_CASE(DebugSubsectionKind, XfgHashVirtual,
|
||||
"DEBUG_S_XFGHASH_VIRTUAL");
|
||||
|
||||
}
|
||||
}
|
||||
return formatUnknownEnum(Kind);
|
||||
|
|
Loading…
Reference in New Issue