cbfstool: Eliminate global variable "arch"

Now that unused functions have been removed, the global "arch" is only
used in very few places. We can pack "arch" in the "param" structure
and pass it down to where it is actually used.

Change-Id: I255d1e2bc6b5ead91b6b4e94a0202523c4ab53dc
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Reviewed-on: http://review.coreboot.org/5105
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Alexandru Gagniuc 2014-02-02 22:37:28 -06:00
parent 2bdc0d0bd6
commit 35850ae88e
7 changed files with 20 additions and 18 deletions

View File

@ -51,7 +51,7 @@ static void xdr_segs(struct buffer *output,
}
}
int parse_elf_to_payload(const struct buffer *input,
struct buffer *output, comp_algo algo)
struct buffer *output, uint32_t arch, comp_algo algo)
{
Elf64_Phdr *phdr;
Elf64_Ehdr ehdr;
@ -69,7 +69,7 @@ int parse_elf_to_payload(const struct buffer *input,
if (!compress)
return -1;
if (elf_headers(input, &ehdr, &phdr, &shdr) < 0)
if (elf_headers(input, arch, &ehdr, &phdr, &shdr) < 0)
return -1;
DEBUG("start: parse_elf_to_payload\n");

View File

@ -33,7 +33,7 @@
* works for all elf files, not just the restricted set.
*/
int parse_elf_to_stage(const struct buffer *input, struct buffer *output,
comp_algo algo, uint32_t *location)
uint32_t arch, comp_algo algo, uint32_t *location)
{
Elf64_Phdr *phdr;
Elf64_Ehdr ehdr;
@ -50,7 +50,7 @@ int parse_elf_to_stage(const struct buffer *input, struct buffer *output,
DEBUG("start: parse_elf_to_stage(location=0x%x)\n", *location);
if (elf_headers(input, &ehdr, &phdr, NULL) < 0)
if (elf_headers(input, arch, &ehdr, &phdr, NULL) < 0)
return -1;
headers = ehdr.e_phnum;

View File

@ -129,6 +129,7 @@ uint32_t get_cbfs_compression(const char *name, uint32_t unknown);
/* elfheaders.c */
int
elf_headers(const struct buffer *pinput,
uint32_t arch,
Elf64_Ehdr *ehdr,
Elf64_Phdr **pphdr,
Elf64_Shdr **pshdr);

View File

@ -56,6 +56,7 @@ static struct param {
uint32_t pagesize;
uint32_t offset;
uint32_t top_aligned;
uint32_t arch;
int fit_empty_entries;
comp_algo algo;
/* for linux payloads */
@ -63,6 +64,7 @@ static struct param {
char *cmdline;
} param = {
/* All variables not listed are initialized as zero. */
.arch = CBFS_ARCHITECTURE_UNKNOWN,
.algo = CBFS_COMPRESS_NONE,
};
@ -178,9 +180,13 @@ static int cbfs_add_component(const char *cbfs_name,
return 0;
}
static int cbfstool_convert_mkstage(struct buffer *buffer, uint32_t *offset) {
static int cbfstool_convert_mkstage(struct buffer *buffer, uint32_t *offset)
{
struct buffer output;
if (parse_elf_to_stage(buffer, &output, param.algo, offset) != 0)
int ret;
ret = parse_elf_to_stage(buffer, &output, param.arch, param.algo,
offset);
if (ret != 0)
return -1;
buffer_delete(buffer);
// direct assign, no dupe.
@ -192,7 +198,7 @@ static int cbfstool_convert_mkpayload(struct buffer *buffer, uint32_t *offset) {
struct buffer output;
int ret;
/* per default, try and see if payload is an ELF binary */
ret = parse_elf_to_payload(buffer, &output, param.algo);
ret = parse_elf_to_payload(buffer, &output, param.arch, param.algo);
/* If it's not an ELF, see if it's a UEFI FV */
if (ret != 0)
@ -334,8 +340,7 @@ static int cbfs_create(void)
return 1;
}
// TODO Remove arch or pack into param.
if (arch == CBFS_ARCHITECTURE_UNKNOWN) {
if (param.arch == CBFS_ARCHITECTURE_UNKNOWN) {
ERROR("You need to specify -m/--machine arch.\n");
return 1;
}
@ -368,7 +373,7 @@ static int cbfs_create(void)
}
if (cbfs_image_create(&image,
arch,
param.arch,
param.size,
param.alignment,
&bootblock,
@ -701,7 +706,7 @@ int main(int argc, char **argv)
verbose++;
break;
case 'm':
arch = string_to_arch(optarg);
param.arch = string_to_arch(optarg);
break;
case 'I':
param.initrd = optarg;

View File

@ -103,9 +103,6 @@ void buffer_delete(struct buffer *buffer) {
buffer->size = 0;
}
/* FIXME: This global is more difficult to just remove */
uint32_t arch = CBFS_ARCHITECTURE_UNKNOWN;
static struct {
uint32_t arch;
const char *name;

View File

@ -62,8 +62,6 @@ int buffer_write_file(struct buffer *buffer, const char *filename);
/* Destroys a memory buffer. */
void buffer_delete(struct buffer *buffer);
extern uint32_t arch;
uint32_t string_to_arch(const char *arch_string);
#define ALIGN(val, by) (((val) + (by)-1)&~((by)-1))
@ -79,7 +77,7 @@ uint64_t intfiletype(const char *name);
/* cbfs-mkpayload.c */
int parse_elf_to_payload(const struct buffer *input,
struct buffer *output, comp_algo algo);
struct buffer *output, uint32_t arch, comp_algo algo);
int parse_fv_to_payload(const struct buffer *input,
struct buffer *output, comp_algo algo);
int parse_bzImage_to_payload(const struct buffer *input,
@ -92,7 +90,7 @@ int parse_flat_binary_to_payload(const struct buffer *input,
comp_algo algo);
/* cbfs-mkstage.c */
int parse_elf_to_stage(const struct buffer *input, struct buffer *output,
comp_algo algo, uint32_t *location);
uint32_t arch, comp_algo algo, uint32_t *location);
void print_supported_filetypes(void);

View File

@ -241,6 +241,7 @@ elf_shdr(struct buffer *pinput, Elf64_Shdr *shdr,
*/
int
elf_headers(const struct buffer *pinput,
uint32_t arch,
Elf64_Ehdr *ehdr,
Elf64_Phdr **pphdr,
Elf64_Shdr **pshdr)