Annotation of GNUtools/cctools/include/mach-o/hppa/reloc.h, revision 1.1

1.1     ! root        1: /*    reloc.h   -  assemble for HP-PA    */
        !             2: /*    Defines machine specific relocation entries */
        !             3: 
        !             4: #ifndef HPPA_RELOC_INCLUDED
        !             5: #define HPPA_RELOC_INCLUDED
        !             6: 
        !             7: /*
        !             8:  * Relocation types used in the hppa implementation.  Relocation entries for
        !             9:  * things other than instructions use the same generic relocation as discribed
        !            10:  * in <mach-o/reloc.h> and their r_type is HPPA_RELOC_VANILLA.  The rest of the
        !            11:  * relocation types are for instructions.  Since they are for instructions the
        !            12:  * r_address field indicates the 32 bit instruction that the relocation is to
        !            13:  * be preformed on.  The field r_pcrel is set only for the HPPA_RELOC_BR17.
        !            14:  * And r_length is set to long for all non-RELOC_VANILLA r_types.
        !            15:  */
        !            16: enum reloc_type_hppa
        !            17: {
        !            18:     HPPA_RELOC_VANILLA,        /* generic relocation as discribed in <mach-o/reloc.h>*/
        !            19:     HPPA_RELOC_PAIR,   /* the second relocation entry of a pair */
        !            20:     HPPA_RELOC_HI21,   /* a PAIR follows with the low part */
        !            21:     HPPA_RELOC_LO14,   /* a PAIR follows with the high part */
        !            22:     HPPA_RELOC_BR17,   /* 17 bit branch displacement (to a word address)
        !            23:                           a PAIR follows with the high part */
        !            24:     HPPA_RELOC_BL17,   /* a bl instruction (overlow causes an error) */
        !            25:     HPPA_RELOC_JBSR,   /* a bl instruction that is targeted at a long branch
        !            26:                           stub, a PAIR follows with the high part */
        !            27:     HPPA_RELOC_SECTDIFF,       /* a PAIR follows with subtract symbol value */
        !            28:     HPPA_RELOC_HI21_SECTDIFF,  /* a PAIR follows with subtract symbol value */
        !            29:     HPPA_RELOC_LO14_SECTDIFF   /* a PAIR follows with subtract symbol value */
        !            30: };
        !            31: 
        !            32: /*
        !            33:  * For the HI and LO relocation types the two parts of the relocated expression
        !            34:  * (symbol + offset) are calculated as follows:
        !            35:  *
        !            36:  *     rounded = round(offset, 0x2000);
        !            37:  *     left21 =   (symbol + rounded) & 0xfffff800;
        !            38:  *     right14 = ((symbol + rounded) & 0x000007ff) + (offset - rounded);
        !            39:  *
        !            40:  * This allows the left part to be shared between references with different
        !            41:  * offsets as long as the rounded offsets are the same.
        !            42:  *
        !            43:  * The HPPA_RELOC_BR17 r_type also uses the above calculation and the right14
        !            44:  * bits, sign extened to fill the displacement, and converted to a word
        !            45:  * displacement by droping the low bits (after checking they are zero).
        !            46:  */
        !            47: 
        !            48: /*
        !            49:  * For relocation types that use pairs the part of the relocated expression that
        !            50:  * is not stored in the instruction is stored in the r_address feild of the
        !            51:  * PAIR's entry.
        !            52:  *
        !            53:  * All low parts are stored as sign extened byte addressed values in the PAIR's
        !            54:  * r_address field as 32 bit values.  This allows the HI21 not to have to know
        !            55:  * which type of low it is used with.
        !            56:  *
        !            57:  * The high parts are left justified 21 bit values zero filled to 32 bits and 
        !            58:  * stored in the PAIR's r_address field.
        !            59:  */
        !            60: 
        !            61: /*
        !            62:  * The instructions that use the non-RELOC_VANILLA r_types are and the r_types
        !            63:  * they use are as follows:
        !            64:  *     instructions    r_type
        !            65:  *
        !            66:  *     LDIL,ADDIL      HPPA_RELOC_HI21
        !            67:  *     LDx, STx, LDO   HPPA_RELOC_LO14
        !            68:  *     BE, BLE         HPPA_RELOC_BR17
        !            69:  *     BL              HPPA_RELOC_BL17
        !            70:  *
        !            71:  * For the HPPA_RELOC_JBSR the BL instruction must be targeted at a long branch
        !            72:  * stub that can be reached with 17 bits of signed word displacement.  Also the
        !            73:  * stub must be in the same block as the BL instruction so that scattered
        !            74:  * loading done by the link editor will not move them apart.  For example in
        !            75:  * assembly code:
        !            76:  *     jbsr    foo,%r2,L1      ; creates a bl inst with a HPPA_RELOC_JBSR
        !            77:  *                             ;  relocation entry for the symbol foo and the
        !            78:  *                             ;  instruction is targeted to L1
        !            79:  *     ...
        !            80:  * L1: ldil    L'foo,%r1       ; a HPPA_RELOC_HI21 entry for symbol foo
        !            81:  *     ble,n   R'foo(%sr4,%r1) ; a HPPA_RELOC_BR17 entry for symbol foo
        !            82:  */
        !            83: 
        !            84: #endif    /* HPPA_RELOC_INCLUDED */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.