case V_MAGIC: /* mips 3000 */
case M_MAGIC: /* mips 4000 */
case E_MAGIC: /* arm 7-something */
+ case R_MAGIC: /* arm64 */
case Q_MAGIC: /* powerpc */
case N_MAGIC: /* mips 4000 LE */
case L_MAGIC: /* dec alpha */
{
char buf[256];
int i, n;
- uvlong r;
+ uvlong r, m;
if(interactive){
print("// data at %#8.8llux? ", a);
r = strtoull(buf, 0, 16);
}else{
r = 0;
+ switch(fhdr.magic){
+ case S_MAGIC:
+ case R_MAGIC:
+ m = 0xffffffff00000000ULL;
+ break;
+ default:
+ m = 0;
+ }
for(i=0; i<naddr; i++)
- if(addr[i] == a)
+ if((addr[i]|m) == a)
r = val[i];
}
+ switch(fhdr.magic){
+ case S_MAGIC:
+ case R_MAGIC:
+ r = (long)r; // sign extend
+ break;
+ }
+
return r;
}