Sorry didn't used the svn diff tool:<br><br>Index: src/mainboard/emulation/qemu-x86/Options.lb<br>===================================================================<br>--- src/mainboard/emulation/qemu-x86/Options.lb (Revision 4200)<br>
+++ src/mainboard/emulation/qemu-x86/Options.lb (Arbeitskopie)<br>@@ -37,6 +37,7 @@<br> uses OBJCOPY<br> uses CONFIG_PCI_ROM_RUN<br> uses CONFIG_PCI_OPTION_ROM_RUN_VM86<br>+uses CONFIG_GDB_STUB<br> <br> uses CONFIG_CONSOLE_SERIAL8250<br>
uses USE_DCACHE_RAM<br>@@ -51,7 +52,6 @@<br> default DEFAULT_CONSOLE_LOGLEVEL=8<br> default MAXIMUM_CONSOLE_LOGLEVEL=8<br> default CONFIG_CBFS=0<br>-<br> ## ROM_SIZE is the size of boot ROM that this board will use.<br> default ROM_SIZE = 256*1024<br>
<br>@@ -124,5 +124,5 @@<br> ##<br> default CC="$(CROSS_COMPILE)gcc -m32"<br> default HOSTCC="gcc"<br>-<br>+default CONFIG_GDB_STUB=1<br> end<br>Index: src/boot/elfboot.c<br>===================================================================<br>
--- src/boot/elfboot.c (Revision 4200)<br>+++ src/boot/elfboot.c (Arbeitskopie)<br>@@ -27,6 +27,8 @@<br> #include <stdint.h><br> #include <stdlib.h><br> #include <string.h><br>+#include <openssl/sha.h><br>
+#include <openssl/evp.h><br> <br> /* Maximum physical address we can use for the coreboot bounce buffer.<br> */<br>@@ -34,9 +36,14 @@<br> #define MAX_ADDR -1UL<br> #endif<br> <br>+#define SHA256_DIGEST_LENGTH 32<br>
+<br> extern unsigned char _ram_seg;<br> extern unsigned char _eram_seg;<br> <br>+static void measure_elf(unsigned char *header, size_t length);<br>+static int measure_and_extend(unsigned char hash);<br>+<br> struct segment {<br>
struct segment *next;<br> struct segment *prev;<br>@@ -61,6 +68,30 @@<br> unsigned short ip_checksum;<br> };<br> <br>+static void measure_elf(unsigned char *header, size_t length) {<br>+ unsigned char md[SHA256_DIGEST_LENGTH];<br>
+<br>+ EVP_Digest(header,length,md,NULL,EVP_sha256(),NULL);<br>+ // if (memcmp(md,header,sizeof(header)))<br>+ // { fflush(stdout);<br>+ // fprintf(stderr,"\nMemcpy failed.\n");<br>
+ // return 1;<br>+ // }<br>+ // unsigned char hash = fflush(stdout);<br>+<br>+ //write_log_entry_in_tcpa(hash); // Write hash to the acpi table<br>+<br>+ measure_and_extend(md); //Write hash to the tpm<br>
+ return 1;<br>+}<br>+<br>+/*<br>+ * Dummy function for tpm capability<br>+ */<br>+static int measure_and_extend(unsigned char hash) {<br>+ return 1;<br>+}<br>+<br> int verify_ip_checksum(<br> struct verify_callback *vcb, <br>
Elf_ehdr *ehdr, Elf_phdr *phdr, struct segment *head)<br>@@ -500,6 +531,7 @@<br> len = ptr->s_filesz;<br> }<br> memcpy(dest, &header[start_offset], len);<br>+ measure_elf(&header[start_offset], len); //Pass the elf code to the measurement function<br>
dest += len;<br> }<br> <br>Index: src/config/Config.lb<br>===================================================================<br>--- src/config/Config.lb (Revision 4200)<br>+++ src/config/Config.lb (Arbeitskopie)<br>
@@ -10,7 +10,7 @@<br> makedefine GCC_INC_DIR := $(shell LC_ALL=C $(GCC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp")<br> <br> makedefine CPPFLAGS := -I$(TOP)/src/include -I$(TOP)/src/arch/$(ARCH)/include -I$(GCC_INC_DIR) $(CPUFLAGS)<br>
-makedefine CFLAGS := $(CPU_OPT) $(DISTRO_CFLAGS) $(CPPFLAGS) -Os -nostdinc -nostdlib -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -Werror-implicit-function-declaration -Wstrict-aliasing -Wshadow -fno-common -ffreestanding -fno-builtin -fomit-frame-pointer<br>
+makedefine CFLAGS := $(CPU_OPT) $(DISTRO_CFLAGS) $(CPPFLAGS) -O2 -g -nostdinc -nostdlib -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -Werror-implicit-function-declaration -Wstrict-aliasing -Wshadow -fno-common -ffreestanding -fno-builtin -fomit-frame-pointer<br>
<br> if ASSEMBLER_DEBUG<br> makedefine DEBUG_CFLAGS := -g -dA -fverbose-asm<br>Index: src/arch/i386/boot/boot.c<br>===================================================================<br>--- src/arch/i386/boot/boot.c (Revision 4200)<br>
+++ src/arch/i386/boot/boot.c (Arbeitskopie)<br>@@ -84,13 +84,13 @@<br> adjusted_boot_notes = (unsigned long)&elf_boot_notes;<br> adjusted_boot_notes += adjust; <br> <br>- printk_spew("entry = 0x%08lx\n", (unsigned long)entry);<br>
- printk_spew("lb_start = 0x%08lx\n", lb_start);<br>- printk_spew("lb_size = 0x%08lx\n", lb_size);<br>- printk_spew("adjust = 0x%08lx\n", adjust);<br>- printk_spew("buffer = 0x%08lx\n", buffer);<br>
- printk_spew(" elf_boot_notes = 0x%08lx\n", (unsigned long)&elf_boot_notes);<br>- printk_spew("adjusted_boot_notes = 0x%08lx\n", adjusted_boot_notes);<br>+ printk_debug("entry = 0x%08lx\n", (unsigned long)entry);<br>
+ printk_debug("lb_start = 0x%08lx\n", lb_start);<br>+ printk_debug("lb_size = 0x%08lx\n", lb_size);<br>+ printk_debug("adjust = 0x%08lx\n", adjust);<br>+ printk_debug("buffer = 0x%08lx\n", buffer);<br>
+ printk_debug(" elf_boot_notes = 0x%08lx\n", (unsigned long)&elf_boot_notes);<br>+ printk_debug("adjusted_boot_notes = 0x%08lx\n", adjusted_boot_notes);<br> <br> /* Jump to kernel */<br>
__asm__ __volatile__(<br>Index: src/arch/i386/include/stddef.h<br>===================================================================<br>--- src/arch/i386/include/stddef.h (Revision 4200)<br>+++ src/arch/i386/include/stddef.h (Arbeitskopie)<br>
@@ -3,8 +3,10 @@<br> <br> typedef long ptrdiff_t;<br> typedef unsigned long size_t;<br>-typedef long ssize_t;<br> <br>+// hacked<br>+//typedef long ssize_t;<br>+<br> typedef int wchar_t;<br> typedef unsigned int wint_t;<br>
<br><br><br>Regards,<br><br>René<br>