summaryrefslogtreecommitdiff
path: root/src/arch/x86/lib
diff options
context:
space:
mode:
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>2013-12-08 01:13:43 -0600
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>2013-12-09 19:56:57 +0100
commit299c26510202faa3cf7383040f330d502d224fdf (patch)
treefd10e2e39dc68ba335925e5a45e3419ccae9ac25 /src/arch/x86/lib
parentf87c20a00dca412ad8fa255ef38fd954762afa4b (diff)
downloadcoreboot-299c26510202faa3cf7383040f330d502d224fdf.tar.xz
Refactor usage of walkcbfs to permit access to CBFS headers
walkcbfs() is used only with ROMCC. Besides finding stages during the bootblock, it's also used when applying microcode updates during the bootblock phase. The function used to return only a pointer to the data of the CBFS file, while making the header completely inaccessible. Since the header contains the length of the CBFS file, the caller did not have a way to know how long the data was. Then, other conventions had to be used to determine the EOF, which might present problems if the user replaces the CBFS file. This is not an issue when jumping to a stage (romstage), but can present problems when accessing a microcode file which has not been NULL-terminated. Refactor walkcbfs_asm to return a pointer to the CBFS file header rather than the data. Rename walkcbfs() to walkcbfs_head(), and reimplement a new walkcbfs() based on walkcbfs_head(). Thus current usage of walkcbfs() remains unaffected. The code has been verified to run successfully under qemu. Subsequent patches will change usage of walkcbfs() to walkcbfs_head where knowing the length of the data is needed. Change-Id: I21cbf19e130e1480e2749754e5d5130d36036f8e Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Reviewed-on: http://review.coreboot.org/4504 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Diffstat (limited to 'src/arch/x86/lib')
-rw-r--r--src/arch/x86/lib/walkcbfs.S6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/arch/x86/lib/walkcbfs.S b/src/arch/x86/lib/walkcbfs.S
index 2dc9617651..60eb8b53b0 100644
--- a/src/arch/x86/lib/walkcbfs.S
+++ b/src/arch/x86/lib/walkcbfs.S
@@ -18,7 +18,7 @@
/*
* input %esi: filename
* input %esp: return address (not pointer to return address!)
- * output %eax: entry point
+ * output %eax: pointer to CBFS header
* clobbers %ebx, %ecx, %edi
*/
walkcbfs_asm:
@@ -59,9 +59,7 @@ walker:
jnz tryharder
/* we found it! */
- mov CBFS_FILE_OFFSET(%ebx), %eax
- bswap %eax
- add %ebx, %eax
+ mov %ebx, %eax
jmp *%esp
tryharder: