首页 技术 正文
技术 2022年11月10日
0 收藏 568 点赞 4,099 浏览 5872 个字

3.5.1 Simple Assignments

  • symbol = expression ;
  • symbol += expression ;
  • The first case will define symbol to the value of expression. In the other cases, symbol must already be defined.
  • The special symbol name ‘.’ indicates the location counter. You may only use this within a SECTIONS command.
  • The semicolon after expression is required.

3.6 SECTIONS Command

The SECTIONS command tells the linker how to map input sections into output sections,and how to place the output sections in memory.

SECTIONS

{

  sections-command

  sections-command

  …

}

Each sections-command may of be one of the following:

_ an ENTRY command

_ a symbol assignment

_ an output section description

_ an overlay description

3.6.1 Output Section Description

section [address] [(type)] :

[AT(lma)]

[ALIGN(section_align)]

[SUBALIGN(subsection_align)]

[constraint]

{

  output-section-command

  output-section-command

  …

} [>region] [AT>lma_region] [:phdr :phdr …] [=fillexp]

Each output-section-command may be one of the following:

_ a symbol assignment

_ an input section description

_ data values to include directly

_ a special output section keyword

3.6.2 Output Section Name

The name of the output section is section.

3.6.3 Output Section Address

  • The address is an expression for the VMA of the output section.
  • If you do not provide address, the linker will set it based on region if present, or otherwise based on the current value of the location counter.
  • If you provide address, the address of the output section will be set to precisely that.
  • If you provide neither address nor region, then the address of the output section will be set to the current value of the location counter aligned to the alignment requirements of the output section.

3.6.4 Input Section Description

  • The input section description is the most basic linker script operation. You use output
  • sections to tell the linker how to lay out your program in memory. You use input section
  • descriptions to tell the linker how to map the input files into your memory layout.

3.6.4.2 Input Section Wildcard Patterns

    1. ‘*’ matches any number of characters
    2. ‘?’ matches any single character
    3. ‘[chars]’ matches a single instance of any of the chars;
    4. ‘-’ be used to specify a range of characters, as in ‘[a-z]’ to match any lower case letter.
    5. ‘\’ quotes the following character

3.6.4.3 Input Section for Common Symbols

    • in many object file formats common symbols do not have a particular input section. The linker treats common symbols as though they are in an input section named ‘COMMON’.
    • .bss { *(.bss) *(COMMON) }

3.6.4.4 Input Section and Garbage Collection

  • When link-time garbage collection is in use (‘–gc-sections’ to mark sections that should not be eliminated. This is accomplished by surrounding an input section’s wildcard entry with
  • KEEP(), as in KEEP(*(.init)) or KEEP(SORT_BY_NAME(*)(.ctors)).

3.6.4.5 Input Section Example

3.6.7 Output Section Discarding

  • ü  The linker will not create output sections with no contents.
  • ü  The special output section name ‘/DISCARD/’ be used to discard input sections.
  • ü  Any input sections which are assigned to an output section named ‘/DISCARD/’ are not included in the output file.

3.6.8 Output Section Attributes

section [address] [(type)] :

[AT(lma)]

[ALIGN(section_align)]

[SUBALIGN(subsection_align)]

[constraint]

{

  output-section-command

} [>region] [AT>lma_region] [:phdr :phdr …] [=fillexp]

3.6.8.1 Output Section Type

NOLOAD The section should be marked as not loadable, so that it will not be loaded into

memory when the program is run.

DSECT COPY INFO OVERLAY type names are for backward compatibility, rarely used.

3.6.8.2 Output Section LMA

ü  if the section do not had a VMA assigned to it then the linker will use the lma region as the VMA region as well.

ü  If neither AT nor AT> is specified for an allocatable section, the linker will set the LMA such that the difference between VMA and LMA for the section is the same as the preceding output section in the same region.

ü  If there is no preceding output section or the section is not allocatable, the linker will set the LMA equal to the VMA.

3.6.8.3 Forced Output Alignment

You can increase an output section’s alignment by using ALIGN.

3.6.8.4 Forced Input Alignment

You can force input section alignment within an output section by using SUBALIGN. The value specified overrides any alignment given by input sections, whether larger or smaller.

3.6.8.5 Output Section Constraint

You can specify that an output section should only be created if all of its input sections are read-only or all of its input sections are read-write by using the keyword ONLY_IF_RO and ONLY_IF_RW respectively.

3.6.8.6 Output Section Region

You can assign a section to a previously defined region of memory by using ‘>region’.

MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 }

SECTIONS { ROM : { *(.text) } >rom }

3.6.8.7 Output Section Phdr

You can assign a section to a previously defined program segment by using ‘:phdr’.

If a section is assigned to one or more segments, then all subsequent allocated sections will be assigned to those segments as well, unless they use an explicitly :phdr modifier.

use :NONE to tell the linker to not put the section in any segment at all.

Here is a simple example:

PHDRS { text PT_LOAD ; }

SECTIONS { .text : { *(.text) } :text }

3.6.8.8 Output Section Fill

You can set the fill pattern for an entire section by using ‘=fillexp’.

Any otherwise unspecified regions of memory within the output section will be filled with the value, repeated as necessary.

SECTIONS { .text : { *(.text) } =0x90909090 }

3.6.9 Overlay Description

An overlay description describe sections which are to be loaded as part of a single memory image but are to be run at the same memory address.

OVERLAY [start] : [NOCROSSREFS] [AT ( ldaddr )]

{

secname1

{

  output-section-command

  output-section-command

  …

} [:phdr…] [=fill]

secname2

{

  output-section-command

  output-section-command

  …

} [:phdr…] [=fill]

} [>region] [:phdr…] [=fill]

ü  The sections are all defined with the same starting address. The load addresses of the sections are arranged such that they are consecutive in memory starting at the load address used for the OVERLAY as a whole.

ü  __load_start_secname is defined as the starting load address of the section.

ü  __load_stop_secname is defined as the final load address of the section.

ü  At the end of the overlay, the value of the location counter is set to the start address of the overlay plus the size of the largest section.

3.7 MEMORY Command

The MEMORY command describes the location and size of blocks of memory in the target.

MEMORY

{

  name [(attr)] : ORIGIN = origin, LENGTH = len

  …

}

The name is a name used in the linker script to refer to the region.

The attr string is an optional list of attributes that specify whether to use a particular memory region for an input section which is not explicitly mapped in the linker script.

The len is an expression for the size in bytes of the memory region.

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898