Bug 92612 - [10 Regression] Linker error in 525.x264_r after r278509
Summary: [10 Regression] Linker error in 525.x264_r after r278509
Status: RESOLVED INVALID
Alias: None
Product: gcc
Classification: Unclassified
Component: c (show other bugs)
Version: 10.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks: spec
  Show dependency treegraph
 
Reported: 2019-11-21 09:42 UTC by Martin Liška
Modified: 2019-11-21 09:51 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2019-11-21 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Martin Liška 2019-11-21 09:42:08 UTC
Since defaulting to -fno-common, one can't build the benchmark due to:

gcc     -std=c99      -Ofast -march=znver1 -g          ldecod_src/nal.o ldecod_src/mbuffer_mvc.o ldecod_src/image.o ldecod_src/mb_access.o ldecod_src/memalloc.o ldecod_src/mc_prediction.o ldecod_src/mb_prediction.o ldecod_src/intra4x4_pred_mbaff.o ldecod_src/loop_filter_mbaff.o ldecod_src/context_ini.o ldecod_src/configfile.o ldecod_src/cabac.o ldecod_src/sei.o ldecod_src/leaky_bucket.o ldecod_src/filehandle.o ldecod_src/errorconcealment.o ldecod_src/decoder_test.o ldecod_src/img_process.o ldecod_src/mv_prediction.o ldecod_src/fmo.o ldecod_src/output.o ldecod_src/mc_direct.o ldecod_src/rtp.o ldecod_src/nalucommon.o ldecod_src/config_common.o ldecod_src/intra_chroma_pred.o ldecod_src/transform8x8.o ldecod_src/blk_prediction.o ldecod_src/intra8x8_pred_mbaff.o ldecod_src/erc_do_i.o ldecod_src/io_tiff.o ldecod_src/mbuffer.o ldecod_src/block.o ldecod_src/intra4x4_pred.o ldecod_src/transform.o ldecod_src/annexb.o ldecod_src/ldecod.o ldecod_src/macroblock.o ldecod_src/vlc.o ldecod_src/parset.o ldecod_src/loop_filter_normal.o ldecod_src/parsetcommon.o ldecod_src/erc_do_p.o ldecod_src/loopFilter.o ldecod_src/intra16x16_pred_mbaff.o ldecod_src/intra4x4_pred_normal.o ldecod_src/intra16x16_pred_normal.o ldecod_src/win32.o ldecod_src/intra16x16_pred.o ldecod_src/intra8x8_pred_normal.o ldecod_src/io_raw.o ldecod_src/img_io.o ldecod_src/nalu.o ldecod_src/quant.o ldecod_src/intra8x8_pred.o ldecod_src/erc_api.o ldecod_src/header.o ldecod_src/biaridecod.o ldecod_src/input.o             -lm         -o ldecod_r  
/usr/bin/ld: ldecod_src/decoder_test.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: multiple definition of `cfgparams'; ldecod_src/configfile.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: first defined here
/usr/bin/ld: ldecod_src/config_common.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: multiple definition of `cfgparams'; ldecod_src/configfile.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: first defined here
Comment 1 Martin Liška 2019-11-21 09:49:20 UTC
Following patch fixes that:

diff --git a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h
index 12ed1cc8..450930e2 100644
--- a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h
+++ b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h
@@ -18,9 +18,9 @@
 //#define LEVEL_IDC       21
 
 
-InputParameters cfgparams;
 
 #ifdef INCLUDED_BY_CONFIGFILE_C
+InputParameters cfgparams;
 // Mapping_Map Syntax:
 // {NAMEinConfigFile,  &cfgparams.VariableName, Type, InitialValue, LimitType, MinLimit, MaxLimit, CharSize}
 // Types : {0:int, 1:text, 2: double}
@@ -59,6 +59,7 @@ extern Mapping Map[];
 #endif
 extern void JMDecHelpExit ();
 extern void ParseCommand(InputParameters *p_Inp, int ac, char *av[]);
+extern InputParameters cfgparams;
 
 #endif
Comment 2 Wilco 2019-11-21 09:51:04 UTC
(In reply to Martin Liška from comment #1)
> Following patch fixes that:
> 
> diff --git a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h
> b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h
> index 12ed1cc8..450930e2 100644
> --- a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h
> +++ b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h
> @@ -18,9 +18,9 @@
>  //#define LEVEL_IDC       21
>  
>  
> -InputParameters cfgparams;
>  
>  #ifdef INCLUDED_BY_CONFIGFILE_C
> +InputParameters cfgparams;
>  // Mapping_Map Syntax:
>  // {NAMEinConfigFile,  &cfgparams.VariableName, Type, InitialValue,
> LimitType, MinLimit, MaxLimit, CharSize}
>  // Types : {0:int, 1:text, 2: double}
> @@ -59,6 +59,7 @@ extern Mapping Map[];
>  #endif
>  extern void JMDecHelpExit ();
>  extern void ParseCommand(InputParameters *p_Inp, int ac, char *av[]);
> +extern InputParameters cfgparams;
>  
>  #endif

(In reply to Martin Liška from comment #0)
> Since defaulting to -fno-common, one can't build the benchmark due to:

Yes some SPEC benchmarks rely on tentative definitions. Given it is a portability issue, but the source can't be fixed, the easiest way is to add -fcommon in the config file for the failing cases. This is similar to the other workarounds like -fno-strict-aliasing.