[llvm] r348004 - Revert "[BTF] Add BTF DebugInfo"

Yonghong Song via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 3 14:25:45 PST 2018



On 12/3/18 1:10 PM, David Blaikie wrote:
> For future reference, there's a handy script in LLVM 
> (utils/git-svn/git-svnrevert) to make a revert using a subversion 
> revision number instead of a git hash - makes it easier for folks 
> reading the mailing list to understand what patch was reverted.
> 
> Also, please include a description of why a patch was reverted in the 
> commit message - again, makes it a bit easier to follow along at home :)

Hi, Blake,

Yes, both suggestions make sense. Thanks for bringing this up. 
Definitely will follow next time!

Thanks,

Yonghong

> 
> On Fri, Nov 30, 2018 at 8:57 AM Yonghong Song via llvm-commits 
> <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
> 
>     Author: yhs
>     Date: Fri Nov 30 08:54:43 2018
>     New Revision: 348004
> 
>     URL: http://llvm.org/viewvc/llvm-project?rev=348004&view=rev
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D348004-26view-3Drev&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=a3wZj583yDvfud4oANgXXhmoPzNMhnkJ0z15RUosc3U&e=>
>     Log:
>     Revert "[BTF] Add BTF DebugInfo"
> 
>     This reverts commit 9c6b970db8bc63b28ce58a129bb1580a6a3c6caf.
> 
>     Removed:
>          llvm/trunk/include/llvm/BinaryFormat/BTF.def
>          llvm/trunk/include/llvm/BinaryFormat/BTF.h
>          llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.cpp
>          llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.h
>          llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebugStub.cpp
>          llvm/trunk/test/DebugInfo/BTF/
>     Modified:
>          llvm/trunk/include/llvm/MC/MCObjectFileInfo.h
>          llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>          llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt
>          llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
>          llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.h
>          llvm/trunk/lib/MC/MCObjectFileInfo.cpp
> 
>     Removed: llvm/trunk/include/llvm/BinaryFormat/BTF.def
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/BTF.def?rev=348003&view=auto
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_BinaryFormat_BTF.def-3Frev-3D348003-26view-3Dauto&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=7KqgRnXCVsuv2UHeD7sfFG7bUJj2ful7LqOuJQjGzOY&e=>
>     ==============================================================================
>     --- llvm/trunk/include/llvm/BinaryFormat/BTF.def (original)
>     +++ llvm/trunk/include/llvm/BinaryFormat/BTF.def (removed)
>     @@ -1,33 +0,0 @@
>     -//===- llvm/BinaryFormat/BTF.def - BTF definitions --------------*-
>     C++ -*-===//
>     -//
>     -//                     The LLVM Compiler Infrastructure
>     -//
>     -// This file is distributed under the University of Illinois Open
>     Source
>     -// License. See LICENSE.TXT for details.
>     -//
>     -//===----------------------------------------------------------------------===//
>     -//
>     -// Macros for BTF.
>     -//
>     -//===----------------------------------------------------------------------===//
>     -
>     -#if !defined(HANDLE_BTF_KIND)
>     -#error "Missing macro definition of HANDLE_BTF_*"
>     -#endif
>     -
>     -HANDLE_BTF_KIND(0, UNKN)
>     -HANDLE_BTF_KIND(1, INT)
>     -HANDLE_BTF_KIND(2, PTR)
>     -HANDLE_BTF_KIND(3, ARRAY)
>     -HANDLE_BTF_KIND(4, STRUCT)
>     -HANDLE_BTF_KIND(5, UNION)
>     -HANDLE_BTF_KIND(6, ENUM)
>     -HANDLE_BTF_KIND(7, FWD)
>     -HANDLE_BTF_KIND(8, TYPEDEF)
>     -HANDLE_BTF_KIND(9, VOLATILE)
>     -HANDLE_BTF_KIND(10, CONST)
>     -HANDLE_BTF_KIND(11, RESTRICT)
>     -HANDLE_BTF_KIND(12, FUNC)
>     -HANDLE_BTF_KIND(13, FUNC_PROTO)
>     -
>     -#undef HANDLE_BTF_KIND
> 
>     Removed: llvm/trunk/include/llvm/BinaryFormat/BTF.h
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/BTF.h?rev=348003&view=auto
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_BinaryFormat_BTF.h-3Frev-3D348003-26view-3Dauto&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=xq3PP3LqxnqlEtN6gnPQNuecOxeplX_IdcDC0ye6LqA&e=>
>     ==============================================================================
>     --- llvm/trunk/include/llvm/BinaryFormat/BTF.h (original)
>     +++ llvm/trunk/include/llvm/BinaryFormat/BTF.h (removed)
>     @@ -1,203 +0,0 @@
>     -//===-- llvm/BinaryFormat/BTF.h ---------------------------------*-
>     C++ -*-===//
>     -//
>     -//                     The LLVM Compiler Infrastructure
>     -//
>     -// This file is distributed under the University of Illinois Open
>     Source
>     -// License. See LICENSE.TXT for details.
>     -//
>     -//===----------------------------------------------------------------------===//
>     -///
>     -/// \file
>     -/// This file contains the layout of .BTF and .BTF.ext ELF sections.
>     -///
>     -/// The binary layout for .BTF section:
>     -///   struct Header
>     -///   Type and Str subsections
>     -/// The Type subsection is a collection of types with type id
>     starting with 1.
>     -/// The Str subsection is simply a collection of strings.
>     -///
>     -/// The binary layout for .BTF.ext section:
>     -///   struct ExtHeader
>     -///   FuncInfo and LineInfo subsections
>     -/// The FuncInfo subsection is defined as below:
>     -///   BTFFuncInfo Size
>     -///   struct SecFuncInfo for ELF section #1
>     -///   A number of struct BPFFuncInfo for ELF section #1
>     -///   struct SecFuncInfo for ELF section #2
>     -///   A number of struct BPFFuncInfo for ELF section #2
>     -///   ...
>     -/// The LineInfo subsection is defined as below:
>     -///   BPFLineInfo Size
>     -///   struct SecLineInfo for ELF section #1
>     -///   A number of struct BPFLineInfo for ELF section #1
>     -///   struct SecLineInfo for ELF section #2
>     -///   A number of struct BPFLineInfo for ELF section #2
>     -///   ...
>     -///
>     -/// The section formats are also defined at
>     -///
>     https://github.com/torvalds/linux/blob/master/include/uapi/linux/btf.h
>     -///
>     -//===----------------------------------------------------------------------===//
>     -
>     -#ifndef LLVM_BINARYFORMAT_BTF_H
>     -#define LLVM_BINARYFORMAT_BTF_H
>     -
>     -namespace llvm {
>     -namespace BTF {
>     -
>     -enum : uint32_t { MAGIC = 0xeB9F, VERSION = 1 };
>     -
>     -/// Sizes in bytes of various things in the BTF format.
>     -enum {
>     -  HeaderSize = 24,
>     -  ExtHeaderSize = 24,
>     -  CommonTypeSize = 12,
>     -  BTFArraySize = 12,
>     -  BTFEnumSize = 8,
>     -  BTFMemberSize = 12,
>     -  BTFParamSize = 8,
>     -  SecFuncInfoSize = 8,
>     -  SecLineInfoSize = 8,
>     -  BPFFuncInfoSize = 8,
>     -  BPFLineInfoSize = 16
>     -};
>     -
>     -/// The .BTF section header definition.
>     -struct Header {
>     -  uint16_t Magic;  ///< Magic value
>     -  uint8_t Version; ///< Version number
>     -  uint8_t Flags;   ///< Extra flags
>     -  uint32_t HdrLen; ///< Length of this header
>     -
>     -  /// All offsets are in bytes relative to the end of this header.
>     -  uint32_t TypeOff; ///< Offset of type section
>     -  uint32_t TypeLen; ///< Length of type section
>     -  uint32_t StrOff;  ///< Offset of string section
>     -  uint32_t StrLen;  ///< Length of string section
>     -};
>     -
>     -enum : uint32_t {
>     -  MAX_TYPE = 0xffff,        ///< Max # of type identifier
>     -  MAX_NAME_OFFSET = 0xffff, ///< Max offset into the string section
>     -  MAX_VLEN = 0xffff         ///< Max # of struct/union/enum members
>     or func args
>     -};
>     -
>     -enum TypeKinds : uint8_t {
>     -#define HANDLE_BTF_KIND(ID, NAME) BTF_KIND_##NAME = ID,
>     -#include "llvm/BinaryFormat/BTF.def"
>     -};
>     -
>     -/// The BTF common type definition. Different kinds may have
>     -/// additional information after this structure data.
>     -struct CommonType {
>     -  /// Type name offset in the string table.
>     -  uint32_t NameOff;
>     -
>     -  /// "Info" bits arrangement:
>     -  /// Bits  0-15: vlen (e.g. # of struct's members)
>     -  /// Bits 16-23: unused
>     -  /// Bits 24-27: kind (e.g. int, ptr, array...etc)
>     -  /// Bits 28-31: unused
>     -  uint32_t Info;
>     -
>     -  /// "Size" is used by INT, ENUM, STRUCT and UNION.
>     -  /// "Size" tells the size of the type it is describing.
>     -  ///
>     -  /// "Type" is used by PTR, TYPEDEF, VOLATILE, CONST, RESTRICT,
>     -  /// FUNC and FUNC_PROTO.
>     -  /// "Type" is a type_id referring to another type.
>     -  union {
>     -    uint32_t Size;
>     -    uint32_t Type;
>     -  };
>     -};
>     -
>     -// For some specific BTF_KIND, "struct CommonType" is immediately
>     -// followed by extra data.
>     -
>     -// BTF_KIND_INT is followed by a u32 and the following
>     -// is the 32 bits arrangement:
>     -// BTF_INT_ENCODING(VAL) : (((VAL) & 0x0f000000) >> 24)
>     -// BTF_INT_OFFSET(VAL) : (((VAL & 0x00ff0000)) >> 16)
>     -// BTF_INT_BITS(VAL) : ((VAL) & 0x000000ff)
>     -
>     -/// Attributes stored in the INT_ENCODING.
>     -enum : uint8_t { INT_SIGNED = (1 << 0), INT_CHAR = (1 << 1),
>     INT_BOOL = (1 << 2) };
>     -
>     -/// BTF_KIND_ENUM is followed by multiple "struct BTFEnum".
>     -/// The exact number of btf_enum is stored in the vlen (of the
>     -/// info in "struct CommonType").
>     -struct BTFEnum {
>     -  uint32_t NameOff; ///< Enum name offset in the string table
>     -  int32_t Val;      ///< Enum member value
>     -};
>     -
>     -/// BTF_KIND_ARRAY is followed by one "struct BTFArray".
>     -struct BTFArray {
>     -  uint32_t ElemType;  ///< Element type
>     -  uint32_t IndexType; ///< Index type
>     -  uint32_t Nelems;    ///< Number of elements for this array
>     -};
>     -
>     -/// BTF_KIND_STRUCT and BTF_KIND_UNION are followed
>     -/// by multiple "struct BTFMember".  The exact number
>     -/// of BTFMember is stored in the vlen (of the info in
>     -/// "struct CommonType").
>     -struct BTFMember {
>     -  uint32_t NameOff; ///< Member name offset in the string table
>     -  uint32_t Type;    ///< Member type
>     -  uint32_t Offset;  ///< Offset in bits from the struct start
>     -};
>     -
>     -/// BTF_KIND_FUNC_PROTO are followed by multiple "struct BTFParam".
>     -/// The exist number of BTFParam is stored in the vlen (of the info
>     -/// in "struct CommonType").
>     -struct BTFParam {
>     -  uint32_t NameOff;
>     -  uint32_t Type;
>     -};
>     -
>     -/// The .BTF.ext section header definition.
>     -struct ExtHeader {
>     -  uint16_t Magic;
>     -  uint8_t Version;
>     -  uint8_t Flags;
>     -  uint32_t HdrLen;
>     -
>     -  uint32_t FuncInfoOff; ///< Offset of func info section
>     -  uint32_t FuncInfoLen; ///< Length of func info section
>     -  uint32_t LineInfoOff; ///< Offset of line info section
>     -  uint32_t LineInfoLen; ///< Length of line info section
>     -};
>     -
>     -/// Specifying one function info.
>     -struct BPFFuncInfo {
>     -  uint32_t InsnOffset; ///< Byte offset in the section
>     -  uint32_t TypeId;     ///< Type id referring to .BTF type section
>     -};
>     -
>     -/// Specifying function info's in one section.
>     -struct SecFuncInfo {
>     -  uint32_t SecNameOff;  ///< Section name index in the .BTF string
>     table
>     -  uint32_t NumFuncInfo; ///< Number of func info's in this section
>     -};
>     -
>     -/// Specifying one line info.
>     -struct BPFLineInfo {
>     -  uint32_t InsnOffset;  ///< Byte offset in this section
>     -  uint32_t FileNameOff; ///< File name index in the .BTF string table
>     -  uint32_t LineOff;     ///< Line index in the .BTF string table
>     -  uint32_t LineCol;     ///< Line num: line_col >> 10,
>     -                        ///  col num: line_col & 0x3ff
>     -};
>     -
>     -/// Specifying line info's in one section.
>     -struct SecLineInfo {
>     -  uint32_t SecNameOff;  ///< Section name index in the .BTF string tble
>     -  uint32_t NumLineInfo; ///< Number of line info's in this section
>     -};
>     -
>     -} // End namespace BTF.
>     -} // End namespace llvm.
>     -
>     -#endif
> 
>     Modified: llvm/trunk/include/llvm/MC/MCObjectFileInfo.h
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCObjectFileInfo.h?rev=348004&r1=348003&r2=348004&view=diff
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_MC_MCObjectFileInfo.h-3Frev-3D348004-26r1-3D348003-26r2-3D348004-26view-3Ddiff&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=MmGd8ZbKTXGsuWqbM356Jh21vLlwAOl2fglAx7qmTWQ&e=>
>     ==============================================================================
>     --- llvm/trunk/include/llvm/MC/MCObjectFileInfo.h (original)
>     +++ llvm/trunk/include/llvm/MC/MCObjectFileInfo.h Fri Nov 30
>     08:54:43 2018
>     @@ -209,14 +209,6 @@ protected:
>         MCSection *SXDataSection;
>         MCSection *GFIDsSection;
> 
>     -  /// BTF-specific sections. BTF stands for BPF Type Format which is
>     -  /// designed for BPF target and consumed by BPF loader and
>     -  /// the kernel.
>     -  /// @{
>     -  MCSection *BTFSection;
>     -  MCSection *BTFExtSection;
>     -  /// @}
>     -
>       public:
>         void InitMCObjectFileInfo(const Triple &TT, bool PIC, MCContext
>     &ctx,
>                                   bool LargeCodeModel = false);
>     @@ -388,12 +380,6 @@ public:
>           return EHFrameSection;
>         }
> 
>     -  // BTF specific sections.
>     -  /// @{
>     -  MCSection *getBTFSection() const { return BTFSection; }
>     -  MCSection *getBTFExtSection() const { return BTFExtSection; }
>     -  /// @}
>     -
>         enum Environment { IsMachO, IsELF, IsCOFF, IsWasm };
>         Environment getObjectFileType() const { return Env; }
> 
> 
>     Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=348004&r1=348003&r2=348004&view=diff
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_AsmPrinter.cpp-3Frev-3D348004-26r1-3D348003-26r2-3D348004-26view-3Ddiff&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=dsrcJcwCM39JplC0AywFgwggxEmT6SBWaHVnJRlIJPM&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
>     +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Fri Nov 30
>     08:54:43 2018
>     @@ -13,7 +13,6 @@
> 
>       #include "llvm/CodeGen/AsmPrinter.h"
>       #include "AsmPrinterHandler.h"
>     -#include "BTFDebug.h"
>       #include "CodeViewDebug.h"
>       #include "DwarfDebug.h"
>       #include "DwarfException.h"
>     @@ -141,8 +140,6 @@ static const char *const CFGuardDescript
>       static const char *const CodeViewLineTablesGroupName = "linetables";
>       static const char *const CodeViewLineTablesGroupDescription =
>         "CodeView Line Tables";
>     -static const char *const BTFGroupName = "BTF";
>     -static const char *const BTFGroupDescription = "BTF Emission";
> 
>       STATISTIC(EmittedInsts, "Number of machine instrs printed");
> 
>     @@ -314,12 +311,6 @@ bool AsmPrinter::doInitialization(Module
>             Handlers.push_back(HandlerInfo(DD, DbgTimerName,
>     DbgTimerDescription,
>                                            DWARFGroupName,
>     DWARFGroupDescription));
>           }
>     -    const Triple &TT = TM.getTargetTriple();
>     -    if (TT.getArch() == Triple::bpfel || TT.getArch() ==
>     Triple::bpfeb) {
>     -      Handlers.push_back(HandlerInfo(new BTFDebug(this),
>     -                                     DbgTimerName, DbgTimerDescription,
>     -                                     BTFGroupName,
>     BTFGroupDescription));
>     -    }
>         }
> 
>         switch (MAI->getExceptionHandlingType()) {
> 
>     Removed: llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.cpp?rev=348003&view=auto
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_BTFDebug.cpp-3Frev-3D348003-26view-3Dauto&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=3FPcPA3m1OjcnpiCt5Tnn_DvM9JOvLLlki5nI5ayJ9Q&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.cpp (original)
>     +++ llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.cpp (removed)
>     @@ -1,770 +0,0 @@
>     -//===- llvm/lib/CodeGen/AsmPrinter/BTFDebug.cpp
>     ---------------------------===//
>     -//
>     -//                     The LLVM Compiler Infrastructure
>     -//
>     -// This file is distributed under the University of Illinois Open
>     Source
>     -// License. See LICENSE.TXT for details.
>     -//
>     -//===----------------------------------------------------------------------===//
>     -//
>     -// This file contains support for writing BTF debug info.
>     -//
>     -//===----------------------------------------------------------------------===//
>     -
>     -#include "BTFDebug.h"
>     -#include "llvm/CodeGen/AsmPrinter.h"
>     -#include "llvm/CodeGen/MachineModuleInfo.h"
>     -#include "llvm/MC/MCContext.h"
>     -#include "llvm/MC/MCObjectFileInfo.h"
>     -#include "llvm/MC/MCSectionELF.h"
>     -#include "llvm/MC/MCStreamer.h"
>     -#include <fstream>
>     -#include <sstream>
>     -
>     -using namespace llvm;
>     -
>     -static const char *BTFKindStr[] = {
>     -#define HANDLE_BTF_KIND(ID, NAME) "BTF_KIND_" #NAME,
>     -#include "llvm/BinaryFormat/BTF.def"
>     -};
>     -
>     -/// Emit a BTF common type.
>     -void BTFTypeBase::emitType(MCStreamer &OS) {
>     -  OS.AddComment(std::string(BTFKindStr[Kind]) + "(id = " +
>     std::to_string(Id) +
>     -                ")");
>     -  OS.EmitIntValue(BTFType.NameOff, 4);
>     -  OS.AddComment("0x" + Twine::utohexstr(BTFType.Info));
>     -  OS.EmitIntValue(BTFType.Info, 4);
>     -  OS.EmitIntValue(BTFType.Size, 4);
>     -}
>     -
>     -BTFTypeDerived::BTFTypeDerived(const DIDerivedType *DTy, unsigned Tag)
>     -    : DTy(DTy) {
>     -  switch (Tag) {
>     -  case dwarf::DW_TAG_pointer_type:
>     -    Kind = BTF::BTF_KIND_PTR;
>     -    break;
>     -  case dwarf::DW_TAG_const_type:
>     -    Kind = BTF::BTF_KIND_CONST;
>     -    break;
>     -  case dwarf::DW_TAG_volatile_type:
>     -    Kind = BTF::BTF_KIND_VOLATILE;
>     -    break;
>     -  case dwarf::DW_TAG_typedef:
>     -    Kind = BTF::BTF_KIND_TYPEDEF;
>     -    break;
>     -  case dwarf::DW_TAG_restrict_type:
>     -    Kind = BTF::BTF_KIND_RESTRICT;
>     -    break;
>     -  default:
>     -    llvm_unreachable("Unknown DIDerivedType Tag");
>     -  }
>     -  BTFType.Info = Kind << 24;
>     -}
>     -
>     -void BTFTypeDerived::completeType(BTFDebug &BDebug) {
>     -  BTFType.NameOff = BDebug.addString(DTy->getName());
>     -
>     -  // The base type for PTR/CONST/VOLATILE could be void.
>     -  const DIType *ResolvedType = DTy->getBaseType().resolve();
>     -  if (!ResolvedType) {
>     -    assert((Kind == BTF::BTF_KIND_PTR || Kind == BTF::BTF_KIND_CONST ||
>     -            Kind == BTF::BTF_KIND_VOLATILE) &&
>     -           "Invalid null basetype");
>     -    BTFType.Type = 0;
>     -  } else {
>     -    BTFType.Type = BDebug.getTypeId(ResolvedType);
>     -  }
>     -}
>     -
>     -void BTFTypeDerived::emitType(MCStreamer &OS) {
>     BTFTypeBase::emitType(OS); }
>     -
>     -/// Represent a struct/union forward declaration.
>     -BTFTypeFwd::BTFTypeFwd(StringRef Name) : Name(Name) {
>     -  Kind = BTF::BTF_KIND_FWD;
>     -  BTFType.Info = Kind << 24;
>     -  BTFType.Type = 0;
>     -}
>     -
>     -void BTFTypeFwd::completeType(BTFDebug &BDebug) {
>     -  BTFType.NameOff = BDebug.addString(Name);
>     -}
>     -
>     -void BTFTypeFwd::emitType(MCStreamer &OS) {
>     BTFTypeBase::emitType(OS); }
>     -
>     -BTFTypeInt::BTFTypeInt(uint32_t Encoding, uint32_t SizeInBits,
>     -                       uint32_t OffsetInBits, StringRef TypeName)
>     -    : Name(TypeName) {
>     -  // Translate IR int encoding to BTF int encoding.
>     -  uint8_t BTFEncoding;
>     -  switch (Encoding) {
>     -  case dwarf::DW_ATE_boolean:
>     -    BTFEncoding = BTF::INT_BOOL;
>     -    break;
>     -  case dwarf::DW_ATE_signed:
>     -  case dwarf::DW_ATE_signed_char:
>     -    BTFEncoding = BTF::INT_SIGNED;
>     -    break;
>     -  case dwarf::DW_ATE_unsigned:
>     -  case dwarf::DW_ATE_unsigned_char:
>     -    BTFEncoding = 0;
>     -    break;
>     -  default:
>     -    llvm_unreachable("Unknown BTFTypeInt Encoding");
>     -  }
>     -
>     -  Kind = BTF::BTF_KIND_INT;
>     -  BTFType.Info = Kind << 24;
>     -  BTFType.Size = roundupToBytes(SizeInBits);
>     -  IntVal = (BTFEncoding << 24) | OffsetInBits << 16 | SizeInBits;
>     -}
>     -
>     -void BTFTypeInt::completeType(BTFDebug &BDebug) {
>     -  BTFType.NameOff = BDebug.addString(Name);
>     -}
>     -
>     -void BTFTypeInt::emitType(MCStreamer &OS) {
>     -  BTFTypeBase::emitType(OS);
>     -  OS.AddComment("0x" + Twine::utohexstr(IntVal));
>     -  OS.EmitIntValue(IntVal, 4);
>     -}
>     -
>     -BTFTypeEnum::BTFTypeEnum(const DICompositeType *ETy, uint32_t VLen)
>     : ETy(ETy) {
>     -  Kind = BTF::BTF_KIND_ENUM;
>     -  BTFType.Info = Kind << 24 | VLen;
>     -  BTFType.Size = roundupToBytes(ETy->getSizeInBits());
>     -}
>     -
>     -void BTFTypeEnum::completeType(BTFDebug &BDebug) {
>     -  BTFType.NameOff = BDebug.addString(ETy->getName());
>     -
>     -  DINodeArray Elements = ETy->getElements();
>     -  for (const auto Element : Elements) {
>     -    const auto *Enum = cast<DIEnumerator>(Element);
>     -
>     -    struct BTF::BTFEnum BTFEnum;
>     -    BTFEnum.NameOff = BDebug.addString(Enum->getName());
>     -    // BTF enum value is 32bit, enforce it.
>     -    BTFEnum.Val = static_cast<uint32_t>(Enum->getValue());
>     -    EnumValues.push_back(BTFEnum);
>     -  }
>     -}
>     -
>     -void BTFTypeEnum::emitType(MCStreamer &OS) {
>     -  BTFTypeBase::emitType(OS);
>     -  for (const auto &Enum : EnumValues) {
>     -    OS.EmitIntValue(Enum.NameOff, 4);
>     -    OS.EmitIntValue(Enum.Val, 4);
>     -  }
>     -}
>     -
>     -BTFTypeArray::BTFTypeArray(const DICompositeType *ATy) : ATy(ATy) {
>     -  Kind = BTF::BTF_KIND_ARRAY;
>     -  BTFType.Info = Kind << 24;
>     -}
>     -
>     -/// Represent a BTF array. BTF does not record array dimensions,
>     -/// so conceptually a BTF array is a one-dimensional array.
>     -void BTFTypeArray::completeType(BTFDebug &BDebug) {
>     -  BTFType.NameOff = BDebug.addString(ATy->getName());
>     -  BTFType.Size = 0;
>     -
>     -  auto *BaseType = ATy->getBaseType().resolve();
>     -  ArrayInfo.ElemType = BDebug.getTypeId(BaseType);
>     -
>     -  // The IR does not really have a type for the index.
>     -  // A special type for array index should have been
>     -  // created during initial type traversal. Just
>     -  // retrieve that type id.
>     -  ArrayInfo.IndexType = BDebug.getArrayIndexTypeId();
>     -
>     -  // Get the number of array elements.
>     -  // If the array size is 0, set the number of elements as 0.
>     -  // Otherwise, recursively traverse the base types to
>     -  // find the element size. The number of elements is
>     -  // the totoal array size in bits divided by
>     -  // element size in bits.
>     -  uint64_t ArraySizeInBits = ATy->getSizeInBits();
>     -  if (!ArraySizeInBits) {
>     -    ArrayInfo.Nelems = 0;
>     -  } else {
>     -    uint32_t BaseTypeSize = BaseType->getSizeInBits();
>     -    while (!BaseTypeSize) {
>     -      const auto *DDTy = cast<DIDerivedType>(BaseType);
>     -      BaseType = DDTy->getBaseType().resolve();
>     -      assert(BaseType);
>     -      BaseTypeSize = BaseType->getSizeInBits();
>     -    }
>     -    ArrayInfo.Nelems = ATy->getSizeInBits() / BaseTypeSize;
>     -  }
>     -}
>     -
>     -void BTFTypeArray::emitType(MCStreamer &OS) {
>     -  BTFTypeBase::emitType(OS);
>     -  OS.EmitIntValue(ArrayInfo.ElemType, 4);
>     -  OS.EmitIntValue(ArrayInfo.IndexType, 4);
>     -  OS.EmitIntValue(ArrayInfo.Nelems, 4);
>     -}
>     -
>     -/// Represent either a struct or a union.
>     -BTFTypeStruct::BTFTypeStruct(const DICompositeType *STy, bool IsStruct,
>     -                             uint32_t Vlen)
>     -    : STy(STy) {
>     -  Kind = IsStruct ? BTF::BTF_KIND_STRUCT : BTF::BTF_KIND_UNION;
>     -  BTFType.Size = roundupToBytes(STy->getSizeInBits());
>     -  BTFType.Info = (Kind << 24) | Vlen;
>     -}
>     -
>     -void BTFTypeStruct::completeType(BTFDebug &BDebug) {
>     -  BTFType.NameOff = BDebug.addString(STy->getName());
>     -
>     -  // Add struct/union members.
>     -  // If the member is a bitfield, get the corresponding int type
>     -  // specially created to represent the bitfield. Otherwise,
>     -  // the member type is the base type of this member.
>     -  //
>     -  // FIXME: The real bitfield base type is lost. There
>     -  // is discussion to define a different type kind for
>     -  // bitfield in order to preserve its base type.
>     -  // Revisit this if the new kind or new mechanism is available.
>     -  const DINodeArray Elements = STy->getElements();
>     -  for (const auto *Element : Elements) {
>     -    struct BTF::BTFMember BTFMember;
>     -    const auto *DDTy = cast<DIDerivedType>(Element);
>     -
>     -    BTFMember.NameOff = BDebug.addString(DDTy->getName());
>     -    BTFMember.Offset = DDTy->getOffsetInBits();
>     -    if (DDTy->isBitField())
>     -      BTFMember.Type = BDebug.getBitFieldTypeId(DDTy);
>     -    else
>     -      BTFMember.Type = BDebug.getTypeId(DDTy->getBaseType().resolve());
>     -    Members.push_back(BTFMember);
>     -  }
>     -}
>     -
>     -void BTFTypeStruct::emitType(MCStreamer &OS) {
>     -  BTFTypeBase::emitType(OS);
>     -  for (const auto &Member : Members) {
>     -    OS.EmitIntValue(Member.NameOff, 4);
>     -    OS.EmitIntValue(Member.Type, 4);
>     -    OS.EmitIntValue(Member.Offset, 4);
>     -  }
>     -}
>     -
>     -/// The Func kind represents both subprogram and pointee of function
>     -/// pointers. If the FuncName is empty, it represents a pointee of
>     function
>     -/// pointer. Otherwise, it represents a subprogram. The func arg names
>     -/// are empty for pointee of function pointer case, and are valid names
>     -/// for subprogram.
>     -BTFTypeFuncProto::BTFTypeFuncProto(
>     -    const DISubroutineType *STy, uint32_t VLen,
>     -    const std::unordered_map<uint32_t, StringRef> &FuncArgNames)
>     -    : STy(STy), FuncArgNames(FuncArgNames) {
>     -  Kind = BTF::BTF_KIND_FUNC_PROTO;
>     -  BTFType.Info = (Kind << 24) | VLen;
>     -}
>     -
>     -void BTFTypeFuncProto::completeType(BTFDebug &BDebug) {
>     -  DITypeRefArray Elements = STy->getTypeArray();
>     -  auto RetType = Elements[0].resolve();
>     -  BTFType.Type = RetType ? BDebug.getTypeId(RetType) : 0;
>     -  BTFType.NameOff = 0;
>     -
>     -  // For null parameter which is typically the last one
>     -  // to represent the vararg, encode the NameOff/Type to be 0.
>     -  for (unsigned I = 1, N = Elements.size(); I < N; ++I) {
>     -    struct BTF::BTFParam Param;
>     -    auto Element = Elements[I].resolve();
>     -    if (Element) {
>     -      Param.NameOff = BDebug.addString(FuncArgNames[I]);
>     -      Param.Type = BDebug.getTypeId(Element);
>     -    } else {
>     -      Param.NameOff = 0;
>     -      Param.Type = 0;
>     -    }
>     -    Parameters.push_back(Param);
>     -  }
>     -}
>     -
>     -void BTFTypeFuncProto::emitType(MCStreamer &OS) {
>     -  BTFTypeBase::emitType(OS);
>     -  for (const auto &Param : Parameters) {
>     -    OS.EmitIntValue(Param.NameOff, 4);
>     -    OS.EmitIntValue(Param.Type, 4);
>     -  }
>     -}
>     -
>     -BTFTypeFunc::BTFTypeFunc(StringRef FuncName, uint32_t ProtoTypeId)
>     -    : Name(FuncName) {
>     -  Kind = BTF::BTF_KIND_FUNC;
>     -  BTFType.Info = Kind << 24;
>     -  BTFType.Type = ProtoTypeId;
>     -}
>     -
>     -void BTFTypeFunc::completeType(BTFDebug &BDebug) {
>     -  BTFType.NameOff = BDebug.addString(Name);
>     -}
>     -
>     -void BTFTypeFunc::emitType(MCStreamer &OS) {
>     BTFTypeBase::emitType(OS); }
>     -
>     -uint32_t BTFStringTable::addString(StringRef S) {
>     -  // Check whether the string already exists.
>     -  for (auto &OffsetM : OffsetToIdMap) {
>     -    if (Table[OffsetM.second] == S)
>     -      return OffsetM.first;
>     -  }
>     -  // Not find, add to the string table.
>     -  uint32_t Offset = Size;
>     -  OffsetToIdMap[Offset] = Table.size();
>     -  Table.push_back(S);
>     -  Size += S.size() + 1;
>     -  return Offset;
>     -}
>     -
>     -BTFDebug::BTFDebug(AsmPrinter *AP)
>     -    : DebugHandlerBase(AP), OS(*Asm->OutStreamer),
>     SkipInstruction(false),
>     -      LineInfoGenerated(false), SecNameOff(0), ArrayIndexTypeId(0) {
>     -  addString("\0");
>     -}
>     -
>     -void BTFDebug::addType(std::unique_ptr<BTFTypeBase> TypeEntry,
>     -                       const DIType *Ty) {
>     -  TypeEntry->setId(TypeEntries.size() + 1);
>     -  DIToIdMap[Ty] = TypeEntry->getId();
>     -  TypeEntries.push_back(std::move(TypeEntry));
>     -}
>     -
>     -uint32_t BTFDebug::addType(std::unique_ptr<BTFTypeBase> TypeEntry) {
>     -  TypeEntry->setId(TypeEntries.size() + 1);
>     -  uint32_t Id = TypeEntry->getId();
>     -  TypeEntries.push_back(std::move(TypeEntry));
>     -  return Id;
>     -}
>     -
>     -void BTFDebug::visitBasicType(const DIBasicType *BTy) {
>     -  // Only int types are supported in BTF.
>     -  uint32_t Encoding = BTy->getEncoding();
>     -  if (Encoding != dwarf::DW_ATE_boolean && Encoding !=
>     dwarf::DW_ATE_signed &&
>     -      Encoding != dwarf::DW_ATE_signed_char &&
>     -      Encoding != dwarf::DW_ATE_unsigned &&
>     -      Encoding != dwarf::DW_ATE_unsigned_char)
>     -    return;
>     -
>     -  // Create a BTF type instance for this DIBasicType and put it into
>     -  // DIToIdMap for cross-type reference check.
>     -  auto TypeEntry = llvm::make_unique<BTFTypeInt>(
>     -      Encoding, BTy->getSizeInBits(), BTy->getOffsetInBits(),
>     BTy->getName());
>     -  addType(std::move(TypeEntry), BTy);
>     -}
>     -
>     -/// Handle subprogram or subroutine types.
>     -void BTFDebug::visitSubroutineType(
>     -    const DISubroutineType *STy, bool ForSubprog,
>     -    const std::unordered_map<uint32_t, StringRef> &FuncArgNames,
>     -    uint32_t &TypeId) {
>     -  DITypeRefArray Elements = STy->getTypeArray();
>     -  uint32_t VLen = Elements.size() - 1;
>     -  if (VLen > BTF::MAX_VLEN)
>     -    return;
>     -
>     -  // Subprogram has a valid non-zero-length name, and the pointee of
>     -  // a function pointer has an empty name. The subprogram type will
>     -  // not be added to DIToIdMap as it should not be referenced by
>     -  // any other types.
>     -  auto TypeEntry = llvm::make_unique<BTFTypeFuncProto>(STy, VLen,
>     FuncArgNames);
>     -  if (ForSubprog)
>     -    TypeId = addType(std::move(TypeEntry)); // For subprogram
>     -  else
>     -    addType(std::move(TypeEntry), STy); // For func ptr
>     -
>     -  // Visit return type and func arg types.
>     -  for (const auto Element : Elements) {
>     -    visitTypeEntry(Element.resolve());
>     -  }
>     -}
>     -
>     -/// Handle structure/union types.
>     -void BTFDebug::visitStructType(const DICompositeType *CTy, bool
>     IsStruct) {
>     -  const DINodeArray Elements = CTy->getElements();
>     -  uint32_t VLen = Elements.size();
>     -  if (VLen > BTF::MAX_VLEN)
>     -    return;
>     -
>     -  auto TypeEntry = llvm::make_unique<BTFTypeStruct>(CTy, IsStruct,
>     VLen);
>     -  addType(std::move(TypeEntry), CTy);
>     -
>     -  // Visit all struct members.
>     -  for (const auto *Element : Elements)
>     -    visitTypeEntry(cast<DIDerivedType>(Element));
>     -}
>     -
>     -void BTFDebug::visitArrayType(const DICompositeType *CTy) {
>     -  auto TypeEntry = llvm::make_unique<BTFTypeArray>(CTy);
>     -  addType(std::move(TypeEntry), CTy);
>     -
>     -  // The IR does not have a type for array index while BTF wants one.
>     -  // So create an array index type if there is none.
>     -  if (!ArrayIndexTypeId) {
>     -    auto TypeEntry =
>     llvm::make_unique<BTFTypeInt>(dwarf::DW_ATE_unsigned, 32,
>     -                                                   0,
>     "__ARRAY_SIZE_TYPE__");
>     -    ArrayIndexTypeId = addType(std::move(TypeEntry));
>     -  }
>     -
>     -  // Visit array element type.
>     -  visitTypeEntry(CTy->getBaseType().resolve());
>     -}
>     -
>     -void BTFDebug::visitEnumType(const DICompositeType *CTy) {
>     -  DINodeArray Elements = CTy->getElements();
>     -  uint32_t VLen = Elements.size();
>     -  if (VLen > BTF::MAX_VLEN)
>     -    return;
>     -
>     -  auto TypeEntry = llvm::make_unique<BTFTypeEnum>(CTy, VLen);
>     -  addType(std::move(TypeEntry), CTy);
>     -  // No need to visit base type as BTF does not encode it.
>     -}
>     -
>     -/// Handle structure/union forward declarations.
>     -void BTFDebug::visitFwdDeclType(const DICompositeType *CTy) {
>     -  auto TypeEntry = llvm::make_unique<BTFTypeFwd>(CTy->getName());
>     -  addType(std::move(TypeEntry), CTy);
>     -}
>     -
>     -/// Handle structure, union, array and enumeration types.
>     -void BTFDebug::visitCompositeType(const DICompositeType *CTy) {
>     -  auto Tag = CTy->getTag();
>     -  if (Tag == dwarf::DW_TAG_structure_type || Tag ==
>     dwarf::DW_TAG_union_type) {
>     -    // Handle forward declaration differently as it does not have
>     members.
>     -    if (CTy->isForwardDecl())
>     -      visitFwdDeclType(CTy);
>     -    else
>     -      visitStructType(CTy, Tag == dwarf::DW_TAG_structure_type);
>     -  } else if (Tag == dwarf::DW_TAG_array_type)
>     -    visitArrayType(CTy);
>     -  else if (Tag == dwarf::DW_TAG_enumeration_type)
>     -    visitEnumType(CTy);
>     -}
>     -
>     -/// Handle pointer, typedef, const, volatile, restrict and member
>     types.
>     -void BTFDebug::visitDerivedType(const DIDerivedType *DTy) {
>     -  unsigned Tag = DTy->getTag();
>     -
>     -  if (Tag == dwarf::DW_TAG_pointer_type || Tag ==
>     dwarf::DW_TAG_typedef ||
>     -      Tag == dwarf::DW_TAG_const_type || Tag ==
>     dwarf::DW_TAG_volatile_type ||
>     -      Tag == dwarf::DW_TAG_restrict_type) {
>     -    auto TypeEntry = llvm::make_unique<BTFTypeDerived>(DTy, Tag);
>     -    addType(std::move(TypeEntry), DTy);
>     -  } else if (Tag != dwarf::DW_TAG_member) {
>     -    return;
>     -  } else {
>     -    // Special process member bitfield type.
>     -    // For bitfield, recursively find the base type and then
>     -    // construct a special int type with correct bitfield size.
>     -    // Install the type id in BitFieldTypeMap for later retrieval.
>     -    //
>     -    // FIXME: The real bitfield base type is lost. There
>     -    // is discussion to define a different type kind for
>     -    // bitfield in order to preserve its base type.
>     -    // Revisit this if the new kind or new mechanism is available.
>     -    if (DTy->isBitField()) {
>     -      const DIType *ResolvedTy = DTy->getBaseType().resolve();
>     -
>     -      while (ResolvedTy) {
>     -        if (const auto *DerivedTy =
>     dyn_cast<DIDerivedType>(ResolvedTy)) {
>     -          ResolvedTy = DerivedTy->getBaseType().resolve();
>     -        } else if (const auto *CompositeTy =
>     -                       dyn_cast<DICompositeType>(ResolvedTy)) {
>     -          assert(CompositeTy->getTag() ==
>     dwarf::DW_TAG_enumeration_type &&
>     -                 "Invalid member composite type");
>     -          ResolvedTy = CompositeTy->getBaseType().resolve();
>     -        } else
>     -          break;
>     -      }
>     -
>     -      const auto *BaseTy = cast<DIBasicType>(ResolvedTy);
>     -      auto TypeEntry = llvm::make_unique<BTFTypeInt>(
>     -          BaseTy->getEncoding(), DTy->getSizeInBits(), 0,
>     BaseTy->getName());
>     -      BitFieldTypeMap[DTy] = addType(std::move(TypeEntry));
>     -      return;
>     -    }
>     -  }
>     -
>     -  // Visit base type of pointer, typedef, const, volatile, restrict or
>     -  // non-bitfield member type.
>     -  visitTypeEntry(DTy->getBaseType().resolve());
>     -}
>     -
>     -void BTFDebug::visitTypeEntry(const DIType *Ty) {
>     -  if (!Ty || DIToIdMap.find(Ty) != DIToIdMap.end())
>     -    return;
>     -
>     -  uint32_t TypeId;
>     -  if (const auto *BTy = dyn_cast<DIBasicType>(Ty))
>     -    visitBasicType(BTy);
>     -  else if (const auto *STy = dyn_cast<DISubroutineType>(Ty))
>     -    visitSubroutineType(STy, false, std::unordered_map<uint32_t,
>     StringRef>(),
>     -                        TypeId);
>     -  else if (const auto *CTy = dyn_cast<DICompositeType>(Ty))
>     -    visitCompositeType(CTy);
>     -  else if (const auto *DTy = dyn_cast<DIDerivedType>(Ty))
>     -    visitDerivedType(DTy);
>     -  else
>     -    llvm_unreachable("Unknown DIType");
>     -}
>     -
>     -/// Read file contents from the actual file or from the source
>     -std::string BTFDebug::populateFileContent(const DISubprogram *SP) {
>     -  auto File = SP->getFile();
>     -  std::string FileName;
>     -
>     -  if (File->getDirectory().size())
>     -    FileName = File->getDirectory().str() + "/" +
>     File->getFilename().str();
>     -  else
>     -    FileName = File->getFilename();
>     -
>     -  // No need to populate the contends if it has been populated!
>     -  if (FileContent.find(FileName) != FileContent.end())
>     -    return FileName;
>     -
>     -  std::vector<std::string> Content;
>     -  std::string Line;
>     -  Content.push_back(Line); // Line 0 for empty string
>     -
>     -  auto Source = File->getSource();
>     -  if (Source) {
>     -    std::istringstream InputString(Source.getValue());
>     -    while (std::getline(InputString, Line))
>     -      Content.push_back(Line);
>     -  } else {
>     -    std::ifstream InputFile(FileName);
>     -    while (std::getline(InputFile, Line))
>     -      Content.push_back(Line);
>     -  }
>     -
>     -  FileContent[FileName] = Content;
>     -  return FileName;
>     -}
>     -
>     -void BTFDebug::constructLineInfo(const DISubprogram *SP, MCSymbol
>     *Label,
>     -                                 uint32_t Line, uint32_t Column) {
>     -  std::string FileName = populateFileContent(SP);
>     -  BTFLineInfo LineInfo;
>     -
>     -  LineInfo.Label = Label;
>     -  LineInfo.FileNameOff = addString(FileName);
>     -  // If file content is not available, let LineOff = 0.
>     -  if (Line < FileContent[FileName].size())
>     -    LineInfo.LineOff = addString(FileContent[FileName][Line]);
>     -  else
>     -    LineInfo.LineOff = 0;
>     -  LineInfo.LineNum = Line;
>     -  LineInfo.ColumnNum = Column;
>     -  LineInfoTable[SecNameOff].push_back(LineInfo);
>     -}
>     -
>     -void BTFDebug::emitCommonHeader() {
>     -  OS.AddComment("0x" + Twine::utohexstr(BTF::MAGIC));
>     -  OS.EmitIntValue(BTF::MAGIC, 2);
>     -  OS.EmitIntValue(BTF::VERSION, 1);
>     -  OS.EmitIntValue(0, 1);
>     -}
>     -
>     -void BTFDebug::emitBTFSection() {
>     -  MCContext &context = OS.getContext();
>     -  OS.SwitchSection(context.getObjectFileInfo()->getBTFSection());
>     -
>     -  // Emit header.
>     -  emitCommonHeader();
>     -  OS.EmitIntValue(BTF::HeaderSize, 4);
>     -
>     -  uint32_t TypeLen = 0, StrLen;
>     -  for (const auto &TypeEntry : TypeEntries)
>     -    TypeLen += TypeEntry->getSize();
>     -  StrLen = StringTable.getSize();
>     -
>     -  OS.EmitIntValue(0, 4);
>     -  OS.EmitIntValue(TypeLen, 4);
>     -  OS.EmitIntValue(TypeLen, 4);
>     -  OS.EmitIntValue(StrLen, 4);
>     -
>     -  // Emit type table.
>     -  for (const auto &TypeEntry : TypeEntries)
>     -    TypeEntry->emitType(OS);
>     -
>     -  // Emit string table.
>     -  uint32_t StringOffset = 0;
>     -  for (const auto &S : StringTable.getTable()) {
>     -    OS.AddComment("string offset=" + std::to_string(StringOffset));
>     -    OS.EmitBytes(S);
>     -    OS.EmitBytes(StringRef("\0", 1));
>     -    StringOffset += S.size() + 1;
>     -  }
>     -}
>     -
>     -void BTFDebug::emitBTFExtSection() {
>     -  MCContext &context = OS.getContext();
>     -  OS.SwitchSection(context.getObjectFileInfo()->getBTFExtSection());
>     -
>     -  // Emit header.
>     -  emitCommonHeader();
>     -  OS.EmitIntValue(BTF::ExtHeaderSize, 4);
>     -
>     -  // Account for FuncInfo/LineInfo record size as well.
>     -  uint32_t FuncLen = 4, LineLen = 4;
>     -  for (const auto &FuncSec : FuncInfoTable) {
>     -    FuncLen += BTF::SecFuncInfoSize;
>     -    FuncLen += FuncSec.second.size() * BTF::BPFFuncInfoSize;
>     -  }
>     -  for (const auto &LineSec : LineInfoTable) {
>     -    LineLen += BTF::SecLineInfoSize;
>     -    LineLen += LineSec.second.size() * BTF::BPFLineInfoSize;
>     -  }
>     -
>     -  OS.EmitIntValue(0, 4);
>     -  OS.EmitIntValue(FuncLen, 4);
>     -  OS.EmitIntValue(FuncLen, 4);
>     -  OS.EmitIntValue(LineLen, 4);
>     -
>     -  // Emit func_info table.
>     -  OS.AddComment("FuncInfo");
>     -  OS.EmitIntValue(BTF::BPFFuncInfoSize, 4);
>     -  for (const auto &FuncSec : FuncInfoTable) {
>     -    OS.AddComment("FuncInfo section string offset=" +
>     -                  std::to_string(FuncSec.first));
>     -    OS.EmitIntValue(FuncSec.first, 4);
>     -    OS.EmitIntValue(FuncSec.second.size(), 4);
>     -    for (const auto &FuncInfo : FuncSec.second) {
>     -      Asm->EmitLabelReference(FuncInfo.Label, 4);
>     -      OS.EmitIntValue(FuncInfo.TypeId, 4);
>     -    }
>     -  }
>     -
>     -  // Emit line_info table.
>     -  OS.AddComment("LineInfo");
>     -  OS.EmitIntValue(BTF::BPFLineInfoSize, 4);
>     -  for (const auto &LineSec : LineInfoTable) {
>     -    OS.AddComment("LineInfo section string offset=" +
>     -                  std::to_string(LineSec.first));
>     -    OS.EmitIntValue(LineSec.first, 4);
>     -    OS.EmitIntValue(LineSec.second.size(), 4);
>     -    for (const auto &LineInfo : LineSec.second) {
>     -      Asm->EmitLabelReference(LineInfo.Label, 4);
>     -      OS.EmitIntValue(LineInfo.FileNameOff, 4);
>     -      OS.EmitIntValue(LineInfo.LineOff, 4);
>     -      OS.AddComment("Line " + std::to_string(LineInfo.LineNum) + "
>     Col " +
>     -                    std::to_string(LineInfo.ColumnNum));
>     -      OS.EmitIntValue(LineInfo.LineNum << 10 | LineInfo.ColumnNum, 4);
>     -    }
>     -  }
>     -}
>     -
>     -void BTFDebug::beginFunctionImpl(const MachineFunction *MF) {
>     -  auto *SP = MF->getFunction().getSubprogram();
>     -  auto *Unit = SP->getUnit();
>     -
>     -  if (Unit->getEmissionKind() == DICompileUnit::NoDebug) {
>     -    SkipInstruction = true;
>     -    return;
>     -  }
>     -  SkipInstruction = false;
>     -
>     -  // Collect all types locally referenced in this function.
>     -  // Use RetainedNodes so we can collect all argument names
>     -  // even if the argument is not used.
>     -  std::unordered_map<uint32_t, StringRef> FuncArgNames;
>     -  for (const DINode *DN : SP->getRetainedNodes()) {
>     -    if (const auto *DV = dyn_cast<DILocalVariable>(DN)) {
>     -      visitTypeEntry(DV->getType().resolve());
>     -
>     -      // Collect function arguments for subprogram func type.
>     -      uint32_t Arg = DV->getArg();
>     -      if (Arg)
>     -        FuncArgNames[Arg] = DV->getName();
>     -    }
>     -  }
>     -
>     -  // Construct subprogram func proto type.
>     -  uint32_t ProtoTypeId;
>     -  visitSubroutineType(SP->getType(), true, FuncArgNames, ProtoTypeId);
>     -
>     -  // Construct subprogram func type
>     -  auto FuncTypeEntry =
>     -      llvm::make_unique<BTFTypeFunc>(SP->getName(), ProtoTypeId);
>     -  uint32_t FuncTypeId = addType(std::move(FuncTypeEntry));
>     -
>     -  // Construct funcinfo and the first lineinfo for the function.
>     -  MCSymbol *FuncLabel = Asm->getFunctionBegin();
>     -  BTFFuncInfo FuncInfo;
>     -  FuncInfo.Label = FuncLabel;
>     -  FuncInfo.TypeId = FuncTypeId;
>     -  if (FuncLabel->isInSection()) {
>     -    MCSection &Section = FuncLabel->getSection();
>     -    const MCSectionELF *SectionELF = dyn_cast<MCSectionELF>(&Section);
>     -    assert(SectionELF && "Null section for Function Label");
>     -    SecNameOff = addString(SectionELF->getSectionName());
>     -  } else {
>     -    SecNameOff = addString(".text");
>     -  }
>     -  FuncInfoTable[SecNameOff].push_back(FuncInfo);
>     -}
>     -
>     -void BTFDebug::endFunctionImpl(const MachineFunction *MF) {
>     -  SkipInstruction = false;
>     -  LineInfoGenerated = false;
>     -  SecNameOff = 0;
>     -}
>     -
>     -void BTFDebug::beginInstruction(const MachineInstr *MI) {
>     -  DebugHandlerBase::beginInstruction(MI);
>     -
>     -  if (SkipInstruction || MI->isMetaInstruction() ||
>     -      MI->getFlag(MachineInstr::FrameSetup))
>     -    return;
>     -
>     -  // Skip this instruction if no DebugLoc or the DebugLoc
>     -  // is the same as the previous instruction.
>     -  const DebugLoc &DL = MI->getDebugLoc();
>     -  if (!DL || PrevInstLoc == DL) {
>     -    // This instruction will be skipped, no LineInfo has
>     -    // been generated, construct one based on function signature.
>     -    if (LineInfoGenerated == false) {
>     -      auto *S = MI->getMF()->getFunction().getSubprogram();
>     -      MCSymbol *FuncLabel = Asm->getFunctionBegin();
>     -      constructLineInfo(S, FuncLabel, S->getLine(), 0);
>     -      LineInfoGenerated = true;
>     -    }
>     -
>     -    return;
>     -  }
>     -
>     -  // Create a temporary label to remember the insn for lineinfo.
>     -  MCSymbol *LineSym = OS.getContext().createTempSymbol();
>     -  OS.EmitLabel(LineSym);
>     -
>     -  // Construct the lineinfo.
>     -  auto SP = DL.get()->getScope()->getSubprogram();
>     -  constructLineInfo(SP, LineSym, DL.getLine(), DL.getCol());
>     -
>     -  LineInfoGenerated = true;
>     -  PrevInstLoc = DL;
>     -}
>     -
>     -void BTFDebug::endModule() {
>     -  // Collect all types referenced by globals.
>     -  const Module *M = MMI->getModule();
>     -  for (const DICompileUnit *CUNode : M->debug_compile_units()) {
>     -    for (const auto *GVE : CUNode->getGlobalVariables()) {
>     -      DIGlobalVariable *GV = GVE->getVariable();
>     -      visitTypeEntry(GV->getType().resolve());
>     -    }
>     -  }
>     -
>     -  // Complete BTF type cross refereences.
>     -  for (const auto &TypeEntry : TypeEntries)
>     -    TypeEntry->completeType(*this);
>     -
>     -  // Emit BTF sections.
>     -  emitBTFSection();
>     -  emitBTFExtSection();
>     -}
> 
>     Removed: llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.h
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.h?rev=348003&view=auto
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_BTFDebug.h-3Frev-3D348003-26view-3Dauto&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=w0Q1Ibn3Wm-WeVmwhTw-v16L1r5p_Pks_RMyDdsKwmQ&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.h (original)
>     +++ llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebug.h (removed)
>     @@ -1,293 +0,0 @@
>     -//===- llvm/lib/CodeGen/AsmPrinter/BTFDebug.h -------------------*-
>     C++ -*-===//
>     -//
>     -//                     The LLVM Compiler Infrastructure
>     -//
>     -// This file is distributed under the University of Illinois Open
>     Source
>     -// License. See LICENSE.TXT for details.
>     -//
>     -//===----------------------------------------------------------------------===//
>     -///
>     -/// \file
>     -/// This file contains support for writing BTF debug info.
>     -///
>     -//===----------------------------------------------------------------------===//
>     -
>     -#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_BTFDEBUG_H
>     -#define LLVM_LIB_CODEGEN_ASMPRINTER_BTFDEBUG_H
>     -
>     -#include "DebugHandlerBase.h"
>     -#include "llvm/ADT/StringMap.h"
>     -#include "llvm/BinaryFormat/BTF.h"
>     -#include <unordered_map>
>     -
>     -namespace llvm {
>     -
>     -class AsmPrinter;
>     -class BTFDebug;
>     -class DIType;
>     -class MCStreamer;
>     -class MCSymbol;
>     -class MachineFunction;
>     -
>     -/// The base class for BTF type generation.
>     -class BTFTypeBase {
>     -protected:
>     -  uint8_t Kind;
>     -  uint32_t Id;
>     -  struct BTF::CommonType BTFType;
>     -
>     -public:
>     -  virtual ~BTFTypeBase() = default;
>     -  void setId(uint32_t Id) { this->Id = Id; }
>     -  uint32_t getId() { return Id; }
>     -  uint32_t roundupToBytes(uint32_t NumBits) { return (NumBits + 7)
>      >> 3; }
>     -  /// Get the size of this BTF type entry.
>     -  virtual uint32_t getSize() { return BTF::CommonTypeSize; }
>     -  /// Complete BTF type generation after all related DebugInfo types
>     -  /// have been visited so their BTF type id's are available
>     -  /// for cross referece.
>     -  virtual void completeType(BTFDebug &BDebug) {}
>     -  /// Emit types for this BTF type entry.
>     -  virtual void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle several derived types include pointer, const,
>     -/// volatile, typedef and restrict.
>     -class BTFTypeDerived : public BTFTypeBase {
>     -  const DIDerivedType *DTy;
>     -
>     -public:
>     -  BTFTypeDerived(const DIDerivedType *Ty, unsigned Tag);
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle struct or union forward declaration.
>     -class BTFTypeFwd : public BTFTypeBase {
>     -  StringRef Name;
>     -
>     -public:
>     -  BTFTypeFwd(StringRef Name);
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle int type.
>     -class BTFTypeInt : public BTFTypeBase {
>     -  StringRef Name;
>     -  uint32_t IntVal; ///< Encoding, offset, bits
>     -
>     -public:
>     -  BTFTypeInt(uint32_t Encoding, uint32_t SizeInBits, uint32_t
>     OffsetInBits,
>     -             StringRef TypeName);
>     -  uint32_t getSize() { return BTFTypeBase::getSize() +
>     sizeof(uint32_t); }
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle enumerate type.
>     -class BTFTypeEnum : public BTFTypeBase {
>     -  const DICompositeType *ETy;
>     -  std::vector<struct BTF::BTFEnum> EnumValues;
>     -
>     -public:
>     -  BTFTypeEnum(const DICompositeType *ETy, uint32_t NumValues);
>     -  uint32_t getSize() {
>     -    return BTFTypeBase::getSize() + EnumValues.size() *
>     BTF::BTFEnumSize;
>     -  }
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle array type.
>     -class BTFTypeArray : public BTFTypeBase {
>     -  const DICompositeType *ATy;
>     -  struct BTF::BTFArray ArrayInfo;
>     -
>     -public:
>     -  BTFTypeArray(const DICompositeType *ATy);
>     -  uint32_t getSize() { return BTFTypeBase::getSize() +
>     BTF::BTFArraySize; }
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle struct/union type.
>     -class BTFTypeStruct : public BTFTypeBase {
>     -  const DICompositeType *STy;
>     -  std::vector<struct BTF::BTFMember> Members;
>     -
>     -public:
>     -  BTFTypeStruct(const DICompositeType *STy, bool IsStruct, uint32_t
>     NumMembers);
>     -  uint32_t getSize() {
>     -    return BTFTypeBase::getSize() + Members.size() *
>     BTF::BTFMemberSize;
>     -  }
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle function pointer.
>     -class BTFTypeFuncProto : public BTFTypeBase {
>     -  const DISubroutineType *STy;
>     -  std::unordered_map<uint32_t, StringRef> FuncArgNames;
>     -  std::vector<struct BTF::BTFParam> Parameters;
>     -
>     -public:
>     -  BTFTypeFuncProto(const DISubroutineType *STy, uint32_t NumParams,
>     -                   const std::unordered_map<uint32_t, StringRef>
>     &FuncArgNames);
>     -  uint32_t getSize() {
>     -    return BTFTypeBase::getSize() + Parameters.size() *
>     BTF::BTFParamSize;
>     -  }
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// Handle subprogram
>     -class BTFTypeFunc : public BTFTypeBase {
>     -  StringRef Name;
>     -
>     -public:
>     -  BTFTypeFunc(StringRef FuncName, uint32_t ProtoTypeId);
>     -  uint32_t getSize() { return BTFTypeBase::getSize(); }
>     -  void completeType(BTFDebug &BDebug);
>     -  void emitType(MCStreamer &OS);
>     -};
>     -
>     -/// String table.
>     -class BTFStringTable {
>     -  /// String table size in bytes.
>     -  uint32_t Size;
>     -  /// A mapping from string table offset to the index
>     -  /// of the Table. It is used to avoid putting
>     -  /// duplicated strings in the table.
>     -  std::unordered_map<uint32_t, uint32_t> OffsetToIdMap;
>     -  /// A vector of strings to represent the string table.
>     -  std::vector<std::string> Table;
>     -
>     -public:
>     -  BTFStringTable() : Size(0) {}
>     -  uint32_t getSize() { return Size; }
>     -  std::vector<std::string> &getTable() { return Table; }
>     -  /// Add a string to the string table and returns its offset
>     -  /// in the table.
>     -  uint32_t addString(StringRef S);
>     -};
>     -
>     -/// Represent one func and its type id.
>     -struct BTFFuncInfo {
>     -  const MCSymbol *Label; ///< Func MCSymbol
>     -  uint32_t TypeId;       ///< Type id referring to .BTF type section
>     -};
>     -
>     -/// Represent one line info.
>     -struct BTFLineInfo {
>     -  MCSymbol *Label;      ///< MCSymbol identifying insn for the lineinfo
>     -  uint32_t FileNameOff; ///< file name offset in the .BTF string table
>     -  uint32_t LineOff;     ///< line offset in the .BTF string table
>     -  uint32_t LineNum;     ///< the line number
>     -  uint32_t ColumnNum;   ///< the column number
>     -};
>     -
>     -/// Collect and emit BTF information.
>     -class BTFDebug : public DebugHandlerBase {
>     -  MCStreamer &OS;
>     -  bool SkipInstruction;
>     -  bool LineInfoGenerated;
>     -  uint32_t SecNameOff;
>     -  uint32_t ArrayIndexTypeId;
>     -  BTFStringTable StringTable;
>     -  std::vector<std::unique_ptr<BTFTypeBase>> TypeEntries;
>     -  std::unordered_map<const DIType *, uint32_t> DIToIdMap;
>     -  std::unordered_map<const DIType *, uint32_t> BitFieldTypeMap;
>     -  std::unordered_map<uint32_t, std::vector<BTFFuncInfo>> FuncInfoTable;
>     -  std::unordered_map<uint32_t, std::vector<BTFLineInfo>> LineInfoTable;
>     -  StringMap<std::vector<std::string>> FileContent;
>     -
>     -  /// Add types to TypeEntries.
>     -  /// @{
>     -  /// Add types to TypeEntries and DIToIdMap.
>     -  void addType(std::unique_ptr<BTFTypeBase> TypeEntry, const DIType
>     *Ty);
>     -  /// Add types to TypeEntries only and return type id.
>     -  uint32_t addType(std::unique_ptr<BTFTypeBase> TypeEntry);
>     -  /// @}
>     -
>     -  /// IR type visiting functions.
>     -  /// @{
>     -  void visitTypeEntry(const DIType *Ty);
>     -  void visitBasicType(const DIBasicType *BTy);
>     -  void visitSubroutineType(
>     -      const DISubroutineType *STy, bool ForSubprog,
>     -      const std::unordered_map<uint32_t, StringRef> &FuncArgNames,
>     -      uint32_t &TypeId);
>     -  void visitFwdDeclType(const DICompositeType *CTy);
>     -  void visitCompositeType(const DICompositeType *CTy);
>     -  void visitStructType(const DICompositeType *STy, bool IsStruct);
>     -  void visitArrayType(const DICompositeType *ATy);
>     -  void visitEnumType(const DICompositeType *ETy);
>     -  void visitDerivedType(const DIDerivedType *DTy);
>     -  /// @}
>     -
>     -  /// Get the file content for the subprogram. Certain lines of the
>     file
>     -  /// later may be put into string table and referenced by line info.
>     -  std::string populateFileContent(const DISubprogram *SP);
>     -
>     -  /// Construct a line info.
>     -  void constructLineInfo(const DISubprogram *SP, MCSymbol *Label,
>     uint32_t Line,
>     -                         uint32_t Column);
>     -
>     -  /// Emit common header of .BTF and .BTF.ext sections.
>     -  void emitCommonHeader();
>     -
>     -  /// Emit the .BTF section.
>     -  void emitBTFSection();
>     -
>     -  /// Emit the .BTF.ext section.
>     -  void emitBTFExtSection();
>     -
>     -protected:
>     -  /// Gather pre-function debug information.
>     -  void beginFunctionImpl(const MachineFunction *MF) override;
>     -
>     -  /// Post process after all instructions in this function are
>     processed.
>     -  void endFunctionImpl(const MachineFunction *MF) override;
>     -
>     -public:
>     -  BTFDebug(AsmPrinter *AP);
>     -
>     -  /// Get the special array index type id.
>     -  uint32_t getArrayIndexTypeId() {
>     -    assert(ArrayIndexTypeId);
>     -    return ArrayIndexTypeId;
>     -  }
>     -
>     -  /// Add string to the string table.
>     -  size_t addString(StringRef S) { return StringTable.addString(S); }
>     -
>     -  /// Get the type id for a particular DIType.
>     -  uint32_t getTypeId(const DIType *Ty) {
>     -    assert(Ty && "Invalid null Type");
>     -    assert(DIToIdMap.find(Ty) != DIToIdMap.end() &&
>     -           "DIType not added in the BDIToIdMap");
>     -    return DIToIdMap[Ty];
>     -  }
>     -
>     -  /// Get the bitfield type id. If the struct/union member
>     -  /// is a bitfield, a special type is created for it.
>     -  uint32_t getBitFieldTypeId(const DIDerivedType *Ty) {
>     -    assert(Ty && "Invalid null Type");
>     -    assert(BitFieldTypeMap.find(Ty) != BitFieldTypeMap.end() &&
>     -           "DIDerivedType not added in the BitFieldTypeMap");
>     -    return BitFieldTypeMap[Ty];
>     -  }
>     -
>     -  void setSymbolSize(const MCSymbol *Symbol, uint64_t Size) override {}
>     -
>     -  /// Process beginning of an instruction.
>     -  void beginInstruction(const MachineInstr *MI) override;
>     -
>     -  /// Complete all the types and emit the BTF sections.
>     -  void endModule() override;
>     -};
>     -
>     -} // end namespace llvm
>     -
>     -#endif // LLVM_LIB_CODEGEN_ASMPRINTER_BTFDEBUG_H
> 
>     Removed: llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebugStub.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebugStub.cpp?rev=348003&view=auto
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_BTFDebugStub.cpp-3Frev-3D348003-26view-3Dauto&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=YnLR9WdfN0EHrJogWVAsbY88Y4rNBV2ZOgkeMNlSO68&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebugStub.cpp (original)
>     +++ llvm/trunk/lib/CodeGen/AsmPrinter/BTFDebugStub.cpp (removed)
>     @@ -1,28 +0,0 @@
>     -//===- llvm/lib/CodeGen/AsmPrinter/BTFDebugStub.cpp -------------*-
>     C++ -*-===//
>     -//
>     -//                     The LLVM Compiler Infrastructure
>     -//
>     -// This file is distributed under the University of Illinois Open
>     Source
>     -// License. See LICENSE.TXT for details.
>     -//
>     -//===----------------------------------------------------------------------===//
>     -///
>     -/// \file
>     -/// This file is a stub for BTF generation support. The real
>     implementation
>     -/// is at BTFDebug.cpp which will be included if BPF target is built.
>     -///
>     -//===----------------------------------------------------------------------===//
>     -
>     -#include "DebugHandlerBase.h"
>     -
>     -namespace llvm {
>     -
>     -/// Stub class for emitting the BTF .
>     -class BTFDebug : public DebugHandlerBase {
>     -public:
>     -  BTFDebug(AsmPrinter *AP);
>     -};
>     -
>     -BTFDebug::BTFDebug(AsmPrinter *AP) : DebugHandlerBase(AP) {}
>     -
>     -} // end namespace llvm
> 
>     Modified: llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt?rev=348004&r1=348003&r2=348004&view=diff
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_CMakeLists.txt-3Frev-3D348004-26r1-3D348003-26r2-3D348004-26view-3Ddiff&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=P4ZoYFgAP4wfX8eLZyOD4iP1MCZ-ukU9EEl0FBof-fA&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt (original)
>     +++ llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt Fri Nov 30
>     08:54:43 2018
>     @@ -1,14 +1,3 @@
>     -# Based on whether BPF target is built or not,
>     -# either BTFDebug.cpp or BTFDebugStub.cpp will be included,
>     -# but not both.
>     -set(LLVM_OPTIONAL_SOURCES "BTFDebug.cpp" "BTFDebugStub.cpp")
>     -list(FIND LLVM_TARGETS_TO_BUILD "BPF" idx)
>     -if( NOT idx LESS 0 )
>     -  set(BTFDebug_File "BTFDebug.cpp")
>     -else()
>     -  set(BTFDebug_File "BTFDebugStub.cpp")
>     -endif()
>     -
>       add_llvm_library(LLVMAsmPrinter
>         AccelTable.cpp
>         AddressPool.cpp
>     @@ -35,7 +24,6 @@ add_llvm_library(LLVMAsmPrinter
>         WinException.cpp
>         CodeViewDebug.cpp
>         WasmException.cpp
>     -  ${BTFDebug_File}
> 
>         DEPENDS
>         intrinsics_gen
> 
>     Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp?rev=348004&r1=348003&r2=348004&view=diff
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_DebugHandlerBase.cpp-3Frev-3D348004-26r1-3D348003-26r2-3D348004-26view-3Ddiff&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=0IUQ_vibyys70mp3XHp3lOSjcUVASUbDePQINMWO_7k&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp (original)
>     +++ llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp Fri Nov
>     30 08:54:43 2018
>     @@ -8,7 +8,7 @@
>       //===----------------------------------------------------------------------===//
>       //
>       // Common functionality for different debug information format
>     backends.
>     -// LLVM currently supports DWARF, CodeView and BTF.
>     +// LLVM currently supports DWARF and CodeView.
>       //
>       //===----------------------------------------------------------------------===//
> 
> 
>     Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.h
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.h?rev=348004&r1=348003&r2=348004&view=diff
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_DebugHandlerBase.h-3Frev-3D348004-26r1-3D348003-26r2-3D348004-26view-3Ddiff&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=ryZbr1vb-5aq5jNUF3C-P3xXh7IXWhHBUWDosHtNjCo&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.h (original)
>     +++ llvm/trunk/lib/CodeGen/AsmPrinter/DebugHandlerBase.h Fri Nov 30
>     08:54:43 2018
>     @@ -8,7 +8,7 @@
>       //===----------------------------------------------------------------------===//
>       //
>       // Common functionality for different debug information format
>     backends.
>     -// LLVM currently supports DWARF, CodeView and BTF.
>     +// LLVM currently supports DWARF and CodeView.
>       //
>       //===----------------------------------------------------------------------===//
> 
> 
>     Modified: llvm/trunk/lib/MC/MCObjectFileInfo.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCObjectFileInfo.cpp?rev=348004&r1=348003&r2=348004&view=diff
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_MC_MCObjectFileInfo.cpp-3Frev-3D348004-26r1-3D348003-26r2-3D348004-26view-3Ddiff&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=7ecLrWM8xsIJfcvHl5MXgQsOFQ9lUBI6CVqze0B6uQQ&e=>
>     ==============================================================================
>     --- llvm/trunk/lib/MC/MCObjectFileInfo.cpp (original)
>     +++ llvm/trunk/lib/MC/MCObjectFileInfo.cpp Fri Nov 30 08:54:43 2018
>     @@ -476,9 +476,6 @@ void MCObjectFileInfo::initELFMCObjectFi
>             Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
> 
>         StackSizesSection = Ctx->getELFSection(".stack_sizes",
>     ELF::SHT_PROGBITS, 0);
>     -
>     -  BTFSection = Ctx->getELFSection(".BTF", ELF::SHT_PROGBITS, 0);
>     -  BTFExtSection = Ctx->getELFSection(".BTF.ext", ELF::SHT_PROGBITS, 0);
>       }
> 
>       void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {
> 
> 
>     _______________________________________________
>     llvm-commits mailing list
>     llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Dcommits&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=R12HNCXGeySNoMI7jEEblproWGQhIqC2nWw-eK5sPtw&s=Scsh-TjsK4lRa7wDCi09kBwcZkpq9bsS6a189nGIn50&e=>
> 


More information about the llvm-commits mailing list