as: s390 Operand Modifier

 
 9.40.3.6 Instruction Operand Modifier
 .....................................
 
 If a symbol modifier is attached to a symbol in an expression for an
 instruction operand field, the symbol term is replaced with a reference
 to an object in the global offset table (GOT) or the procedure linkage
 table (PLT). The following expressions are allowed: 'symbol@modifier +
 constant', 'symbol@modifier + label + constant', and 'symbol@modifier -
 label + constant'.  The term 'symbol' is the symbol that will be entered
 into the GOT or PLT, 'label' is a local label, and 'constant' is an
 arbitrary expression that the assembler can evaluate to a constant
 value.
 
    The term '(symbol + constant1)@modifier +/- label + constant2' is
 also accepted but a warning message is printed and the term is converted
 to 'symbol@modifier +/- label + constant1 + constant2'.
 
 '@got'
 '@got12'
      The @got modifier can be used for displacement fields, 16-bit
      immediate fields and 32-bit pc-relative immediate fields.  The
      @got12 modifier is synonym to @got.  The symbol is added to the
      GOT. For displacement fields and 16-bit immediate fields the symbol
      term is replaced with the offset from the start of the GOT to the
      GOT slot for the symbol.  For a 32-bit pc-relative field the
      pc-relative offset to the GOT slot from the current instruction
      address is used.
 '@gotent'
      The @gotent modifier can be used for 32-bit pc-relative immediate
      fields.  The symbol is added to the GOT and the symbol term is
      replaced with the pc-relative offset from the current instruction
      to the GOT slot for the symbol.
 '@gotoff'
      The @gotoff modifier can be used for 16-bit immediate fields.  The
      symbol term is replaced with the offset from the start of the GOT
      to the address of the symbol.
 '@gotplt'
      The @gotplt modifier can be used for displacement fields, 16-bit
      immediate fields, and 32-bit pc-relative immediate fields.  A
      procedure linkage table entry is generated for the symbol and a
      jump slot for the symbol is added to the GOT. For displacement
      fields and 16-bit immediate fields the symbol term is replaced with
      the offset from the start of the GOT to the jump slot for the
      symbol.  For a 32-bit pc-relative field the pc-relative offset to
      the jump slot from the current instruction address is used.
 '@plt'
      The @plt modifier can be used for 16-bit and 32-bit pc-relative
      immediate fields.  A procedure linkage table entry is generated for
      the symbol.  The symbol term is replaced with the relative offset
      from the current instruction to the PLT entry for the symbol.
 '@pltoff'
      The @pltoff modifier can be used for 16-bit immediate fields.  The
      symbol term is replaced with the offset from the start of the PLT
      to the address of the symbol.
 '@gotntpoff'
      The @gotntpoff modifier can be used for displacement fields.  The
      symbol is added to the static TLS block and the negated offset to
      the symbol in the static TLS block is added to the GOT. The symbol
      term is replaced with the offset to the GOT slot from the start of
      the GOT.
 '@indntpoff'
      The @indntpoff modifier can be used for 32-bit pc-relative
      immediate fields.  The symbol is added to the static TLS block and
      the negated offset to the symbol in the static TLS block is added
      to the GOT. The symbol term is replaced with the pc-relative offset
      to the GOT slot from the current instruction address.
 
    For more information about the thread local storage modifiers
 'gotntpoff' and 'indntpoff' see the ELF extension documentation 'ELF
 Handling For Thread-Local Storage'.