1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/lib/AsmParser/LLToken.h
Evgeniy Stepanov e8363137ea ARM MTE stack sanitizer.
Add "memtag" sanitizer that detects and mitigates stack memory issues
using armv8.5 Memory Tagging Extension.

It is similar in principle to HWASan, which is a software implementation
of the same idea, but there are enough differencies to warrant a new
sanitizer type IMHO. It is also expected to have very different
performance properties.

The new sanitizer does not have a runtime library (it may grow one
later, along with a "debugging" mode). Similar to SafeStack and
StackProtector, the instrumentation pass (in a follow up change) will be
inserted in all cases, but will only affect functions marked with the
new sanitize_memtag attribute.

Reviewers: pcc, hctim, vitalybuka, ostannard

Subscribers: srhines, mehdi_amini, javed.absar, kristof.beyls, hiraditya, cryptoad, steven_wu, dexonsmith, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D64169

llvm-svn: 366123
2019-07-15 20:02:23 +00:00

471 lines
7.5 KiB
C++

//===- LLToken.h - Token Codes for LLVM Assembly Files ----------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file defines the enums for the .ll lexer.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_ASMPARSER_LLTOKEN_H
#define LLVM_LIB_ASMPARSER_LLTOKEN_H
namespace llvm {
namespace lltok {
enum Kind {
// Markers
Eof,
Error,
// Tokens with no info.
dotdotdot, // ...
equal,
comma, // = ,
star, // *
lsquare,
rsquare, // [ ]
lbrace,
rbrace, // { }
less,
greater, // < >
lparen,
rparen, // ( )
exclaim, // !
bar, // |
colon, // :
kw_vscale,
kw_x,
kw_true,
kw_false,
kw_declare,
kw_define,
kw_global,
kw_constant,
kw_dso_local,
kw_dso_preemptable,
kw_private,
kw_internal,
kw_linkonce,
kw_linkonce_odr,
kw_weak, // Used as a linkage, and a modifier for "cmpxchg".
kw_weak_odr,
kw_appending,
kw_dllimport,
kw_dllexport,
kw_common,
kw_available_externally,
kw_default,
kw_hidden,
kw_protected,
kw_unnamed_addr,
kw_local_unnamed_addr,
kw_externally_initialized,
kw_extern_weak,
kw_external,
kw_thread_local,
kw_localdynamic,
kw_initialexec,
kw_localexec,
kw_zeroinitializer,
kw_undef,
kw_null,
kw_none,
kw_to,
kw_caller,
kw_within,
kw_from,
kw_tail,
kw_musttail,
kw_notail,
kw_target,
kw_triple,
kw_source_filename,
kw_unwind,
kw_deplibs, // FIXME: Remove in 4.0
kw_datalayout,
kw_volatile,
kw_atomic,
kw_unordered,
kw_monotonic,
kw_acquire,
kw_release,
kw_acq_rel,
kw_seq_cst,
kw_syncscope,
kw_nnan,
kw_ninf,
kw_nsz,
kw_arcp,
kw_contract,
kw_reassoc,
kw_afn,
kw_fast,
kw_nuw,
kw_nsw,
kw_exact,
kw_inbounds,
kw_inrange,
kw_align,
kw_addrspace,
kw_section,
kw_partition,
kw_alias,
kw_ifunc,
kw_module,
kw_asm,
kw_sideeffect,
kw_alignstack,
kw_inteldialect,
kw_gc,
kw_prefix,
kw_prologue,
kw_c,
kw_cc,
kw_ccc,
kw_fastcc,
kw_coldcc,
kw_intel_ocl_bicc,
kw_x86_stdcallcc,
kw_x86_fastcallcc,
kw_x86_thiscallcc,
kw_x86_vectorcallcc,
kw_x86_regcallcc,
kw_arm_apcscc,
kw_arm_aapcscc,
kw_arm_aapcs_vfpcc,
kw_aarch64_vector_pcs,
kw_msp430_intrcc,
kw_avr_intrcc,
kw_avr_signalcc,
kw_ptx_kernel,
kw_ptx_device,
kw_spir_kernel,
kw_spir_func,
kw_x86_64_sysvcc,
kw_win64cc,
kw_webkit_jscc,
kw_anyregcc,
kw_swiftcc,
kw_preserve_mostcc,
kw_preserve_allcc,
kw_ghccc,
kw_x86_intrcc,
kw_hhvmcc,
kw_hhvm_ccc,
kw_cxx_fast_tlscc,
kw_amdgpu_vs,
kw_amdgpu_ls,
kw_amdgpu_hs,
kw_amdgpu_es,
kw_amdgpu_gs,
kw_amdgpu_ps,
kw_amdgpu_cs,
kw_amdgpu_kernel,
// Attributes:
kw_attributes,
kw_allocsize,
kw_alwaysinline,
kw_argmemonly,
kw_sanitize_address,
kw_sanitize_hwaddress,
kw_sanitize_memtag,
kw_builtin,
kw_byval,
kw_inalloca,
kw_cold,
kw_convergent,
kw_dereferenceable,
kw_dereferenceable_or_null,
kw_inaccessiblememonly,
kw_inaccessiblemem_or_argmemonly,
kw_inlinehint,
kw_inreg,
kw_jumptable,
kw_minsize,
kw_naked,
kw_nest,
kw_noalias,
kw_nobuiltin,
kw_nocapture,
kw_noduplicate,
kw_nofree,
kw_noimplicitfloat,
kw_noinline,
kw_norecurse,
kw_nonlazybind,
kw_nonnull,
kw_noredzone,
kw_noreturn,
kw_nosync,
kw_nocf_check,
kw_nounwind,
kw_optforfuzzing,
kw_optnone,
kw_optsize,
kw_readnone,
kw_readonly,
kw_returned,
kw_returns_twice,
kw_signext,
kw_speculatable,
kw_ssp,
kw_sspreq,
kw_sspstrong,
kw_safestack,
kw_shadowcallstack,
kw_sret,
kw_sanitize_thread,
kw_sanitize_memory,
kw_speculative_load_hardening,
kw_strictfp,
kw_swifterror,
kw_swiftself,
kw_uwtable,
kw_willreturn,
kw_writeonly,
kw_zeroext,
kw_immarg,
kw_type,
kw_opaque,
kw_comdat,
// Comdat types
kw_any,
kw_exactmatch,
kw_largest,
kw_noduplicates,
kw_samesize,
kw_eq,
kw_ne,
kw_slt,
kw_sgt,
kw_sle,
kw_sge,
kw_ult,
kw_ugt,
kw_ule,
kw_uge,
kw_oeq,
kw_one,
kw_olt,
kw_ogt,
kw_ole,
kw_oge,
kw_ord,
kw_uno,
kw_ueq,
kw_une,
// atomicrmw operations that aren't also instruction keywords.
kw_xchg,
kw_nand,
kw_max,
kw_min,
kw_umax,
kw_umin,
// Instruction Opcodes (Opcode in UIntVal).
kw_fneg,
kw_add,
kw_fadd,
kw_sub,
kw_fsub,
kw_mul,
kw_fmul,
kw_udiv,
kw_sdiv,
kw_fdiv,
kw_urem,
kw_srem,
kw_frem,
kw_shl,
kw_lshr,
kw_ashr,
kw_and,
kw_or,
kw_xor,
kw_icmp,
kw_fcmp,
kw_phi,
kw_call,
kw_trunc,
kw_zext,
kw_sext,
kw_fptrunc,
kw_fpext,
kw_uitofp,
kw_sitofp,
kw_fptoui,
kw_fptosi,
kw_inttoptr,
kw_ptrtoint,
kw_bitcast,
kw_addrspacecast,
kw_select,
kw_va_arg,
kw_landingpad,
kw_personality,
kw_cleanup,
kw_catch,
kw_filter,
kw_ret,
kw_br,
kw_switch,
kw_indirectbr,
kw_invoke,
kw_resume,
kw_unreachable,
kw_cleanupret,
kw_catchswitch,
kw_catchret,
kw_catchpad,
kw_cleanuppad,
kw_callbr,
kw_alloca,
kw_load,
kw_store,
kw_fence,
kw_cmpxchg,
kw_atomicrmw,
kw_getelementptr,
kw_extractelement,
kw_insertelement,
kw_shufflevector,
kw_extractvalue,
kw_insertvalue,
kw_blockaddress,
// Metadata types.
kw_distinct,
// Use-list order directives.
kw_uselistorder,
kw_uselistorder_bb,
// Summary index keywords
kw_path,
kw_hash,
kw_gv,
kw_guid,
kw_name,
kw_summaries,
kw_flags,
kw_linkage,
kw_notEligibleToImport,
kw_live,
kw_dsoLocal,
kw_canAutoHide,
kw_function,
kw_insts,
kw_funcFlags,
kw_readNone,
kw_readOnly,
kw_noRecurse,
kw_returnDoesNotAlias,
kw_noInline,
kw_calls,
kw_callee,
kw_hotness,
kw_unknown,
kw_hot,
kw_critical,
kw_relbf,
kw_variable,
kw_vTableFuncs,
kw_virtFunc,
kw_aliasee,
kw_refs,
kw_typeIdInfo,
kw_typeTests,
kw_typeTestAssumeVCalls,
kw_typeCheckedLoadVCalls,
kw_typeTestAssumeConstVCalls,
kw_typeCheckedLoadConstVCalls,
kw_vFuncId,
kw_offset,
kw_args,
kw_typeid,
kw_typeidCompatibleVTable,
kw_summary,
kw_typeTestRes,
kw_kind,
kw_unsat,
kw_byteArray,
kw_inline,
kw_single,
kw_allOnes,
kw_sizeM1BitWidth,
kw_alignLog2,
kw_sizeM1,
kw_bitMask,
kw_inlineBits,
kw_wpdResolutions,
kw_wpdRes,
kw_indir,
kw_singleImpl,
kw_branchFunnel,
kw_singleImplName,
kw_resByArg,
kw_byArg,
kw_uniformRetVal,
kw_uniqueRetVal,
kw_virtualConstProp,
kw_info,
kw_byte,
kw_bit,
kw_varFlags,
// Unsigned Valued tokens (UIntVal).
LabelID, // 42:
GlobalID, // @42
LocalVarID, // %42
AttrGrpID, // #42
SummaryID, // ^42
// String valued tokens (StrVal).
LabelStr, // foo:
GlobalVar, // @foo @"foo"
ComdatVar, // $foo
LocalVar, // %foo %"foo"
MetadataVar, // !foo
StringConstant, // "foo"
DwarfTag, // DW_TAG_foo
DwarfAttEncoding, // DW_ATE_foo
DwarfVirtuality, // DW_VIRTUALITY_foo
DwarfLang, // DW_LANG_foo
DwarfCC, // DW_CC_foo
EmissionKind, // lineTablesOnly
NameTableKind, // GNU
DwarfOp, // DW_OP_foo
DIFlag, // DIFlagFoo
DISPFlag, // DISPFlagFoo
DwarfMacinfo, // DW_MACINFO_foo
ChecksumKind, // CSK_foo
// Type valued tokens (TyVal).
Type,
APFloat, // APFloatVal
APSInt // APSInt
};
} // end namespace lltok
} // end namespace llvm
#endif