mirror of
https://github.com/frida/tinycc
synced 2024-11-24 16:49:44 +03:00
4b3c6e74ab
tccgen.c: doubles need to be aligned, on ARM. The section_reserve() in init_putv does not do that. -D ONE_SOURCE: is now the default and not longer needed. Also, tcc.h now sets the default native target. These both make compiling tcc simple as "gcc tcc.c -o tcc -ldl" again. arm-asm.c: enable pseudo asm also for inline asm tests/tests2/Makefile: disable bitfield tests except on windows and x86_64 and don't generate-always tcc.c: fix a loop with -dt on errors configure: print compiler version (as recognized) tccpp.c: actually define symbols for tcc -dt clear static variables (needed for -dt or libtcc usage) 96_nodata_wanted.c: use __label__ instead of asm lib/files: use native symbols (__i386__ etc.) instead of TCC_TARGET_...
85 lines
1.9 KiB
C
85 lines
1.9 KiB
C
/*****************************************************************************/
|
|
/* test 'nodata_wanted' data output suppression */
|
|
|
|
#if defined test_static_data_error
|
|
void foo() {
|
|
if (1) {
|
|
static short w = (int)&foo; /* initializer not computable */
|
|
}
|
|
}
|
|
|
|
#elif defined test_static_nodata_error
|
|
void foo() {
|
|
if (0) {
|
|
static short w = (int)&foo; /* initializer not computable */
|
|
}
|
|
}
|
|
|
|
#elif defined test_global_data_error
|
|
void foo();
|
|
static short w = (int)&foo; /* initializer not computable */
|
|
|
|
|
|
#elif defined test_local_data_noerror
|
|
void foo() {
|
|
short w = &foo; /* 2 cast warnings */
|
|
}
|
|
|
|
#elif defined test_data_suppression_off || defined test_data_suppression_on
|
|
|
|
#if defined test_data_suppression_on
|
|
# define SKIP 1
|
|
#else
|
|
# define SKIP 0
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
/* some gcc headers #define __attribute__ to empty if it's not gcc */
|
|
#undef __attribute__
|
|
|
|
int main()
|
|
{
|
|
__label__ ts0, te0, ts1, te1;
|
|
int tl, dl;
|
|
|
|
static char ds0 = 0;
|
|
static char de0 = 0;
|
|
/* get reference size of empty jmp */
|
|
ts0:;
|
|
if (!SKIP) {}
|
|
te0:;
|
|
dl = -(&de0 - &ds0);
|
|
tl = -(&&te0 - &&ts0);
|
|
|
|
/* test data and code suppression */
|
|
static char ds1 = 0;
|
|
ts1:;
|
|
if (!SKIP) {
|
|
static void *p = (void*)&main;
|
|
static char cc[] = "static string";
|
|
static double d = 8.0;
|
|
|
|
static struct __attribute__((packed)) {
|
|
unsigned x : 12;
|
|
unsigned char y : 7;
|
|
unsigned z : 28, a: 4, b: 5;
|
|
} s = { 0x333,0x44,0x555555,6,7 };
|
|
|
|
printf("data:\n");
|
|
printf(" %d - %.1f - %.1f - %s - %s\n",
|
|
sizeof 8.0, 8.0, d, __FUNCTION__, cc);
|
|
printf(" %x %x %x %x %x\n",
|
|
s.x, s.y, s.z, s.a, s.b);
|
|
}
|
|
te1:;
|
|
static char de1 = 0;
|
|
|
|
dl += &de1 - &ds1;
|
|
tl += &&te1 - &&ts1;
|
|
printf("size of data/text:\n %s/%s\n",
|
|
dl ? "non-zero":"zero", tl ? "non-zero":"zero");
|
|
printf("# %d/%d\n", dl, tl);
|
|
}
|
|
|
|
#endif
|