1cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org#!/usr/bin/env python 2cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 3cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved. 4cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org# Use of this source code is governed by a BSD-style license that can be 5cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org# found in the LICENSE file. 6cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 7cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org""" 8cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.orgMake sure comdat folding optimization setting is extracted properly. 9cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org""" 10cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 11cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.orgimport TestGyp 12cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 13cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.orgimport sys 14cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 15cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.orgif sys.platform == 'win32': 16cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org test = TestGyp.TestGyp(formats=['msvs', 'ninja']) 17cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 18cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org CHDIR = 'linker-flags' 19cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org test.run_gyp('opt-icf.gyp', chdir=CHDIR) 20cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org test.build('opt-icf.gyp', chdir=CHDIR) 21cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 22cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org # We're specifying /DEBUG so the default is to not merge identical 23cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org # functions, so all of the similar_functions should be preserved. 24cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org output = test.run_dumpbin( 25cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org '/disasm', test.built_file_path('test_opticf_default.exe', chdir=CHDIR)) 26cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org if output.count('similar_function') != 6: # 3 definitions, 3 calls. 27cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org test.fail_test() 28cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 29cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org # Explicitly off, all functions preserved seperately. 30cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org output = test.run_dumpbin( 31cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org '/disasm', test.built_file_path('test_opticf_no.exe', chdir=CHDIR)) 32cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org if output.count('similar_function') != 6: # 3 definitions, 3 calls. 33cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org test.fail_test() 34cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 35cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org # Explicitly on, all but one removed. 36cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org output = test.run_dumpbin( 37cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org '/disasm', test.built_file_path('test_opticf_yes.exe', chdir=CHDIR)) 38cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org if output.count('similar_function') != 4: # 1 definition, 3 calls. 39cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org test.fail_test() 40cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org 41cd83cb9cf7101ba364cbc2a7b31c070bf409dfa9scottmg@chromium.org test.pass_test() 42