mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-27 09:17:11 +00:00 
			
		
		
		
	Reviewed at http://llvm-reviews.chandlerc.com/D2445 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197826 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			162 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ===============
 | |
| 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
 |