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