• MC Layer Target


    Target

    每种类型的backends在MC成都会有一个对应Target类,位于llvm\include\llvm\MC\TargetRegistry.h文件。

    • Target包含了对应backends的一些基础信息
    • 每个backend都会有一个单实例Target
    • Target除了包含一些最基本信息之外,另外一个重要用途:为创建MC层中各个类提供了createXXX接口,因此使用MC之前需要调用Target中createXX接口 按照需要创建相应MC组件
    • 例如反汇编时需要调用createMCDisassembler,创建MCDisassembler进行反汇编。

    Target 成员

    Target 成员主要分为两个部分:基本信息成员以及各种回调函数

    • 基本信息成员,例如const char *Name、const char *BackendName等等之类的。
    • 各种回调函数Fn,例如MCAsmInfoCtorFn 等,XXXXFn以Fn为主主要为createXXXX接口创建相应MC中组件使用,

    XXXXFn 需要在启动时调用相应registerXXX函数进行注册,TargetRegistry.h文件中提供了各种register函数 提供XXXFn注册功能。

    TargetRegistry.h文件中还提供了各种creareXXXX函数,用于创建MC中各种组件。

    FirstTarget

    所有注册的backend Target最终会以单向链表形式串联起来:

    FirstTarget 为第一个注册Target,查找某个Target时需要进行单向链表循环访问,目前由于backend不是很多,因此单向链表能够满足需求。

    <Target>TargetInfo.cpp

    新增一个后端时一般都会创建对应<Target>TargetInfo.cpp文件,用于提供对应Target类单实例以及注册功能

    AMDGPU MC Target 注册功能位于llvm\lib\Target\AMDGPU\TargetInfo\AMDGPUTargetInfo.cpp文件中:

    提供R600和GCN两个Target 单实例注册功能。

    TargetRegistry::RegisterTarget

    TargetRegistry::RegisterTarget最终会将单实例Target 注册到RegisterTarget 单向链表中:

  • 相关阅读:
    [渗透测试]—7.1 漏洞利用开发和Shellcode编写
    Spring Boot 应用的热部署配置
    linux性能测试
    利用aop+反射拦截mybatisplus的insert方法补充公共属性
    (2)多线程-线程的常用方法与生命周期
    JS高级:Web Workers高级(多线程)
    【Text2SQL 论文】T5-SR:使用 T5 生成中间表示来得到 SQL
    jdk8新特性(Lambda、Steam、函数式接口)
    大三第十一周学习笔记
    线性代数 第五章 特征值与特征向量
  • 原文地址:https://blog.csdn.net/weixin_42730667/article/details/125565327