aboutsummaryrefslogtreecommitdiffstats
path: root/powerpc/Asmexpand.ml
diff options
context:
space:
mode:
Diffstat (limited to 'powerpc/Asmexpand.ml')
-rw-r--r--powerpc/Asmexpand.ml71
1 files changed, 5 insertions, 66 deletions
diff --git a/powerpc/Asmexpand.ml b/powerpc/Asmexpand.ml
index a2cfb136..878c7e5d 100644
--- a/powerpc/Asmexpand.ml
+++ b/powerpc/Asmexpand.ml
@@ -668,7 +668,7 @@ let preg_to_dwarf_int = function
let translate_annot annot =
let rec aux = function
- | BA x -> Some (BA (preg_to_dwarf_int x))
+ | BA x -> Some (1,BA (preg_to_dwarf_int x))
| BA_int _
| BA_long _
| BA_float _
@@ -676,11 +676,11 @@ let translate_annot annot =
| BA_loadglobal _
| BA_addrglobal _
| BA_loadstack _ -> None
- | BA_addrstack ofs -> Some (BA_addrstack ofs)
+ | BA_addrstack ofs -> Some (1,BA_addrstack ofs)
| BA_splitlong (hi,lo) ->
begin
match (aux hi,aux lo) with
- | Some hi ,Some lo -> Some (BA_splitlong (hi,lo))
+ | Some (_,hi) ,Some (_,lo) -> Some (1,BA_splitlong (hi,lo))
| _,_ -> None
end in
(match annot with
@@ -692,73 +692,12 @@ let expand_scope id lbl oldscopes newscopes =
and closing = List.filter (fun a -> not (List.mem a newscopes)) oldscopes in
List.iter (fun i -> Debug.open_scope id i lbl) opening;
List.iter (fun i -> Debug.close_scope id i lbl) closing
-
-let expand_instruction id l =
- let get_lbl = function
- | None ->
- let lbl = new_label () in
- emit (Plabel lbl);
- lbl
- | Some lbl -> lbl in
- let rec aux lbl scopes = function
- | [] -> let lbl = get_lbl lbl in
- Debug.function_end id lbl
- | (Pbuiltin(EF_debug (kind,txt,_x),args,_) as i)::rest ->
- let kind = (P.to_int kind) in
- begin
- match kind with
- | 1->
- emit i;aux lbl scopes rest
- | 2 ->
- aux lbl scopes rest
- | 3 ->
- begin
- match translate_annot args with
- | Some a ->
- let lbl = get_lbl lbl in
- Debug.start_live_range (id,txt) lbl (1,a);
- aux (Some lbl) scopes rest
- | None -> aux lbl scopes rest
- end
- | 4 ->
- let lbl = get_lbl lbl in
- Debug.end_live_range (id,txt) lbl;
- aux (Some lbl) scopes rest
- | 5 ->
- begin
- match translate_annot args with
- | Some a->
- Debug.stack_variable (id,txt) (1,a);
- aux lbl scopes rest
- | _ -> aux lbl scopes rest
- end
- | 6 ->
- let lbl = get_lbl lbl in
- let scopes' = List.map (function BA_int x -> Int32.to_int (camlint_of_coqint x) | _ -> assert false) args in
- expand_scope id lbl scopes scopes';
- aux (Some lbl) scopes' rest
- | _ ->
- aux None scopes rest
- end
- | i::rest -> expand_instruction_simple i; aux None scopes rest in
- (* We need to move all closing debug annotations before the last real statement *)
- let rec move_debug acc bcc = function
- | (Pbuiltin(EF_debug (kind,_,_),_,_) as i)::rest ->
- let kind = (P.to_int kind) in
- if kind = 1 then
- move_debug acc (i::bcc) rest (* Do not move debug line *)
- else
- move_debug (i::acc) bcc rest (* Move the debug annotations forward *)
- | b::rest -> List.rev ((List.rev (b::bcc)@List.rev acc)@rest) (* We found the first non debug location *)
- | [] -> List.rev acc (* This actually can never happen *) in
- aux None [] (move_debug [] [] (List.rev l))
-
-
+
let expand_function id fn =
try
set_current_function fn;
if !Clflags.option_g then
- expand_instruction id fn.fn_code
+ expand_debug id translate_annot expand_instruction_simple fn.fn_code
else
List.iter expand_instruction_simple fn.fn_code;
Errors.OK (get_current_function ())