TEXTIO : Read past end of file in ModelSim Simulation
Sorry to bypass all the comments but to me the solution to this doesn't really depend on anything. You have not got if (rising_edge(RST)) then &lt;ROM init loop&gt;, but if (RST = '1') then &lt;ROM init loop&gt;. Since you have CLK in the sensitivity list for the process, any change in CLK while RST is high, will cause the loop to run again, causing the error you've seen.

You can easily make sure this happens only once with a boolean variable:

variable rom_init_complete : boolean := false;


...

if (not rom_init_complete) then
  -- load ROM contents from load_file
  rom_init_complete := true;
  index := 0;
  readline(load_file, rdline);
  while not endfile(load_file) loop
    readline(load_file, rdline);
    hread(rdline, storage(index)(63 downto 32));
    read(rdline, char);
    read(rdline, storage(index)(31 downto 0));
    index := index + 1;
  end loop;
end if;