Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(907)

Unified Diff: src/trusted/service_runtime/nacl.scons

Issue 4181005: Fixes some bugs with memory setup and halt-sled allocation and... (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/trusted/service_runtime/nacl.scons
===================================================================
--- src/trusted/service_runtime/nacl.scons (revision 0)
+++ src/trusted/service_runtime/nacl.scons (revision 0)
@@ -0,0 +1,178 @@
+# -*- python -*-
+# Copyright 2010 The Native Client Authors. All rights reserved. Use
+# of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+Import('env')
+
+# So far, all tests involve native assembler
+
+HALT_SLED_SIZE=32
+
+
+# ----------------------------------------------------------
+# Tests that require a NaCl module
+# ----------------------------------------------------------
+
+if env['TARGET_ARCHITECTURE'] == 'x86':
+ arch_dir = ('arch/' + env['TARGET_ARCHITECTURE'] +
+ '_' + env['TARGET_SUBARCH'])
+ nacl_text_pad_asm = (arch_dir +
+ '/nacl_text_pad_test.S')
+elif env['TARGET_ARCHITECTURE'] == 'arm':
+ arch_dir = 'arch/' + env['TARGET_ARCHITECTURE']
+ nacl_text_pad_asm = ( arch_dir +
+ '/nacl_text_pad_test.S')
+else:
+ raise Exception, 'unknown architecture'
+
+def NewAsmEnv(env, *alist, **kwarg):
+ asm_env = env.Clone()
+ if ARGUMENTS.get('bitcode'):
+ asm_env.Replace(CC=env['CC_NATIVE'])
+ if env['TARGET_ARCHITECTURE'] == 'x86':
+ if env['TARGET_SUBARCH'] == '32':
+ asm_env['LINKCOM'] = ('${LD} -melf_nacl -e _start ${RO_START}' +
+ ' ${RW_START} -o ${TARGET} ${SOURCES}')
+ elif env['TARGET_SUBARCH'] == '64':
+ asm_env['LINKCOM'] = ('${LD} -melf64_nacl -e _start ${RO_START}' +
+ ' ${RW_START} -o ${TARGET} ${SOURCES}')
+ else:
+ raise Exception, 'new subarchtecture for x86?!?'
+ elif env['TARGET_ARCHITECTURE'] == 'arm':
+ asm_env['LINKCOM'] = ('${LD} --native-client -e _start -Ttext 0x20000' +
+ ' -nostdlib -static' +
+ ' ${RO_START} ${RW_START} -o ${TARGET} ${SOURCES}' +
+ ' && ${PYTHON}' +
+ ' ${SCONSTRUCT_DIR}/tools/elf_patcher.py' +
+ ' -a 16 -h ${SCONSTRUCT_DIR}/src/include/nacl_elf.h' +
+ ' ${TARGET}')
+ else:
+ raise Exception, 'unknown architecture'
+
+ asm_env.Append(CPPDEFINES = [
+ ['NACL_BLOCK_SHIFT', 5],
+ ['NACL_BLOCK_SIZE', 32],
+ ['NACL_BUILD_ARCH', '${BUILD_ARCHITECTURE}' ],
+ ['NACL_BUILD_SUBARCH', '${BUILD_SUBARCH}' ],
+ ['NACL_TARGET_ARCH', '${TARGET_ARCHITECTURE}' ],
+ ['NACL_TARGET_SUBARCH', '${TARGET_SUBARCH}' ],
+ ])
+ asm_env.Append(*alist, **kwarg)
+ return asm_env
+
+
+if (env['TARGET_ARCHITECTURE'] == env['BUILD_ARCHITECTURE']):
+ ALLOCATION_SIZE = 0x10000
+ START_OF_TEXT = 0x20000
+ TEXT_SIZE_BOUND = 0x10000 # estimate of test code size
+ RODATA_SIZE_BOUND = 0x10000
+ RWDATA_SIZE = 0x4 # if we have rwdata, we must use exactly one word!
+
+ def EndOfText(text_end_modulus):
+ return START_OF_TEXT + text_end_modulus
+
+ def RoundUpToAllocSize(size):
+ return (size + ALLOCATION_SIZE - 1) & ~(ALLOCATION_SIZE - 1)
+
+ def TextGap(text_end):
+ end_of_text = EndOfText(text_end)
+ rounded_end_of_text = RoundUpToAllocSize(end_of_text)
+ text_gap = rounded_end_of_text - end_of_text
+ return text_gap
+
+ def NaturalRodataStart(text_end):
+ extra = 0
+ text_gap = TextGap(text_end)
+ if text_gap < HALT_SLED_SIZE:
+ extra = ALLOCATION_SIZE
+ return RoundUpToAllocSize(START_OF_TEXT + TEXT_SIZE_BOUND + extra)
+
+ def ExpectedBreak(text_end, rodata_addr, rwdata_addr, rwdata_size):
+ if rwdata_addr is None:
+ if rodata_addr is None:
+ break_addr = NaturalRodataStart(text_end)
+ else:
+ break_addr = RoundUpToAllocSize(rodata_addr + RODATA_SIZE_BOUND)
+ else:
+ break_addr = rwdata_addr + rwdata_size
+ return break_addr
+
+ test_specs = [ (0x10000, 'no'),
+ (0x10000 - 32, 'small'),
+ ( 0x8000, 'large'),
+ (0x10000 - 28, 'too_small') ]
+
+ rwdata_address = None # none for now
+
+ for text_end, variant in test_specs:
+ for rodata_address, name_modifier in [ (None, ''),
+ (0, '_ro'),
+ (0x100000, '_ro_dyn') ]:
+ # rodata_address is None when no .rodata section should appear
+ # in the generated nexe, and is 0 when it should appear in the
+ # natural location (as defined by the linker script); when it
+ # has a non-zero numeric value, then the .rodata section is
+ # forced to start at that address.
+
+ expected_exit_status = '0'
+
+ # arm assembler misplaces the text section when --section-start
+ # directive is used, so none of the tests that leaves room for
+ # dynamic code can run.
+
+ if (rodata_address is not None and rodata_address != 0 and
+ env['TARGET_ARCHITECTURE'] == 'arm'):
+ continue
+
+ # arm assembler does not ensure there is enough space for
+ # halt sled, and manually setting rodata's start location
+ # is currently broken (moves text too).
+ if (rodata_address == 0 and
+ env['TARGET_ARCHITECTURE'] == 'arm' and
+ variant == 'too_small'):
+ expected_exit_status = 'trusted_sigabrt'
+
+ if rodata_address == 0:
+ use_rodata_address = NaturalRodataStart(text_end)
+ else:
+ use_rodata_address = rodata_address
+ # use_rodata_address is None or a non-zero integer
+
+ break_address = ExpectedBreak(text_end, use_rodata_address,
+ rwdata_address, RWDATA_SIZE)
+
+ defines=[]
+ for (symbol, value) in [('TEXT_EXTEND', text_end),
+ ('EXPECTED_BREAK', break_address),
+ ('EXPECTED_RODATA', use_rodata_address),
+ ('EXPECTED_RWDATA', rwdata_address)]:
+ if value is not None:
+ defines += [[symbol, str(value)]]
+
+ asm_env = NewAsmEnv(env,
+ CPPDEFINES=defines)
+
+ for (linkcom_symbol, section_name, address) in [
+ ('RO_START', '.rodata', rodata_address),
+ ('RW_START', '.data', rwdata_address)]:
+ # on the arm, we *must* leave out the --section-start directive
+ # when we use the "natural" address, since otherwise the linker
+ # gets confused and misplaces the text section!
+ if address is not None and address != 0:
+ asm_env[linkcom_symbol] = ('--section-start=' + section_name +
+ '=' + hex(address))
+
+ base_name = ('nacl_text_' + variant + '_pad'
+ + name_modifier + '_test')
+ obj = asm_env.ComponentObject(base_name + '.o',
+ nacl_text_pad_asm)
+ nexe_name = base_name + '.nexe'
+
+ asm_env.ComponentProgram(nexe_name,
+ [obj])
+ node = env.CommandSelLdrTestNacl(
+ base_name + '.out',
+ command=[env.File(nexe_name)],
+ exit_status=expected_exit_status)
+ env.AddNodeToTestSuite(node, ['sel_ldr_sled_tests'], 'run_' + base_name)
Property changes on: src/trusted/service_runtime/nacl.scons
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « src/trusted/service_runtime/arch/x86_64/nacl_text_pad_test.S ('k') | src/trusted/service_runtime/nacl_error_code.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698