mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2026-09-11 18:29:22 -07:00
lessen stack usage
This commit is contained in:
@@ -98,9 +98,9 @@ static int colin_currfline;
|
||||
static int colin_curlline;
|
||||
static int cjat91_saMifareChkKeys(uint8_t blockNo, uint8_t keyType, bool clearTrace, uint8_t keyCount, const uint8_t *datain, uint64_t *key);
|
||||
static int e_MifareECardLoad(uint32_t numofsectors, uint8_t keytype);
|
||||
static void saMifareMakeTag(void);
|
||||
static void __attribute__((noinline)) saMifareMakeTag(void);
|
||||
static int saMifareCSetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, const uint8_t *datain);
|
||||
static void WriteTagToFlash(uint32_t uid, size_t size);
|
||||
static void __attribute__((noinline)) WriteTagToFlash(uint32_t uid, size_t size);
|
||||
|
||||
// TODO : Implement fast read of KEYS like in RFIdea
|
||||
// also http://ext.delaat.net/rp/2015-2016/p04/report.pdf
|
||||
@@ -261,7 +261,7 @@ static char *ReadSchemasFromSPIFFS(char *filename) {
|
||||
return (char *)mem;
|
||||
}
|
||||
|
||||
static void add_schemas_from_json_in_spiffs(char *filename) {
|
||||
static void __attribute__((noinline)) add_schemas_from_json_in_spiffs(char *filename) {
|
||||
|
||||
const char *jsonfile = ReadSchemasFromSPIFFS((char *)filename);
|
||||
|
||||
@@ -281,7 +281,7 @@ static void add_schemas_from_json_in_spiffs(char *filename) {
|
||||
}
|
||||
}
|
||||
|
||||
static void ReadLastTagFromFlash(void) {
|
||||
static void __attribute__((noinline)) ReadLastTagFromFlash(void) {
|
||||
SpinOff(0);
|
||||
LED_A_ON();
|
||||
LED_B_ON();
|
||||
@@ -307,7 +307,7 @@ static void ReadLastTagFromFlash(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
static void WriteTagToFlash(uint32_t uid, size_t size) {
|
||||
static void __attribute__((noinline)) WriteTagToFlash(uint32_t uid, size_t size) {
|
||||
SpinOff(0);
|
||||
LED_A_ON();
|
||||
LED_B_ON();
|
||||
@@ -315,7 +315,17 @@ static void WriteTagToFlash(uint32_t uid, size_t size) {
|
||||
LED_D_ON();
|
||||
|
||||
uint32_t len = size;
|
||||
uint8_t data[(size * (16 * 64)) / 1024];
|
||||
|
||||
// this used to be a VLA - `uint8_t data[(size * (16 * 64)) / 1024]` - which put
|
||||
// another `size` bytes (1024 at the only call site) on top of RunMod's already
|
||||
// 2.5 kB frame, and did not show up in -fstack-usage as anything but "dynamic".
|
||||
uint8_t *data = BigBuf_calloc((size * (16 * 64)) / 1024);
|
||||
if (data == NULL) {
|
||||
DbprintfEx(FLAG_NEWLINE, "[!!] out of memory, tag NOT written to flash");
|
||||
cjSetCursLeft();
|
||||
SpinOff(0);
|
||||
return;
|
||||
}
|
||||
|
||||
emlGetMem_xt(data, 0, (size * 64) / 1024, MIFARE_BLOCK_SIZE);
|
||||
|
||||
@@ -864,7 +874,7 @@ static int cjat91_saMifareChkKeys(uint8_t blockNo, uint8_t keyType, bool clearTr
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void saMifareMakeTag(void) {
|
||||
static void __attribute__((noinline)) saMifareMakeTag(void) {
|
||||
uint8_t cfail = 0;
|
||||
cjSetCursLeft();
|
||||
cjTabulize();
|
||||
|
||||
Reference in New Issue
Block a user