gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gcl-devel] Unhandled R_ARM_MOVW_ABS_NC reloc


From: Camm Maguire
Subject: Re: [Gcl-devel] Unhandled R_ARM_MOVW_ABS_NC reloc
Date: Thu, 10 Jan 2013 14:24:10 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

Thanks!  While I'm not terribly optimistic, this might work for
h/elf32_arm_reloc.h:

#define R_ARM_THM_CALL        10
#define R_ARM_CALL 28
#define R_ARM_V4BX 40
#define R_ARM_THM_MOVW_ABS_NC 47
#define R_ARM_THM_MOVW_ABS    48
#define R_ARM_MOVW_ABS_NC 43
#define R_ARM_MOVT_ABS    44
    case R_ARM_THM_CALL: 
      s+=a; 
      if (ELF_ST_TYPE(sym->st_info)==STT_FUNC) s|=1; 
      s-=p+4; /*FIXME maybe drop 4 and add_val below*/
      s=((long)s>>1); 
      massert(!(abs(s)&0xffc00000));  
      store_val(where,MASK(11),s>>11); 
      store_val(where,MASK(11)<<16,(s&0x7ff)<<16); 
      break; 
    case R_ARM_THM_MOVW_ABS_NC:
      s+=a;
      if (ELF_ST_TYPE(sym->st_info)==STT_FUNC) s|=1;
      s&=0xffff;
      s=((s>>12)&0xf)|(((s>>11)&0x1)<<10)|((s&0xff)<<16)|(((s>>8)&0x7)<<28);
      add_vals(where,~0L,s);
      break;
    case R_ARM_THM_MOVW_ABS:
      s+=a;
      s>>=16;
      s=((s>>12)&0xf)|(((s>>11)&0x1)<<10)|((s&0xff)<<16)|(((s>>8)&0x7)<<28);
      add_vals(where,~0L,s);
      break;
    case R_ARM_MOVW_ABS_NC:
      s+=a;
      s&=0xffff;
      add_vals(where,~0L,s);
      break;
    case R_ARM_MOVT_ABS:
      s+=a;
      s>>=16;
      add_vals(where,~0L,s);
      break;
    case R_ARM_CALL:
      add_vals(where,MASK(24),((long)(s+a-p))>>2);
      break;
    case R_ARM_ABS32:
      add_val(where,~0L,s+a);
      break;
    case R_ARM_V4BX:
      add_val(where,~0L,s+a);
      break;

Please let me know.  Thanks again!
-- 
Camm Maguire                                        address@hidden
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah



reply via email to

[Prev in Thread] Current Thread [Next in Thread]