Skip to content

Commit d916a09

Browse files
authored
Add clobber and preserve register for ppc and arm callconv ##analysis
1 parent 14d04db commit d916a09

8 files changed

Lines changed: 97 additions & 0 deletions

File tree

libr/anal/d/cc-arm-16.sdb.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ cc.arm16.arg2=r2
77
cc.arm16.arg3=r3
88
cc.arm16.argn=stack
99
cc.arm16.ret0=r0
10+
cc.arm16.clobber=r0,r1,r2,r3,r12,lr
11+
cc.arm16.preserve=r4,r5,r6,r7,r8,r9,r10,r11,sp
1012

1113
arm32=cc
1214
cc.arm32.arg0=r0
@@ -15,3 +17,5 @@ cc.arm32.arg2=r2
1517
cc.arm32.arg3=r3
1618
cc.arm32.argn=stack
1719
cc.arm32.ret0=r0
20+
cc.arm32.clobber=r0,r1,r2,r3,r12,lr,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31
21+
cc.arm32.preserve=r4,r5,r6,r7,r8,r9,r10,r11,sp,d8,d9,d10,d11,d12,d13,d14,d15

libr/anal/d/cc-arm-32.sdb.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ cc.arm32.arg2=r2
77
cc.arm32.arg3=r3
88
cc.arm32.argn=stack
99
cc.arm32.ret0=r0
10+
cc.arm32.clobber=r0,r1,r2,r3,r12,lr,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31
11+
cc.arm32.preserve=r4,r5,r6,r7,r8,r9,r10,r11,sp,d8,d9,d10,d11,d12,d13,d14,d15
1012

1113
arm16=cc
1214
cc.arm16.arg0=r0
@@ -16,6 +18,8 @@ cc.arm16.arg3=r3
1618
cc.arm16.arg4=r4
1719
cc.arm16.argn=stack
1820
cc.arm16.ret0=r0
21+
cc.arm16.clobber=r0,r1,r2,r3,r12,lr
22+
cc.arm16.preserve=r5,r6,r7,r8,r9,r10,r11,sp
1923

2024
swift=cc
2125
cc.swift.arg0=r0

libr/anal/d/cc-arm-64.sdb.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ cc.arm64.arg6=x6
1111
cc.arm64.arg7=x7
1212
cc.arm64.argn=stack
1313
cc.arm64.ret0=x0
14+
cc.arm64.clobber=x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x30,v0,v1,v2,v3,v4,v5,v6,v7,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30,v31
15+
cc.arm64.preserve=x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,sp,v8,v9,v10,v11,v12,v13,v14,v15
1416

1517
swift=cc
1618
cc.swift.arg0=x0

libr/anal/d/cc-ppc-32.sdb.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ cc.ppc-32.arg6=r9
1111
cc.ppc-32.arg7=r10
1212
cc.ppc-32.argn=stack_rev
1313
cc.ppc-32.ret0=r3
14+
cc.ppc-32.clobber=r0,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,lr,ctr,xer,cr0,cr1,cr5,cr6,cr7,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13
15+
cc.ppc-32.preserve=r1,r2,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30,r31,cr2,cr3,cr4,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31
1416

libr/anal/d/cc-ppc-64.sdb.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ cc.ppc-64.arg6=r9
1111
cc.ppc-64.arg7=r10
1212
cc.ppc-64.argn=stack_rev
1313
cc.ppc-64.ret0=r3
14+
cc.ppc-64.clobber=r0,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,lr,ctr,xer,cr0,cr1,cr5,cr6,cr7,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13
15+
cc.ppc-64.preserve=r1,r2,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30,r31,cr2,cr3,cr4,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31
1416

test/db/anal/arm

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,3 +1292,29 @@ EXPECT=<<EOF
12921292
EOF
12931293
EXPECT_ERR=
12941294
RUN
1295+
1296+
NAME=arm32 cc clobber and preserve register sets
1297+
FILE=malloc://16
1298+
ARGS=-a arm -b 32 -e anal.arch=arm
1299+
CMDS=<<EOF
1300+
k anal/cc/cc.arm32.clobber
1301+
k anal/cc/cc.arm32.preserve
1302+
EOF
1303+
EXPECT=<<EOF
1304+
r0,r1,r2,r3,r12,lr,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31
1305+
r4,r5,r6,r7,r8,r9,r10,r11,sp,d8,d9,d10,d11,d12,d13,d14,d15
1306+
EOF
1307+
RUN
1308+
1309+
NAME=arm16 cc clobber and preserve register sets
1310+
FILE=malloc://16
1311+
ARGS=-a arm -b 16 -e anal.arch=arm
1312+
CMDS=<<EOF
1313+
k anal/cc/cc.arm16.clobber
1314+
k anal/cc/cc.arm16.preserve
1315+
EOF
1316+
EXPECT=<<EOF
1317+
r0,r1,r2,r3,r12,lr
1318+
r4,r5,r6,r7,r8,r9,r10,r11,sp
1319+
EOF
1320+
RUN

test/db/anal/arm64

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56258,3 +56258,16 @@ EXPECT=<<EOF
5625856258
0x1000060e0
5625956259
EOF
5626056260
RUN
56261+
56262+
NAME=arm64 cc clobber and preserve register sets
56263+
FILE=malloc://16
56264+
ARGS=-a arm -b 64 -e anal.arch=arm
56265+
CMDS=<<EOF
56266+
k anal/cc/cc.arm64.clobber
56267+
k anal/cc/cc.arm64.preserve
56268+
EOF
56269+
EXPECT=<<EOF
56270+
x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x30,v0,v1,v2,v3,v4,v5,v6,v7,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30,v31
56271+
x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,sp,v8,v9,v10,v11,v12,v13,v14,v15
56272+
EOF
56273+
RUN

test/db/anal/ppc

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,3 +1253,47 @@ ldu
12531253
0x00178008
12541254
EOF2
12551255
RUN
1256+
1257+
NAME=ppc-64 cc clobber and preserve register sets
1258+
FILE=malloc://16
1259+
ARGS=-a ppc -b 64 -e anal.arch=ppc
1260+
CMDS=<<EOF
1261+
k anal/cc/cc.ppc-64.clobber
1262+
k anal/cc/cc.ppc-64.preserve
1263+
EOF
1264+
EXPECT=<<EOF
1265+
r0,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,lr,ctr,xer,cr0,cr1,cr5,cr6,cr7,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13
1266+
r1,r2,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30,r31,cr2,cr3,cr4,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31
1267+
EOF
1268+
RUN
1269+
1270+
NAME=ppc-32 cc clobber and preserve register sets
1271+
FILE=malloc://16
1272+
ARGS=-a ppc -b 32 -e anal.arch=ppc
1273+
CMDS=<<EOF
1274+
k anal/cc/cc.ppc-32.clobber
1275+
k anal/cc/cc.ppc-32.preserve
1276+
EOF
1277+
EXPECT=<<EOF
1278+
r0,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,lr,ctr,xer,cr0,cr1,cr5,cr6,cr7,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13
1279+
r1,r2,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30,r31,cr2,cr3,cr4,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31
1280+
EOF
1281+
RUN
1282+
1283+
NAME=ppc-64 clobber kills r3 arg after call
1284+
FILE=malloc://32
1285+
ARGS=-a ppc -b 64 -e anal.arch=ppc -e cfg.bigendian=true -e anal.cc=ppc-64
1286+
CMDS=<<EOF
1287+
wx 7c641b784800000d7c641b784e8000204e800020
1288+
af @ 0
1289+
afc ppc-64 @ 0
1290+
af @ 0x10
1291+
afc ppc-64 @ 0x10
1292+
afva @ 0
1293+
afvR @ 0
1294+
EOF
1295+
EXPECT=<<EOF
1296+
arg1 0x0
1297+
arg2 0x0
1298+
EOF
1299+
RUN

0 commit comments

Comments
 (0)