История изменений
Исправление EXL, (текущая версия) :
Большое спасибо! Мне тут в местном чате Azq2 подсказал похожее решение проблемы:
typedef __builtin_va_list *va_list;
#define va_start(a, b) { __builtin_va_list tmp; __builtin_va_start(tmp, b); a = &tmp; }
#define va_end(a) __builtin_va_end(*a)
В итоге оно компилируется в такое и всё работает:
109018f4 <UtilLogStringData>:
109018f4: b40f push {r0, r1, r2, r3}
109018f6: b510 push {r4, lr}
109018f8: b0c4 sub sp, #272 ; 0x110
109018fa: ab46 add r3, sp, #280 ; 0x118
109018fc: cb02 ldmia r3!, {r1}
109018fe: ac04 add r4, sp, #16
10901900: aa03 add r2, sp, #12
10901902: 0020 movs r0, r4
10901904: 9303 str r3, [sp, #12]
10901906: f765 fdff bl 10867508 <vsprintf>
1090190a: 0020 movs r0, r4
1090190c: f765 fd7c bl 10867408 <strlen>
10901910: 2201 movs r2, #1
10901912: 1c43 adds r3, r0, #1
10901914: 9400 str r4, [sp, #0]
10901916: 2000 movs r0, #0
10901918: 4903 ldr r1, [pc, #12] ; (10901928 <UtilLogStringData+0x34>)
1090191a: f491 fd93 bl 10593444 <suLogData>
1090191e: b044 add sp, #272 ; 0x110
10901920: bc10 pop {r4}
10901922: bc08 pop {r3}
10901924: b004 add sp, #16
10901926: 4718 bx r3
10901928: 00005151 andeq r5, r0, r1, asr r1
И теперь я могу полностью выкинуть древний проприетарный ARM ADS, который даже не может скомпилировать такое:
UINT32 LdrLoadELF_AUX(W_CHAR *uri, W_CHAR *params) {
UINT32 status;
status = RESULT_OK;
LdrLoadELF(uri, params);
// "ElfLoader.c", line 461: Serious error: C2292E: typedef name 'UINT32' used in expression context
// "ElfLoader.c", line 461: Serious error: C2284E: expected ';' after command - inserted before 'var'
// "ElfLoader.c", line 461: Error: C2456E: undeclared name, inventing 'extern int var'
// ElfLoader.c: 0 warnings, 1 error, 2 serious errors
UINT32 var = 1;
return status;
}
Исправление EXL, :
Большое спасибо! Мне тут в местном чате Azq2 подсказал похожее решение проблемы:
typedef __builtin_va_list *va_list;
#define va_start(a, b) { __builtin_va_list tmp; __builtin_va_start(tmp, b); a = &tmp; }
#define va_end(a) __builtin_va_end(*a)
В итоге оно компилируется в такое:
109018f4 <UtilLogStringData>:
109018f4: b40f push {r0, r1, r2, r3}
109018f6: b510 push {r4, lr}
109018f8: b0c4 sub sp, #272 ; 0x110
109018fa: ab46 add r3, sp, #280 ; 0x118
109018fc: cb02 ldmia r3!, {r1}
109018fe: ac04 add r4, sp, #16
10901900: aa03 add r2, sp, #12
10901902: 0020 movs r0, r4
10901904: 9303 str r3, [sp, #12]
10901906: f765 fdff bl 10867508 <vsprintf>
1090190a: 0020 movs r0, r4
1090190c: f765 fd7c bl 10867408 <strlen>
10901910: 2201 movs r2, #1
10901912: 1c43 adds r3, r0, #1
10901914: 9400 str r4, [sp, #0]
10901916: 2000 movs r0, #0
10901918: 4903 ldr r1, [pc, #12] ; (10901928 <UtilLogStringData+0x34>)
1090191a: f491 fd93 bl 10593444 <suLogData>
1090191e: b044 add sp, #272 ; 0x110
10901920: bc10 pop {r4}
10901922: bc08 pop {r3}
10901924: b004 add sp, #16
10901926: 4718 bx r3
10901928: 00005151 andeq r5, r0, r1, asr r1
И теперь я могу полностью выкинуть древний проприетарный ARM ADS, который даже не может скомпилировать такое:
UINT32 LdrLoadELF_AUX(W_CHAR *uri, W_CHAR *params) {
UINT32 status;
status = RESULT_OK;
LdrLoadELF(uri, params);
// "ElfLoader.c", line 461: Serious error: C2292E: typedef name 'UINT32' used in expression context
// "ElfLoader.c", line 461: Serious error: C2284E: expected ';' after command - inserted before 'var'
// "ElfLoader.c", line 461: Error: C2456E: undeclared name, inventing 'extern int var'
// ElfLoader.c: 0 warnings, 1 error, 2 serious errors
UINT32 var = 1;
return status;
}
Исходная версия EXL, :
Большое спасибо! Мне тут в чате Azq2 подсказал похожее решение проблемы:
typedef __builtin_va_list *va_list;
#define va_start(a, b) { __builtin_va_list tmp; __builtin_va_start(tmp, b); a = &tmp; }
#define va_end(a) __builtin_va_end(*a)
В итоге оно компилируется в такое:
109018f4 <UtilLogStringData>:
109018f4: b40f push {r0, r1, r2, r3}
109018f6: b510 push {r4, lr}
109018f8: b0c4 sub sp, #272 ; 0x110
109018fa: ab46 add r3, sp, #280 ; 0x118
109018fc: cb02 ldmia r3!, {r1}
109018fe: ac04 add r4, sp, #16
10901900: aa03 add r2, sp, #12
10901902: 0020 movs r0, r4
10901904: 9303 str r3, [sp, #12]
10901906: f765 fdff bl 10867508 <vsprintf>
1090190a: 0020 movs r0, r4
1090190c: f765 fd7c bl 10867408 <strlen>
10901910: 2201 movs r2, #1
10901912: 1c43 adds r3, r0, #1
10901914: 9400 str r4, [sp, #0]
10901916: 2000 movs r0, #0
10901918: 4903 ldr r1, [pc, #12] ; (10901928 <UtilLogStringData+0x34>)
1090191a: f491 fd93 bl 10593444 <suLogData>
1090191e: b044 add sp, #272 ; 0x110
10901920: bc10 pop {r4}
10901922: bc08 pop {r3}
10901924: b004 add sp, #16
10901926: 4718 bx r3
10901928: 00005151 andeq r5, r0, r1, asr r1
И теперь я могу полностью выкинуть древний проприетарный ARM ADS, который даже не может скомпилировать такое:
UINT32 LdrLoadELF_AUX(W_CHAR *uri, W_CHAR *params) {
UINT32 status;
status = RESULT_OK;
LdrLoadELF(uri, params);
// "ElfLoader.c", line 461: Serious error: C2292E: typedef name 'UINT32' used in expression context
// "ElfLoader.c", line 461: Serious error: C2284E: expected ';' after command - inserted before 'var'
// "ElfLoader.c", line 461: Error: C2456E: undeclared name, inventing 'extern int var'
// ElfLoader.c: 0 warnings, 1 error, 2 serious errors
UINT32 var = 1;
return status;
}