[PATCH] D132924: [COFF] Use the more accurate GuardFlags definition everywhere
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 31 05:13:25 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rG12d865415ff3: [COFF] Use the more accurate GuardFlags definition everywhere (authored by alvinhochun, committed by mstorsjo).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D132924/new/
https://reviews.llvm.org/D132924
Files:
lld/COFF/Writer.cpp
llvm/include/llvm/Object/COFF.h
llvm/tools/llvm-readobj/COFFDumper.cpp
Index: llvm/tools/llvm-readobj/COFFDumper.cpp
===================================================================
--- llvm/tools/llvm-readobj/COFFDumper.cpp
+++ llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -852,11 +852,18 @@
if (Tables.GuardFidTableVA) {
ListScope LS(W, "GuardFidTable");
- if (Tables.GuardFlags & uint32_t(coff_guard_flags::FidTableHasFlags))
- printRVATable(Tables.GuardFidTableVA, Tables.GuardFidTableCount, 5,
+ if (uint32_t Size =
+ Tables.GuardFlags &
+ uint32_t(COFF::GuardFlags::CF_FUNCTION_TABLE_SIZE_MASK)) {
+ // The size mask gives the number of extra bytes in addition to the 4-byte
+ // RVA of each entry in the table. As of writing only a 1-byte extra flag
+ // has been defined.
+ Size = (Size >> 28) + 4;
+ printRVATable(Tables.GuardFidTableVA, Tables.GuardFidTableCount, Size,
PrintGuardFlags);
- else
+ } else {
printRVATable(Tables.GuardFidTableVA, Tables.GuardFidTableCount, 4);
+ }
}
if (Tables.GuardIatTableVA) {
Index: llvm/include/llvm/Object/COFF.h
===================================================================
--- llvm/include/llvm/Object/COFF.h
+++ llvm/include/llvm/Object/COFF.h
@@ -597,17 +597,6 @@
using coff_tls_directory32 = coff_tls_directory<support::little32_t>;
using coff_tls_directory64 = coff_tls_directory<support::little64_t>;
-/// Bits in control flow guard flags as we understand them.
-enum class coff_guard_flags : uint32_t {
- CFInstrumented = 0x00000100,
- HasFidTable = 0x00000400,
- ProtectDelayLoadIAT = 0x00001000,
- DelayLoadIATSection = 0x00002000, // Delay load in separate section
- HasLongJmpTable = 0x00010000,
- HasEHContTable = 0x00400000,
- FidTableHasFlags = 0x10000000, // Indicates that fid tables are 5 bytes
-};
-
enum class frame_type : uint16_t { Fpo = 0, Trap = 1, Tss = 2, NonFpo = 3 };
struct coff_load_config_code_integrity {
Index: lld/COFF/Writer.cpp
===================================================================
--- lld/COFF/Writer.cpp
+++ lld/COFF/Writer.cpp
@@ -24,6 +24,7 @@
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/StringSwitch.h"
+#include "llvm/BinaryFormat/COFF.h"
#include "llvm/Support/BinaryStreamReader.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Endian.h"
@@ -1702,12 +1703,12 @@
// Set __guard_flags, which will be used in the load config to indicate that
// /guard:cf was enabled.
- uint32_t guardFlags = uint32_t(coff_guard_flags::CFInstrumented) |
- uint32_t(coff_guard_flags::HasFidTable);
+ uint32_t guardFlags = uint32_t(GuardFlags::CF_INSTRUMENTED) |
+ uint32_t(GuardFlags::CF_FUNCTION_TABLE_PRESENT);
if (config->guardCF & GuardCFLevel::LongJmp)
- guardFlags |= uint32_t(coff_guard_flags::HasLongJmpTable);
+ guardFlags |= uint32_t(GuardFlags::CF_LONGJUMP_TABLE_PRESENT);
if (config->guardCF & GuardCFLevel::EHCont)
- guardFlags |= uint32_t(coff_guard_flags::HasEHContTable);
+ guardFlags |= uint32_t(GuardFlags::EH_CONTINUATION_TABLE_PRESENT);
Symbol *flagSym = ctx.symtab.findUnderscore("__guard_flags");
cast<DefinedAbsolute>(flagSym)->setVA(guardFlags);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D132924.456934.patch
Type: text/x-patch
Size: 3254 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220831/d2ceec7c/attachment.bin>
More information about the llvm-commits
mailing list