diff options
author | Patrick Georgi <patrick.georgi@coresystems.de> | 2010-02-03 17:56:37 +0000 |
---|---|---|
committer | Patrick Georgi <patrick.georgi@coresystems.de> | 2010-02-03 17:56:37 +0000 |
commit | a6c337dec0837135949cc3927a77b07290e1d2cb (patch) | |
tree | 49f459fdcd74cb4557ff81fab4469af8998b03f5 | |
parent | f1b6f1f2bb723d7b7e8e59e95da9ea8ccd146053 (diff) |
Guards against errors that are hard to track down:
- if crt0s is empty (eg. because crt0-y is still used),
break the build, and say where that behaviour changed
- if a stage is unusable for cbfstool because it's placed
outside the ROM space (linked to 0 is somewhat notorious),
warn about it, give some hints and exit instead of crashing.
Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Stefan Reinauer <stefan.reinauer@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5077 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r-- | src/arch/i386/Makefile.inc | 4 | ||||
-rw-r--r-- | util/cbfstool/cbfs-mkstage.c | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/arch/i386/Makefile.inc b/src/arch/i386/Makefile.inc index 05f7894cc6..5f7bab600e 100644 --- a/src/arch/i386/Makefile.inc +++ b/src/arch/i386/Makefile.inc @@ -62,6 +62,10 @@ $(obj)/coreboot.a: $(objs) ####################################################################### # done +# crt0s should be set by now +ifeq ($(crt0s),) +$(error crt0s are empty. If your board still uses crt0-y and ldscript-y: It shouldn't, we moved away from that in r5065) +endif endif ifeq ($(CONFIG_TINY_BOOTBLOCK),y) diff --git a/util/cbfstool/cbfs-mkstage.c b/util/cbfstool/cbfs-mkstage.c index 6e8daef508..2f81da07d5 100644 --- a/util/cbfstool/cbfs-mkstage.c +++ b/util/cbfstool/cbfs-mkstage.c @@ -126,6 +126,11 @@ int parse_elf_to_stage(unsigned char *input, unsigned char **output, data_start = *location; } + if (data_end <= data_start) { + fprintf(stderr, "E: data ends before it starts. Make sure the ELF file is correct and resides in ROM space.\n"); + exit(1); + } + /* allocate an intermediate buffer for the data */ buffer = calloc(data_end - data_start, 1); |