Initial commit
This commit is contained in:
		
							
								
								
									
										111
									
								
								package/utils/lua/patches/030-archindependent-bytecode.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								package/utils/lua/patches/030-archindependent-bytecode.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| --- a/src/ldump.c | ||||
| +++ b/src/ldump.c | ||||
| @@ -67,12 +67,12 @@ static void DumpString(const TString* s, | ||||
|  { | ||||
|   if (s==NULL || getstr(s)==NULL) | ||||
|   { | ||||
| -  size_t size=0; | ||||
| +  unsigned int size=0; | ||||
|    DumpVar(size,D); | ||||
|   } | ||||
|   else | ||||
|   { | ||||
| -  size_t size=s->tsv.len+1;		/* include trailing '\0' */ | ||||
| +  unsigned int size=s->tsv.len+1;		/* include trailing '\0' */ | ||||
|    DumpVar(size,D); | ||||
|    DumpBlock(getstr(s),size,D); | ||||
|   } | ||||
| --- a/src/lundump.c | ||||
| +++ b/src/lundump.c | ||||
| @@ -25,6 +25,7 @@ typedef struct { | ||||
|   ZIO* Z; | ||||
|   Mbuffer* b; | ||||
|   const char* name; | ||||
| + int swap; | ||||
|  } LoadState; | ||||
|   | ||||
|  #ifdef LUAC_TRUST_BINARIES | ||||
| @@ -40,7 +41,6 @@ static void error(LoadState* S, const ch | ||||
|  } | ||||
|  #endif | ||||
|   | ||||
| -#define LoadMem(S,b,n,size)	LoadBlock(S,b,(n)*(size)) | ||||
|  #define	LoadByte(S)		(lu_byte)LoadChar(S) | ||||
|  #define LoadVar(S,x)		LoadMem(S,&x,1,sizeof(x)) | ||||
|  #define LoadVector(S,b,n,size)	LoadMem(S,b,n,size) | ||||
| @@ -51,6 +51,49 @@ static void LoadBlock(LoadState* S, void | ||||
|   IF (r!=0, "unexpected end"); | ||||
|  } | ||||
|   | ||||
| +static void LoadMem (LoadState* S, void* b, int n, size_t size) | ||||
| +{ | ||||
| + LoadBlock(S,b,n*size); | ||||
| + if (S->swap) | ||||
| + { | ||||
| +  char* p=(char*) b; | ||||
| +  char c; | ||||
| +  switch (size) | ||||
| +  { | ||||
| +   case 1: | ||||
| +  	break; | ||||
| +   case 2: | ||||
| +	while (n--) | ||||
| +	{ | ||||
| +	 c=p[0]; p[0]=p[1]; p[1]=c; | ||||
| +	 p+=2; | ||||
| +	} | ||||
| +  	break; | ||||
| +   case 4: | ||||
| +	while (n--) | ||||
| +	{ | ||||
| +	 c=p[0]; p[0]=p[3]; p[3]=c; | ||||
| +	 c=p[1]; p[1]=p[2]; p[2]=c; | ||||
| +	 p+=4; | ||||
| +	} | ||||
| +  	break; | ||||
| +   case 8: | ||||
| +	while (n--) | ||||
| +	{ | ||||
| +	 c=p[0]; p[0]=p[7]; p[7]=c; | ||||
| +	 c=p[1]; p[1]=p[6]; p[6]=c; | ||||
| +	 c=p[2]; p[2]=p[5]; p[5]=c; | ||||
| +	 c=p[3]; p[3]=p[4]; p[4]=c; | ||||
| +	 p+=8; | ||||
| +	} | ||||
| +  	break; | ||||
| +   default: | ||||
| +   	IF(1, "bad size"); | ||||
| +  	break; | ||||
| +  } | ||||
| + } | ||||
| +} | ||||
| + | ||||
|  static int LoadChar(LoadState* S) | ||||
|  { | ||||
|   char x; | ||||
| @@ -82,7 +125,7 @@ static lua_Integer LoadInteger(LoadState | ||||
|   | ||||
|  static TString* LoadString(LoadState* S) | ||||
|  { | ||||
| - size_t size; | ||||
| + unsigned int size; | ||||
|   LoadVar(S,size); | ||||
|   if (size==0) | ||||
|    return NULL; | ||||
| @@ -196,6 +239,7 @@ static void LoadHeader(LoadState* S) | ||||
|   char s[LUAC_HEADERSIZE]; | ||||
|   luaU_header(h); | ||||
|   LoadBlock(S,s,LUAC_HEADERSIZE); | ||||
| + S->swap=(s[6]!=h[6]); s[6]=h[6]; | ||||
|   IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header"); | ||||
|  } | ||||
|   | ||||
| @@ -230,7 +274,7 @@ void luaU_header (char* h) | ||||
|   *h++=(char)LUAC_FORMAT; | ||||
|   *h++=(char)*(char*)&x;				/* endianness */ | ||||
|   *h++=(char)sizeof(int); | ||||
| - *h++=(char)sizeof(size_t); | ||||
| + *h++=(char)sizeof(unsigned int); | ||||
|   *h++=(char)sizeof(Instruction); | ||||
|   *h++=(char)sizeof(lua_Number); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 domenico
					domenico