author | Camm Maguire <camm@debian.org> | 2014年09月28日 16:58:03 -0400 |
---|---|---|
committer | Camm Maguire <camm@debian.org> | 2014年09月28日 16:58:03 -0400 |
commit | fd44ebd45d51a2ec819aaacf0930278bd8254bad (patch) | |
tree | 8bc66da2ac1cad2a46ac04435c14bcda93630d7c | |
parent | 7fdc74e59fe9f5b28bd78442779e35b838741095 (diff) | |
download | gcl-fd44ebd45d51a2ec819aaacf0930278bd8254bad.tar.gz |
-rw-r--r-- | gcl/h/elf64_ppcle_reloc_special.h | 54 |
diff --git a/gcl/h/elf64_ppcle_reloc_special.h b/gcl/h/elf64_ppcle_reloc_special.h index 7b08122c7..e60fcdd67 100644 --- a/gcl/h/elf64_ppcle_reloc_special.h +++ b/gcl/h/elf64_ppcle_reloc_special.h @@ -1,12 +1,12 @@ static Sym *toc; -static int tramp[]={0,0, - (((0x3a<<10)|(0x9<<5)|0xc)<<16)|0xfff8,/*ld r9,-8(r12)*/ - ((0x3a<<10)|(0x9<<5)|0x9)<<16, /*ld r9,0(r9)*/ - 0x7d2c4b78, /*mr r12,r9 */ - 0x7d8903a6, /*mtctr r12*/ - 0x4e800420 /*bctrl*/ -}; +/* static int tramp[]={0,0, */ +/* (((0x3a<<10)|(0x9<<5)|0xc)<<16)|0xfff8,/\*ld r9,-8(r12)*\/ */ +/* ((0x3a<<10)|(0x9<<5)|0x9)<<16, /\*ld r9,0(r9)*\/ */ +/* 0x7d2c4b78, /\*mr r12,r9 *\/ */ +/* 0x7d8903a6, /\*mtctr r12*\/ */ +/* 0x4e800420 /\*bctrl*\/ */ +/* }; */ static int find_special_params(void *v,Shdr *sec1,Shdr *sece,const char *sn, @@ -18,28 +18,40 @@ find_special_params(void *v,Shdr *sec1,Shdr *sece,const char *sn, ul j,*u; - massert((sec=get_section(".rel.dyn",sec1,sece,sn))|| - (sec=get_section(".rela.dyn",sec1,sece,sn))); + massert((sec=get_section(".rela.plt",sec1,sece,sn))); v+=sec->sh_offset; ve=v+sec->sh_size; - for (j=0,r=v;v<ve;v+=sec->sh_entsize,r=v) + for (r=v;v<ve;v+=sec->sh_entsize,r=v) if (ELF_R_TYPE(r->r_info) && !ds1[ELF_R_SYM(r->r_info)].st_value) - j++; + ds1[ELF_R_SYM(r->r_info)].st_value=*(ul *)r->r_offset; - massert(u=malloc(j*sizeof(tramp))); + return 0; - v=ve-sec->sh_size; - for (r=v;v<ve;v+=sec->sh_entsize,r=v) - if (ELF_R_TYPE(r->r_info) && !ds1[ELF_R_SYM(r->r_info)].st_value) { - memcpy(u,tramp,sizeof(tramp)); - *u++=r->r_offset; - ds1[ELF_R_SYM(r->r_info)].st_value=(ul)u; - u=((void *)(u-1)+sizeof(tramp)); - } - return 0; + /* massert((sec=get_section(".rel.dyn",sec1,sece,sn))|| */ + /* (sec=get_section(".rela.dyn",sec1,sece,sn))); */ + + /* v+=sec->sh_offset; */ + /* ve=v+sec->sh_size; */ + + /* for (j=0,r=v;v<ve;v+=sec->sh_entsize,r=v) */ + /* if (ELF_R_TYPE(r->r_info) && !ds1[ELF_R_SYM(r->r_info)].st_value) */ + /* j++; */ + + /* massert(u=malloc(j*sizeof(tramp))); */ + + /* v=ve-sec->sh_size; */ + /* for (r=v;v<ve;v+=sec->sh_entsize,r=v) */ + /* if (ELF_R_TYPE(r->r_info) && !ds1[ELF_R_SYM(r->r_info)].st_value) { */ + /* memcpy(u,tramp,sizeof(tramp)); */ + /* *u++=r->r_offset; */ + /* ds1[ELF_R_SYM(r->r_info)].st_value=(ul)u; */ + /* u=((void *)(u-1)+sizeof(tramp)); */ + /* } */ + + /* return 0; */ } |