@@ -616,6 +616,7 @@ object (self)
616616 " "
617617 end )
618618 (gloc#address_memory_offset ~tgtsize: (Some 4 ) offset) in
619+ let vm1 (v : doubleword_int ) = TR. to_option (v#subtract_int 1 ) in
619620 let render_gloc (a : doubleword_int ) (v : doubleword_int ): string =
620621 let addrprefix = " " ^ (fixed_length_string a#to_hex_string 10 ) in
621622 let p_value =
@@ -634,9 +635,40 @@ object (self)
634635 ^ v#to_hex_string
635636 ^ name
636637 ^ " >"
638+ else if (Option. is_some (vm1 v))
639+ && functions_data#is_function_entry_point (Option. get (vm1 v)) then
640+ let fentry = Option. get (vm1 v) in
641+ let name =
642+ if functions_data#has_function_name fentry then
643+ let fndata = functions_data#get_function fentry in
644+ " :" ^ fndata#get_function_name
645+ else
646+ " " in
647+ " Faddr:<"
648+ ^ v#to_hex_string
649+ ^ name
650+ ^ " (T)>"
651+ else if memorymap#has_location v then
652+ let gloc = memorymap#get_location v in
653+ " GVAddr:<"
654+ ^ v#to_hex_string
655+ ^ " :"
656+ ^ gloc#name
657+ ^ " >"
658+
637659 else if elf_header#is_code_address v then
660+ let s =
661+ match elf_header#get_string_at_address v with
662+ | Some s ->
663+ let len = String. length s in
664+ if len < 50 then
665+ " :\" " ^ s ^ " \" "
666+ else
667+ " :\" " ^ (String. sub s 0 50 ) ^ " ...\" "
668+ | _ -> " " in
638669 " Code:<"
639670 ^ v#to_hex_string
671+ ^ s
640672 ^ " >"
641673 else if elf_header#is_data_address v then
642674 let s =
@@ -648,7 +680,7 @@ object (self)
648680 else
649681 " :\" " ^ (String. sub s 0 50 ) ^ " ...\" "
650682 | _ -> " " in
651- " Data:<"
683+ " Data:<"
652684 ^ v#to_hex_string
653685 ^ s
654686 ^ " >"
@@ -664,7 +696,9 @@ object (self)
664696 match offset with
665697 | XConst (IntConst n ) when n#equal numerical_zero ->
666698 addrprefix
667- ^ " \n Global variable:<"
699+ ^ " \n "
700+ ^ addrprefix
701+ ^ " Global variable:<"
668702 ^ gloc#name
669703 ^ " : "
670704 ^ (btype_to_string gloc#btype)
@@ -743,6 +777,13 @@ object (self)
743777 " " ^ (fixed_length_string ! addr#to_hex_string 10 ) ^ " align\n "
744778 else
745779 " " in
780+ let render_string (s : string ): string =
781+ let len = String. length s in
782+ if len < = 40 then
783+ s
784+ else
785+ (String. sub s 0 40 ) ^ " ... (length: " ^ (string_of_int len) ^ " )" in
786+
746787 let _ =
747788 if prefix > 0 && (String. length s) > = prefix then
748789 ch#skip_bytes prefix in
@@ -754,6 +795,7 @@ object (self)
754795 addr := ! addr#add_int 4
755796 end
756797 done ;
798+ let addrstr_end = ref wordzero in
757799 (" \n " ^ (string_repeat " ~" 80 ) ^ " \n Data block (size: "
758800 ^ (string_of_int len) ^ " bytes)\n\n "
759801 ^ pprefix
@@ -772,6 +814,12 @@ object (self)
772814 ^ (fixed_length_string v#to_hex_string 12 )
773815 ^ " > ... (cont'd)"
774816
817+ else if a#lt ! addrstr_end then
818+ addrprefix
819+ ^ " <String:<"
820+ ^ (fixed_length_string v#to_hex_string 12 )
821+ ^ " > ... (cont'd)"
822+
775823 else if Option. is_some (memorymap#containing_location a) then
776824 render_gloc a v
777825
@@ -802,6 +850,24 @@ object (self)
802850 ^ v#to_hex_string
803851 ^ name
804852 ^ " >"
853+ ^ pdatarefstr
854+
855+ (* handle thumb function addresses (+1) *)
856+ else if (Option. is_some (vm1 v))
857+ && functions_data#is_function_entry_point
858+ (Option. get (vm1 v)) then
859+ let fentry = Option. get (vm1 v) in
860+ let name =
861+ if functions_data#has_function_name fentry then
862+ let fndata = functions_data#get_function fentry in
863+ " :" ^ fndata#get_function_name
864+ else
865+ " " in
866+ addrprefix
867+ ^ " Faddr:<"
868+ ^ v#to_hex_string
869+ ^ name
870+ ^ " (T)>"
805871 ^ pdatarefstr
806872
807873 else if memorymap#has_location v then
@@ -815,9 +881,20 @@ object (self)
815881 ^ pdatarefstr
816882
817883 else if elf_header#is_code_address v then
884+ let s =
885+ match elf_header#get_string_at_address v with
886+ | Some s ->
887+ let len = String. length s in
888+ if len < 50 then
889+ " :\" " ^ s ^ " \" "
890+ else
891+ " :\" " ^ (String. sub s 0 50 ) ^ " ...\" "
892+ | _ -> " " in
893+
818894 addrprefix
819895 ^ " Code:<"
820896 ^ v#to_hex_string
897+ ^ s
821898 ^ " >"
822899 ^ (datarefstr a)
823900
@@ -848,12 +925,15 @@ object (self)
848925 (elf_header#get_string_at_address a) then
849926 let s =
850927 Option. get (elf_header#get_string_at_address a) in
928+ let slen = String. length s in
929+ let slen = if slen > 40 then 40 else slen in
930+ let _ = addrstr_end := a#add_int slen in
851931 begin
852932 (addrprefix
853933 ^ " String:<"
854934 ^ (fixed_length_string v#to_hex_string 12 )
855935 ^ " >: \" "
856- ^ s
936+ ^ (render_string s)
857937 ^ " \" " )
858938 ^ pdatarefstr
859939 end
0 commit comments