Commit 82790064116b066531c8b61067509a0fd4169ee0

Authored by ths
1 parent 06c0b388

Cast ELF datatypes properly to host 64bit types.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3407 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 6 additions and 3 deletions
elf_ops.h
@@ -159,7 +159,7 @@ int glue(load_elf, SZ)(int fd, int64_t virt_to_phys_addend, @@ -159,7 +159,7 @@ int glue(load_elf, SZ)(int fd, int64_t virt_to_phys_addend,
159 goto fail; 159 goto fail;
160 160
161 if (pentry) 161 if (pentry)
162 - *pentry = (uint64_t)ehdr.e_entry; 162 + *pentry = (uint64_t)(elf_sword)ehdr.e_entry;
163 163
164 glue(load_symbols, SZ)(&ehdr, fd, must_swab); 164 glue(load_symbols, SZ)(&ehdr, fd, must_swab);
165 165
@@ -206,9 +206,9 @@ int glue(load_elf, SZ)(int fd, int64_t virt_to_phys_addend, @@ -206,9 +206,9 @@ int glue(load_elf, SZ)(int fd, int64_t virt_to_phys_addend,
206 } 206 }
207 qemu_free(phdr); 207 qemu_free(phdr);
208 if (lowaddr) 208 if (lowaddr)
209 - *lowaddr = (uint64_t)low; 209 + *lowaddr = (uint64_t)(elf_sword)low;
210 if (highaddr) 210 if (highaddr)
211 - *highaddr = (uint64_t)high; 211 + *highaddr = (uint64_t)(elf_sword)high;
212 return total_size; 212 return total_size;
213 fail: 213 fail:
214 qemu_free(data); 214 qemu_free(data);
loader.c
@@ -173,6 +173,7 @@ static void *load_at(int fd, int offset, int size) @@ -173,6 +173,7 @@ static void *load_at(int fd, int offset, int size)
173 173
174 #define SZ 32 174 #define SZ 32
175 #define elf_word uint32_t 175 #define elf_word uint32_t
  176 +#define elf_sword int32_t
176 #define bswapSZs bswap32s 177 #define bswapSZs bswap32s
177 #include "elf_ops.h" 178 #include "elf_ops.h"
178 179
@@ -182,6 +183,7 @@ static void *load_at(int fd, int offset, int size) @@ -182,6 +183,7 @@ static void *load_at(int fd, int offset, int size)
182 #undef elf_sym 183 #undef elf_sym
183 #undef elf_note 184 #undef elf_note
184 #undef elf_word 185 #undef elf_word
  186 +#undef elf_sword
185 #undef bswapSZs 187 #undef bswapSZs
186 #undef SZ 188 #undef SZ
187 #define elfhdr elf64_hdr 189 #define elfhdr elf64_hdr
@@ -190,6 +192,7 @@ static void *load_at(int fd, int offset, int size) @@ -190,6 +192,7 @@ static void *load_at(int fd, int offset, int size)
190 #define elf_shdr elf64_shdr 192 #define elf_shdr elf64_shdr
191 #define elf_sym elf64_sym 193 #define elf_sym elf64_sym
192 #define elf_word uint64_t 194 #define elf_word uint64_t
  195 +#define elf_sword int64_t
193 #define bswapSZs bswap64s 196 #define bswapSZs bswap64s
194 #define SZ 64 197 #define SZ 64
195 #include "elf_ops.h" 198 #include "elf_ops.h"