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" |