mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-13 14:53:06 +00:00
83d290c56f
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
120 lines
3.8 KiB
Python
120 lines
3.8 KiB
Python
# SPDX-License-Identifier: GPL-2.0+
|
|
# Copyright (c) 2017 Google, Inc
|
|
# Written by Simon Glass <sjg@chromium.org>
|
|
#
|
|
# Test for the elf module
|
|
|
|
from contextlib import contextmanager
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
try:
|
|
from StringIO import StringIO
|
|
except ImportError:
|
|
from io import StringIO
|
|
|
|
import elf
|
|
|
|
binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
|
|
|
|
# Use this to suppress stdout/stderr output:
|
|
# with capture_sys_output() as (stdout, stderr)
|
|
# ...do something...
|
|
@contextmanager
|
|
def capture_sys_output():
|
|
capture_out, capture_err = StringIO(), StringIO()
|
|
old_out, old_err = sys.stdout, sys.stderr
|
|
try:
|
|
sys.stdout, sys.stderr = capture_out, capture_err
|
|
yield capture_out, capture_err
|
|
finally:
|
|
sys.stdout, sys.stderr = old_out, old_err
|
|
|
|
|
|
class FakeEntry:
|
|
def __init__(self, contents_size):
|
|
self.contents_size = contents_size
|
|
self.data = 'a' * contents_size
|
|
|
|
def GetPath(self):
|
|
return 'entry_path'
|
|
|
|
class FakeImage:
|
|
def __init__(self, sym_value=1):
|
|
self.sym_value = sym_value
|
|
|
|
def GetPath(self):
|
|
return 'image_path'
|
|
|
|
def LookupSymbol(self, name, weak, msg):
|
|
return self.sym_value
|
|
|
|
class TestElf(unittest.TestCase):
|
|
def testAllSymbols(self):
|
|
fname = os.path.join(binman_dir, 'test', 'u_boot_ucode_ptr')
|
|
syms = elf.GetSymbols(fname, [])
|
|
self.assertIn('.ucode', syms)
|
|
|
|
def testRegexSymbols(self):
|
|
fname = os.path.join(binman_dir, 'test', 'u_boot_ucode_ptr')
|
|
syms = elf.GetSymbols(fname, ['ucode'])
|
|
self.assertIn('.ucode', syms)
|
|
syms = elf.GetSymbols(fname, ['missing'])
|
|
self.assertNotIn('.ucode', syms)
|
|
syms = elf.GetSymbols(fname, ['missing', 'ucode'])
|
|
self.assertIn('.ucode', syms)
|
|
|
|
def testMissingFile(self):
|
|
entry = FakeEntry(10)
|
|
image = FakeImage()
|
|
with self.assertRaises(ValueError) as e:
|
|
syms = elf.LookupAndWriteSymbols('missing-file', entry, image)
|
|
self.assertIn("Filename 'missing-file' not found in input path",
|
|
str(e.exception))
|
|
|
|
def testOutsideFile(self):
|
|
entry = FakeEntry(10)
|
|
image = FakeImage()
|
|
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms')
|
|
with self.assertRaises(ValueError) as e:
|
|
syms = elf.LookupAndWriteSymbols(elf_fname, entry, image)
|
|
self.assertIn('entry_path has offset 4 (size 8) but the contents size '
|
|
'is a', str(e.exception))
|
|
|
|
def testMissingImageStart(self):
|
|
entry = FakeEntry(10)
|
|
image = FakeImage()
|
|
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms_bad')
|
|
self.assertEqual(elf.LookupAndWriteSymbols(elf_fname, entry, image),
|
|
None)
|
|
|
|
def testBadSymbolSize(self):
|
|
entry = FakeEntry(10)
|
|
image = FakeImage()
|
|
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms_size')
|
|
with self.assertRaises(ValueError) as e:
|
|
syms = elf.LookupAndWriteSymbols(elf_fname, entry, image)
|
|
self.assertIn('has size 1: only 4 and 8 are supported',
|
|
str(e.exception))
|
|
|
|
def testNoValue(self):
|
|
entry = FakeEntry(20)
|
|
image = FakeImage(sym_value=None)
|
|
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms')
|
|
syms = elf.LookupAndWriteSymbols(elf_fname, entry, image)
|
|
self.assertEqual(chr(255) * 16 + 'a' * 4, entry.data)
|
|
|
|
def testDebug(self):
|
|
elf.debug = True
|
|
entry = FakeEntry(20)
|
|
image = FakeImage()
|
|
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms')
|
|
with capture_sys_output() as (stdout, stderr):
|
|
syms = elf.LookupAndWriteSymbols(elf_fname, entry, image)
|
|
elf.debug = False
|
|
self.assertTrue(len(stdout.getvalue()) > 0)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|