Description: TODO: Put a short summary on the line above and replace this paragraph with a longer explanation of this change. Complete the meta-information with other relevant fields (see below for details). To make it easier, the information below has been extracted from the changelog. Adjust it or drop it. . gcl (2.6.12-72) unstable; urgency=medium . * Version_2_6_13pre61 Author: Camm Maguire --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: , Bug: Bug-Debian: https://bugs.debian.org/ Bug-Ubuntu: https://launchpad.net/bugs/ Forwarded: Reviewed-By: Last-Update: 2018-03-14 --- gcl-2.6.12.orig/h/elf64_alpha_reloc.h +++ gcl-2.6.12/h/elf64_alpha_reloc.h @@ -22,12 +22,12 @@ store_val(where,MASK(32),s+a); break; case R_ALPHA_LITERAL: - gote=got+(a>>32)-1; - a&=MASK(32); + massert(a || sym->st_size); + gote=got+(a ? (a>>32) : sym->st_size)-1; if (s>=ggot1 && sst_size=0; for (*gs=0,sec=sec1;secsh_type==SHT_RELA) - for (v=v1+sec->sh_offset,ve=v+sec->sh_size,r=v;vsh_entsize,r=v) - if (ELF_R_TYPE(r->r_info)==R_ALPHA_LITERAL) { - - for (rr=vv=v-sec->sh_entsize; - vv>=v1 && - (ELF_R_TYPE(rr->r_info)!=ELF_R_TYPE(r->r_info) || - ELF_R_SYM(rr->r_info)!=ELF_R_SYM(r->r_info) || - rr->r_addend!=r->r_addend); - vv-=sec->sh_entsize,rr=vv); - - b=sizeof(r->r_addend)*4; - if (vv>=v1) - q=rr->r_addend>>b; - else { - q=++*gs; - massert(!make_got_room_for_stub(sec1,sece,sym1+ELF_R_SYM(r->r_info),st1,gs)); + for (v=v1+sec->sh_offset,ve=v+sec->sh_size,r=v;vsh_entsize,r=v) + + if (ELF_R_TYPE(r->r_info)==R_ALPHA_LITERAL) { + + if (sec->sh_type!=SHT_RELA || !r->r_addend) { + + sym=sym1+ELF_R_SYM(r->r_info); + + if (!sym->st_size) { + sym->st_size=++*gs; + massert(!make_got_room_for_stub(sec1,sece,sym,st1,gs)); } - massert(*gs==q || !r->r_addend); - massert(!(r->r_addend>>b)); - r->r_addend|=(q<sh_entsize; + vv>=v1 && (ELF_R_TYPE(rr->r_info)!=ELF_R_TYPE(r->r_info) || + ELF_R_SYM(rr->r_info)!=ELF_R_SYM(r->r_info) || + rr->r_addend!=r->r_addend); + vv-=sec->sh_entsize,rr=vv); + + q=vvr_addend>>32; + massert(!(r->r_addend>>32)); + r->r_addend|=(q<<32); } - + + } + return 0; }