Author: arty Date: Sun Jan 14 06:02:43 2007 New Revision: 25446
URL: http://svn.reactos.org/svn/reactos?rev=25446&view=rev Log: Some additions for relocatable ppc dlls.
Modified: branches/powerpc/reactos/tools/ppc-build/alink/alink.h branches/powerpc/reactos/tools/ppc-build/alink/elf.cpp branches/powerpc/reactos/tools/ppc-build/alink/output.cpp
Modified: branches/powerpc/reactos/tools/ppc-build/alink/alink.h URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/tools/ppc-build/... ============================================================================== --- branches/powerpc/reactos/tools/ppc-build/alink/alink.h (original) +++ branches/powerpc/reactos/tools/ppc-build/alink/alink.h Sun Jan 14 06:02:43 2007 @@ -375,6 +375,7 @@ #define R_PPC_ADDR16_HI 5 #define R_PPC_ADDR16_HA 6 #define R_PPC_REL24 10 +#define R_PPC_PLTREL24 18 #define R_PPC_UADDR32 24 #define R_PPC_REL32 26 #define R_PPC_SECTOFF 33 @@ -397,6 +398,11 @@ #define IMAGE_REL_PPC_SECRELLO 0x13 #define IMAGE_REL_PPC_SECRELHI 0x14 #define IMAGE_REL_PPC_GPREL 0x15 +#define IMAGE_REL_BASED_ABSOLUTE 0 +#define IMAGE_REL_BASED_HIGH 1 +#define IMAGE_REL_BASED_LOW 2 +#define IMAGE_REL_BASED_HIGHLOW 3 +#define IMAGE_REL_BASED_HIGHADJ 4
#define OUTPUT_COM 1 #define OUTPUT_EXE 2
Modified: branches/powerpc/reactos/tools/ppc-build/alink/elf.cpp URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/tools/ppc-build/... ============================================================================== --- branches/powerpc/reactos/tools/ppc-build/alink/elf.cpp (original) +++ branches/powerpc/reactos/tools/ppc-build/alink/elf.cpp Sun Jan 14 06:02:43 2007 @@ -306,12 +306,22 @@ elf32sym.st_name);
#if 0 + const char *segname = + elf32sym.st_shndx & 0x8000 ? + "*SPC*" : + (char *) + (&stringList[0] + + stringListOffsets[elf32hdr.e_shtrndx] + + elf32shdr[elf32sym.st_shndx].sh_name); + fprintf(stderr, "S[%05x] value %08x size %08x info %08x " - "other %08x shndx %08x %s\n", + "other %08x shndx %08x (%-10s) %s\n", j, elf32sym.st_value, elf32sym.st_size, elf32sym.st_info, - elf32sym.st_other, elf32sym.st_shndx, sym[j].name.c_str()); + elf32sym.st_other, elf32sym.st_shndx, + segname, + sym[j].name.c_str()); #endif if(!case_sensitive) @@ -608,6 +618,7 @@ reloc->rtype = FIX_PPC_ADDR24; break;
+ case R_PPC_PLTREL24: case R_PPC_REL24: reloc->rtype = FIX_PPC_REL24; break;
Modified: branches/powerpc/reactos/tools/ppc-build/alink/output.cpp URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/tools/ppc-build/... ============================================================================== --- branches/powerpc/reactos/tools/ppc-build/alink/output.cpp (original) +++ branches/powerpc/reactos/tools/ppc-build/alink/output.cpp Sun Jan 14 06:02:43 2007 @@ -1216,6 +1216,9 @@ case FIX_SELF_OFS16_2: case FIX_SELF_LBYTE: case FIX_RVA32: + case FIX_REL32: + case FIX_PPC_REL24: + case FIX_PPC_SECTOFF: continue; /* self-relative fixups and RVA fixups don't relocate */ default: break; @@ -1260,8 +1263,20 @@ break; case FIX_PTR1632: case FIX_OFS32: - case FIX_OFS32_2: + case FIX_OFS32_2: j|= PE_REL_OFS32; + + case FIX_ADDR32: + j = (IMAGE_REL_BASED_HIGHLOW << 12) | (j & 0xfff); + break; + + case FIX_PPC_RVA16LO: + j = (IMAGE_REL_BASED_LOW << 12) | (j & 0xfff); + break; + + case FIX_PPC_RVA16HA: + j = (IMAGE_REL_BASED_HIGHADJ << 12) | (j & 0xfff); + break; } /* store relocation */ put16(relocSect->data, relocSect->length, j); @@ -2382,6 +2397,7 @@
for(i=0;i<outlist.size();i++) { + fprintf(stderr, "Segment %08x: %s\n", outlist[i]->getbase(), outlist[i]->name.c_str()); if(outlist[i] && ((outlist[i]->attr&SEG_ALIGN) !=SEG_ABS)) { /* ensure section is aligned to file-Align */