030-archindependent-bytecode.patch 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. diff -ur lua-5.1.3-pt2/src/ldump.c lua-5.1.3-pt3/src/ldump.c
  2. --- lua-5.1.3-pt2/src/ldump.c 2008-04-05 14:25:13.000000000 +0200
  3. +++ lua-5.1.3-pt3/src/ldump.c 2008-04-05 14:28:27.000000000 +0200
  4. @@ -67,12 +67,12 @@
  5. {
  6. if (s==NULL || getstr(s)==NULL)
  7. {
  8. - size_t size=0;
  9. + unsigned int size=0;
  10. DumpVar(size,D);
  11. }
  12. else
  13. {
  14. - size_t size=s->tsv.len+1; /* include trailing '\0' */
  15. + unsigned int size=s->tsv.len+1; /* include trailing '\0' */
  16. DumpVar(size,D);
  17. DumpBlock(getstr(s),size,D);
  18. }
  19. diff -ur lua-5.1.3-pt2/src/lundump.c lua-5.1.3-pt3/src/lundump.c
  20. --- lua-5.1.3-pt2/src/lundump.c 2008-04-05 14:25:13.000000000 +0200
  21. +++ lua-5.1.3-pt3/src/lundump.c 2008-04-05 14:28:27.000000000 +0200
  22. @@ -25,6 +25,7 @@
  23. ZIO* Z;
  24. Mbuffer* b;
  25. const char* name;
  26. + int swap;
  27. } LoadState;
  28. #ifdef LUAC_TRUST_BINARIES
  29. @@ -40,7 +41,6 @@
  30. }
  31. #endif
  32. -#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size))
  33. #define LoadByte(S) (lu_byte)LoadChar(S)
  34. #define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x))
  35. #define LoadVector(S,b,n,size) LoadMem(S,b,n,size)
  36. @@ -52,6 +52,49 @@
  37. IF (r!=0, "unexpected end");
  38. }
  39. +static void LoadMem (LoadState* S, void* b, int n, size_t size)
  40. +{
  41. + LoadBlock(S,b,n*size);
  42. + if (S->swap)
  43. + {
  44. + char* p=(char*) b;
  45. + char c;
  46. + switch (size)
  47. + {
  48. + case 1:
  49. + break;
  50. + case 2:
  51. + while (n--)
  52. + {
  53. + c=p[0]; p[0]=p[1]; p[1]=c;
  54. + p+=2;
  55. + }
  56. + break;
  57. + case 4:
  58. + while (n--)
  59. + {
  60. + c=p[0]; p[0]=p[3]; p[3]=c;
  61. + c=p[1]; p[1]=p[2]; p[2]=c;
  62. + p+=4;
  63. + }
  64. + break;
  65. + case 8:
  66. + while (n--)
  67. + {
  68. + c=p[0]; p[0]=p[7]; p[7]=c;
  69. + c=p[1]; p[1]=p[6]; p[6]=c;
  70. + c=p[2]; p[2]=p[5]; p[5]=c;
  71. + c=p[3]; p[3]=p[4]; p[4]=c;
  72. + p+=8;
  73. + }
  74. + break;
  75. + default:
  76. + IF(1, "bad size");
  77. + break;
  78. + }
  79. + }
  80. +}
  81. +
  82. static int LoadChar(LoadState* S)
  83. {
  84. char x;
  85. @@ -83,7 +126,7 @@
  86. static TString* LoadString(LoadState* S)
  87. {
  88. - size_t size;
  89. + unsigned int size;
  90. LoadVar(S,size);
  91. if (size==0)
  92. return NULL;
  93. @@ -194,6 +237,7 @@
  94. char s[LUAC_HEADERSIZE];
  95. luaU_header(h);
  96. LoadBlock(S,s,LUAC_HEADERSIZE);
  97. + S->swap=(s[6]!=h[6]); s[6]=h[6];
  98. IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header");
  99. }
  100. @@ -228,7 +272,7 @@
  101. *h++=(char)LUAC_FORMAT;
  102. *h++=(char)*(char*)&x; /* endianness */
  103. *h++=(char)sizeof(int);
  104. - *h++=(char)sizeof(size_t);
  105. + *h++=(char)sizeof(unsigned int);
  106. *h++=(char)sizeof(Instruction);
  107. *h++=(char)sizeof(lua_Number);