blob: c785cb8e3282b77b9b6927cf0d52459007998a69 [file] [log] [blame]
sewardjf0c12502014-01-12 12:54:00 +00001
2## HOW TO Cross-CONFIGURE
3
4export CC=aarch64-linux-gnu-gcc
5export LD=aarch64-linux-gnu-ld
6export AR=aarch64-linux-gnu-ar
7
8./autogen.sh
9./configure --prefix=`pwd`/Inst --host=aarch64-unknown-linux --enable-only64bit
10
11##############################################################
12
13UnwindStartRegs -- what should that contain?
14
15
16
17vki-arm64-linux.h: vki_sigaction_base
18
19I really don't think that __vki_sigrestore_t sa_restorer
20should be present. Adding it surely puts sa_mask at a wrong
21offset compared to (kernel) reality. But not having it causes
22compilation of m_signals.c to fail in hard to understand ways,
23so adding it temporarily.
24
25
26m_trampoline.S: what's the unexecutable-insn value? 0xFFFFFFFF
27is there at the moment, but 0x00000000 is probably what it should be.
28Also, fix indentation/tab-vs-space stuff
29
30
31./include/vki/vki-arm64-linux.h: uses __uint128_t. Should change
32it to __vki_uint128_t, but what's the defn of that?
33
34
35
36m_debuginfo/priv_storage.h: need proper defn of DiCfSI
37
38
39readdwarf.c: is this correct?
40#elif defined(VGP_arm64_linux)
41# define FP_REG 29 //???
42# define SP_REG 31 //???
43# define RA_REG_DEFAULT 30 //???
44
45
46vki-arm64-linux.h:
47re linux-3.10.5/include/uapi/asm-generic/sembuf.h
48I'd say the amd64 version has padding it shouldn't have. Check?
49
50
51
52syswrap-linux.c run_a_thread_NORETURN assembly sections
53seems like tst->os_state.exitcode has word type
54in which case the ppc64_linux use of lwz to read it, is wrong
55
56
57
58syswrap-linux.c ML_(do_fork_clone)
59assuming that VGP_arm64_linux is the same as VGP_arm_linux here
60
61
62
63dispatch-arm64-linux.S: FIXME: set up FP control state before
64entering generated code. Also fix screwy indentation.
65
66dispatcher-ery general: what's a good (predictor-friendly) way to
67branch to a register?
68
69
70
71in vki-arm64-scnums.h
72//#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
73Probably want to reenable that and clean up accordingly
74
75
76
77putIRegXXorZR: figure out a way that the computed value is actually
78used, so as to keep any memory reads that might generate it, alive.
79(else the simulation can lose exceptions). At least, for writes to
80the zero register generated by loads .. or .. can anything other
81integer instructions, that write to a register, cause exceptions?
82
83
84
85loads/stores: generate stack alignment checks as necessary
86
87
88
89fix barrier insns: ISB, DMB
90
91
92
93fix atomic loads/stores
94
95
96
97FMADD/FMSUB/FNMADD/FNMSUB: generate and use the relevant fused
98IROps so as to avoid double rounding
99
100
101
102ARM64Instr_Call getRegUsage: re-check relative to what
103getAllocableRegs_ARM64 makes available
104
105
106
107Make dispatch-arm64-linux.S save any callee-saved Q regs
108I think what is required is to save D8-D15 and nothing more than that.
109
110
111
112wrapper for __NR3264_fstat -- correct?
113
114
115
116PRE(sys_clone): get rid of references to vki_modify_ldt_t
117and the definition of it in vki-arm64-linux.h. Ditto for
11832 bit arm.
119
120
121
122sigframe-arm64-linux.c: build_sigframe: references to nonexistent
123siguc->uc_mcontext.trap_no, siguc->uc_mcontext.error_code have been
124replaced by zero. Also in synth_ucontext.
125
126
127
128m_debugger.c:
129uregs.pstate = LibVEX_GuestARM64_get_nzcv(vex); /* is this correct? */
130Is that remotely correct?
131
132
133
134host_arm64_defs.c: emit_ARM64INstr:
135ARM64in_VDfromX and ARM64in_VQfromXX: use simple top-half zeroing
136MOVs to vector registers instead of INS Vd.D[0], Xreg, to avoid false
137dependencies on the top half of the register. (Or at least check
138the semantocs of INS Vd.D[0] to see if it zeroes out the top.)
139
140
141
142preferredVectorSubTypeFromSize: review perf effects and decide
143on a types-for-subparts policy
144
145
146
147fold_IRExpr_Unop: add a reduction rule for this
1481Sto64(CmpNEZ64( Or64(GET:I64(1192),GET:I64(1184)) ))
149vis 1Sto64(CmpNEZ64(x)) --> CmpwNEZ64(x)
150
151
152
153check insn selection for memcheck-only primops:
154Left64 CmpwNEZ64 V128to64 V128HIto64 1Sto64 CmpNEZ64 CmpNEZ32
155widen_z_8_to_64 1Sto32 Left32 32HLto64 CmpwNEZ32 CmpNEZ8
156
157
158
159isel: get rid of various cases where zero is put into a register
160and just use xzr instead. Especially for CmpNEZ64/32. And for
161writing zeroes into the CC thunk fields.
162
163
164
165/* Keep this list in sync with that in iselNext below */
166/* Keep this list in sync with that for Ist_Exit above */
167uh .. they are not in sync
168
169
170
171very stupid:
172imm64 x23, 0xFFFFFFFFFFFFFFA0
17317 F4 9F D2 F7 FF BF F2 F7 FF DF F2 F7 FF FF F2
174
175
176
177valgrind.h: fix VALGRIND_ALIGN_STACK/VALGRIND_RESTORE_STACK,
178also add CFI annotations
sewardjfdaf9e42014-01-13 00:18:51 +0000179
180
181
182could possibly bring r29 into use, which be useful as it is
183callee saved