Commit 82790064116b066531c8b61067509a0fd4169ee0
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" |