aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2015-08-31 16:56:02 +0200
committerSverker Eriksson <[email protected]>2015-08-31 16:56:02 +0200
commit6e3a0870ebd992ed410298e859066894134be9f6 (patch)
treecbf491004dc00c90dbc4a7aa5d757cfd1444d9bc /lib/dialyzer
parentb5eba8b61ce3ea0058ba37df288738586c68d6ac (diff)
downloadotp-6e3a0870ebd992ed410298e859066894134be9f6.tar.gz
otp-6e3a0870ebd992ed410298e859066894134be9f6.tar.bz2
otp-6e3a0870ebd992ed410298e859066894134be9f6.zip
erts,hipe,dialyzer: Fix hipe checkum of target runtime system
Main problem: A faulty HIPE_LITERAL_CRC was not detected by the loader. Strangeness #1: Dialyzer should ask the hipe compiler about the target checksum, not an internal bif. Strangeness #2: The HIPE_SYSTEM_CRC checksum was based on the HIPE_LITERALS_CRC checksum. Solution: New HIPE_ERTS_CHECKSUM which is an bxor of the two (now independent) HIPE_LITERALS_CRC and HIPE_SYSTEM_CRC. HIPE_LITERALS_CRC represents values that are assumed to stay constant for different VM configurations of the same arch, and are therefor hard coded into the hipe compiler. HIPE_SYSTEM_CRC represents values that may differ between VM variants. By default the hipe compiler asks the running VM for this checksum, in order to create beam files for the same running VM. The hipe compiler can be configured (with "make XCOMP=yes ...") to create beam files for another VM variant, in which case HIPE_SYSTEM_CRC is also hard coded. ToDo: Treat all erts properties the same. Either ask the running VM or hard coded into hipe (if XCOMP=yes). This will simplify and reduce the risk of dangerous mismatches. One concern might be the added overhead from more frequent calls to hipe_bifs:get_rts_param.
Diffstat (limited to 'lib/dialyzer')
-rw-r--r--lib/dialyzer/src/dialyzer.app.src2
-rw-r--r--lib/dialyzer/src/dialyzer_cl.erl6
2 files changed, 4 insertions, 4 deletions
diff --git a/lib/dialyzer/src/dialyzer.app.src b/lib/dialyzer/src/dialyzer.app.src
index 6718178fae..8ac6dc1367 100644
--- a/lib/dialyzer/src/dialyzer.app.src
+++ b/lib/dialyzer/src/dialyzer.app.src
@@ -47,5 +47,5 @@
{applications, [compiler, gs, hipe, kernel, stdlib, wx]},
{env, []},
{runtime_dependencies, ["wx-1.2","syntax_tools-1.6.14","stdlib-2.5",
- "kernel-3.0","hipe-3.10.3","erts-7.0",
+ "kernel-3.0","hipe-3.13","erts-7.0",
"compiler-5.0"]}]}.
diff --git a/lib/dialyzer/src/dialyzer_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl
index 55302d5869..4116866916 100644
--- a/lib/dialyzer/src/dialyzer_cl.erl
+++ b/lib/dialyzer/src/dialyzer_cl.erl
@@ -547,13 +547,13 @@ hc(Mod, Cache) ->
hc_cache(Mod) ->
CacheBase = cache_base_dir(),
- %% Use HiPE architecture and version in directory name, to avoid
- %% clashes between incompatible binaries.
+ %% Use HiPE architecture, version and erts checksum in directory name,
+ %% to avoid clashes between incompatible binaries.
HipeArchVersion =
lists:concat(
[erlang:system_info(hipe_architecture), "-",
hipe:version(), "-",
- hipe_bifs:system_crc()]),
+ hipe:erts_checksum()]),
CacheDir = filename:join(CacheBase, HipeArchVersion),
OrigBeamFile = code:which(Mod),
{ok, {Mod, <<Checksum:128>>}} = beam_lib:md5(OrigBeamFile),