Browse Source

cleanup lzma kernel compression support, update lzma binary, remove not used lzma-loader

Waldemar Brodkorb 11 years ago
parent
commit
883ff45f5b

+ 0 - 2
target/x86/sys-available/qemu-i686

@@ -4,8 +4,6 @@ config ADK_TARGET_SYSTEM_QEMU_I686
 	select ADK_qemu_i686
 	select ADK_CPU_I686
 	select ADK_HARDWARE_QEMU
-	select ADK_TARGET_WITH_VGA
-	select ADK_TARGET_WITH_INPUT
 	select ADK_TARGET_KERNEL_BZIMAGE
 	select ADK_USE_KERNEL_MINICONFIG
 	help

+ 0 - 5
tools/lzma-loader/Makefile

@@ -1,5 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-all:
-	$(MAKE) -C src CC="$(TARGET_CC)" LD="$(TARGET_CROSS)ld" CROSS_COMPILE="$(TARGET_CROSS)" \
-		INCLUDE="-I$(LINUX_DIR)/arch/mips/include"

+ 0 - 663
tools/lzma-loader/src/LzmaDecode.c

@@ -1,663 +0,0 @@
-/*
-  LzmaDecode.c
-  LZMA Decoder
-  
-  LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
-  http://www.7-zip.org/
-
-  LZMA SDK is licensed under two licenses:
-  1) GNU Lesser General Public License (GNU LGPL)
-  2) Common Public License (CPL)
-  It means that you can select one of these two licenses and 
-  follow rules of that license.
-
-  SPECIAL EXCEPTION:
-  Igor Pavlov, as the author of this code, expressly permits you to 
-  statically or dynamically link your code (or bind by name) to the 
-  interfaces of this file without subjecting your linked code to the 
-  terms of the CPL or GNU LGPL. Any modifications or additions 
-  to this file, however, are subject to the LGPL or CPL terms.
-*/
-
-#include "LzmaDecode.h"
-
-#ifndef Byte
-#define Byte unsigned char
-#endif
-
-#define kNumTopBits 24
-#define kTopValue ((UInt32)1 << kNumTopBits)
-
-#define kNumBitModelTotalBits 11
-#define kBitModelTotal (1 << kNumBitModelTotalBits)
-#define kNumMoveBits 5
-
-typedef struct _CRangeDecoder
-{
-  Byte *Buffer;
-  Byte *BufferLim;
-  UInt32 Range;
-  UInt32 Code;
-  #ifdef _LZMA_IN_CB
-  ILzmaInCallback *InCallback;
-  int Result;
-  #endif
-  int ExtraBytes;
-} CRangeDecoder;
-
-Byte RangeDecoderReadByte(CRangeDecoder *rd)
-{
-  if (rd->Buffer == rd->BufferLim)
-  {
-    #ifdef _LZMA_IN_CB
-    UInt32 size;
-    rd->Result = rd->InCallback->Read(rd->InCallback, &rd->Buffer, &size);
-    rd->BufferLim = rd->Buffer + size;
-    if (size == 0)
-    #endif
-    {
-      rd->ExtraBytes = 1;
-      return 0xFF;
-    }
-  }
-  return (*rd->Buffer++);
-}
-
-/* #define ReadByte (*rd->Buffer++) */
-#define ReadByte (RangeDecoderReadByte(rd))
-
-void RangeDecoderInit(CRangeDecoder *rd,
-  #ifdef _LZMA_IN_CB
-    ILzmaInCallback *inCallback
-  #else
-    Byte *stream, UInt32 bufferSize
-  #endif
-    )
-{
-  int i;
-  #ifdef _LZMA_IN_CB
-  rd->InCallback = inCallback;
-  rd->Buffer = rd->BufferLim = 0;
-  #else
-  rd->Buffer = stream;
-  rd->BufferLim = stream + bufferSize;
-  #endif
-  rd->ExtraBytes = 0;
-  rd->Code = 0;
-  rd->Range = (0xFFFFFFFF);
-  for(i = 0; i < 5; i++)
-    rd->Code = (rd->Code << 8) | ReadByte;
-}
-
-#define RC_INIT_VAR UInt32 range = rd->Range; UInt32 code = rd->Code;        
-#define RC_FLUSH_VAR rd->Range = range; rd->Code = code;
-#define RC_NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | ReadByte; }
-
-UInt32 RangeDecoderDecodeDirectBits(CRangeDecoder *rd, int numTotalBits)
-{
-  RC_INIT_VAR
-  UInt32 result = 0;
-  int i;
-  for (i = numTotalBits; i > 0; i--)
-  {
-    /* UInt32 t; */
-    range >>= 1;
-
-    result <<= 1;
-    if (code >= range)
-    {
-      code -= range;
-      result |= 1;
-    }
-    /*
-    t = (code - range) >> 31;
-    t &= 1;
-    code -= range & (t - 1);
-    result = (result + result) | (1 - t);
-    */
-    RC_NORMALIZE
-  }
-  RC_FLUSH_VAR
-  return result;
-}
-
-int RangeDecoderBitDecode(CProb *prob, CRangeDecoder *rd)
-{
-  UInt32 bound = (rd->Range >> kNumBitModelTotalBits) * *prob;
-  if (rd->Code < bound)
-  {
-    rd->Range = bound;
-    *prob += (kBitModelTotal - *prob) >> kNumMoveBits;
-    if (rd->Range < kTopValue)
-    {
-      rd->Code = (rd->Code << 8) | ReadByte;
-      rd->Range <<= 8;
-    }
-    return 0;
-  }
-  else
-  {
-    rd->Range -= bound;
-    rd->Code -= bound;
-    *prob -= (*prob) >> kNumMoveBits;
-    if (rd->Range < kTopValue)
-    {
-      rd->Code = (rd->Code << 8) | ReadByte;
-      rd->Range <<= 8;
-    }
-    return 1;
-  }
-}
-
-#define RC_GET_BIT2(prob, mi, A0, A1) \
-  UInt32 bound = (range >> kNumBitModelTotalBits) * *prob; \
-  if (code < bound) \
-    { A0; range = bound; *prob += (kBitModelTotal - *prob) >> kNumMoveBits; mi <<= 1; } \
-  else \
-    { A1; range -= bound; code -= bound; *prob -= (*prob) >> kNumMoveBits; mi = (mi + mi) + 1; } \
-  RC_NORMALIZE
-
-#define RC_GET_BIT(prob, mi) RC_GET_BIT2(prob, mi, ; , ;)               
-
-int RangeDecoderBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
-{
-  int mi = 1;
-  int i;
-  #ifdef _LZMA_LOC_OPT
-  RC_INIT_VAR
-  #endif
-  for(i = numLevels; i > 0; i--)
-  {
-    #ifdef _LZMA_LOC_OPT
-    CProb *prob = probs + mi;
-    RC_GET_BIT(prob, mi)
-    #else
-    mi = (mi + mi) + RangeDecoderBitDecode(probs + mi, rd);
-    #endif
-  }
-  #ifdef _LZMA_LOC_OPT
-  RC_FLUSH_VAR
-  #endif
-  return mi - (1 << numLevels);
-}
-
-int RangeDecoderReverseBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
-{
-  int mi = 1;
-  int i;
-  int symbol = 0;
-  #ifdef _LZMA_LOC_OPT
-  RC_INIT_VAR
-  #endif
-  for(i = 0; i < numLevels; i++)
-  {
-    #ifdef _LZMA_LOC_OPT
-    CProb *prob = probs + mi;
-    RC_GET_BIT2(prob, mi, ; , symbol |= (1 << i))
-    #else
-    int bit = RangeDecoderBitDecode(probs + mi, rd);
-    mi = mi + mi + bit;
-    symbol |= (bit << i);
-    #endif
-  }
-  #ifdef _LZMA_LOC_OPT
-  RC_FLUSH_VAR
-  #endif
-  return symbol;
-}
-
-Byte LzmaLiteralDecode(CProb *probs, CRangeDecoder *rd)
-{ 
-  int symbol = 1;
-  #ifdef _LZMA_LOC_OPT
-  RC_INIT_VAR
-  #endif
-  do
-  {
-    #ifdef _LZMA_LOC_OPT
-    CProb *prob = probs + symbol;
-    RC_GET_BIT(prob, symbol)
-    #else
-    symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
-    #endif
-  }
-  while (symbol < 0x100);
-  #ifdef _LZMA_LOC_OPT
-  RC_FLUSH_VAR
-  #endif
-  return symbol;
-}
-
-Byte LzmaLiteralDecodeMatch(CProb *probs, CRangeDecoder *rd, Byte matchByte)
-{ 
-  int symbol = 1;
-  #ifdef _LZMA_LOC_OPT
-  RC_INIT_VAR
-  #endif
-  do
-  {
-    int bit;
-    int matchBit = (matchByte >> 7) & 1;
-    matchByte <<= 1;
-    #ifdef _LZMA_LOC_OPT
-    {
-      CProb *prob = probs + ((1 + matchBit) << 8) + symbol;
-      RC_GET_BIT2(prob, symbol, bit = 0, bit = 1)
-    }
-    #else
-    bit = RangeDecoderBitDecode(probs + ((1 + matchBit) << 8) + symbol, rd);
-    symbol = (symbol << 1) | bit;
-    #endif
-    if (matchBit != bit)
-    {
-      while (symbol < 0x100)
-      {
-        #ifdef _LZMA_LOC_OPT
-        CProb *prob = probs + symbol;
-        RC_GET_BIT(prob, symbol)
-        #else
-        symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
-        #endif
-      }
-      break;
-    }
-  }
-  while (symbol < 0x100);
-  #ifdef _LZMA_LOC_OPT
-  RC_FLUSH_VAR
-  #endif
-  return symbol;
-}
-
-#define kNumPosBitsMax 4
-#define kNumPosStatesMax (1 << kNumPosBitsMax)
-
-#define kLenNumLowBits 3
-#define kLenNumLowSymbols (1 << kLenNumLowBits)
-#define kLenNumMidBits 3
-#define kLenNumMidSymbols (1 << kLenNumMidBits)
-#define kLenNumHighBits 8
-#define kLenNumHighSymbols (1 << kLenNumHighBits)
-
-#define LenChoice 0
-#define LenChoice2 (LenChoice + 1)
-#define LenLow (LenChoice2 + 1)
-#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
-#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
-#define kNumLenProbs (LenHigh + kLenNumHighSymbols) 
-
-int LzmaLenDecode(CProb *p, CRangeDecoder *rd, int posState)
-{
-  if(RangeDecoderBitDecode(p + LenChoice, rd) == 0)
-    return RangeDecoderBitTreeDecode(p + LenLow +
-        (posState << kLenNumLowBits), kLenNumLowBits, rd);
-  if(RangeDecoderBitDecode(p + LenChoice2, rd) == 0)
-    return kLenNumLowSymbols + RangeDecoderBitTreeDecode(p + LenMid +
-        (posState << kLenNumMidBits), kLenNumMidBits, rd);
-  return kLenNumLowSymbols + kLenNumMidSymbols + 
-      RangeDecoderBitTreeDecode(p + LenHigh, kLenNumHighBits, rd);
-}
-
-#define kNumStates 12
-
-#define kStartPosModelIndex 4
-#define kEndPosModelIndex 14
-#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
-
-#define kNumPosSlotBits 6
-#define kNumLenToPosStates 4
-
-#define kNumAlignBits 4
-#define kAlignTableSize (1 << kNumAlignBits)
-
-#define kMatchMinLen 2
-
-#define IsMatch 0
-#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
-#define IsRepG0 (IsRep + kNumStates)
-#define IsRepG1 (IsRepG0 + kNumStates)
-#define IsRepG2 (IsRepG1 + kNumStates)
-#define IsRep0Long (IsRepG2 + kNumStates)
-#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
-#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
-#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
-#define LenCoder (Align + kAlignTableSize)
-#define RepLenCoder (LenCoder + kNumLenProbs)
-#define Literal (RepLenCoder + kNumLenProbs)
-
-#if Literal != LZMA_BASE_SIZE
-StopCompilingDueBUG
-#endif
-
-#ifdef _LZMA_OUT_READ
-
-typedef struct _LzmaVarState
-{
-  CRangeDecoder RangeDecoder;
-  Byte *Dictionary;
-  UInt32 DictionarySize;
-  UInt32 DictionaryPos;
-  UInt32 GlobalPos;
-  UInt32 Reps[4];
-  int lc;
-  int lp;
-  int pb;
-  int State;
-  int PreviousIsMatch;
-  int RemainLen;
-} LzmaVarState;
-
-int LzmaDecoderInit(
-    unsigned char *buffer, UInt32 bufferSize,
-    int lc, int lp, int pb,
-    unsigned char *dictionary, UInt32 dictionarySize,
-    #ifdef _LZMA_IN_CB
-    ILzmaInCallback *inCallback
-    #else
-    unsigned char *inStream, UInt32 inSize
-    #endif
-    )
-{
-  LzmaVarState *vs = (LzmaVarState *)buffer;
-  CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
-  UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
-  UInt32 i;
-  if (bufferSize < numProbs * sizeof(CProb) + sizeof(LzmaVarState))
-    return LZMA_RESULT_NOT_ENOUGH_MEM;
-  vs->Dictionary = dictionary;
-  vs->DictionarySize = dictionarySize;
-  vs->DictionaryPos = 0;
-  vs->GlobalPos = 0;
-  vs->Reps[0] = vs->Reps[1] = vs->Reps[2] = vs->Reps[3] = 1;
-  vs->lc = lc;
-  vs->lp = lp;
-  vs->pb = pb;
-  vs->State = 0;
-  vs->PreviousIsMatch = 0;
-  vs->RemainLen = 0;
-  dictionary[dictionarySize - 1] = 0;
-  for (i = 0; i < numProbs; i++)
-    p[i] = kBitModelTotal >> 1; 
-  RangeDecoderInit(&vs->RangeDecoder, 
-      #ifdef _LZMA_IN_CB
-      inCallback
-      #else
-      inStream, inSize
-      #endif
-  );
-  return LZMA_RESULT_OK;
-}
-
-int LzmaDecode(unsigned char *buffer, 
-    unsigned char *outStream, UInt32 outSize,
-    UInt32 *outSizeProcessed)
-{
-  LzmaVarState *vs = (LzmaVarState *)buffer;
-  CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
-  CRangeDecoder rd = vs->RangeDecoder;
-  int state = vs->State;
-  int previousIsMatch = vs->PreviousIsMatch;
-  Byte previousByte;
-  UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
-  UInt32 nowPos = 0;
-  UInt32 posStateMask = (1 << (vs->pb)) - 1;
-  UInt32 literalPosMask = (1 << (vs->lp)) - 1;
-  int lc = vs->lc;
-  int len = vs->RemainLen;
-  UInt32 globalPos = vs->GlobalPos;
-
-  Byte *dictionary = vs->Dictionary;
-  UInt32 dictionarySize = vs->DictionarySize;
-  UInt32 dictionaryPos = vs->DictionaryPos;
-
-  if (len == -1)
-  {
-    *outSizeProcessed = 0;
-    return LZMA_RESULT_OK;
-  }
-
-  while(len > 0 && nowPos < outSize)
-  {
-    UInt32 pos = dictionaryPos - rep0;
-    if (pos >= dictionarySize)
-      pos += dictionarySize;
-    outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];
-    if (++dictionaryPos == dictionarySize)
-      dictionaryPos = 0;
-    len--;
-  }
-  if (dictionaryPos == 0)
-    previousByte = dictionary[dictionarySize - 1];
-  else
-    previousByte = dictionary[dictionaryPos - 1];
-#else
-
-int LzmaDecode(
-    Byte *buffer, UInt32 bufferSize,
-    int lc, int lp, int pb,
-    #ifdef _LZMA_IN_CB
-    ILzmaInCallback *inCallback,
-    #else
-    unsigned char *inStream, UInt32 inSize,
-    #endif
-    unsigned char *outStream, UInt32 outSize,
-    UInt32 *outSizeProcessed)
-{
-  UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
-  CProb *p = (CProb *)buffer;
-  CRangeDecoder rd;
-  UInt32 i;
-  int state = 0;
-  int previousIsMatch = 0;
-  Byte previousByte = 0;
-  UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
-  UInt32 nowPos = 0;
-  UInt32 posStateMask = (1 << pb) - 1;
-  UInt32 literalPosMask = (1 << lp) - 1;
-  int len = 0;
-  if (bufferSize < numProbs * sizeof(CProb))
-    return LZMA_RESULT_NOT_ENOUGH_MEM;
-  for (i = 0; i < numProbs; i++)
-    p[i] = kBitModelTotal >> 1; 
-  RangeDecoderInit(&rd, 
-      #ifdef _LZMA_IN_CB
-      inCallback
-      #else
-      inStream, inSize
-      #endif
-      );
-#endif
-
-  *outSizeProcessed = 0;
-  while(nowPos < outSize)
-  {
-    int posState = (int)(
-        (nowPos 
-        #ifdef _LZMA_OUT_READ
-        + globalPos
-        #endif
-        )
-        & posStateMask);
-    #ifdef _LZMA_IN_CB
-    if (rd.Result != LZMA_RESULT_OK)
-      return rd.Result;
-    #endif
-    if (rd.ExtraBytes != 0)
-      return LZMA_RESULT_DATA_ERROR;
-    if (RangeDecoderBitDecode(p + IsMatch + (state << kNumPosBitsMax) + posState, &rd) == 0)
-    {
-      CProb *probs = p + Literal + (LZMA_LIT_SIZE * 
-        (((
-        (nowPos 
-        #ifdef _LZMA_OUT_READ
-        + globalPos
-        #endif
-        )
-        & literalPosMask) << lc) + (previousByte >> (8 - lc))));
-
-      if (state < 4) state = 0;
-      else if (state < 10) state -= 3;
-      else state -= 6;
-      if (previousIsMatch)
-      {
-        Byte matchByte;
-        #ifdef _LZMA_OUT_READ
-        UInt32 pos = dictionaryPos - rep0;
-        if (pos >= dictionarySize)
-          pos += dictionarySize;
-        matchByte = dictionary[pos];
-        #else
-        matchByte = outStream[nowPos - rep0];
-        #endif
-        previousByte = LzmaLiteralDecodeMatch(probs, &rd, matchByte);
-        previousIsMatch = 0;
-      }
-      else
-        previousByte = LzmaLiteralDecode(probs, &rd);
-      outStream[nowPos++] = previousByte;
-      #ifdef _LZMA_OUT_READ
-      dictionary[dictionaryPos] = previousByte;
-      if (++dictionaryPos == dictionarySize)
-        dictionaryPos = 0;
-      #endif
-    }
-    else             
-    {
-      previousIsMatch = 1;
-      if (RangeDecoderBitDecode(p + IsRep + state, &rd) == 1)
-      {
-        if (RangeDecoderBitDecode(p + IsRepG0 + state, &rd) == 0)
-        {
-          if (RangeDecoderBitDecode(p + IsRep0Long + (state << kNumPosBitsMax) + posState, &rd) == 0)
-          {
-            #ifdef _LZMA_OUT_READ
-            UInt32 pos;
-            #endif
-            if (
-               (nowPos 
-                #ifdef _LZMA_OUT_READ
-                + globalPos
-                #endif
-               )
-               == 0)
-              return LZMA_RESULT_DATA_ERROR;
-            state = state < 7 ? 9 : 11;
-            #ifdef _LZMA_OUT_READ
-            pos = dictionaryPos - rep0;
-            if (pos >= dictionarySize)
-              pos += dictionarySize;
-            previousByte = dictionary[pos];
-            dictionary[dictionaryPos] = previousByte;
-            if (++dictionaryPos == dictionarySize)
-              dictionaryPos = 0;
-            #else
-            previousByte = outStream[nowPos - rep0];
-            #endif
-            outStream[nowPos++] = previousByte;
-            continue;
-          }
-        }
-        else
-        {
-          UInt32 distance;
-          if(RangeDecoderBitDecode(p + IsRepG1 + state, &rd) == 0)
-            distance = rep1;
-          else 
-          {
-            if(RangeDecoderBitDecode(p + IsRepG2 + state, &rd) == 0)
-              distance = rep2;
-            else
-            {
-              distance = rep3;
-              rep3 = rep2;
-            }
-            rep2 = rep1;
-          }
-          rep1 = rep0;
-          rep0 = distance;
-        }
-        len = LzmaLenDecode(p + RepLenCoder, &rd, posState);
-        state = state < 7 ? 8 : 11;
-      }
-      else
-      {
-        int posSlot;
-        rep3 = rep2;
-        rep2 = rep1;
-        rep1 = rep0;
-        state = state < 7 ? 7 : 10;
-        len = LzmaLenDecode(p + LenCoder, &rd, posState);
-        posSlot = RangeDecoderBitTreeDecode(p + PosSlot +
-            ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << 
-            kNumPosSlotBits), kNumPosSlotBits, &rd);
-        if (posSlot >= kStartPosModelIndex)
-        {
-          int numDirectBits = ((posSlot >> 1) - 1);
-          rep0 = ((2 | ((UInt32)posSlot & 1)) << numDirectBits);
-          if (posSlot < kEndPosModelIndex)
-          {
-            rep0 += RangeDecoderReverseBitTreeDecode(
-                p + SpecPos + rep0 - posSlot - 1, numDirectBits, &rd);
-          }
-          else
-          {
-            rep0 += RangeDecoderDecodeDirectBits(&rd, 
-                numDirectBits - kNumAlignBits) << kNumAlignBits;
-            rep0 += RangeDecoderReverseBitTreeDecode(p + Align, kNumAlignBits, &rd);
-          }
-        }
-        else
-          rep0 = posSlot;
-        rep0++;
-      }
-      if (rep0 == (UInt32)(0))
-      {
-        /* it's for stream version */
-        len = -1;
-        break;
-      }
-      if (rep0 > nowPos 
-        #ifdef _LZMA_OUT_READ
-        + globalPos
-        #endif
-        )
-      {
-        return LZMA_RESULT_DATA_ERROR;
-      }
-      len += kMatchMinLen;
-      do
-      {
-        #ifdef _LZMA_OUT_READ
-        UInt32 pos = dictionaryPos - rep0;
-        if (pos >= dictionarySize)
-          pos += dictionarySize;
-        previousByte = dictionary[pos];
-        dictionary[dictionaryPos] = previousByte;
-        if (++dictionaryPos == dictionarySize)
-          dictionaryPos = 0;
-        #else
-        previousByte = outStream[nowPos - rep0];
-        #endif
-        outStream[nowPos++] = previousByte;
-        len--;
-      }
-      while(len > 0 && nowPos < outSize);
-    }
-  }
-
-  #ifdef _LZMA_OUT_READ
-  vs->RangeDecoder = rd;
-  vs->DictionaryPos = dictionaryPos;
-  vs->GlobalPos = globalPos + nowPos;
-  vs->Reps[0] = rep0;
-  vs->Reps[1] = rep1;
-  vs->Reps[2] = rep2;
-  vs->Reps[3] = rep3;
-  vs->State = state;
-  vs->PreviousIsMatch = previousIsMatch;
-  vs->RemainLen = len;
-  #endif
-
-  *outSizeProcessed = nowPos;
-  return LZMA_RESULT_OK;
-}

+ 0 - 100
tools/lzma-loader/src/LzmaDecode.h

@@ -1,100 +0,0 @@
-/* 
-  LzmaDecode.h
-  LZMA Decoder interface
-
-  LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
-  http://www.7-zip.org/
-
-  LZMA SDK is licensed under two licenses:
-  1) GNU Lesser General Public License (GNU LGPL)
-  2) Common Public License (CPL)
-  It means that you can select one of these two licenses and 
-  follow rules of that license.
-
-  SPECIAL EXCEPTION:
-  Igor Pavlov, as the author of this code, expressly permits you to 
-  statically or dynamically link your code (or bind by name) to the 
-  interfaces of this file without subjecting your linked code to the 
-  terms of the CPL or GNU LGPL. Any modifications or additions 
-  to this file, however, are subject to the LGPL or CPL terms.
-*/
-
-#ifndef __LZMADECODE_H
-#define __LZMADECODE_H
-
-/* #define _LZMA_IN_CB */
-/* Use callback for input data */
-
-/* #define _LZMA_OUT_READ */
-/* Use read function for output data */
-
-/* #define _LZMA_PROB32 */
-/* It can increase speed on some 32-bit CPUs, 
-   but memory usage will be doubled in that case */
-
-/* #define _LZMA_LOC_OPT */
-/* Enable local speed optimizations inside code */
-
-#ifndef UInt32
-#ifdef _LZMA_UINT32_IS_ULONG
-#define UInt32 unsigned long
-#else
-#define UInt32 unsigned int
-#endif
-#endif
-
-#ifdef _LZMA_PROB32
-#define CProb UInt32
-#else
-#define CProb unsigned short
-#endif
-
-#define LZMA_RESULT_OK 0
-#define LZMA_RESULT_DATA_ERROR 1
-#define LZMA_RESULT_NOT_ENOUGH_MEM 2
-
-#ifdef _LZMA_IN_CB
-typedef struct _ILzmaInCallback
-{
-  int (*Read)(void *object, unsigned char **buffer, UInt32 *bufferSize);
-} ILzmaInCallback;
-#endif
-
-#define LZMA_BASE_SIZE 1846
-#define LZMA_LIT_SIZE 768
-
-/* 
-bufferSize = (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)))* sizeof(CProb)
-bufferSize += 100 in case of _LZMA_OUT_READ
-by default CProb is unsigned short, 
-but if specify _LZMA_PROB_32, CProb will be UInt32(unsigned int)
-*/
-
-#ifdef _LZMA_OUT_READ
-int LzmaDecoderInit(
-    unsigned char *buffer, UInt32 bufferSize,
-    int lc, int lp, int pb,
-    unsigned char *dictionary, UInt32 dictionarySize,
-  #ifdef _LZMA_IN_CB
-    ILzmaInCallback *inCallback
-  #else
-    unsigned char *inStream, UInt32 inSize
-  #endif
-);
-#endif
-
-int LzmaDecode(
-    unsigned char *buffer, 
-  #ifndef _LZMA_OUT_READ
-    UInt32 bufferSize,
-    int lc, int lp, int pb,
-  #ifdef _LZMA_IN_CB
-    ILzmaInCallback *inCallback,
-  #else
-    unsigned char *inStream, UInt32 inSize,
-  #endif
-  #endif
-    unsigned char *outStream, UInt32 outSize,
-    UInt32 *outSizeProcessed);
-
-#endif

BIN
tools/lzma-loader/src/LzmaDecode.o


+ 0 - 78
tools/lzma-loader/src/Makefile

@@ -1,78 +0,0 @@
-#
-# Makefile for Broadcom BCM947XX boards
-#
-# Copyright 2001-2003, Broadcom Corporation
-# All Rights Reserved.
-# 
-# THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
-# KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
-# SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
-# FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
-#
-# Copyright 2004  Manuel Novoa III <mjn3@codepoet.org>
-#   Modified to support bzip'd kernels.
-#   Of course, it would be better to integrate bunzip capability into CFE.
-#
-# Copyright 2005  Oleg I. Vdovikin <oleg@cs.msu.su>
-#   Cleaned up, modified for lzma support, removed from kernel
-#
-
-TEXT_START	:= 0x80001000
-BZ_TEXT_START	:= 0x80400000
-
-OBJCOPY		:= $(CROSS_COMPILE)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S
-
-CFLAGS		= -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -Os \
-		  -fno-strict-aliasing -fno-common -fomit-frame-pointer -G 0 -mno-abicalls -fno-pic \
-		  -ffunction-sections -pipe -mlong-calls -fno-common \
-		  -mabi=32 -march=mips32 -Wa,-32 -Wa,-march=mips32 -Wa,-mips32 -Wa,--trap
-CFLAGS		+= -DLOADADDR=$(TEXT_START) -D_LZMA_IN_CB
-CFLAGS		+= $(INCLUDE)
-
-ASFLAGS		= $(CFLAGS) -D__ASSEMBLY__ -DBZ_TEXT_START=$(BZ_TEXT_START)
-
-SEDFLAGS	:= s/BZ_TEXT_START/$(BZ_TEXT_START)/;s/TEXT_START/$(TEXT_START)/
-
-OBJECTS		:= head.o data.o
-
-all: loader.gz loader.elf
-
-# Don't build dependencies, this may die if $(CC) isn't gcc
-dep:
-
-install:
-
-loader.gz: loader
-	gzip -nc9 $< > $@
-
-loader.elf: loader.o
-	cp $< $@
-
-loader: loader.o
-	$(OBJCOPY) $< $@
-
-loader.o: loader.lds $(OBJECTS)
-	$(LD) -static --gc-sections -no-warn-mismatch -T loader.lds -o $@ $(OBJECTS)
-
-loader.lds: loader.lds.in Makefile
-	@sed "$(SEDFLAGS)" < $< > $@
-
-data.o: data.lds decompress.image
-	$(LD) -no-warn-mismatch -T data.lds -r -o $@ -b binary decompress.image -b elf32-tradlittlemips
-
-data.lds:
-	@echo "SECTIONS { .data : { code_start = .; *(.data) code_stop = .; }}" > $@
-
-decompress.image: decompress
-	$(OBJCOPY) $< $@
-
-decompress: decompress.lds decompress.o LzmaDecode.o
-	$(LD) -static --gc-sections -no-warn-mismatch -T decompress.lds -o $@ decompress.o LzmaDecode.o
-
-decompress.lds: decompress.lds.in Makefile
-	@sed "$(SEDFLAGS)" < $< > $@
-
-mrproper: clean
-
-clean:
-	rm -f loader.gz loader decompress *.lds *.o *.image

+ 0 - 55
tools/lzma-loader/src/README

@@ -1,55 +0,0 @@
-/*
- * LZMA compressed kernel decompressor for bcm947xx boards
- *
- * Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-The code is intended to decompress kernel, being compressed using lzma utility
-build using 7zip LZMA SDK. This utility is located in the LZMA_Alone directory
-
-decompressor code expects that your .trx file consist of three partitions: 
-
-1) decompressor itself (this is gziped code which pmon/cfe will extract and run
-on boot-up instead of real kernel)
-2) LZMA compressed kernel (both streamed and regular modes are supported now)
-3) Root filesystem
-
-Please be sure to apply the following patch for use this new trx layout (it will
-allow using both new and old trx files for root filesystem lookup code)
-
---- linuz/arch/mips/brcm-boards/bcm947xx/setup.c        2005-01-23 19:24:27.503322896 +0300
-+++ linux/arch/mips/brcm-boards/bcm947xx/setup.c        2005-01-23 19:29:05.237100944 +0300
-@@ -221,7 +221,9 @@
-                /* Try looking at TRX header for rootfs offset */
-                if (le32_to_cpu(trx->magic) == TRX_MAGIC) {
-                        bcm947xx_parts[1].offset = off;
--                       if (le32_to_cpu(trx->offsets[1]) > off)
-+                       if (le32_to_cpu(trx->offsets[2]) > off)
-+                               off = le32_to_cpu(trx->offsets[2]);
-+                       else if (le32_to_cpu(trx->offsets[1]) > off)
-                                off = le32_to_cpu(trx->offsets[1]);
-                        continue;
-                }
-
-
-Revision history:
-	0.02	Initial release
-	0.03	Added Mineharu Takahara <mtakahar@yahoo.com> patch to pass actual
-		output size to decoder (stream mode compressed input is not 
-		a requirement anymore)
-	0.04	Reordered functions using lds script

+ 0 - 1
tools/lzma-loader/src/data.lds

@@ -1 +0,0 @@
-SECTIONS { .data : { code_start = .; *(.data) code_stop = .; }}

BIN
tools/lzma-loader/src/data.o


BIN
tools/lzma-loader/src/decompress


+ 0 - 186
tools/lzma-loader/src/decompress.c

@@ -1,186 +0,0 @@
-/*
- * LZMA compressed kernel decompressor for bcm947xx boards
- *
- * Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- *
- * Please note, this was code based on the bunzip2 decompressor code
- * by Manuel Novoa III  (mjn3@codepoet.org), although the only thing left
- * is an idea and part of original vendor code
- *
- *
- * 12-Mar-2005  Mineharu Takahara <mtakahar@yahoo.com>
- *   pass actual output size to decoder (stream mode
- *   compressed input is not a requirement anymore)
- *
- * 24-Apr-2005 Oleg I. Vdovikin
- *   reordered functions using lds script, removed forward decl
- *
- */
-
-#include "LzmaDecode.h"
-
-#define BCM4710_FLASH		0x1fc00000	/* Flash */
-
-#define KSEG0			0x80000000
-#define KSEG1			0xa0000000
-
-#define KSEG1ADDR(a)		((((unsigned)(a)) & 0x1fffffffU) | KSEG1)
-
-#define Index_Invalidate_I	0x00
-#define Index_Writeback_Inv_D   0x01
-
-#define cache_unroll(base,op)	\
-	__asm__ __volatile__(		\
-		".set noreorder;\n"		\
-		".set mips3;\n"			\
-		"cache %1, (%0);\n"		\
-		".set mips0;\n"			\
-		".set reorder\n"		\
-		:						\
-		: "r" (base),			\
-		  "i" (op));
-
-static __inline__ void blast_icache(unsigned long size, unsigned long lsize)
-{
-	unsigned long start = KSEG0;
-	unsigned long end = (start + size);
-
-	while(start < end) {
-		cache_unroll(start,Index_Invalidate_I);
-		start += lsize;
-	}
-}
-
-static __inline__ void blast_dcache(unsigned long size, unsigned long lsize)
-{
-	unsigned long start = KSEG0;
-	unsigned long end = (start + size);
-
-	while(start < end) {
-		cache_unroll(start,Index_Writeback_Inv_D);
-		start += lsize;
-	}
-}
-
-#define TRX_MAGIC       0x30524448      /* "HDR0" */
-
-struct trx_header {
-	unsigned int magic;		/* "HDR0" */
-	unsigned int len;		/* Length of file including header */
-	unsigned int crc32;		/* 32-bit CRC from flag_version to end of file */
-	unsigned int flag_version;	/* 0:15 flags, 16:31 version */
-	unsigned int offsets[3];	/* Offsets of partitions from start of header */
-};
-
-#define EDIMAX_PS_HEADER_MAGIC	0x36315350 /*  "PS16"  */
-#define EDIMAX_PS_HEADER_LEN	0xc /* 12 bytes long for edimax header */
-
-/* beyound the image end, size not known in advance */
-extern unsigned char workspace[];
-
-unsigned int offset;
-unsigned char *data;
-
-/* flash access should be aligned, so wrapper is used */
-/* read byte from the flash, all accesses are 32-bit aligned */
-static int read_byte(void *object, unsigned char **buffer, UInt32 *bufferSize)
-{
-	static unsigned int val;
-
-	if (((unsigned int)offset % 4) == 0) {
-		val = *(unsigned int *)data;
-		data += 4;
-	}
-	
-	*bufferSize = 1;
-	*buffer = ((unsigned char *)&val) + (offset++ & 3);
-	
-	return LZMA_RESULT_OK;
-}
-
-static __inline__ unsigned char get_byte(void)
-{
-	unsigned char *buffer;
-	UInt32 fake;
-	
-	return read_byte(0, &buffer, &fake), *buffer;
-}
-
-/* should be the first function */
-void entry(unsigned long icache_size, unsigned long icache_lsize, 
-	unsigned long dcache_size, unsigned long dcache_lsize,
-	unsigned long fw_arg0, unsigned long fw_arg1,
-	unsigned long fw_arg2, unsigned long fw_arg3)
-{
-	unsigned int i;  /* temp value */
-	unsigned int lc; /* literal context bits */
-	unsigned int lp; /* literal pos state bits */
-	unsigned int pb; /* pos state bits */
-	unsigned int osize; /* uncompressed size */
-
-	ILzmaInCallback callback;
-	callback.Read = read_byte;
-
-	/* look for trx header, 32-bit data access */
-	for (data = ((unsigned char *) KSEG1ADDR(BCM4710_FLASH));
-		((struct trx_header *)data)->magic != TRX_MAGIC &&
-		((struct trx_header *)data)->magic != EDIMAX_PS_HEADER_MAGIC;
-		 data += 65536);
-
-	if (((struct trx_header *)data)->magic == EDIMAX_PS_HEADER_MAGIC)
-		data += EDIMAX_PS_HEADER_LEN;
-	/* compressed kernel is in the partition 0 or 1 */
-	if (((struct trx_header *)data)->offsets[1] > 65536) 
-		data += ((struct trx_header *)data)->offsets[0];
-	else
-		data += ((struct trx_header *)data)->offsets[1];
-
-	offset = 0;
-
-	/* lzma args */
-	i = get_byte();
-	lc = i % 9, i = i / 9;
-	lp = i % 5, pb = i / 5;
-
-	/* skip rest of the LZMA coder property */
-	for (i = 0; i < 4; i++)
-		get_byte();
-
-	/* read the lower half of uncompressed size in the header */
-	osize = ((unsigned int)get_byte()) +
-		((unsigned int)get_byte() << 8) +
-		((unsigned int)get_byte() << 16) +
-		((unsigned int)get_byte() << 24);
-
-	/* skip rest of the header (upper half of uncompressed size) */
-	for (i = 0; i < 4; i++) 
-		get_byte();
-
-	/* decompress kernel */
-	if (LzmaDecode(workspace, ~0, lc, lp, pb, &callback,
-		(unsigned char*)LOADADDR, osize, &i) == LZMA_RESULT_OK)
-	{
-		blast_dcache(dcache_size, dcache_lsize);
-		blast_icache(icache_size, icache_lsize);
-
-		/* Jump to load address */
-		((void (*)(unsigned long, unsigned long, unsigned long,
-			unsigned long)) LOADADDR)(fw_arg0, fw_arg1, fw_arg2,
-				fw_arg3);
-	}
-}

BIN
tools/lzma-loader/src/decompress.image


+ 0 - 20
tools/lzma-loader/src/decompress.lds

@@ -1,20 +0,0 @@
-OUTPUT_ARCH(mips)
-ENTRY(entry)
-SECTIONS {
-	. = 0x80400000;
-	.text : {
-		*(.text.entry)
-		*(.text)
-		*(.rodata)
-	}
-
-	.data : {
-		*(.data)
-	}
-
-	.bss : {
-		*(.bss)
-	}
-
-	workspace = .;
-}

+ 0 - 20
tools/lzma-loader/src/decompress.lds.in

@@ -1,20 +0,0 @@
-OUTPUT_ARCH(mips)
-ENTRY(entry)
-SECTIONS {
-	. = BZ_TEXT_START;
-	.text : {
-		*(.text.entry)
-		*(.text)
-		*(.rodata)
-	}
-
-	.data : {
-		*(.data)
-	}
-
-	.bss : {
-		*(.bss)
-	}
-
-	workspace = .;
-}

BIN
tools/lzma-loader/src/decompress.o


+ 0 - 160
tools/lzma-loader/src/head.S

@@ -1,160 +0,0 @@
-/* Copyright 2005 Oleg I. Vdovikin (oleg@cs.msu.su)	*/
-/* cache manipulation adapted from Broadcom code 	*/
-/* idea taken from original bunzip2 decompressor code	*/
-/* Copyright 2004 Manuel Novoa III (mjn3@codepoet.org)	*/
-/* Licensed under the linux kernel's version of the GPL.*/
-
-#include <asm/asm.h>
-#include <asm/regdef.h>
-
-#define KSEG0		0x80000000
-
-#define C0_CONFIG	$16
-#define C0_TAGLO	$28
-#define C0_TAGHI	$29
-
-#define	CONF1_DA_SHIFT	7			/* D$ associativity */
-#define CONF1_DA_MASK	0x00000380
-#define CONF1_DA_BASE	1
-#define CONF1_DL_SHIFT	10			/* D$ line size */
-#define CONF1_DL_MASK	0x00001c00
-#define CONF1_DL_BASE	2
-#define CONF1_DS_SHIFT	13			/* D$ sets/way */
-#define CONF1_DS_MASK	0x0000e000
-#define CONF1_DS_BASE	64
-#define CONF1_IA_SHIFT	16			/* I$ associativity */
-#define CONF1_IA_MASK	0x00070000
-#define CONF1_IA_BASE	1
-#define CONF1_IL_SHIFT	19			/* I$ line size */
-#define CONF1_IL_MASK	0x00380000
-#define CONF1_IL_BASE	2
-#define CONF1_IS_SHIFT	22			/* Instruction cache sets/way */
-#define CONF1_IS_MASK	0x01c00000
-#define CONF1_IS_BASE	64
-
-#define Index_Invalidate_I	0x00
-#define Index_Writeback_Inv_D   0x01
-
-	.text
-	LEAF(startup)
-	.set noreorder
-	addi    sp, -48 
-	sw      a0, 16(sp) 
-	sw      a1, 20(sp) 
-	sw      a2, 24(sp) 
-	sw      a3, 28(sp)
-	
-	/* Copy decompressor code to the right place */
-	li	t2, BZ_TEXT_START
-	add	a0, t2, 0
-	la      a1, code_start
-	la	a2, code_stop
-$L1:
-	lw	t0, 0(a1)
-	sw	t0, 0(a0)
-	add	a1, 4
-	add	a0, 4
-	blt	a1, a2, $L1
-	nop
-	
-	/* At this point we need to invalidate dcache and */
-	/* icache before jumping to new code */
-
-1:	/* Get cache sizes */
-	.set	mips32
-	mfc0	s0,C0_CONFIG,1
-	.set	mips0
-
-	li	s1,CONF1_DL_MASK
-	and	s1,s0
-	beq	s1,zero,nodc
-	nop
-
-	srl	s1,CONF1_DL_SHIFT
-	li	t0,CONF1_DL_BASE
-	sll	s1,t0,s1		/* s1 has D$ cache line size */
-
-	li	s2,CONF1_DA_MASK
-	and	s2,s0
-	srl	s2,CONF1_DA_SHIFT
-	addiu	s2,CONF1_DA_BASE	/* s2 now has D$ associativity */
-
-	li	t0,CONF1_DS_MASK
-	and	t0,s0
-	srl	t0,CONF1_DS_SHIFT
-	li	s3,CONF1_DS_BASE
-	sll	s3,s3,t0		/* s3 has D$ sets per way */
-
-	multu	s2,s3			/* sets/way * associativity */
-	mflo	t0			/* total cache lines */
-
-	multu	s1,t0			/* D$ linesize * lines */
-	mflo	s2			/* s2 is now D$ size in bytes */
-
-	/* Initilize the D$: */
-	mtc0	zero,C0_TAGLO
-	mtc0	zero,C0_TAGHI
-
-	li	t0,KSEG0		/* Just an address for the first $ line */
-	addu	t1,t0,s2		/*  + size of cache == end */
-
-	.set	mips3
-1:	cache	Index_Writeback_Inv_D,0(t0)
-	.set	mips0
-	bne	t0,t1,1b
-	addu	t0,s1
-	
-nodc:
-	/* Now we get to do it all again for the I$ */
-	
-	move	s3,zero			/* just in case there is no icache */
-	move	s4,zero
-
-	li	t0,CONF1_IL_MASK
-	and	t0,s0
-	beq	t0,zero,noic
-	nop
-
-	srl	t0,CONF1_IL_SHIFT
-	li	s3,CONF1_IL_BASE
-	sll	s3,t0			/* s3 has I$ cache line size */
-
-	li	t0,CONF1_IA_MASK
-	and	t0,s0
-	srl	t0,CONF1_IA_SHIFT
-	addiu	s4,t0,CONF1_IA_BASE	/* s4 now has I$ associativity */
-
-	li	t0,CONF1_IS_MASK
-	and	t0,s0
-	srl	t0,CONF1_IS_SHIFT
-	li	s5,CONF1_IS_BASE
-	sll	s5,t0			/* s5 has I$ sets per way */
-
-	multu	s4,s5			/* sets/way * associativity */
-	mflo	t0			/* s4 is now total cache lines */
-
-	multu	s3,t0			/* I$ linesize * lines */
-	mflo	s4			/* s4 is cache size in bytes */
-
-	/* Initilize the I$: */
-	mtc0	zero,C0_TAGLO
-	mtc0	zero,C0_TAGHI
-
-	li	t0,KSEG0		/* Just an address for the first $ line */
-	addu	t1,t0,s4		/*  + size of cache == end */
-
-	.set	mips3
-1:	cache	Index_Invalidate_I,0(t0)
-	.set	mips0
-	bne	t0,t1,1b
-	addu	t0,s3
-
-noic:
-	move	a0,s3			/* icache line size */
-	move	a1,s4			/* icache size */
-	move	a2,s1			/* dcache line size */
-	jal	t2
-	move	a3,s2			/* dcache size */
-	
-	.set reorder
-	END(startup)

BIN
tools/lzma-loader/src/head.o


BIN
tools/lzma-loader/src/loader


BIN
tools/lzma-loader/src/loader.elf


BIN
tools/lzma-loader/src/loader.gz


+ 0 - 17
tools/lzma-loader/src/loader.lds

@@ -1,17 +0,0 @@
-OUTPUT_ARCH(mips)
-ENTRY(startup)
-SECTIONS {
-	. = 0x80001000;
-	.text : {
-		*(.text)
-		*(.rodata)
-	}
-
-	.data : {
-		*(.data)
-	}
-
-	.bss : {
-		*(.bss)
-	}
-}

+ 0 - 17
tools/lzma-loader/src/loader.lds.in

@@ -1,17 +0,0 @@
-OUTPUT_ARCH(mips)
-ENTRY(startup)
-SECTIONS {
-	. = TEXT_START;
-	.text : {
-		*(.text)
-		*(.rodata)
-	}
-
-	.data : {
-		*(.data)
-	}
-
-	.bss : {
-		*(.bss)
-	}
-}

BIN
tools/lzma-loader/src/loader.o


+ 5 - 10
tools/lzma/Makefile

@@ -4,27 +4,22 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=		lzma
-PKG_VERSION:=		4.65
+PKG_VERSION:=		4.32.7
 PKG_RELEASE:=		1
 PKG_MD5SUM:=		434e51a018b4c8ef377bf81520a53af0
-PKG_SITES:=		http://downloads.openwrt.org/sources/
-
-DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.bz2
+PKG_SITES:=		http://tukaani.org/lzma/
 
 include ../rules.mk
 
 install: ${STAGING_HOST_DIR}/usr/bin/lzma
 
-UTIL_DIR=$(WRKBUILD)/C/LzmaUtil
-ALONE_DIR=$(WRKBUILD)/CPP/7zip/Compress/LZMA_Alone
-
 $(WRKBUILD)/.compiled: ${WRKDIST}/.prepared
-	$(MAKE) -C $(UTIL_DIR) -f makefile.gcc
-	$(MAKE) -C $(ALONE_DIR) -f makefile.gcc
+	(cd ${WRKBUILD}; PATH="$(STAGING_HOST_DIR)/usr/bin:$$PATH" ./configure)
+	${MAKE} -C ${WRKBUILD} CC='${CC_FOR_BUILD}'
 	touch $@
 
 ${STAGING_HOST_DIR}/usr/bin/lzma: $(WRKBUILD)/.compiled
-	$(INSTALL_BIN) $(WRKBUILD)/CPP/7zip/Compress/LZMA_Alone/lzma_alone \
+	$(INSTALL_BIN) $(WRKBUILD)/src/lzma/lzma \
 		$(STAGING_HOST_DIR)/usr/bin/lzma
 
 include $(TOPDIR)/mk/tools.mk

+ 0 - 13
tools/lzma/patches/001-large_files.patch

@@ -1,13 +0,0 @@
-Index: lzma-4.65/CPP/7zip/Compress/LZMA_Alone/makefile.gcc
-===================================================================
---- lzma-4.65.orig/CPP/7zip/Compress/LZMA_Alone/makefile.gcc	2009-05-15 23:33:51.000000000 +0200
-+++ lzma-4.65/CPP/7zip/Compress/LZMA_Alone/makefile.gcc	2009-06-01 22:00:54.000000000 +0200
-@@ -3,7 +3,7 @@
- CXX_C = gcc -O2 -Wall
- LIB = -lm
- RM = rm -f
--CFLAGS = -c
-+CFLAGS = -c -D_FILE_OFFSET_BITS=64
- 
- ifdef SystemDrive
- IS_MINGW = 1

+ 0 - 1059
tools/lzma/patches/002-lzmp.patch

@@ -1,1059 +0,0 @@
-Index: lzma-4.65/CPP/7zip/Compress/LZMA_Alone/lzmp.cpp
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ lzma-4.65/CPP/7zip/Compress/LZMA_Alone/lzmp.cpp	2009-06-01 22:01:10.000000000 +0200
-@@ -0,0 +1,895 @@
-+/*
-+ * LZMA command line tool similar to gzip to encode and decode LZMA files.
-+ *
-+ * Copyright (C) 2005 Ville Koskinen
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
-+ * USA.
-+ */
-+
-+#include "../../../Common/MyInitGuid.h"
-+
-+#include <iostream>
-+using std::cout;
-+using std::cerr;
-+using std::endl;
-+
-+#include <cstdio>
-+#include <cstdlib>
-+#include <cstring>
-+
-+#include <string>
-+using std::string;
-+#include <vector>
-+using std::vector;
-+typedef vector<string> stringVector;
-+
-+#include <unistd.h>
-+#include <getopt.h>
-+#include <signal.h>
-+
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <utime.h>
-+#include <sys/time.h> // futimes()
-+
-+// For Solaris
-+#ifndef HAVE_FUTIMES
-+//#define futimes(fd, tv) futimesat(fd, NULL, tv)
-+#endif
-+
-+#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
-+#include <fcntl.h>
-+#include <io.h>
-+#define MY_SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
-+#else
-+#define MY_SET_BINARY_MODE(file)
-+#endif
-+
-+#include "../../../7zip/Common/FileStreams.h"
-+
-+#include "../../../Common/Types.h"
-+
-+#include "../../../7zip/Compress/LzmaDecoder.h"
-+#include "../../../7zip/Compress/LzmaEncoder.h"
-+
-+#include "Exception.h"
-+
-+#include "lzma_version.h"
-+
-+namespace lzma {
-+
-+const char *PROGRAM_VERSION = PACKAGE_VERSION;
-+const char *PROGRAM_COPYRIGHT = "Copyright (C) 2006 Ville Koskinen";
-+
-+/* LZMA_Alone switches:
-+    -a{N}:  set compression mode - [0, 2], default: 2 (max)
-+    -d{N}:  set dictionary - [0,28], default: 23 (8MB)
-+    -fb{N}: set number of fast bytes - [5, 255], default: 128
-+    -lc{N}: set number of literal context bits - [0, 8], default: 3
-+    -lp{N}: set number of literal pos bits - [0, 4], default: 0
-+    -pb{N}: set number of pos bits - [0, 4], default: 2
-+    -mf{MF_ID}: set Match Finder: [bt2, bt3, bt4, bt4b, pat2r, pat2,
-+                pat2h, pat3h, pat4h, hc3, hc4], default: bt4
-+*/
-+
-+struct lzma_option {
-+	short compression_mode;			// -a
-+	short dictionary;			// -d
-+	short fast_bytes;			// -fb
-+	wchar_t *match_finder;			// -mf
-+	short literal_context_bits;		// -lc
-+	short literal_pos_bits;			// -lp
-+	short pos_bits;				// -pb
-+};
-+
-+/* The following is a mapping from gzip/bzip2 style -1 .. -9 compression modes
-+ * to the corresponding LZMA compression modes. Thanks, Larhzu, for coining
-+ * these. */
-+const lzma_option option_mapping[] = {
-+	{ 0,  0,  0,    NULL, 0, 0, 0},		// -0 (needed for indexing)
-+	{ 0, 16, 64,  L"hc4", 3, 0, 2},		// -1
-+	{ 0, 20, 64,  L"hc4", 3, 0, 2},		// -2
-+	{ 1, 19, 64,  L"bt4", 3, 0, 2},		// -3
-+	{ 2, 20, 64,  L"bt4", 3, 0, 2},		// -4
-+	{ 2, 21, 128, L"bt4", 3, 0, 2},		// -5
-+	{ 2, 22, 128, L"bt4", 3, 0, 2},		// -6
-+	{ 2, 23, 128, L"bt4", 3, 0, 2},		// -7
-+	{ 2, 24, 255, L"bt4", 3, 0, 2},		// -8
-+	{ 2, 25, 255, L"bt4", 3, 0, 2},		// -9
-+};
-+
-+struct extension_pair {
-+	char *from;
-+	char *to;
-+};
-+
-+const extension_pair known_extensions[] = {
-+	{ ".lzma", "" },
-+	{ ".tlz", ".tar" },
-+	{ NULL, NULL }
-+};
-+
-+/* Sorry, I just happen to like enumerations. */
-+enum PROGRAM_MODE {
-+	PM_COMPRESS = 0,
-+	PM_DECOMPRESS,
-+	PM_TEST,
-+	PM_HELP,
-+	PM_LICENSE,
-+	PM_VERSION
-+};
-+
-+enum {
-+	STATUS_OK = 0,
-+	STATUS_ERROR = 1,
-+	STATUS_WARNING = 2
-+};
-+
-+/* getopt options. */
-+/* struct option { name, has_arg, flag, val } */
-+const struct option long_options[] = {
-+	{ "stdout", 0, 0, 'c' },
-+	{ "decompress", 0, 0, 'd' },
-+	{ "compress", 0, 0, 'z' },
-+	{ "keep", 0, 0, 'k' },
-+	{ "force", 0, 0, 'f' },
-+	{ "test", 0, 0, 't' },
-+	{ "suffix", 1, 0, 'S' },
-+	{ "quiet", 0, 0, 'q' },
-+	{ "verbose", 0, 0, 'v' },
-+	{ "help", 0, 0, 'h' },
-+	{ "license", 0, 0, 'L' },
-+	{ "version", 0, 0, 'V' },
-+	{ "fast", 0, 0, '1' },
-+	{ "best", 0, 0, '9' },
-+	{ 0, 0, 0, 0 }
-+};
-+
-+/* getopt option string (for the above options). */
-+const char option_string[] = "cdzkftS:qvhLV123456789A:D:F:";
-+
-+/* Defaults. */
-+PROGRAM_MODE program_mode = PM_COMPRESS;
-+int	verbosity			= 0;
-+bool	stdinput			= false;
-+bool	stdoutput			= false;
-+bool	keep				= false;
-+bool	force				= false;
-+int	compression_mode		= 7;
-+//char	*suffix				= strdup(".lzma");
-+char	*suffix				= strdup(known_extensions[0].from);
-+lzma_option	advanced_options 	= { -1, -1, -1, NULL, -1, -1, -1 };
-+
-+void print_help(const char *const argv0)
-+{
-+	// Help goes to stdout while other messages go to stderr.
-+	cout << "\nlzma " << PROGRAM_VERSION
-+		<< " " << PROGRAM_COPYRIGHT << "\n"
-+		"Based on LZMA SDK " << LZMA_SDK_VERSION_STRING << " "
-+		<< LZMA_SDK_COPYRIGHT_STRING
-+		<< "\n\nUsage: " << argv0
-+		<< " [flags and input files in any order]\n"
-+"  -c --stdout       output to standard output\n"
-+"  -d --decompress   force decompression\n"
-+"  -z --compress     force compression\n"
-+"  -k --keep         keep (don't delete) input files\n"
-+"  -f --force        force overwrite of output file and compress links\n"
-+"  -t --test         test compressed file integrity\n"
-+"  -S .suf  --suffix .suf   use suffix .suf on compressed files\n"
-+"  -q --quiet        suppress error messages\n"
-+"  -v --verbose      be verbose\n"
-+"  -h --help         print this message\n"
-+"  -L --license      display the license information\n"
-+"  -V --version      display version numbers of LZMA SDK and lzma\n"
-+"  -1 .. -2          fast compression\n"
-+"  -3 .. -9          good to excellent compression. -7 is the default.\n"
-+"     --fast         alias for -1\n"
-+"     --best         alias for -9 (usually *not* what you want)\n\n"
-+"  Memory usage depends a lot on the chosen compression mode -1 .. -9.\n"
-+"  See the man page lzma(1) for details.\n\n";
-+}
-+
-+void print_license(void)
-+{
-+	cout << "\n  LZMA command line tool " << PROGRAM_VERSION << " - "
-+		<< PROGRAM_COPYRIGHT
-+		<< "\n  LZMA SDK " << LZMA_SDK_VERSION_STRING << " - "
-+		<< LZMA_SDK_COPYRIGHT_STRING
-+		<< "\n  This program is a part of the LZMA utils package.\n"
-+		"  http://tukaani.org/lzma/\n\n"
-+"  This program is free software; you can redistribute it and/or\n"
-+"  modify it under the terms of the GNU General Public License\n"
-+"  as published by the Free Software Foundation; either version 2\n"
-+"  of the License, or (at your option) any later version.\n"
-+"\n"
-+"  This program is distributed in the hope that it will be useful,\n"
-+"  but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-+"  GNU General Public License for more details.\n"
-+"\n";
-+}
-+
-+void print_version(void)
-+{
-+	cout << "LZMA command line tool " << PROGRAM_VERSION << "\n"
-+		<< "LZMA SDK " << LZMA_SDK_VERSION_STRING << "\n";
-+}
-+
-+short str2int (const char *str, const int &min, const int &max)
-+{
-+	int value = -1;
-+	char *endptr = NULL;
-+	if (str == NULL || str[0] == '\0')
-+		throw ArgumentException("Invalid integer option");
-+	value = strtol (str, &endptr, 10);
-+	if (*endptr != '\0' || value < min || value > max)
-+		throw ArgumentException("Invalid integer option");
-+	return value;
-+}
-+
-+void parse_options(int argc, char **argv, stringVector &filenames)
-+{
-+	/* Snatched from getopt(3). */
-+	int c;
-+
-+	/* Check how we were called */
-+	{
-+		char *p = strrchr (argv[0], '/'); // Remove path prefix, if any
-+		if (p++ == NULL)
-+			p = argv[0];
-+		if (strstr (p, "un") != NULL) {
-+			program_mode = PM_DECOMPRESS;
-+		} else if (strstr (p, "cat") != NULL) {
-+			program_mode = PM_DECOMPRESS;
-+			stdoutput = true;
-+		}
-+	}
-+
-+	while (-1 != (c = getopt_long(argc, argv, option_string,
-+			long_options, NULL))) {
-+		switch (c) {
-+			// stdout
-+			case 'c':
-+				stdoutput = true;
-+				break;
-+
-+			// decompress
-+			case 'd':
-+				program_mode = PM_DECOMPRESS;
-+				break;
-+
-+			// compress
-+			case 'z':
-+				program_mode = PM_COMPRESS;
-+				break;
-+
-+			// keep
-+			case 'k':
-+				keep = true;
-+				break;
-+
-+			// force
-+			case 'f':
-+				force = true;
-+				break;
-+
-+			// test
-+			case 't':
-+				program_mode = PM_TEST;
-+				break;
-+
-+			// suffix
-+			case 'S':
-+				if (optarg) {
-+					free(suffix);
-+					suffix = strdup(optarg);
-+				}
-+				break;
-+
-+			// quiet
-+			case 'q':
-+				verbosity = 0;
-+				break;
-+
-+			// verbose
-+			case 'v':
-+				verbosity++;
-+				break;
-+
-+			// help
-+			case 'h':
-+				program_mode = PM_HELP;
-+				break;
-+
-+			// license
-+			case 'L':
-+				program_mode = PM_LICENSE;
-+				break;
-+
-+			// version
-+			case 'V':
-+				program_mode = PM_VERSION;
-+				break;
-+
-+			case '1': case '2': case '3': case '4': case '5':
-+			case '6': case '7': case '8': case '9':
-+				compression_mode = c - '0';
-+				break;
-+
-+			// Advanced options //
-+			// Compression mode
-+			case 'A':
-+				advanced_options.compression_mode =
-+						str2int (optarg, 0, 2);
-+				break;
-+
-+			// Dictionary size
-+			case 'D':
-+				advanced_options.dictionary =
-+						str2int (optarg, 0, 28);
-+				break;
-+
-+			// Fast bytes
-+			case 'F':
-+				advanced_options.fast_bytes =
-+						str2int (optarg, 0, 273);
-+				break;
-+
-+			default:
-+				throw ArgumentException("");
-+				break;
-+		} // switch(c)
-+	} // while(1)
-+
-+	for (int i = optind; i < argc; i++) {
-+		if (strcmp("-", argv[i]) == 0)
-+			continue;
-+		filenames.push_back(argv[i]);
-+	}
-+} // parse_options
-+
-+void set_encoder_properties(NCompress::NLzma::CEncoder *encoder,
-+		lzma_option &opt)
-+{
-+	/* Almost verbatim from LzmaAlone.cpp. */
-+	    PROPID propIDs[] =
-+	{
-+		NCoderPropID::kDictionarySize,
-+		NCoderPropID::kPosStateBits,
-+		NCoderPropID::kLitContextBits,
-+		NCoderPropID::kLitPosBits,
-+		NCoderPropID::kAlgorithm,
-+		NCoderPropID::kNumFastBytes,
-+		NCoderPropID::kMatchFinder,
-+		NCoderPropID::kEndMarker
-+	};
-+	const int kNumProps = sizeof(propIDs) / sizeof(propIDs[0]);
-+#define VALUE(x) (advanced_options.x >= 0 ? advanced_options.x : opt.x)
-+	PROPVARIANT properties[kNumProps];
-+	for (int p = 0; p < 6; p++)
-+		properties[p].vt = VT_UI4;
-+	properties[0].ulVal = UInt32(1 << VALUE (dictionary));
-+	properties[1].ulVal = UInt32(VALUE (pos_bits));
-+	properties[2].ulVal = UInt32(VALUE (literal_context_bits));
-+	properties[3].ulVal = UInt32(VALUE (literal_pos_bits));
-+	properties[4].ulVal = UInt32(VALUE (compression_mode));
-+	properties[5].ulVal = UInt32(VALUE (fast_bytes));
-+#undef VALUE
-+
-+	properties[6].vt = VT_BSTR;
-+	properties[6].bstrVal = (BSTR)opt.match_finder;
-+
-+	properties[7].vt = VT_BOOL;
-+	properties[7].boolVal = stdinput ? VARIANT_TRUE : VARIANT_FALSE;
-+
-+	if (encoder->SetCoderProperties(propIDs, properties, kNumProps) != S_OK)
-+		throw Exception("SetCoderProperties() error");
-+}
-+
-+void encode(NCompress::NLzma::CEncoder *encoderSpec,
-+		CMyComPtr<ISequentialInStream> inStream,
-+		CMyComPtr<ISequentialOutStream> outStream,
-+		lzma_option encoder_options,
-+		UInt64 fileSize)
-+{
-+	set_encoder_properties(encoderSpec, encoder_options);
-+
-+	encoderSpec->WriteCoderProperties(outStream);
-+
-+	for (int i = 0; i < 8; i++)
-+	{
-+		Byte b = Byte(fileSize >> (8 * i));
-+		if (outStream->Write(&b, sizeof(b), 0) != S_OK)
-+			throw Exception("Write error while encoding");
-+	}
-+
-+	HRESULT result = encoderSpec->Code(inStream, outStream, 0, 0, 0);
-+
-+	if (result == E_OUTOFMEMORY)
-+		throw Exception("Cannot allocate memory");
-+	else if (result != S_OK) {
-+		char buffer[33];
-+		snprintf(buffer, 33, "%d", (unsigned int)result);
-+		throw Exception(string("Encoder error: ") + buffer);
-+	}
-+}
-+
-+void decode(NCompress::NLzma::CDecoder *decoderSpec,
-+		CMyComPtr<ISequentialInStream> inStream,
-+		CMyComPtr<ISequentialOutStream> outStream)
-+{
-+	const UInt32 kPropertiesSize = 5;
-+	Byte properties[kPropertiesSize];
-+	UInt32 processedSize;
-+	UInt64 fileSize = 0;
-+
-+	if (inStream->Read(properties, kPropertiesSize, &processedSize) != S_OK)
-+		throw Exception("Read error");
-+	if (processedSize != kPropertiesSize)
-+		throw Exception("Read error");
-+	if (decoderSpec->SetDecoderProperties2(properties, kPropertiesSize) != S_OK)
-+		throw Exception("SetDecoderProperties() error");
-+
-+	for (int i = 0; i < 8; i++)
-+	{
-+		Byte b;
-+
-+		if (inStream->Read(&b, sizeof(b), &processedSize) != S_OK)
-+			throw Exception("Read error");
-+		if (processedSize != 1)
-+			throw Exception("Read error");
-+
-+		fileSize |= ((UInt64)b) << (8 * i);
-+	}
-+
-+	if (decoderSpec->Code(inStream, outStream, 0, &fileSize, 0) != S_OK)
-+		throw Exception("Decoder error");
-+}
-+
-+int open_instream(const string infile,
-+		CMyComPtr<ISequentialInStream> &inStream,
-+		UInt64 &fileSize)
-+{
-+	CInFileStream *inStreamSpec = new CInFileStream;
-+	inStream = inStreamSpec;
-+	if (!inStreamSpec->Open(infile.c_str()))
-+		throw Exception("Cannot open input file " + infile);
-+
-+	inStreamSpec->File.GetLength(fileSize);
-+
-+	return inStreamSpec->File.GetHandle();
-+}
-+
-+int open_outstream(const string outfile,
-+		CMyComPtr<ISequentialOutStream> &outStream)
-+{
-+	COutFileStream *outStreamSpec = new COutFileStream;
-+	outStream = outStreamSpec;
-+
-+	bool open_by_force = (program_mode == PM_TEST) | force;
-+
-+	if (!outStreamSpec->Create(outfile.c_str(), open_by_force))
-+		throw Exception("Cannot open output file " + outfile);
-+
-+	return outStreamSpec->File.GetHandle();
-+}
-+
-+double get_ratio(int inhandle, int outhandle)
-+{
-+	struct stat in_stats, out_stats;
-+	fstat(inhandle, &in_stats);
-+	fstat(outhandle, &out_stats);
-+
-+	return (double)out_stats.st_size / (double)in_stats.st_size;
-+}
-+
-+mode_t get_file_mode(string filename)
-+{
-+	struct stat in_stat;
-+	lstat(filename.c_str(), &in_stat);
-+
-+	return in_stat.st_mode;
-+}
-+
-+bool string_ends_with(string str, string ending)
-+{
-+	return equal(ending.rbegin(), ending.rend(), str.rbegin());
-+}
-+
-+bool extension_is_known(string filename)
-+{
-+	bool known_format = false;
-+	extension_pair extension; int i = 1;
-+
-+	extension = known_extensions[0];
-+	while (extension.from != NULL) {
-+		if (string_ends_with(filename, extension.from)) {
-+			known_format = true;
-+			break;
-+		}
-+		extension = known_extensions[i];
-+		i++;
-+	}
-+
-+	if (!known_format) {
-+		if (!string_ends_with(filename, suffix)) {
-+			return false;
-+		}
-+	}
-+
-+	return true;
-+}
-+
-+string replace_extension(string filename)
-+{
-+	int suffix_starts_at = filename.length() - strlen (suffix);
-+	string from_suffix = filename.substr(suffix_starts_at, strlen (suffix));
-+	string ret = filename.substr(0, suffix_starts_at);
-+	extension_pair extension; int i = 1;
-+
-+	bool found_replacement = false;
-+	extension = known_extensions[0];
-+	while (extension.from != NULL) {
-+		if (from_suffix.compare(extension.from) == 0) {
-+			ret += extension.to;
-+			found_replacement = true;
-+			break;
-+		}
-+
-+		extension = known_extensions[i];
-+		i++;
-+	}
-+
-+	return ret;
-+}
-+
-+string pretty_print_status(string filename, string output_filename,
-+		string ratio)
-+{
-+	string ret = "";
-+
-+	ret += filename;
-+	ret += ":\t ";
-+
-+	if (program_mode == PM_TEST) {
-+		ret += "decoded succesfully";
-+
-+		return ret;
-+	}
-+
-+	if (!stdinput && !stdoutput) {
-+		ret += ratio;
-+		ret += " -- ";
-+	}
-+
-+	if (program_mode == PM_COMPRESS) {
-+		if (keep) {
-+			ret += "encoded succesfully";
-+
-+			return ret;
-+		}
-+
-+		ret += "replaced with ";
-+		ret += output_filename;
-+
-+		return ret;
-+	}
-+
-+	if (program_mode == PM_DECOMPRESS) {
-+		if (keep) {
-+			ret += "decoded succesfully";
-+
-+			return ret;
-+		}
-+
-+		ret += "replaced with ";
-+		ret += output_filename;
-+
-+		return ret;
-+	}
-+
-+	return ret;
-+}
-+
-+static string archive_name; // I know, it is crude, but I haven't found any other
-+    // way then making a global variable to transfer filename to handler
-+
-+void signal_handler (int signum)
-+{
-+    unlink (archive_name.c_str()); // deleting
-+    signal (signum, SIG_DFL); // we return the default function to used signal
-+    kill (getpid(), signum); // and then send this signal to the process again
-+}
-+
-+} // namespace lzma
-+
-+
-+int main(int argc, char **argv)
-+{
-+	using namespace lzma;
-+	using std::cerr;
-+
-+	stringVector filenames;
-+
-+	signal (SIGTERM,signal_handler);
-+	signal (SIGHUP,signal_handler);
-+	signal (SIGINT,signal_handler);
-+
-+	try {
-+		parse_options(argc, argv, filenames);
-+	}
-+	catch (...) {
-+		return STATUS_ERROR;
-+	}
-+
-+	if (program_mode == PM_HELP) {
-+		print_help(argv[0]);
-+		return STATUS_OK;
-+	}
-+	else if (program_mode == PM_LICENSE) {
-+		print_license();
-+		return STATUS_OK;
-+	}
-+	else if (program_mode == PM_VERSION) {
-+		print_version();
-+		return STATUS_OK;
-+	}
-+
-+	if (filenames.empty()) {
-+		stdinput = true;
-+		stdoutput = true;
-+
-+		/* FIXME: get rid of this */
-+		filenames.push_back("-");
-+	}
-+
-+	/* Protection: always create new files with 0600 in order to prevent
-+	 * outsiders from reading incomplete data. */
-+	umask(0077);
-+
-+	bool warning = false;
-+
-+	for (int i = 0; i < filenames.size(); i++) {
-+		CMyComPtr<ISequentialInStream> inStream;
-+		CMyComPtr<ISequentialOutStream> outStream;
-+		UInt64 fileSize = 0;
-+		int inhandle = 0, outhandle = 0;
-+		string output_filename;
-+
-+		if (stdinput) {
-+			inStream = new CStdInFileStream;
-+			MY_SET_BINARY_MODE(stdin);
-+			fileSize = (UInt64)(Int64)-1;
-+
-+			inhandle = STDIN_FILENO;
-+
-+			outStream = new CStdOutFileStream;
-+			MY_SET_BINARY_MODE(stdout);
-+
-+			outhandle = STDOUT_FILENO;
-+		}
-+		else {
-+			mode_t infile_mode = get_file_mode(filenames[i]);
-+			if (!S_ISREG(infile_mode)) {
-+				if (S_ISDIR(infile_mode)) {
-+					warning = true;
-+					cerr << argv[0] << ": " << filenames[i] << ": "
-+						<< "cowardly refusing to work on directory"
-+						<< endl;
-+
-+					continue;
-+				}
-+				else if (S_ISLNK(infile_mode)) {
-+					if (!stdoutput && !force) {
-+						warning = true;
-+
-+					cerr << argv[0] << ": " << filenames[i] << ": "
-+							<< "cowardly refusing to work on symbolic link "
-+							<< "(use --force to force encoding or decoding)"
-+							<< endl;
-+
-+						continue;
-+					}
-+				}
-+				else {
-+					warning = true;
-+
-+					cerr << argv[0] << ": " << filenames[i] << ": "
-+						<< "doesn't exist or is not a regular file"
-+						<< endl;
-+
-+					continue;
-+				}
-+			}
-+
-+			// Test if the file already ends with *suffix.
-+			if (program_mode == PM_COMPRESS && !force
-+					&& string_ends_with(filenames[i],
-+						suffix)) {
-+				warning = true;
-+
-+				cerr << filenames[i] << " already has "
-+					<< suffix << " suffix -- unchanged\n";
-+
-+				continue;
-+			}
-+
-+			// Test if the file extension is known.
-+			if (program_mode == PM_DECOMPRESS
-+					&& !extension_is_known(filenames[i])) {
-+				warning = true;
-+
-+				cerr << filenames[i] << ": "
-+					<< " unknown suffix -- unchanged"
-+					<< endl;
-+
-+				continue;
-+			}
-+
-+			try {
-+				inhandle = open_instream(filenames[i], inStream, fileSize);
-+			}
-+			catch (Exception e) {
-+				cerr << argv[0] << ": " << e.what() << endl;
-+				return STATUS_ERROR;
-+			}
-+
-+			if (stdoutput) {
-+				outStream = new CStdOutFileStream;
-+				MY_SET_BINARY_MODE(stdout);
-+
-+				outhandle = STDOUT_FILENO;
-+			}
-+			else {
-+				/* Testing mode is nothing else but decoding
-+				 * and throwing away the result. */
-+				if (program_mode == PM_TEST)
-+					output_filename = "/dev/null";
-+				else if (program_mode == PM_DECOMPRESS)
-+					output_filename = replace_extension(filenames[i]);
-+				else
-+					output_filename = filenames[i]
-+							+ suffix;
-+				archive_name = output_filename;
-+
-+				try {
-+					outhandle = open_outstream(output_filename, outStream);
-+				}
-+				catch (Exception e) {
-+					cerr << argv[0] << ": " << e.what() << endl;
-+					return STATUS_ERROR;
-+				}
-+			}
-+
-+		}
-+
-+		// Unless --force is specified, do not read/write compressed
-+		// data from/to a terminal.
-+		if (!force) {
-+			if (program_mode == PM_COMPRESS && isatty(outhandle)) {
-+				cerr << argv[0] << ": compressed data not "
-+					"written to a terminal. Use "
-+					"-f to force compression.\n"
-+					<< argv[0] << ": For help, type: "
-+					<< argv[0] << " -h\n";
-+				return STATUS_ERROR;
-+			} else if (program_mode == PM_DECOMPRESS
-+					&& isatty(inhandle)) {
-+				cerr << argv[0] << ": compressed data not "
-+					"read from a terminal. Use "
-+					"-f to force decompression.\n"
-+					<< argv[0] << ": For help, type: "
-+					<< argv[0] << " -h\n";
-+				return STATUS_ERROR;
-+			}
-+		}
-+
-+		if (program_mode == PM_COMPRESS) {
-+			    NCompress::NLzma::CEncoder *encoderSpec =
-+				      new NCompress::NLzma::CEncoder;
-+
-+			lzma_option options = option_mapping[compression_mode];
-+
-+			try {
-+				encode(encoderSpec, inStream, outStream, options, fileSize);
-+			}
-+			catch (Exception e) {
-+				cerr << argv[0] << ": " << e.what() << endl;
-+				unlink(output_filename.c_str());
-+				delete(encoderSpec);
-+
-+				return STATUS_ERROR;
-+			}
-+
-+			delete(encoderSpec);
-+		}
-+		else {			// PM_DECOMPRESS | PM_TEST
-+		    NCompress::NLzma::CDecoder *decoderSpec =
-+		        new NCompress::NLzma::CDecoder;
-+
-+			try {
-+				decode(decoderSpec, inStream, outStream);
-+			}
-+			catch (Exception e) {
-+				cerr << argv[0] << ": " << e.what() << endl;
-+				unlink(output_filename.c_str());
-+				delete(decoderSpec);
-+
-+				return STATUS_ERROR;
-+			}
-+
-+			delete(decoderSpec);
-+		}
-+
-+		/* Set permissions and owners. */
-+		if ( (program_mode == PM_COMPRESS || program_mode == PM_DECOMPRESS )
-+				&& (!stdinput && !stdoutput) ) {
-+
-+			int ret = 0;
-+			struct stat file_stats;
-+			ret = fstat(inhandle, &file_stats);
-+
-+			ret = fchmod(outhandle, file_stats.st_mode);
-+			ret = fchown(outhandle, file_stats.st_uid, file_stats.st_gid);
-+			// We need to call fchmod() again, since otherwise the SUID bits
-+			// are lost.
-+			ret = fchmod(outhandle, file_stats.st_mode);
-+
-+			struct timeval file_times[2];
-+			// Access time
-+			file_times[0].tv_sec = file_stats.st_atime;
-+			file_times[0].tv_usec = 0;
-+			// Modification time
-+			file_times[1].tv_sec = file_stats.st_mtime;
-+			file_times[1].tv_usec = 0;
-+
-+			ret = futimes(outhandle, file_times);
-+
-+			if (!keep)
-+				unlink(filenames[i].c_str());
-+		}
-+
-+		if (verbosity > 0) {
-+			if (stdoutput) {
-+				cerr << filenames[i] << ":\t ";
-+				cerr << "decoded succesfully"
-+					<< endl;
-+			}
-+
-+			else {
-+				char buf[10] = { 0 };
-+
-+				if (program_mode == PM_DECOMPRESS)
-+					snprintf(buf, 10, "%.2f%%",
-+							(1 - get_ratio(outhandle, inhandle)) * 100);
-+				if (program_mode == PM_COMPRESS)
-+					snprintf(buf, 10, "%.2f%%",
-+							(1 - get_ratio(inhandle, outhandle)) * 100);
-+
-+				string ratio = buf;
-+				cerr << pretty_print_status(filenames[i], output_filename,
-+						ratio)
-+					<< endl;
-+			}
-+		}
-+	}
-+
-+	if (warning)
-+		return STATUS_WARNING;
-+
-+	return STATUS_OK;
-+}
-+
-Index: lzma-4.65/CPP/7zip/Compress/LZMA_Alone/Exception.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ lzma-4.65/CPP/7zip/Compress/LZMA_Alone/Exception.h	2009-06-01 22:01:10.000000000 +0200
-@@ -0,0 +1,45 @@
-+/* A couple of exceptions for lzmp.
-+ *
-+ * Copyright (C) 2005 Ville Koskinen
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ */
-+
-+#ifndef _EXCEPTION_H_
-+#define _EXCEPTION_H_
-+
-+#include <string>
-+using std::string;
-+
-+class Exception
-+{
-+private:
-+	string message;
-+public:
-+	Exception(char *what): message(what) { }
-+	Exception(string what): message(what) { }
-+
-+	~Exception() { }
-+
-+	string what(void) { return message; }
-+};
-+
-+class ArgumentException: public Exception
-+{
-+public:
-+	ArgumentException(char *what): Exception(what) { }
-+	ArgumentException(string what): Exception(what) { }
-+
-+	~ArgumentException() { }
-+};
-+
-+#endif
-+
-Index: lzma-4.65/CPP/7zip/Compress/LZMA_Alone/makefile.gcc
-===================================================================
---- lzma-4.65.orig/CPP/7zip/Compress/LZMA_Alone/makefile.gcc	2009-06-01 22:00:54.000000000 +0200
-+++ lzma-4.65/CPP/7zip/Compress/LZMA_Alone/makefile.gcc	2009-06-01 22:06:13.000000000 +0200
-@@ -1,9 +1,10 @@
--PROG = lzma
-+PROG = lzma_alone
-+PROG2 = lzma
- CXX = g++ -O2 -Wall
- CXX_C = gcc -O2 -Wall
- LIB = -lm
- RM = rm -f
--CFLAGS = -c -D_FILE_OFFSET_BITS=64
-+CFLAGS = -c -I ../../../ -D_FILE_OFFSET_BITS=64 -DPACKAGE_VERSION="\"4.32.0beta3\""
- 
- ifdef SystemDrive
- IS_MINGW = 1
-@@ -45,12 +46,35 @@
-   Lzma86Dec.o \
-   Lzma86Enc.o \
- 
-+OBJS2 = \
-+	C_FileIO.o \
-+	CRC.o \
-+	Alloc.o \
-+	FileStreams.o \
-+	StreamUtils.o \
-+	InBuffer.o \
-+	OutBuffer.o \
-+	LzmaDecoder.o \
-+	StringConvert.o \
-+	StringToInt.o \
-+	LzmaEncoder.o \
-+	LzmaDec.o \
-+	LzmaEnc.o \
-+	LzFind.o \
-+	7zCrc.o \
-+	lzmp.o
- 
--all: $(PROG)
-+all: $(PROG) $(PROG2)
- 
- $(PROG): $(OBJS)
- 	$(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) $(LIB2)
- 
-+$(PROG2): $(OBJS2)
-+	$(CXX) -o $(PROG2) $(LDFLAGS) $(OBJS2) $(LIB)
-+
-+lzmp.o: lzmp.cpp
-+	$(CXX) $(CFLAGS) lzmp.cpp
-+
- LzmaAlone.o: LzmaAlone.cpp
- 	$(CXX) $(CFLAGS) LzmaAlone.cpp
- 
-@@ -131,5 +153,5 @@
- 	$(CXX_C) $(CFLAGS) ../../../../C/LzmaUtil/Lzma86Enc.c
- 
- clean:
--	-$(RM) $(PROG) $(OBJS)
-+	-$(RM) $(PROG) $(PROG2) $(OBJS)
- 
-Index: lzma-4.65/CPP/7zip/Compress/LZMA_Alone/lzma_version.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ lzma-4.65/CPP/7zip/Compress/LZMA_Alone/lzma_version.h	2009-06-01 22:01:10.000000000 +0200
-@@ -0,0 +1,31 @@
-+#ifndef LZMA_VERSION_H
-+#define LZMA_VERSION_H
-+
-+/*
-+    Version and copyright information used by LZMA utils.
-+*/
-+
-+static const char *LZMA_SDK_VERSION_STRING = "4.43";
-+
-+static const char *LZMA_SDK_COPYRIGHT_STRING =
-+		"Copyright (C) 1999-2006 Igor Pavlov";
-+
-+static const char *LZMA_SDK_COPYRIGHT_INFO =
-+		"  See http://7-zip.org/sdk.html or the documentation of LZMA SDK for\n"
-+		"  the license. For reference, the version 4.43 is free software\n"
-+		"  licensed under the GNU LGPL.";
-+
-+
-+static const char *LZMA_UTILS_VERSION_STRING = PACKAGE_VERSION;
-+
-+static const char *LZMA_UTILS_COPYRIGHT_STRING =
-+		"Copyright (C) 2006 Lasse Collin";
-+
-+static const char *LZMA_UTILS_COPYRIGHT_INFO =
-+		"This program comes with ABSOLUTELY NO WARRANTY.\n"
-+		"You may redistribute copies of this program\n"
-+		"under the terms of the GNU General Public License.\n"
-+		"For more information about these matters, see the file "
-+		"named COPYING.\n";
-+
-+#endif /* ifndef LZMA_VERSION_H */
-Index: lzma-4.65/CPP/Common/C_FileIO.h
-===================================================================
---- lzma-4.65.orig/CPP/Common/C_FileIO.h	2009-05-15 23:33:51.000000000 +0200
-+++ lzma-4.65/CPP/Common/C_FileIO.h	2009-06-01 22:06:56.000000000 +0200
-@@ -24,6 +24,7 @@
-   bool Close();
-   bool GetLength(UInt64 &length) const;
-   off_t Seek(off_t distanceToMove, int moveMethod) const;
-+  int GetHandle() const { return _handle; }
- };
- 
- class CInFile: public CFileBase

+ 0 - 26
tools/lzma/patches/003-compile_fixes.patch

@@ -1,26 +0,0 @@
-diff -urN lzma-4.65/CPP/7zip/Common/FileStreams.h lzma-4.65.new/CPP/7zip/Common/FileStreams.h
---- lzma-4.65/CPP/7zip/Common/FileStreams.h	2009-05-15 23:33:51.000000000 +0200
-+++ lzma-4.65.new/CPP/7zip/Common/FileStreams.h	2009-06-01 22:30:01.000000000 +0200
-@@ -72,6 +72,7 @@
-   public IOutStream,
-   public CMyUnknownImp
- {
-+public:
-   #ifdef USE_WIN_FILE
-   NWindows::NFile::NIO::COutFile File;
-   #else
-diff -urN lzma-4.65/CPP/Common/MyWindows.h lzma-4.65.new/CPP/Common/MyWindows.h
---- lzma-4.65/CPP/Common/MyWindows.h	2009-05-15 23:33:51.000000000 +0200
-+++ lzma-4.65.new/CPP/Common/MyWindows.h	2009-06-01 22:29:26.000000000 +0200
-@@ -101,8 +101,11 @@
- 
- #ifdef __cplusplus
- 
-+#ifndef INITGUID
-+#define INITGUID
- DEFINE_GUID(IID_IUnknown,
- 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
-+#endif
- struct IUnknown
- {
-   STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE;

+ 0 - 70
tools/lzma/patches/100-static_library.patch

@@ -1,70 +0,0 @@
---- a/C/LzmaUtil/makefile.gcc
-+++ b/C/LzmaUtil/makefile.gcc
-@@ -1,44 +1,53 @@
- PROG = lzma
--CXX = g++
--LIB =
-+CC = gcc
-+LIB = liblzma.a
- RM = rm -f
- CFLAGS = -c -O2 -Wall
-+AR = ar
-+RANLIB = ranlib
- 
- OBJS = \
--  LzmaUtil.o \
-   Alloc.o \
-   LzFind.o \
-   LzmaDec.o \
-   LzmaEnc.o \
-+  LzmaLib.o \
-   7zFile.o \
-   7zStream.o \
- 
--
- all: $(PROG)
- 
--$(PROG): $(OBJS)
--	$(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) $(LIB2)
-+$(PROG): LzmaUtil.o $(LIB)
-+	$(CC) -o $(PROG) $(LDFLAGS) $< $(LIB)
- 
- LzmaUtil.o: LzmaUtil.c
--	$(CXX) $(CFLAGS) LzmaUtil.c
-+	$(CC) $(CFLAGS) LzmaUtil.c
-+
-+$(LIB): $(OBJS)
-+	rm -f $@
-+	$(AR) rcu $@ $(OBJS)
-+	$(RANLIB) $@
- 
- Alloc.o: ../Alloc.c
--	$(CXX) $(CFLAGS) ../Alloc.c
-+	$(CC) $(CFLAGS) ../Alloc.c
- 
- LzFind.o: ../LzFind.c
--	$(CXX) $(CFLAGS) ../LzFind.c
-+	$(CC) $(CFLAGS) ../LzFind.c
- 
- LzmaDec.o: ../LzmaDec.c
--	$(CXX) $(CFLAGS) ../LzmaDec.c
-+	$(CC) $(CFLAGS) ../LzmaDec.c
- 
- LzmaEnc.o: ../LzmaEnc.c
--	$(CXX) $(CFLAGS) ../LzmaEnc.c
-+	$(CC) $(CFLAGS) ../LzmaEnc.c
-+
-+LzmaLib.o: ../LzmaLib.c
-+	$(CC) $(CFLAGS) ../LzmaLib.c
- 
- 7zFile.o: ../7zFile.c
--	$(CXX) $(CFLAGS) ../7zFile.c
-+	$(CC) $(CFLAGS) ../7zFile.c
- 
- 7zStream.o: ../7zStream.c
--	$(CXX) $(CFLAGS) ../7zStream.c
-+	$(CC) $(CFLAGS) ../7zStream.c
- 
- clean:
--	-$(RM) $(PROG) $(OBJS)
-+	-$(RM) $(PROG) *.o *.a