summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cbfs_poc/Makefile14
-rw-r--r--cbfs_poc/module_lol.c25
-rwxr-xr-xconvert2.rb20
3 files changed, 18 insertions, 41 deletions
diff --git a/cbfs_poc/Makefile b/cbfs_poc/Makefile
index 73856a8..cd38fd4 100644
--- a/cbfs_poc/Makefile
+++ b/cbfs_poc/Makefile
@@ -1,20 +1,10 @@
PWD := $(shell pwd)
KSRC ?= /bad__ksrc__not_set
-COREBOOT ?= /bad__coreboot__not_set
-LIBPAYLOAD ?= $(COREBOOT)/payloads/libpayload
-CBFS_A ?= $(LIBPAYLOAD)/build/libcbfs.a
-CBFS_INCLUDES ?= -I$(readlink -f .) -I$(LIBPAYLOAD)/include -I$(LIBPAYLOAD)/include/i386
-EXTRA_CFLAGS += -D_ARCH_TYPES_H -I$(LIBPAYLOAD)/include -I$(LIBPAYLOAD)/include/i386
+EXTRA_CFLAGS += -D_ARCH_TYPES_H
-obj-m := module_lol.o
-module_lol-y += libcbfs.a
-
-modules:
-
-libcbfs.a:
- cp $(CBFS_A) $@
+obj-m := cbfs_poc.o
modules modules_install clean:
$(MAKE) -C $(KSRC) M=$(PWD) $@
diff --git a/cbfs_poc/module_lol.c b/cbfs_poc/module_lol.c
deleted file mode 100644
index 80dc000..0000000
--- a/cbfs_poc/module_lol.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/module.h>
-#include <cbfs.h>
-
-#define DRIVER_NAME "cbfs_poc"
-
-static int init_cbfs_poc(void)
-{
- struct cbfs_header* header;
- setup_cbfs_from_flash();
- header = get_cbfs_header();
- if (header == (void*)0xffffffff)
- printk("Header not found!\n");
- else
- printk("Header found at address %p\n", header);
- return 0;
-}
-module_init(init_cbfs_poc);
-
-static void exit_cbfs_poc(void)
-{
-}
-module_exit(exit_cbfs_poc);
-
diff --git a/convert2.rb b/convert2.rb
index 94e296f..15d8dcd 100755
--- a/convert2.rb
+++ b/convert2.rb
@@ -179,6 +179,13 @@ class Reg
end
end
+ def cnalyze value, stream=$stdout
+ stream << @fields.zip(fvs(value)).
+ reject!{|f,fv| fv == 0 }.
+ map{|f,fv| "#{fv} << #{@name}_#{f.name}" }.
+ join(" | ") << "\n"
+ end
+
def analyze_one f, fv, longest, longest_name, stream=$stdout
tabs = "\t" * [2 - f.name.length / 8, 0].max
width = f.start - f.stop + 1
@@ -225,6 +232,7 @@ opts = Trollop::options do
banner usage
opt :l, "Read log and print a more verbose version"
opt :d, "Read memory dump and print a more verbose version"
+ opt :c, "Produce C code instead of human-readable description"
end
def load_data f
@@ -244,16 +252,16 @@ def reg_from_name data, name, stream=BlackHole
stream << " (register #{regname} does not exist!)"
return nil
else
- regname = canonical[regname] = regs.first
+ regname = $canonical[regname] = regs.first
stream << " (interpreted as register #{regname})"
end
end
reg = Reg.from_map(data[regname], regname)
end
-require 'pp'
+
def reg_from_number data, str, stream=BlackHole
- rega = str.to_i 16
+ rega = str.to_i 0
if rega != 0 or str =~ /^(0x)?0+$/
reg = data.select do |k,v|
if v["recurring"]
@@ -355,7 +363,11 @@ when 3
exit
end
value = ARGV[2].to_i 0
- reg.analyze(value)
+ if opts.c
+ reg.cnalyze(value)
+ else
+ reg.analyze(value)
+ end
when 4
data = load_data ARGV[0]
reg = reg_from_str(data, ARGV[1], $stdout)