typedef int32_t host_long;
typedef uint32_t host_ulong;
#define swabls(x) swab32s(x)
+#define swablss(x) swab32ss(x)
#else
typedef int64_t host_long;
typedef uint64_t host_ulong;
#define swabls(x) swab64s(x)
+#define swablss(x) swab64ss(x)
#endif
#ifdef ELF_USES_RELOCA
#ifdef CONFIG_FORMAT_COFF
-#include "a.out.h"
-
typedef int32_t host_long;
typedef uint32_t host_ulong;
+#include "a.out.h"
+
#define FILENAMELEN 256
typedef struct coff_sym {
*p = bswap32(*p);
}
+void swab32ss(int32_t *p)
+{
+ *p = bswap32(*p);
+}
+
void swab64s(uint64_t *p)
{
*p = bswap64(*p);
}
+void swab64ss(int64_t *p)
+{
+ *p = bswap64(*p);
+}
+
uint16_t get16(uint16_t *p)
{
uint16_t val;
swabls(&rel->r_offset);
swabls(&rel->r_info);
#ifdef ELF_USES_RELOCA
- swabls(&rel->r_addend);
+ swablss(&rel->r_addend);
#endif
}
}
sec = &shdr[ehdr.e_shstrndx];
- shstr = sdata[ehdr.e_shstrndx];
+ shstr = (char *)sdata[ehdr.e_shstrndx];
/* swap relocations */
for(i = 0; i < ehdr.e_shnum; i++) {
strtab_sec = &shdr[symtab_sec->sh_link];
symtab = (ElfW(Sym) *)sdata[symtab_sec - shdr];
- strtab = sdata[symtab_sec->sh_link];
+ strtab = (char *)sdata[symtab_sec->sh_link];
nb_syms = symtab_sec->sh_size / sizeof(ElfW(Sym));
if (do_swap) {
{
EXE_SYM *sym;
const char *sym_name, *p;
- unsigned long val;
+ host_ulong val;
int n;
for(i = 0, sym = symtab; i < nb_syms; i++, sym++) {
#ifdef CONFIG_FORMAT_MACH
offset -= section_hdr[sym->n_sect-1].addr;
#endif
- val = *(unsigned long *)(ptr + offset);
+ val = *(host_ulong *)(ptr + offset);
#ifdef ELF_USES_RELOCA
{
int reloc_shndx, nb_relocs1, j;
reloc_offset, reloc_offset, name, addend,
reloc_offset);
break;
+ case R_SPARC_HH22:
+ fprintf(outfile,
+ " *(uint32_t *)(gen_code_ptr + %d) = "
+ "((*(uint32_t *)(gen_code_ptr + %d)) "
+ " & ~0x00000000) "
+ " | (((%s + %d) >> 42) & 0x00000000);\n",
+ reloc_offset, reloc_offset, name, addend);
+ break;
+
+ case R_SPARC_LM22:
+ fprintf(outfile,
+ " *(uint32_t *)(gen_code_ptr + %d) = "
+ "((*(uint32_t *)(gen_code_ptr + %d)) "
+ " & ~0x00000000) "
+ " | (((%s + %d) >> 10) & 0x00000000);\n",
+ reloc_offset, reloc_offset, name, addend);
+ break;
+
+ case R_SPARC_HM10:
+ fprintf(outfile,
+ " *(uint32_t *)(gen_code_ptr + %d) = "
+ "((*(uint32_t *)(gen_code_ptr + %d)) "
+ " & ~0x00000000) "
+ " | ((((%s + %d) >> 32 & 0x3ff)) & 0x00000000);\n",
+ reloc_offset, reloc_offset, name, addend);
+ break;
+
default:
error("unsupported sparc64 relocation (%d) for symbol %s", type, name);
}