1857
1857
/* PowerPC relocations defined by the ABIs */
1858
#define R_PPC_NONE 0
1859
#define R_PPC_ADDR32 1 /* 32bit absolute address */
1860
#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */
1861
#define R_PPC_ADDR16 3 /* 16bit absolute address */
1862
#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */
1863
#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */
1864
#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */
1865
#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */
1866
#define R_PPC_ADDR14_BRTAKEN 8
1867
#define R_PPC_ADDR14_BRNTAKEN 9
1868
#define R_PPC_REL24 10 /* PC relative 26 bit */
1869
#define R_PPC_REL14 11 /* PC relative 16 bit */
1870
#define R_PPC_REL14_BRTAKEN 12
1871
#define R_PPC_REL14_BRNTAKEN 13
1872
#define R_PPC_GOT16 14
1873
#define R_PPC_GOT16_LO 15
1874
#define R_PPC_GOT16_HI 16
1875
#define R_PPC_GOT16_HA 17
1876
#define R_PPC_PLTREL24 18
1877
#define R_PPC_COPY 19
1878
#define R_PPC_GLOB_DAT 20
1879
#define R_PPC_JMP_SLOT 21
1880
#define R_PPC_RELATIVE 22
1881
#define R_PPC_LOCAL24PC 23
1882
#define R_PPC_UADDR32 24
1883
#define R_PPC_UADDR16 25
1884
#define R_PPC_REL32 26
1885
#define R_PPC_PLT32 27
1886
#define R_PPC_PLTREL32 28
1887
#define R_PPC_PLT16_LO 29
1888
#define R_PPC_PLT16_HI 30
1889
#define R_PPC_PLT16_HA 31
1890
#define R_PPC_SDAREL16 32
1891
#define R_PPC_SECTOFF 33
1892
#define R_PPC_SECTOFF_LO 34
1893
#define R_PPC_SECTOFF_HI 35
1894
#define R_PPC_SECTOFF_HA 36
1858
#define GRUB_ELF_R_PPC_NONE 0
1859
#define GRUB_ELF_R_PPC_ADDR32 1 /* 32bit absolute address */
1860
#define GRUB_ELF_R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */
1861
#define GRUB_ELF_R_PPC_ADDR16 3 /* 16bit absolute address */
1862
#define GRUB_ELF_R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */
1863
#define GRUB_ELF_R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */
1864
#define GRUB_ELF_R_PPC_ADDR16_HA 6 /* adjusted high 16bit */
1865
#define GRUB_ELF_R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */
1866
#define GRUB_ELF_R_PPC_ADDR14_BRTAKEN 8
1867
#define GRUB_ELF_R_PPC_ADDR14_BRNTAKEN 9
1868
#define GRUB_ELF_R_PPC_REL24 10 /* PC relative 26 bit */
1869
#define GRUB_ELF_R_PPC_REL14 11 /* PC relative 16 bit */
1870
#define GRUB_ELF_R_PPC_REL14_BRTAKEN 12
1871
#define GRUB_ELF_R_PPC_REL14_BRNTAKEN 13
1872
#define GRUB_ELF_R_PPC_GOT16 14
1873
#define GRUB_ELF_R_PPC_GOT16_LO 15
1874
#define GRUB_ELF_R_PPC_GOT16_HI 16
1875
#define GRUB_ELF_R_PPC_GOT16_HA 17
1876
#define GRUB_ELF_R_PPC_PLTREL24 18
1877
#define GRUB_ELF_R_PPC_COPY 19
1878
#define GRUB_ELF_R_PPC_GLOB_DAT 20
1879
#define GRUB_ELF_R_PPC_JMP_SLOT 21
1880
#define GRUB_ELF_R_PPC_RELATIVE 22
1881
#define GRUB_ELF_R_PPC_LOCAL24PC 23
1882
#define GRUB_ELF_R_PPC_UADDR32 24
1883
#define GRUB_ELF_R_PPC_UADDR16 25
1884
#define GRUB_ELF_R_PPC_REL32 26
1885
#define GRUB_ELF_R_PPC_PLT32 27
1886
#define GRUB_ELF_R_PPC_PLTREL32 28
1887
#define GRUB_ELF_R_PPC_PLT16_LO 29
1888
#define GRUB_ELF_R_PPC_PLT16_HI 30
1889
#define GRUB_ELF_R_PPC_PLT16_HA 31
1890
#define GRUB_ELF_R_PPC_SDAREL16 32
1891
#define GRUB_ELF_R_PPC_SECTOFF 33
1892
#define GRUB_ELF_R_PPC_SECTOFF_LO 34
1893
#define GRUB_ELF_R_PPC_SECTOFF_HI 35
1894
#define GRUB_ELF_R_PPC_SECTOFF_HA 36
1895
1895
/* Keep this the last entry. */
1896
#define R_PPC_NUM 37
1896
#define GRUB_ELF_R_PPC_NUM 37
1898
1898
/* PowerPC64 relocations defined by the ABIs */
1899
#define R_PPC64_NONE R_PPC_NONE
1900
#define R_PPC64_ADDR32 R_PPC_ADDR32 /* 32bit absolute address. */
1901
#define R_PPC64_ADDR24 R_PPC_ADDR24 /* 26bit address, word aligned. */
1902
#define R_PPC64_ADDR16 R_PPC_ADDR16 /* 16bit absolute address. */
1903
#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of abs. address. */
1904
#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of abs. address. */
1905
#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA /* adjusted high 16bits. */
1906
#define R_PPC64_ADDR14 R_PPC_ADDR14 /* 16bit address, word aligned. */
1907
#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN
1908
#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
1909
#define R_PPC64_REL24 R_PPC_REL24 /* PC relative 26 bit, word aligned. */
1910
#define R_PPC64_REL14 R_PPC_REL14 /* PC relative 16 bit. */
1911
#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN
1912
#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN
1913
#define R_PPC64_GOT16 R_PPC_GOT16
1914
#define R_PPC64_GOT16_LO R_PPC_GOT16_LO
1915
#define R_PPC64_GOT16_HI R_PPC_GOT16_HI
1916
#define R_PPC64_GOT16_HA R_PPC_GOT16_HA
1918
#define R_PPC64_COPY R_PPC_COPY
1919
#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT
1920
#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT
1921
#define R_PPC64_RELATIVE R_PPC_RELATIVE
1923
#define R_PPC64_UADDR32 R_PPC_UADDR32
1924
#define R_PPC64_UADDR16 R_PPC_UADDR16
1925
#define R_PPC64_REL32 R_PPC_REL32
1926
#define R_PPC64_PLT32 R_PPC_PLT32
1927
#define R_PPC64_PLTREL32 R_PPC_PLTREL32
1928
#define R_PPC64_PLT16_LO R_PPC_PLT16_LO
1929
#define R_PPC64_PLT16_HI R_PPC_PLT16_HI
1930
#define R_PPC64_PLT16_HA R_PPC_PLT16_HA
1932
#define R_PPC64_SECTOFF R_PPC_SECTOFF
1933
#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO
1934
#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI
1935
#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA
1936
#define R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2. */
1937
#define R_PPC64_ADDR64 38 /* doubleword64 S + A. */
1938
#define R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A). */
1939
#define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A). */
1940
#define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A). */
1941
#define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A). */
1942
#define R_PPC64_UADDR64 43 /* doubleword64 S + A. */
1943
#define R_PPC64_REL64 44 /* doubleword64 S + A - P. */
1944
#define R_PPC64_PLT64 45 /* doubleword64 L + A. */
1945
#define R_PPC64_PLTREL64 46 /* doubleword64 L + A - P. */
1946
#define R_PPC64_TOC16 47 /* half16* S + A - .TOC. */
1947
#define R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.). */
1948
#define R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.). */
1949
#define R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.). */
1950
#define R_PPC64_TOC 51 /* doubleword64 .TOC. */
1951
#define R_PPC64_PLTGOT16 52 /* half16* M + A. */
1952
#define R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A). */
1953
#define R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A). */
1954
#define R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A). */
1956
#define R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2. */
1957
#define R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2. */
1958
#define R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2. */
1959
#define R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2. */
1960
#define R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2. */
1961
#define R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2. */
1962
#define R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2. */
1963
#define R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2. */
1964
#define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2. */
1965
#define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2. */
1966
#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2. */
1899
#define GRUB_ELF_R_PPC64_NONE GRUB_ELF_R_PPC_NONE
1900
#define GRUB_ELF_R_PPC64_ADDR32 GRUB_ELF_R_PPC_ADDR32 /* 32bit absolute address. */
1901
#define GRUB_ELF_R_PPC64_ADDR24 GRUB_ELF_R_PPC_ADDR24 /* 26bit address, word aligned. */
1902
#define GRUB_ELF_R_PPC64_ADDR16 GRUB_ELF_R_PPC_ADDR16 /* 16bit absolute address. */
1903
#define GRUB_ELF_R_PPC64_ADDR16_LO GRUB_ELF_R_PPC_ADDR16_LO /* lower 16bits of abs. address. */
1904
#define GRUB_ELF_R_PPC64_ADDR16_HI GRUB_ELF_R_PPC_ADDR16_HI /* high 16bits of abs. address. */
1905
#define GRUB_ELF_R_PPC64_ADDR16_HA GRUB_ELF_R_PPC_ADDR16_HA /* adjusted high 16bits. */
1906
#define GRUB_ELF_R_PPC64_ADDR14 GRUB_ELF_R_PPC_ADDR14 /* 16bit address, word aligned. */
1907
#define GRUB_ELF_R_PPC64_ADDR14_BRTAKEN GRUB_ELF_R_PPC_ADDR14_BRTAKEN
1908
#define GRUB_ELF_R_PPC64_ADDR14_BRNTAKEN GRUB_ELF_R_PPC_ADDR14_BRNTAKEN
1909
#define GRUB_ELF_R_PPC64_REL24 GRUB_ELF_R_PPC_REL24 /* PC relative 26 bit, word aligned. */
1910
#define GRUB_ELF_R_PPC64_REL14 GRUB_ELF_R_PPC_REL14 /* PC relative 16 bit. */
1911
#define GRUB_ELF_R_PPC64_REL14_BRTAKEN GRUB_ELF_R_PPC_REL14_BRTAKEN
1912
#define GRUB_ELF_R_PPC64_REL14_BRNTAKEN GRUB_ELF_R_PPC_REL14_BRNTAKEN
1913
#define GRUB_ELF_R_PPC64_GOT16 GRUB_ELF_R_PPC_GOT16
1914
#define GRUB_ELF_R_PPC64_GOT16_LO GRUB_ELF_R_PPC_GOT16_LO
1915
#define GRUB_ELF_R_PPC64_GOT16_HI GRUB_ELF_R_PPC_GOT16_HI
1916
#define GRUB_ELF_R_PPC64_GOT16_HA GRUB_ELF_R_PPC_GOT16_HA
1918
#define GRUB_ELF_R_PPC64_COPY GRUB_ELF_R_PPC_COPY
1919
#define GRUB_ELF_R_PPC64_GLOB_DAT GRUB_ELF_R_PPC_GLOB_DAT
1920
#define GRUB_ELF_R_PPC64_JMP_SLOT GRUB_ELF_R_PPC_JMP_SLOT
1921
#define GRUB_ELF_R_PPC64_RELATIVE GRUB_ELF_R_PPC_RELATIVE
1923
#define GRUB_ELF_R_PPC64_UADDR32 GRUB_ELF_R_PPC_UADDR32
1924
#define GRUB_ELF_R_PPC64_UADDR16 GRUB_ELF_R_PPC_UADDR16
1925
#define GRUB_ELF_R_PPC64_REL32 GRUB_ELF_R_PPC_REL32
1926
#define GRUB_ELF_R_PPC64_PLT32 GRUB_ELF_R_PPC_PLT32
1927
#define GRUB_ELF_R_PPC64_PLTREL32 GRUB_ELF_R_PPC_PLTREL32
1928
#define GRUB_ELF_R_PPC64_PLT16_LO GRUB_ELF_R_PPC_PLT16_LO
1929
#define GRUB_ELF_R_PPC64_PLT16_HI GRUB_ELF_R_PPC_PLT16_HI
1930
#define GRUB_ELF_R_PPC64_PLT16_HA GRUB_ELF_R_PPC_PLT16_HA
1932
#define GRUB_ELF_R_PPC64_SECTOFF GRUB_ELF_R_PPC_SECTOFF
1933
#define GRUB_ELF_R_PPC64_SECTOFF_LO GRUB_ELF_R_PPC_SECTOFF_LO
1934
#define GRUB_ELF_R_PPC64_SECTOFF_HI GRUB_ELF_R_PPC_SECTOFF_HI
1935
#define GRUB_ELF_R_PPC64_SECTOFF_HA GRUB_ELF_R_PPC_SECTOFF_HA
1936
#define GRUB_ELF_R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2. */
1937
#define GRUB_ELF_R_PPC64_ADDR64 38 /* doubleword64 S + A. */
1938
#define GRUB_ELF_R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A). */
1939
#define GRUB_ELF_R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A). */
1940
#define GRUB_ELF_R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A). */
1941
#define GRUB_ELF_R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A). */
1942
#define GRUB_ELF_R_PPC64_UADDR64 43 /* doubleword64 S + A. */
1943
#define GRUB_ELF_R_PPC64_REL64 44 /* doubleword64 S + A - P. */
1944
#define GRUB_ELF_R_PPC64_PLT64 45 /* doubleword64 L + A. */
1945
#define GRUB_ELF_R_PPC64_PLTREL64 46 /* doubleword64 L + A - P. */
1946
#define GRUB_ELF_R_PPC64_TOC16 47 /* half16* S + A - .TOC. */
1947
#define GRUB_ELF_R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.). */
1948
#define GRUB_ELF_R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.). */
1949
#define GRUB_ELF_R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.). */
1950
#define GRUB_ELF_R_PPC64_TOC 51 /* doubleword64 .TOC. */
1951
#define GRUB_ELF_R_PPC64_PLTGOT16 52 /* half16* M + A. */
1952
#define GRUB_ELF_R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A). */
1953
#define GRUB_ELF_R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A). */
1954
#define GRUB_ELF_R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A). */
1956
#define GRUB_ELF_R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2. */
1957
#define GRUB_ELF_R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2. */
1958
#define GRUB_ELF_R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2. */
1959
#define GRUB_ELF_R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2. */
1960
#define GRUB_ELF_R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2. */
1961
#define GRUB_ELF_R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2. */
1962
#define GRUB_ELF_R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2. */
1963
#define GRUB_ELF_R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2. */
1964
#define GRUB_ELF_R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2. */
1965
#define GRUB_ELF_R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2. */
1966
#define GRUB_ELF_R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2. */
1967
1967
/* Keep this the last entry. */
1968
#define R_PPC64_NUM 67
1968
#define GRUB_ELF_R_PPC64_NUM 67
1970
1970
/* The remaining relocs are from the Embedded ELF ABI, and are not
1971
1971
in the SVR4 ELF ABI. */
1972
#define R_PPC_EMB_NADDR32 101
1973
#define R_PPC_EMB_NADDR16 102
1974
#define R_PPC_EMB_NADDR16_LO 103
1975
#define R_PPC_EMB_NADDR16_HI 104
1976
#define R_PPC_EMB_NADDR16_HA 105
1977
#define R_PPC_EMB_SDAI16 106
1978
#define R_PPC_EMB_SDA2I16 107
1979
#define R_PPC_EMB_SDA2REL 108
1980
#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */
1981
#define R_PPC_EMB_MRKREF 110
1982
#define R_PPC_EMB_RELSEC16 111
1983
#define R_PPC_EMB_RELST_LO 112
1984
#define R_PPC_EMB_RELST_HI 113
1985
#define R_PPC_EMB_RELST_HA 114
1986
#define R_PPC_EMB_BIT_FLD 115
1987
#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */
1972
#define GRUB_ELF_R_PPC_EMB_NADDR32 101
1973
#define GRUB_ELF_R_PPC_EMB_NADDR16 102
1974
#define GRUB_ELF_R_PPC_EMB_NADDR16_LO 103
1975
#define GRUB_ELF_R_PPC_EMB_NADDR16_HI 104
1976
#define GRUB_ELF_R_PPC_EMB_NADDR16_HA 105
1977
#define GRUB_ELF_R_PPC_EMB_SDAI16 106
1978
#define GRUB_ELF_R_PPC_EMB_SDA2I16 107
1979
#define GRUB_ELF_R_PPC_EMB_SDA2REL 108
1980
#define GRUB_ELF_R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */
1981
#define GRUB_ELF_R_PPC_EMB_MRKREF 110
1982
#define GRUB_ELF_R_PPC_EMB_RELSEC16 111
1983
#define GRUB_ELF_R_PPC_EMB_RELST_LO 112
1984
#define GRUB_ELF_R_PPC_EMB_RELST_HI 113
1985
#define GRUB_ELF_R_PPC_EMB_RELST_HA 114
1986
#define GRUB_ELF_R_PPC_EMB_BIT_FLD 115
1987
#define GRUB_ELF_R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */
1989
1989
/* Diab tool relocations. */
1990
#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */
1991
#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */
1992
#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */
1993
#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */
1994
#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */
1995
#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */
1990
#define GRUB_ELF_R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */
1991
#define GRUB_ELF_R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */
1992
#define GRUB_ELF_R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */
1993
#define GRUB_ELF_R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */
1994
#define GRUB_ELF_R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */
1995
#define GRUB_ELF_R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */
1997
1997
/* This is a phony reloc to handle any old fashioned TOC16 references
1998
1998
that may still be in object files. */
1999
#define R_PPC_TOC16 255
1999
#define GRUB_ELF_R_PPC_TOC16 255
2001
2001
/* PowerPC64 specific values for the Dyn d_tag field. */
2002
2002
#define DT_PPC64_GLINK (DT_LOPROC + 0)