From e2f19689acb973aedee6e4b324ed27b64f2d47de Mon Sep 17 00:00:00 2001 From: Marcelo Povoa Date: Thu, 6 Feb 2014 15:17:40 -0800 Subject: [PATCH] aarch64: Fix 64-bit pointer related casts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BUG=None BRANCH=none TEST=Ran image in foundation model Signed-off-by: Marcelo Povoa Change-Id: I80a92673c163b3df312ce632eb52e5bb1e7ab1db Reviewed-on: https://chromium-review.googlesource.com/185273 Reviewed-by: Aaron Durbin Commit-Queue: Marcelo Póvoa Tested-by: Marcelo Póvoa --- src/lib/cbfs.c | 14 +++++++------- src/lib/cbmem.c | 2 +- src/lib/selfboot.c | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c index e0454fd812..ec00d62fdb 100644 --- a/src/lib/cbfs.c +++ b/src/lib/cbfs.c @@ -175,22 +175,23 @@ void * cbfs_load_stage(struct cbfs_media *media, const char *name) cbfs_get_file_content(media, name, CBFS_TYPE_STAGE); /* this is a mess. There is no ntohll. */ /* for now, assume compatible byte order until we solve this. */ - uint32_t entry; + uintptr_t entry; if (stage == NULL) return (void *) -1; - LOG("loading stage %s @ 0x%x (%d bytes), entry @ 0x%llx\n", + LOG("loading stage %s @ 0x%llx (%d bytes), entry @ 0x%llx\n", name, - (uint32_t) stage->load, stage->memlen, + stage->load, stage->memlen, stage->entry); + /* Stages rely the below clearing so that the bss is initialized. */ - memset((void *) (uint32_t) stage->load, 0, stage->memlen); + memset((void *) (uintptr_t) stage->load, 0, stage->memlen); if (cbfs_decompress(stage->compression, ((unsigned char *) stage) + sizeof(struct cbfs_stage), - (void *) (uint32_t) stage->load, + (void *) (uintptr_t) stage->load, stage->len)) return (void *) -1; @@ -217,8 +218,7 @@ int cbfs_execute_stage(struct cbfs_media *media, const char *name) return 1; } - /* FIXME: This isn't right */ - LOG("run @ %p\n", (void *) ntohl((uint32_t) stage->entry)); + LOG("run @ %p\n", (void *) (uintptr_t) ntohll(stage->entry)); return run_address((void *)(uintptr_t)ntohll(stage->entry)); } diff --git a/src/lib/cbmem.c b/src/lib/cbmem.c index 1920b5677f..d0bf54d39d 100644 --- a/src/lib/cbmem.c +++ b/src/lib/cbmem.c @@ -184,7 +184,7 @@ void *cbmem_add(u32 id, u64 size) cbmem_toc[0].base += size; cbmem_toc[0].size -= size; - return (void *)(u32)cbmem_toc[i].base; + return (void *)(uintptr_t)cbmem_toc[i].base; } void *cbmem_find(u32 id) diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c index 6d60285577..4fc56d710b 100644 --- a/src/lib/selfboot.c +++ b/src/lib/selfboot.c @@ -332,7 +332,7 @@ static int build_self_segment_list( new->s_memsz = ntohl(segment->mem_len); new->compression = ntohl(segment->compression); - new->s_srcaddr = (u32) ((unsigned char *)first_segment) + new->s_srcaddr = (uintptr_t) ((unsigned char *)first_segment) + ntohl(segment->offset); new->s_filesz = ntohl(segment->len); printk(BIOS_DEBUG, " New segment dstaddr 0x%lx memsize 0x%lx srcaddr 0x%lx filesize 0x%lx\n", @@ -526,7 +526,7 @@ void *selfload(struct lb_memory *mem, struct cbfs_payload *payload) printk(BIOS_SPEW, "Loaded segments\n"); - return (void *)entry; + return (void *)(uintptr_t)entry; out: return NULL;