=============== LLVM Extensions =============== .. contents:: :local: .. toctree:: :hidden: Introduction ============ This document describes extensions to tools and formats LLVM seeks compatibility with. General Assembly Syntax =========================== C99-style Hexadecimal Floating-point Constants ---------------------------------------------- LLVM's assemblers allow floating-point constants to be written in C99's hexadecimal format instead of decimal if desired. .. code-block:: gas .section .data .float 0x1c2.2ap3 Machine-specific Assembly Syntax ================================ X86/COFF-Dependent ------------------ Relocations ^^^^^^^^^^^ 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). .. code-block:: gas .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). .. code-block:: gas .section .debug$S,"rn" .long 4 .long 242 .long 40 .secrel32 _function_name .secidx _function_name ... ``.linkonce`` Directive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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. .. code-block:: gas .section .text$foo .linkonce ... .section .xdata$foo .linkonce associative .text$foo ... ``.section`` Directive ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MC supports passing the information in ``.linkonce`` at the end of ``.section``. For example, these two codes are equivalent .. code-block:: gas .section secName, "dr", discard, "Symbol1" .globl Symbol1 Symbol1: .long 1 .. code-block:: gas .section secName, "dr" .linkonce discard .globl Symbol1 Symbol1: .long 1 Note that in the combined form the COMDAT symbol is explicit. This extension exits to support multiple sections with the same name in different comdats: .. code-block:: gas .section secName, "dr", discard, "Symbol1" .globl Symbol1 Symbol1: .long 1 .section secName, "dr", discard, "Symbol2" .globl Symbol2 Symbol2: .long 1