about summary refs log tree commit diff stats
path: root/linux/ports/linux-blob/.footprint
diff options
context:
space:
mode:
Diffstat (limited to 'linux/ports/linux-blob/.footprint')
-rw-r--r--linux/ports/linux-blob/.footprint49
1 files changed, 49 insertions, 0 deletions
diff --git a/linux/ports/linux-blob/.footprint b/linux/ports/linux-blob/.footprint
new file mode 100644
index 0000000..62181ac
--- /dev/null
+++ b/linux/ports/linux-blob/.footprint
@@ -0,0 +1,49 @@
+drwxr-xr-x	root/root	boot/
+-rw-r--r--	root/root	boot/System.map-4.9.12-blob
+-rw-r--r--	root/root	boot/config-4.9.12-blob
+-rw-r--r--	root/root	boot/vmlinuz-4.9.12-blob
+drwxr-xr-x	root/root	lib/
+drwxr-xr-x	root/root	lib/modules/
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/
+lrwxrwxrwx	root/root	lib/modules/4.9.12-blob/build -> /usr/src/linux-4.9.12
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/platform/
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/platform/soc_camera/
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/platform/soc_camera/soc_camera.ko.gz
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/platform/soc_camera/soc_camera_platform.ko.gz
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/platform/soc_camera/soc_mediabus.ko.gz
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/usb/
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/usb/gspca/
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/usb/gspca/gspca_main.ko.gz
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/usb/uvc/
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/usb/uvc/uvcvideo.ko.gz
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/v4l2-core/
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/v4l2-core/videobuf-core.ko.gz
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/v4l2-core/videobuf2-core.ko.gz
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/v4l2-core/videobuf2-memops.ko.gz
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/v4l2-core/videobuf2-v4l2.ko.gz
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/media/v4l2-core/videobuf2-vmalloc.ko.gz
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/drivers/vhost/
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/drivers/vhost/vhost_scsi.ko.gz
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/fs/
+drwxr-xr-x	root/root	lib/modules/4.9.12-blob/kernel/fs/ntfs/
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/kernel/fs/ntfs/ntfs.ko.gz
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.alias
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.alias.bin
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.builtin
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.builtin.bin
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.dep (EMPTY)
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.dep.bin
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.devname (EMPTY)
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.order
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.softdep
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.symbols
+-rw-r--r--	root/root	lib/modules/4.9.12-blob/modules.symbols.bin
+lrwxrwxrwx	root/root	lib/modules/4.9.12-blob/source -> /usr/src/linux-4.9.12
+drwxr-xr-x	root/root	usr/
+drwxr-xr-x	root/root	usr/src/
+-rw-r--r--	root/root	usr/src/4.9.12-blob-config
+-rw-r--r--	root/root	usr/src/4.9.12-cpu_optimizations.patch
+-rw-r--r--	root/root	usr/src/grsecurity-3.1-4.9.12-201702231830.patch
href='#n228'>228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
# Checking null-terminated ascii strings.
#
# By default we create strings with a 4-byte length prefix rather than a null suffix.
# However we still need null-prefixed strings when interacting with the Linux
# kernel in a few places. This layer implements a function for comparing
# a null-terminated 'kernel string' with a length-prefixed 'SubX string'.
#
# To run (from the subx directory):
#   $ ./subx translate 05[0-2]*.subx -o /tmp/tmp52
#   $ ./subx run /tmp/tmp52  # runs a series of tests
#   ......  # all tests pass
#
# (We can't yet run the tests when given a "test" commandline argument,
# because checking for it would require the function being tested! Breakage
# would cause tests to not run, rather than to fail as we'd like.)

== code
#   instruction                     effective address                                                   register    displacement    immediate
# . op          subop               mod             rm32          base        index         scale       r32
# . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes

Entry:  # run all tests
    e8/call  run-tests/disp32  # 'run-tests' is a function created automatically by SubX. It calls all functions that start with 'test-'.
    # syscall(exit, Num-test-failures)
    8b/copy                         0/mod/indirect  5/rm32/.disp32            .             .           3/r32/EBX   Num-test-failures/disp32          # copy *Num-test-failures to EBX
    b8/copy-to-EAX  1/imm32/exit
    cd/syscall  0x80/imm8

# compare a null-terminated ascii string with a more idiomatic length-prefixed byte array
# reason for the name: the only place we should have null-terminated ascii strings is from commandline args
kernel-string-equal?:  # s : null-terminated ascii string, benchmark : length-prefixed ascii string -> EAX : boolean
    # pseudocode:
    #   n = benchmark->length
    #   s1 = s
    #   s2 = benchmark->data
    #   i = 0
    #   while (i < n)
    #     c1 = *s1
    #     c2 = *s2
    #     if (c1 == 0) return false
    #     if (c1 != c2) return false
    #     ++s1, ++s2, ++i
    #   return *s1 == 0
    #
    # registers:
    #   i: ECX
    #   n: EDX
    #   s1: EDI
    #   s2: ESI
    #   c1: EAX
    #   c2: EBX
    #
    # . prolog
    55/push-EBP
    89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
    # . save registers
    51/push-ECX
    52/push-EDX
    53/push-EBX
    56/push-ESI
    57/push-EDI
    # s1/EDI = s
    8b/copy                         1/mod/*+disp8   5/rm32/EBP    .           .             .           7/r32/EDI   8/disp8         .                 # copy *(EBP+8) to EDI
    # n/EDX = benchmark->length
    8b/copy                         1/mod/*+disp8   5/rm32/EBP    .           .             .           2/r32/EDX   0xc/disp8       .                 # copy *(EBP+12) to EDX
    8b/copy                         0/mod/indirect  2/rm32/EDX    .           .             .           2/r32/EDX   .               .                 # copy *EDX to EDX
    # s2/ESI = benchmark->data
    8b/copy                         1/mod/*+disp8   5/rm32/EBP    .           .             .           6/r32/ESI   0xc/disp8       .                 # copy *(EBP+12) to ESI
    81          0/subop/add         3/mod/direct    6/rm32/ESI    .           .             .           .           .               4/imm32           # add to ESI
    # i/ECX = c1/EAX = c2/EBX = 0
    b9/copy-to-ECX  0/imm32/exit
    b8/copy-to-EAX  0/imm32
    bb/copy-to-EBX  0/imm32
$kernel-string-equal?:loop:
    # if (i >= n) break
    39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
    7d/jump-if-greater-or-equal  $kernel-string-equal?:break/disp8
    # c1 = *s1
    8a/copy-byte                    0/mod/indirect  7/rm32/EDI    .           .             .           0/r32/AL    .               .                 # copy byte at *EDI to AL
    # c2 = *s2
    8a/copy-byte                    0/mod/indirect  6/rm32/ESI    .           .             .           3/r32/BL    .               .                 # copy byte at *ESI to BL
    # if (c1 == 0) return false
    3d/compare-EAX-and  0/imm32
    74/jump-if-equal  $kernel-string-equal?:false/disp8
    # if (c1 != c2) return false
    39/compare                      3/mod/direct    0/rm32/EAX    .           .             .           3/r32/EBX   .               .                 # compare EAX and EBX
    75/jump-if-not-equal  $kernel-string-equal?:false/disp8
    # ++i
    41/inc-ECX
    # ++s1
    47/inc-EDI
    # ++s2
    46/inc-ESI
    eb/jump  $kernel-string-equal?:loop/disp8
$kernel-string-equal?:break:
    # return *s1 == 0
    8a/copy-byte                    0/mod/indirect  7/rm32/EDI    .           .             .           0/r32/AL    .               .                 # copy byte at *EDI to AL
    3d/compare-EAX-and  0/imm32
    75/jump-if-not-equal  $kernel-string-equal?:false/disp8
$kernel-string-equal?:true:
    b8/copy-to-EAX  1/imm32
    eb/jump  $kernel-string-equal?:end/disp8
$kernel-string-equal?:false:
    b8/copy-to-EAX  0/imm32
$kernel-string-equal?:end:
    # . restore registers
    5f/pop-to-EDI
    5e/pop-to-ESI
    5b/pop-to-EBX
    5a/pop-to-EDX
    59/pop-to-ECX
    # . epilog
    89/copy                         3/mod/direct    4/rm32/ESP    .           .             .           5/r32/EBP   .               .                 # copy EBP to ESP
    5d/pop-to-EBP
    c3/return

# - tests

test-compare-null-kernel-string-with-empty-array:
    # EAX = kernel-string-equal?(Null-kernel-string, "")
    # . . push args
    68/push  ""/imm32
    68/push  Null-kernel-string/imm32
    # . . call
    e8/call  kernel-string-equal?/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
    # check-ints-equal(EAX, 1, msg)
    # . . push args
    68/push  "F - test-compare-null-kernel-string-with-empty-array"/imm32
    68/push  1/imm32/true
    50/push-EAX
    # . . call
    e8/call  check-ints-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
    c3/return

test-compare-null-kernel-string-with-non-empty-array:
    # EAX = kernel-string-equal?(Null-kernel-string, "Abc")
    # . . push args
    68/push  "Abc"/imm32
    68/push  Null-kernel-string/imm32
    # . . call
    e8/call  kernel-string-equal?/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
    # check-ints-equal(EAX, 0, msg)
    # . . push args
    68/push  "F - test-compare-null-kernel-string-with-non-empty-array"/imm32
    68/push  0/imm32/false
    50/push-EAX
    # . . call
    e8/call  check-ints-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
    c3/return

test-compare-kernel-string-with-equal-array:
    # EAX = kernel-string-equal?(_test-Abc-kernel-string, "Abc")
    # . . push args
    68/push  "Abc"/imm32
    68/push  _test-Abc-kernel-string/imm32
    # . . call
    e8/call  kernel-string-equal?/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
    # check-ints-equal(EAX, 1, msg)
    # . . push args
    68/push  "F - test-compare-kernel-string-with-equal-array"/imm32
    68/push  1/imm32/true
    50/push-EAX
    # . . call
    e8/call  check-ints-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
    c3/return

test-compare-kernel-string-with-inequal-array:
    # EAX = kernel-string-equal?(_test-Abc-kernel-string, "Adc")
    # . . push args
    68/push  "Adc"/imm32
    68/push  _test-Abc-kernel-string/imm32
    # . . call
    e8/call  kernel-string-equal?/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
    # check-ints-equal(EAX, 0, msg)
    # . . push args
    68/push  "F - test-compare-kernel-string-with-equal-array"/imm32
    68/push  0/imm32/false
    50/push-EAX
    # . . call
    e8/call  check-ints-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
    c3/return

test-compare-kernel-string-with-empty-array:
    # EAX = kernel-string-equal?(_test-Abc-kernel-string, "")
    # . . push args
    68/push  ""/imm32
    68/push  _test-Abc-kernel-string/imm32
    # . . call
    e8/call  kernel-string-equal?/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
    # check-ints-equal(EAX, 0, msg)
    # . . push args
    68/push  "F - test-compare-kernel-string-with-equal-array"/imm32
    68/push  0/imm32/false
    50/push-EAX
    # . . call
    e8/call  check-ints-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
    c3/return

test-compare-kernel-string-with-shorter-array:
    # EAX = kernel-string-equal?(_test-Abc-kernel-string, "Ab")
    # . . push args
    68/push  "Ab"/imm32
    68/push  _test-Abc-kernel-string/imm32
    # . . call
    e8/call  kernel-string-equal?/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
    # check-ints-equal(EAX, 0, msg)
    # . . push args
    68/push  "F - test-compare-kernel-string-with-shorter-array"/imm32
    68/push  0/imm32/false
    50/push-EAX
    # . . call
    e8/call  check-ints-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
    c3/return

test-compare-kernel-string-with-longer-array:
    # EAX = kernel-string-equal?(_test-Abc-kernel-string, "Abcd")
    # . . push args
    68/push  "Abcd"/imm32
    68/push  _test-Abc-kernel-string/imm32
    # . . call
    e8/call  kernel-string-equal?/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
    # check-ints-equal(EAX, 0, msg)
    # . . push args
    68/push  "F - test-compare-kernel-string-with-longer-array"/imm32
    68/push  0/imm32/false
    50/push-EAX
    # . . call
    e8/call  check-ints-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
    c3/return

== data

Null-kernel-string:
    00/null

_test-Abc-kernel-string:
    41/A 62/b 63/c 00/null

# . . vim:nowrap:textwidth=0