链接描述文件中的 KEEP 是什么意思?

2023-12-28

The LD手册 http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html#SEC2没有解释什么KEEP命令执行。下面是第三方链接描述文件的一个片段,其特点是KEEP。什么是KEEP命令执行ld?

SECTIONS
{  
    .text :
    {
        . = ALIGN(4);
        _text = .;
        PROVIDE(stext = .);
        KEEP(*(.isr_vector))
        KEEP(*(.init))
        *(.text .text.*)        
        *(.rodata .rodata.*)        
        *(.gnu.linkonce.t.*)
        *(.glue_7)
        *(.glue_7t)
        *(.gcc_except_table)
        *(.gnu.linkonce.r.*)
        . = ALIGN(4);
        _etext = .;
        _sidata = _etext;
        PROVIDE(etext = .);   
            _fini = . ;
                *(.fini)

    } >flash

Afaik LD 会将符号保留在该部分中,即使未引用符号也是如此。 (--gc-sections)。

通常用于二进制启动过程中具有某些特殊含义的部分,或多或少地标记依赖树的根。


(以下为 Sabuncu)

依赖树:

如果消除未使用的代码,则可以分析代码并标记所有可到达的部分(代码+全局变量+常量)。

因此,您选择一个部分,将其标记为“已使用”,然后查看它引用的其他(未使用)部分,然后将这些部分标记为“已使用”,并检查它们引用的内容等。

没有标记为“已使用”的部分是多余的,可以被删除。

由于一个部分可以引用多个其他部分(例如,一个过程调用三个不同的其他部分),因此如果您绘制结果,您会得到一棵树。

Roots:

然而,上述原则给我们带来了一个问题:始终使用的“第一”部分是什么?可以这么说,树的第一个节点(根)?这就是“keep()”的作用,它告诉链接器哪些部分(如果可用)是首先要查看的部分。因此,这些总是相互关联的。

通常,这些部分是从程序加载器调用的,以执行与动态链接(可以是可选的,并且取决于操作系统/文件格式)以及程序的入口点相关的任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链接描述文件中的 KEEP 是什么意思? 的相关文章

随机推荐

  • 存储调查数据的最佳方式?

    我正在开发一个非常小的调查应用程序 可能有 3 4 页的 Web 应用程序 所以我的问题是保存调查数据的最佳方法是什么 顺便说一句 到目前为止我已经想出了以下方法 保存到数据库并将每个调查标记为不完整 当用户提交最后一份调查表格时 检查调查
  • 收集信用卡信息 - 并非收取付款

    我正在 Linux 服务器上使用 PHP 和 MySQL 进行工作 我有一个要求 我试图说服他们 从用户那里收集信用卡信息 以便我们公司可以使用卡号来保留酒店房间参加会议 我们根本不会自己给卡充值 而是将其发送到酒店 然后 我需要能够下载
  • 参数的默认值在 SSRS 2008 R2 中不起作用

    我有一个报告 BIDS SSRS 2008 R2 其中有一个参数 允许用户从列表 比如说销售区域 中选择多个值 不过 由于列表很长 大约有 15 个可能的值 我希望默认选择最常用的 2 个值 我在 参数属性 gt gt 默认值 对话框中进行
  • C# 通过句柄 (hWnd) 32 和 64 位获取路径/文件名

    我得到以下代码来通过句柄获取路径 文件名 DllImport user32 dll CharSet CharSet Auto SetLastError true private static extern int GetWindowThre
  • 用于具有 REST API 身份验证的 WebRTC 的 TURN 服务器

    我正在尝试为 webRTC 设置 rfc5766 turn server TURN 服务器here https code google com p rfc5766 turn server 我能够使用 TURN 服务器成功转发我的视频turn
  • Django 验证 ImageField 尺寸等

    我有一个自定义的清洁方法如下 def clean image self image self cleaned data image if image from django core files images import get imag
  • 没有找到现成的 kinect?

    我是 Kinect 编程的初学者 我已经安装了windows sdk 我尝试在开发人员中运行示例 然而 它说 没有找到准备好的kinect 我知道知道为什么 有人能帮我解决这个问题吗 多谢 Yuanhui 我也是初学者 其实我昨天刚拿到ki
  • ServiceStack“新”api 和异步等待

    服务堆栈版本 3 我很熟悉https github com ServiceStack ServiceStack wiki New API https github com ServiceStack ServiceStack wiki New
  • jsPlumb:拖动新连接应删除现有连接

    使用 jsPlumb 我设法进行了以下设置 有多个节点 其作用类似于特殊类型流程图中的节点 每个节点都有一个可以将连接丢弃到的目标 每个节点都有零个 一个或多个出口 每个出口作为jsPlumb源 最多允许有1个连接 先举个小例子 http
  • Internet Explorer innerHTML 输出不带引号的属性

    我正在使用 IE 8 并尝试设置元素 Id 属性 然后我将该元素附加到父元素并检查它的innerHTML 我看到的问题是 id 属性缺少双引号 起初我认为这可能是因为我使用了 setAttribute 属性 而这在 IE 8 中可能有问题
  • Git Pull:更改身份验证

    我对 git 很陌生 我在服务器 A 上设置了一个存储库 其中通过 ssh rsa 密钥进行访问 我在那里有一些用户 包括我自己 现在我做git clone在我的本地计算机上获取本地副本 进行更改 然后push origin master
  • html 在所有设备上保持相同的字符大小

    我用几个输入按钮做了一个关于 html 的练习 http bullmalay appspot com http bullmalay appspot com 我在手机上访问它 但我发现文字尺寸真的很小 我认为原因在于分辨率 谁能帮我调整一下文
  • Java 中的连接字符串是否总是会导致在内存中创建新字符串?

    我有一条很长的字符串 不适合屏幕的宽度 例如 String longString This string is very long It does not fit the width of the screen So you have to
  • 无法使用带有节点的express使用res.send()发送数字

    我正在尝试使用节点中的 Express 获得 imdb 评级 但我很挣扎 电影 json id 3962210 order 4 361276149749756 1988 fields year 2015 title David and Go
  • 单击时导航项标题消失

    我创建了带有导航视图的抽屉 我有正在调用其他活动的导航项目 问题是当我单击导航项时 其他活动启动 如果我返回主活动并打开抽屉 则单击的导航项的标题消失 只有我可以看到该项目的图标 code public class MainActivity
  • 带有文本、复选框、选择的 jQuery 表过滤器

    需要使用文本搜索 复选框和选择从表外部过滤表 PicNet 表过滤器 http www picnet com au resources tablefilter demo htmfor jQuery 适用于搜索和使用表外的复选框 尽管我找不到
  • Twitter Bootstrap - 100% 高度

    我正在尝试使用 twitter bootstrap 框架为我的应用程序设计一个管理面板 但我无法让我的布局正常工作 I was inspired by this design It would be a two column layout
  • 如何将不同的 DataFrame 组合成一个分组条形图

    我正在尝试复制答案this https stackoverflow com questions 65052443 creating a grouped bar plot with seaborn问题 我看不出我在做什么有什么不同 我的输出
  • 无法从 Linux 连接到 SQL Server

    我正在尝试连接到 CentOS 5 8 上的 SQL Server 2008 我正在使用 unixODBC 2 3 0 和 SQL Server ODBC 驱动程序 www microsoft com en us download deta
  • 链接描述文件中的 KEEP 是什么意思?

    The LD手册 http ftp gnu org old gnu Manuals ld 2 9 1 html mono ld html SEC2没有解释什么KEEP命令执行 下面是第三方链接描述文件的一个片段 其特点是KEEP 什么是KE