diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-06-25 20:41:37 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-03 15:31:03 -0700 |
commit | 5e01920010c51286010e0d59d5b7541aad0678e8 (patch) | |
tree | 47391361dc01e41dfee79fa9d3177f9db39f13db | |
parent | b0e85bc8defe0e56c5baf4c1f510572b9f2d5196 (diff) |
fix heap merging, add padding and offset adjustment, basic test passes in reverse as well
-rw-r--r-- | emlink.py | 7 | ||||
-rwxr-xr-x | tests/runner.py | 13 |
2 files changed, 13 insertions, 7 deletions
@@ -45,6 +45,10 @@ class AsmModule(): self.mem_init_full_js = mem_init.group(0) self.mem_init_js = mem_init.groups(0)[0][:-2] self.mem_init_size = self.mem_init_js.count(',') + self.mem_init_js.count('concat') # XXX add testing for large and small ones + pad = 8 - (self.mem_init_size % 8) + if pad < 8: + self.mem_init_js += '.concat([' + ','.join(['0']*pad) + '])' + self.mem_init_size += pad else: self.mem_init_js = '' self.mem_init_size = 0 @@ -80,6 +84,7 @@ class AsmModule(): if allocation: full_allocation = '/* memory initializer */ allocate(' + allocation + ', "i8", ALLOC_NONE, Runtime.GLOBAL_BASE)' main.pre_js = re.sub(shared.JS.memory_initializer_pattern if main.mem_init_js else shared.JS.no_memory_initializer_pattern, full_allocation, main.pre_js, count=1) + main.pre_js = re.sub('STATICTOP = STATIC_BASE \+ (\d+);', 'STATICTOP = STATIC_BASE + %d' % (main.mem_init_size + side.mem_init_size), main.pre_js, count=1) # global initializers TODO @@ -100,7 +105,7 @@ class AsmModule(): temp = shared.Building.js_optimizer(self.filename, ['asm', 'relocate'], extra_info={ 'replacements': replacements, 'fBase': 0, - 'hBase': shared.JS.align(main.mem_init_size, 8) + 'hBase': main.mem_init_size }) #print >> sys.stderr, 'relocated side into', temp relocated_funcs = AsmModule(temp) diff --git a/tests/runner.py b/tests/runner.py index 7a8ccf6f..f875ca3d 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -10610,7 +10610,8 @@ f.close() assert not os.path.exists('a.out') and not os.path.exists('a.exe'), 'Must not leave unneeded linker stubs' def test_static_link(self): - def test(main, side, first=True): + def test(name, main, side, expected, first=True): + print name #t = main ; main = side ; side = t open(os.path.join(self.get_dir(), 'main.cpp'), 'w').write(main) open(os.path.join(self.get_dir(), 'side.cpp'), 'w').write(side) @@ -10620,20 +10621,20 @@ f.close() Popen([PYTHON, EMLINK, 'main.js', 'side.js', 'together.js'], stdout=PIPE).communicate() assert os.path.exists('together.js') out = run_js('together.js', engine=SPIDERMONKEY_ENGINE, stderr=PIPE, full_output=True) - self.assertContained('side says 11.', out) + self.assertContained(expected, out) self.validate_asmjs(out) - #if first: test(side, main, False) # test reverse order + if first: test(name + ' (reverse)', side, main, expected, False) # test reverse order - test(''' + test('basics', ''' #include <stdio.h> extern int sidey(); int main() { - printf("side says %d.", sidey()); + printf("other says %d.", sidey()); return 0; } ''', ''' int sidey() { return 11; } - ''') + ''', 'other says 11.') def test_symlink(self): if os.name == 'nt': |