030-archindependent-bytecode.patch 2.4 KB

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