1 /* elf_reloc_68k.h ELF relocation types for M68k */
2 /* (c) in 2002 by Frank Wille */
3 
4 #define R_68K_NONE 0      /* No reloc */
5 #define R_68K_32 1        /* Direct 32 bit  */
6 #define R_68K_16 2        /* Direct 16 bit  */
7 #define R_68K_8 3         /* Direct 8 bit  */
8 #define R_68K_PC32 4      /* PC relative 32 bit */
9 #define R_68K_PC16 5      /* PC relative 16 bit */
10 #define R_68K_PC8 6       /* PC relative 8 bit */
11 #define R_68K_GOT32 7     /* 32 bit PC relative GOT entry */
12 #define R_68K_GOT16 8     /* 16 bit PC relative GOT entry */
13 #define R_68K_GOT8 9      /* 8 bit PC relative GOT entry */
14 #define R_68K_GOT32O 10   /* 32 bit GOT offset */
15 #define R_68K_GOT16O 11   /* 16 bit GOT offset */
16 #define R_68K_GOT8O 12    /* 8 bit GOT offset */
17 #define R_68K_PLT32 13    /* 32 bit PC relative PLT address */
18 #define R_68K_PLT16 14    /* 16 bit PC relative PLT address */
19 #define R_68K_PLT8 15     /* 8 bit PC relative PLT address */
20 #define R_68K_PLT32O 16   /* 32 bit PLT offset */
21 #define R_68K_PLT16O 17   /* 16 bit PLT offset */
22 #define R_68K_PLT8O 18    /* 8 bit PLT offset */
23 #define R_68K_COPY 19     /* Copy symbol at runtime */
24 #define R_68K_GLOB_DAT 20 /* Create GOT entry */
25 #define R_68K_JMP_SLOT 21 /* Create PLT entry */
26 #define R_68K_RELATIVE 22 /* Adjust by program base */
27 
28 
29   if ((*rl)->type <= LAST_STANDARD_RELOC) {
30     nreloc *r = (nreloc *)(*rl)->reloc;
31 
32     *refsym = r->sym;
33     *addend = r->addend;
34     pos = r->bitoffset;
35     size = r->size;
36     *roffset = r->byteoffset;
37     mask = r->mask;
38 
39     switch ((*rl)->type) {
40 
41       case REL_ABS:
42         if (pos==0 && mask==~0) {
43           if (size == 32)
44             t = R_68K_32;
45           else if (size == 16)
46             t = R_68K_16;
47           else if (size == 8)
48             t = R_68K_8;
49         }
50         break;
51 
52       case REL_PC:
53         if (pos==0 && mask==~0) {
54           if (size == 32)
55             t = R_68K_PC32;
56           else if (size == 16)
57             t = R_68K_PC16;
58           else if (size == 8)
59             t = R_68K_PC8;
60         }
61         break;
62 
63       case REL_GOTOFF:
64         if (pos==0 && mask==~0) {
65           if (size == 32)
66             t = R_68K_GOT32O;
67           else if (size == 16)
68             t = R_68K_GOT16O;
69           else if (size == 8)
70             t = R_68K_GOT8O;
71         }
72         break;
73 
74       case REL_GOT:
75         if (pos==0 && mask==~0) {
76           if (size == 32)
77             t = R_68K_GOT32;
78           else if (size == 16)
79             t = R_68K_GOT16;
80           else if (size == 8)
81             t = R_68K_GOT8;
82         }
83         break;
84 
85       case REL_PLTOFF:
86         if (pos==0 && mask==~0) {
87           if (size == 32)
88             t = R_68K_PLT32O;
89           else if (size == 16)
90             t = R_68K_PLT16O;
91           else if (size == 8)
92             t = R_68K_PLT8O;
93         }
94         break;
95 
96       case REL_PLT:
97         if (pos==0 && mask==~0) {
98           if (size == 32)
99             t = R_68K_PLT32;
100           else if (size == 16)
101             t = R_68K_PLT16;
102           else if (size == 8)
103             t = R_68K_PLT8;
104         }
105         break;
106 
107     }
108   }
109