@@ -36,6 +36,12 @@ def __check_state(i,fmap):
36
36
else :
37
37
logger .verbose ('impossible to check isetstate (ARM/Thumb) until pc is cst' )
38
38
39
+ def __mem (a ,sz ):
40
+ endian = 1
41
+ if internals ['endianstate' ]== 1 :
42
+ endian = - 1
43
+ return mem (a ,sz ,endian = endian )
44
+
39
45
def __pre (i ,fmap ):
40
46
fmap [pc ] = fmap (pc + i .length )
41
47
cond = fmap (CONDITION [i .cond ][1 ])
@@ -562,7 +568,7 @@ def i_LDR(i,fmap):
562
568
cond ,dest ,src ,sht = __pre (i ,fmap )
563
569
off_addr = (src + sht ) if i .add else (src - sht )
564
570
adr = off_addr if i .index else src
565
- result = fmap (mem (adr ,32 ))
571
+ result = fmap (__mem (adr ,32 ))
566
572
if i .wback :
567
573
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
568
574
fmap [dest ] = tst (cond ,result ,fmap (dest ))
@@ -571,7 +577,7 @@ def i_LDREX(i,fmap):
571
577
cond ,dest ,src ,imm = __pre (i ,fmap )
572
578
off_addr = (src + imm )
573
579
adr = off_addr
574
- result = fmap (mem (adr ,32 ))
580
+ result = fmap (__mem (adr ,32 ))
575
581
fmap [dest ] = tst (cond ,result ,fmap (dest ))
576
582
# exclusive monitor not supported
577
583
@@ -596,7 +602,7 @@ def i_LDRH(i,fmap):
596
602
cond ,dest ,src ,sht = __pre (i ,fmap )
597
603
off_addr = (src + sht ) if i .add else (src - sht )
598
604
adr = off_addr if i .index else src
599
- result = fmap (mem (adr ,16 )).zeroextend (32 )
605
+ result = fmap (__mem (adr ,16 )).zeroextend (32 )
600
606
fmap [dest ] = tst (cond ,result ,fmap (dest ))
601
607
if i .wback :
602
608
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
@@ -605,7 +611,7 @@ def i_LDREXH(i,fmap):
605
611
cond ,dest ,src ,imm = __pre (i ,fmap )
606
612
off_addr = (src + imm )
607
613
adr = off_addr
608
- result = fmap (mem (adr ,16 )).zeroextend (32 )
614
+ result = fmap (__mem (adr ,16 )).zeroextend (32 )
609
615
fmap [dest ] = tst (cond ,result ,fmap (dest ))
610
616
# exclusive monitor not supported
611
617
@@ -622,7 +628,7 @@ def i_LDRSH(i,fmap):
622
628
cond ,dest ,src ,sht = __pre (i ,fmap )
623
629
off_addr = (src + sht ) if i .add else (src - sht )
624
630
adr = off_addr if i .index else src
625
- result = fmap (mem (adr ,16 )).signextend (32 )
631
+ result = fmap (__mem (adr ,16 )).signextend (32 )
626
632
fmap [dest ] = tst (cond ,result ,fmap (dest ))
627
633
if i .wback :
628
634
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
@@ -634,8 +640,8 @@ def i_LDRD(i,fmap):
634
640
if src is pc : src = src + i .length
635
641
off_addr = (src + sht ) if i .add else (src - sht )
636
642
adr = off_addr if i .index else src
637
- res1 = fmap (mem (adr ,32 ))
638
- res2 = fmap (mem (adr + 4 ,32 ))
643
+ res1 = fmap (__mem (adr ,32 ))
644
+ res2 = fmap (__mem (adr + 4 ,32 ))
639
645
fmap [dst1 ] = tst (cond ,res1 ,fmap (dst1 ))
640
646
fmap [dst2 ] = tst (cond ,res2 ,fmap (dst2 ))
641
647
if i .wback :
@@ -645,7 +651,7 @@ def i_LDRT(i,fmap):
645
651
cond ,dest ,src ,sht = __pre (i ,fmap )
646
652
off_addr = (src + sht ) if i .add else (src - sht )
647
653
adr = off_addr if i .postindex else src
648
- result = fmap (mem (adr ,32 ))
654
+ result = fmap (__mem (adr ,32 ))
649
655
if i .postindex :
650
656
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
651
657
fmap [dest ] = tst (cond ,result ,fmap (dest ))
@@ -663,7 +669,7 @@ def i_LDRHT(i,fmap):
663
669
cond ,dest ,src ,sht = __pre (i ,fmap )
664
670
off_addr = (src + sht ) if i .add else (src - sht )
665
671
adr = off_addr if i .postindex else src
666
- result = fmap (mem (adr ,16 )).zeroextend (32 )
672
+ result = fmap (__mem (adr ,16 )).zeroextend (32 )
667
673
if i .postindex :
668
674
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
669
675
fmap [dest ] = tst (cond ,result ,fmap (dest ))
@@ -681,7 +687,7 @@ def i_LDRSHT(i,fmap):
681
687
cond ,dest ,src ,sht = __pre (i ,fmap )
682
688
off_addr = (src + sht ) if i .add else (src - sht )
683
689
adr = off_addr if i .postindex else src
684
- result = fmap (mem (adr ,16 )).signextend (32 )
690
+ result = fmap (__mem (adr ,16 )).signextend (32 )
685
691
if i .postindex :
686
692
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
687
693
fmap [dest ] = tst (cond ,result ,fmap (dest ))
@@ -693,14 +699,14 @@ def i_STR(i,fmap):
693
699
result = fmap (dest )
694
700
if i .wback :
695
701
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
696
- fmap [mem (adr ,32 )] = tst (cond ,result ,fmap (mem (adr ,32 )))
702
+ fmap [__mem (adr ,32 )] = tst (cond ,result ,fmap (__mem (adr ,32 )))
697
703
698
704
def i_STREX (i ,fmap ):
699
705
cond ,dest ,src ,imm = __pre (i ,fmap )
700
706
off_addr = (src + imm )
701
707
adr = off_addr
702
708
result = fmap (dest )
703
- fmap [mem (adr ,32 )] = tst (cond ,result ,fmap (mem (adr ,32 )))
709
+ fmap [__mem (adr ,32 )] = tst (cond ,result ,fmap (__mem (adr ,32 )))
704
710
# exclusive monitor not supported
705
711
706
712
def i_STRB (i ,fmap ):
@@ -725,7 +731,7 @@ def i_STRH(i,fmap):
725
731
off_addr = (src + sht ) if i .add else (src - sht )
726
732
adr = off_addr if i .index else src
727
733
result = fmap (dest [0 :16 ])
728
- fmap [mem (adr ,16 )] = tst (cond ,result ,fmap (mem (adr ,16 )))
734
+ fmap [__mem (adr ,16 )] = tst (cond ,result ,fmap (__mem (adr ,16 )))
729
735
if i .wback :
730
736
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
731
737
@@ -734,7 +740,7 @@ def i_STREXH(i,fmap):
734
740
off_addr = (src + imm )
735
741
adr = off_addr
736
742
result = fmap (dest [0 :16 ])
737
- fmap [mem (adr ,16 )] = tst (cond ,result ,fmap (mem (adr ,16 )))
743
+ fmap [__mem (adr ,16 )] = tst (cond ,result ,fmap (__mem (adr ,16 )))
738
744
# exclusive monitor not supported
739
745
740
746
def i_STRD (i ,fmap ):
@@ -744,8 +750,8 @@ def i_STRD(i,fmap):
744
750
if src is pc : src = src + i .length
745
751
off_addr = (src + sht ) if i .add else (src - sht )
746
752
adr = off_addr if i .index else src
747
- adr1 = mem (adr ,32 )
748
- adr2 = mem (adr + 4 ,32 )
753
+ adr1 = __mem (adr ,32 )
754
+ adr2 = __mem (adr + 4 ,32 )
749
755
res1 = fmap (dst1 )
750
756
res2 = fmap (dst2 )
751
757
fmap [adr1 ] = tst (cond ,res1 ,fmap (adr1 ))
@@ -757,7 +763,7 @@ def i_STRT(i,fmap):
757
763
cond ,dest ,src ,sht = __pre (i ,fmap )
758
764
off_addr = (src + sht ) if i .add else (src - sht )
759
765
adr = off_addr if i .postindex else src
760
- adr1 = mem (adr ,32 )
766
+ adr1 = __mem (adr ,32 )
761
767
result = fmap (dest )
762
768
if i .postindex :
763
769
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
@@ -777,7 +783,7 @@ def i_STRHT(i,fmap):
777
783
cond ,dest ,src ,sht = __pre (i ,fmap )
778
784
off_addr = (src + sht ) if i .add else (src - sht )
779
785
adr = off_addr if i .postindex else src
780
- adr1 = mem (adr ,16 )
786
+ adr1 = __mem (adr ,16 )
781
787
result = fmap (dest [0 :16 ])
782
788
if i .postindex :
783
789
fmap [src ] = tst (cond ,fmap (off_addr ),fmap (src ))
@@ -795,7 +801,7 @@ def i_POP(i,fmap):
795
801
regs = i .operands [0 ]
796
802
adr = sp
797
803
for _r in regs :
798
- fmap [_r ] = fmap (tst (cond ,mem (adr ,32 ),_r ))
804
+ fmap [_r ] = fmap (tst (cond ,__mem (adr ,32 ),_r ))
799
805
adr = adr + 4
800
806
fmap [sp ] = fmap (tst (cond ,sp + (4 * len (regs )),sp ))
801
807
@@ -806,7 +812,7 @@ def i_PUSH(i,fmap):
806
812
adr = sp - (4 * len (regs ))
807
813
for _r in regs :
808
814
if _r is pc : _r = _r + i .length
809
- fmap [mem (adr ,32 )] = fmap (tst (cond ,_r ,mem (adr ,32 )))
815
+ fmap [__mem (adr ,32 )] = fmap (tst (cond ,_r ,__mem (adr ,32 )))
810
816
adr = adr + 4
811
817
fmap [sp ] = fmap (tst (cond ,sp - (4 * len (regs )),sp ))
812
818
@@ -866,8 +872,7 @@ def i_PLI(i,fmap):
866
872
# change endianess
867
873
def i_SETEND (i ,fmap ):
868
874
fmap [pc ] = fmap (pc + i .length )
869
- internals ['endianstate' ] = 1 if i .set_bigend else 0
870
- exp .setendian (- 1 if i .set_bigend else + 1 )
875
+ internals ['endianstate' ] = - 1 if i .set_bigend else 1
871
876
872
877
# event hint
873
878
def i_SEV (i ,fmap ):
@@ -881,8 +886,8 @@ def i_SVC(i,fmap):
881
886
def i_SWP (i ,fmap ):
882
887
fmap [pc ] = fmap (pc + i .length )
883
888
Rt ,Rt2 ,Rn = i .operands
884
- data = fmap (mem (Rn ,32 ))
885
- fmap [mem (Rn ,32 )] = fmap (Rt2 )
889
+ data = fmap (__mem (Rn ,32 ))
890
+ fmap [__mem (Rn ,32 )] = fmap (Rt2 )
886
891
fmap [Rt ] = data
887
892
888
893
def i_SWPB (i ,fmap ):
0 commit comments