From 90f4de67b8cd1ac753d099100d4612cc3eabe4f1 Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Wed, 8 Nov 2017 10:52:26 +0100 Subject: Fix jumptable issue. Instead of using reset_constants use reset_literals which avoids emptying the jumptables. Bug 22525 --- backend/PrintAsmaux.ml | 7 +++++-- powerpc/TargetPrinter.ml | 2 +- riscV/TargetPrinter.ml | 2 +- x86/TargetPrinter.ml | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/backend/PrintAsmaux.ml b/backend/PrintAsmaux.ml index f7a30b22..257b1ba4 100644 --- a/backend/PrintAsmaux.ml +++ b/backend/PrintAsmaux.ml @@ -86,11 +86,14 @@ let literal64_labels = (Hashtbl.create 39 : (int64, int) Hashtbl.t) let label_literal32 bf = label_constant literal32_labels bf let label_literal64 n = label_constant literal64_labels n -let reset_constants () = - jumptables := []; +let reset_literals () = Hashtbl.clear literal32_labels; Hashtbl.clear literal64_labels +let reset_constants () = + jumptables := []; + reset_literals () + let exists_constants () = Hashtbl.length literal32_labels > 0 || Hashtbl.length literal64_labels > 0 diff --git a/powerpc/TargetPrinter.ml b/powerpc/TargetPrinter.ml index 17bd06b5..f15e6ec1 100644 --- a/powerpc/TargetPrinter.ml +++ b/powerpc/TargetPrinter.ml @@ -949,7 +949,7 @@ module Target (System : SYSTEM):TARGET = Hashtbl.iter (print_literal64 oc) literal64_labels; Hashtbl.iter (print_literal32 oc) literal32_labels; end; - reset_constants () + reset_literals () let print_optional_fun_info _ = () diff --git a/riscV/TargetPrinter.ml b/riscV/TargetPrinter.ml index 4b976e17..19d8103b 100644 --- a/riscV/TargetPrinter.ml +++ b/riscV/TargetPrinter.ml @@ -149,7 +149,7 @@ module Target : TARGET = fprintf oc "%a: .long 0x%lx\n" label lbl bf) literal32_labels end; - reset_constants () + reset_literals () end (* Generate code to load the address of id + ofs in register r *) diff --git a/x86/TargetPrinter.ml b/x86/TargetPrinter.ml index 52c2de49..b685c4cb 100644 --- a/x86/TargetPrinter.ml +++ b/x86/TargetPrinter.ml @@ -878,7 +878,7 @@ module Target(System: SYSTEM):TARGET = print_align oc 8; Hashtbl.iter (print_literal64 oc) literal64_labels; Hashtbl.iter (print_literal32 oc) literal32_labels; - reset_constants () + reset_literals () end let cfi_startproc = cfi_startproc -- cgit