diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2017-11-08 10:52:26 +0100 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2017-11-08 10:52:26 +0100 |
commit | 90f4de67b8cd1ac753d099100d4612cc3eabe4f1 (patch) | |
tree | 9c8627eb73d56f2247039c36c2e73df5388f9420 | |
parent | 9e9c57616c9cf683ed65b1ba60510b8ae8066700 (diff) | |
download | compcert-90f4de67b8cd1ac753d099100d4612cc3eabe4f1.tar.gz compcert-90f4de67b8cd1ac753d099100d4612cc3eabe4f1.zip |
Fix jumptable issue.
Instead of using reset_constants use reset_literals which avoids
emptying the jumptables.
Bug 22525
-rw-r--r-- | backend/PrintAsmaux.ml | 7 | ||||
-rw-r--r-- | powerpc/TargetPrinter.ml | 2 | ||||
-rw-r--r-- | riscV/TargetPrinter.ml | 2 | ||||
-rw-r--r-- | 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 |