- Detection of .size instruction.
- Detection of the assembler name prefix.
This commit is contained in:
parent
c196f63a72
commit
68467db6c6
|
@ -13357,6 +13357,71 @@ _ACEOF
|
|||
|
||||
|
||||
|
||||
echo "$as_me:$LINENO: checking for .size in assembler" >&5
|
||||
echo $ECHO_N "checking for .size in assembler... $ECHO_C" >&6
|
||||
if test "${ac_cv_c_asm_size+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
/* confdefs.h. */
|
||||
_ACEOF
|
||||
cat confdefs.h >>conftest.$ac_ext
|
||||
cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
void ac_asm(void) { asm(".globl _ac_test\n.size _ac_test, . - _ac_test"); }
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
(eval $ac_link) 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; } &&
|
||||
{ ac_try='test -s conftest$ac_exeext'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
ac_cv_c_asm_size="yes"
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
ac_cv_c_asm_size="no"
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $ac_cv_c_asm_size" >&5
|
||||
echo "${ECHO_T}$ac_cv_c_asm_size" >&6
|
||||
|
||||
if test "$ac_cv_c_asm_size" = "yes"
|
||||
then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_ASM_DOT_SIZE 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
|
||||
DLLEXT=""
|
||||
|
||||
DLLFLAGS="-D_REENTRANT"
|
||||
|
|
11
configure.ac
11
configure.ac
|
@ -828,6 +828,17 @@ AC_CACHE_CHECK([for assembler keyword for word values], ac_cv_c_asm_short,
|
|||
AC_DEFINE_UNQUOTED(__ASM_SHORT, ["$ac_cv_c_asm_short"],
|
||||
[Define to the assembler keyword used to specify a word value])
|
||||
|
||||
dnl **** Check for .size in assembler ****
|
||||
|
||||
AC_CACHE_CHECK([for .size in assembler], ac_cv_c_asm_size,
|
||||
WINE_TRY_ASM_LINK([".globl _ac_test\n.size _ac_test, . - _ac_test"],,,
|
||||
ac_cv_c_asm_size="yes",ac_cv_c_asm_size="no"))
|
||||
|
||||
if test "$ac_cv_c_asm_size" = "yes"
|
||||
then
|
||||
AC_DEFINE(HAVE_ASM_DOT_SIZE, 1, [Define if the assembler keyword .size is accepted])
|
||||
fi
|
||||
|
||||
dnl **** Check for working dll ****
|
||||
|
||||
AC_SUBST(DLLEXT,"")
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
/* Define if you have ARTS sound server */
|
||||
#undef HAVE_ARTS
|
||||
|
||||
/* Define if the assembler keyword .size is accepted */
|
||||
#undef HAVE_ASM_DOT_SIZE
|
||||
|
||||
/* Define to 1 if you have the <audio/audiolib.h> header file. */
|
||||
#undef HAVE_AUDIO_AUDIOLIB_H
|
||||
|
||||
|
|
|
@ -176,6 +176,13 @@ inline static void sort_symbols( char **table, int size )
|
|||
qsort( table, size, sizeof(*table), name_cmp );
|
||||
}
|
||||
|
||||
inline static void output_function_size( FILE *outfile, const char *name )
|
||||
{
|
||||
#ifdef HAVE_ASM_DOT_SIZE
|
||||
fprintf( outfile, " \"\\t.size " __ASM_NAME("%s") ", . - " __ASM_NAME("%s") "\\n\"\n", name, name);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* free an import structure */
|
||||
static void free_imports( struct import *imp )
|
||||
{
|
||||
|
@ -533,6 +540,8 @@ static const char *ldcombine_files( char **argv )
|
|||
/* read in the list of undefined symbols */
|
||||
void read_undef_symbols( char **argv )
|
||||
{
|
||||
static const char name_prefix[] = __ASM_NAME("");
|
||||
static const int prefix_len = sizeof(name_prefix) - 1;
|
||||
FILE *f;
|
||||
char buffer[1024];
|
||||
int err;
|
||||
|
@ -558,6 +567,7 @@ void read_undef_symbols( char **argv )
|
|||
p = buffer;
|
||||
while (*p == ' ') p++;
|
||||
if (p[0] == 'U' && p[1] == ' ' && p[2]) p += 2;
|
||||
if (prefix_len && !strncmp( p, name_prefix, prefix_len )) p += prefix_len;
|
||||
add_undef_symbol( p );
|
||||
}
|
||||
if ((err = pclose( f ))) warning( "nm -u %s error %d\n", name, err );
|
||||
|
@ -740,11 +750,11 @@ static int output_immediate_imports( FILE *outfile )
|
|||
#error You need to define import thunks for your architecture!
|
||||
#endif
|
||||
fprintf( outfile, "\"\n" );
|
||||
fprintf( outfile, " \"\\t.size " __ASM_NAME("%s") ", . - " __ASM_NAME("%s") "\\n\"\n", name, name);
|
||||
output_function_size( outfile, name );
|
||||
}
|
||||
pos += 4;
|
||||
}
|
||||
fprintf( outfile, " \"\\t.size " __ASM_NAME("%s") ", . - " __ASM_NAME("%s") "\\n\"\n", import_thunks, import_thunks);
|
||||
output_function_size( outfile, import_thunks );
|
||||
fprintf( outfile, " \".text\");\n#ifndef __GNUC__\n}\n#endif\n\n" );
|
||||
|
||||
done:
|
||||
|
@ -936,7 +946,7 @@ static int output_delayed_imports( FILE *outfile, const DLLSPEC *spec )
|
|||
#else
|
||||
#error You need to defined delayed import thunks for your architecture!
|
||||
#endif
|
||||
fprintf( outfile, " \"\\t.size " __ASM_NAME("__wine_delay_load_asm") ", . - " __ASM_NAME("__wine_delay_load_asm") "\\n\"\n");
|
||||
output_function_size( outfile, "__wine_delay_load_asm" );
|
||||
|
||||
for (i = idx = 0; i < nb_imports; i++)
|
||||
{
|
||||
|
@ -965,11 +975,11 @@ static int output_delayed_imports( FILE *outfile, const DLLSPEC *spec )
|
|||
#else
|
||||
#error You need to defined delayed import thunks for your architecture!
|
||||
#endif
|
||||
fprintf( outfile, " \"\\t.size " __ASM_NAME("%s") ", . - " __ASM_NAME("%s") "\\n\"\n", name, name);
|
||||
output_function_size( outfile, name );
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
fprintf( outfile, "\n \"\\t.size " __ASM_NAME("%s") ", . - " __ASM_NAME("%s") "\\n\"\n", delayed_import_loaders, delayed_import_loaders);
|
||||
output_function_size( outfile, delayed_import_loaders );
|
||||
|
||||
fprintf( outfile, "\n \".data\\n\\t.align %d\\n\"\n", get_alignment(8) );
|
||||
fprintf( outfile, " \"" __ASM_NAME("%s") ":\\n\"\n", delayed_import_thunks);
|
||||
|
@ -1032,10 +1042,10 @@ static int output_delayed_imports( FILE *outfile, const DLLSPEC *spec )
|
|||
#error You need to define delayed import thunks for your architecture!
|
||||
#endif
|
||||
fprintf( outfile, "\n" );
|
||||
fprintf( outfile, " \"\\t.size " __ASM_NAME("%s") ", . - " __ASM_NAME("%s") "\\n\"\n", name, name);
|
||||
output_function_size( outfile, name );
|
||||
}
|
||||
}
|
||||
fprintf( outfile, " \"\\t.size " __ASM_NAME("%s") ", . - " __ASM_NAME("%s") "\\n\"\n", delayed_import_thunks, delayed_import_thunks);
|
||||
output_function_size( outfile, delayed_import_thunks );
|
||||
fprintf( outfile, "\".text\");\n" );
|
||||
fprintf( outfile, "#ifndef __GNUC__\n" );
|
||||
fprintf( outfile, "}\n" );
|
||||
|
|
Loading…
Reference in New Issue