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;