Skip to content

Latest commit

 

History

History
161 lines (113 loc) · 3.61 KB

Extensions.rst

File metadata and controls

161 lines (113 loc) · 3.61 KB

LLVM Extensions

.. toctree::
   :hidden:

This document describes extensions to tools and formats LLVM seeks compatibility with.

LLVM's assemblers allow floating-point constants to be written in C99's hexadecimal format instead of decimal if desired.

.section .data
.float 0x1c2.2ap3

The following additional relocation types are supported:

@IMGREL (AT&T syntax only) generates an image-relative relocation that corresponds to the COFF relocation types IMAGE_REL_I386_DIR32NB (32-bit) or IMAGE_REL_AMD64_ADDR32NB (64-bit).

.text
fun:
  mov foo@IMGREL(%ebx, %ecx, 4), %eax

.section .pdata
  .long fun@IMGREL
  .long (fun@imgrel + 0x3F)
  .long $unwind$fun@imgrel

.secrel32 generates a relocation that corresponds to the COFF relocation types IMAGE_REL_I386_SECREL (32-bit) or IMAGE_REL_AMD64_SECREL (64-bit).

.secidx relocation generates an index of the section that contains the target. It corresponds to the COFF relocation types IMAGE_REL_I386_SECTION (32-bit) or IMAGE_REL_AMD64_SECTION (64-bit).

.section .debug$S,"rn"
  .long 4
  .long 242
  .long 40
  .secrel32 _function_name
  .secidx   _function_name
  ...

Syntax:

.linkonce [ comdat type [ section identifier ] ]

Supported COMDAT types:

discard
Discards duplicate sections with the same COMDAT symbol. This is the default if no type is specified.
one_only
If the symbol is defined multiple times, the linker issues an error.
same_size
Duplicates are discarded, but the linker issues an error if any have different sizes.
same_contents
Duplicates are discarded, but the linker issues an error if any duplicates do not have exactly the same content.
associative

Links the section if a certain other COMDAT section is linked. This other section is indicated by its section identifier following the comdat type. The following restrictions apply to the associated section:

  1. It must be the name of a section already defined.
  2. It must differ from the current section.
  3. It must be a COMDAT section.
  4. It cannot be another associative COMDAT section.
largest
Links the largest section from among the duplicates.
newest
Links the newest section from among the duplicates.
.section .text$foo
.linkonce
  ...

.section .xdata$foo
.linkonce associative .text$foo
  ...

MC supports passing the information in .linkonce at the end of .section. For example, these two codes are equivalent

.section secName, "dr", discard, "Symbol1"
.globl Symbol1
Symbol1:
.long 1
.section secName, "dr"
.linkonce discard
.globl Symbol1
Symbol1:
.long 1

Note that in the combined form the COMDAT symbol is explicit. This extension exists to support multiple sections with the same name in different COMDATs:

.section secName, "dr", discard, "Symbol1"
.globl Symbol1
Symbol1:
.long 1

.section secName, "dr", discard, "Symbol2"
.globl Symbol2
Symbol2:
.long 1