as: s390 Operand Modifier

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