From: Camm Maguire Date: Wed, 18 Dec 2019 20:14:09 +0000 (+0000) Subject: Version_2_6_13pre72 X-Git-Tag: archive/raspbian/2.6.12-91+rpi1^2~16 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a213f26ebd9f2158e991c8db01bed090967769ee;p=gcl.git Version_2_6_13pre72 Gbp-Pq: Name Version_2_6_13pre72 --- diff --git a/h/elf64_ppcle_reloc_special.h b/h/elf64_ppcle_reloc_special.h index 93aad64b..889d5d69 100644 --- a/h/elf64_ppcle_reloc_special.h +++ b/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, @@ -15,41 +15,29 @@ find_special_params(void *v,Shdr *sec1,Shdr *sece,const char *sn, Shdr *sec; Rela *r; void *ve; + ul *u,j; massert((sec=get_section(".rela.dyn",sec1,sece,sn))); v+=sec->sh_offset; ve=v+sec->sh_size; - for (r=v;vsh_entsize,r=v) + for (j=0,r=v;vsh_entsize,r=v) if (ELF_R_TYPE(r->r_info) && !ds1[ELF_R_SYM(r->r_info)].st_value) - ds1[ELF_R_SYM(r->r_info)].st_value=*(ul *)r->r_offset; + j++; - 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; */ + massert(u=malloc(j*sizeof(tramp))); - /* for (j=0,r=v;vsh_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;vsh_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)); */ - /* } */ + v=ve-sec->sh_size; + for (r=v;vsh_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; */ + return 0; }