mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-11-27 06:09:57 +08:00
aa991e9203
New test. Stresses several combinations of link flags and path specifications. Uses several data types to test linkage against symbols in all kinds of (e.g., ELF) sections.
185 lines
4.2 KiB
Plaintext
185 lines
4.2 KiB
Plaintext
# Hand crafted tests for GNU Libtool. -*- Autotest -*-
|
|
# Copyright 2005 Free Software Foundation, Inc.
|
|
|
|
# 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, 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.
|
|
|
|
# Test various flag and option combinations.
|
|
# Test linkage against objects in various sections.
|
|
|
|
# Note: This test is experimental, and might be too strict for some systems.
|
|
|
|
AT_BANNER([Libtool stress test.])
|
|
|
|
AT_SETUP([Link option thorough search test])
|
|
|
|
: ${LIBTOOL=${abs_top_builddir}/libtool}
|
|
|
|
eval `$LIBTOOL --config | grep ^CC=`
|
|
|
|
mkdir sub sub2 sub3 2>/dev/null
|
|
|
|
AT_DATA(a.c,
|
|
[[/* all kinds of data items */
|
|
int v1;
|
|
static int v2;
|
|
int v3 = 0;
|
|
int v4 = 1;
|
|
const int v5 = 0;
|
|
const int v6 = 1;
|
|
const char* v7 = "\01foo";
|
|
const char v8[] = "\01bar";
|
|
int v9(void) { return 1; }
|
|
int (*v10) (void);
|
|
int (*v11) (void) = v9;
|
|
int (*const v12) (void) = v9;
|
|
|
|
typedef struct { int arr[1000]; } large;
|
|
large v13;
|
|
large v14 = { { 0 } };
|
|
large v15 = { { 1 } };
|
|
]])
|
|
|
|
AT_DATA(b.c,
|
|
[[int b = 42;
|
|
int b3 = 1;
|
|
int ab = 1;
|
|
]])
|
|
|
|
AT_DATA(main.c,
|
|
[[int v1;
|
|
extern int v3, v4;
|
|
extern const int v5, v6;
|
|
extern const char* v7;
|
|
extern const char v8[];
|
|
extern int v9(void);
|
|
extern int (*v10) (void);
|
|
extern int (*v11) (void);
|
|
extern int (*const v12) (void);
|
|
|
|
typedef struct { int arr[1000]; } large;
|
|
extern large v13, v14, v15;
|
|
|
|
int main(void)
|
|
{
|
|
char s = v7[0] + v8[0];
|
|
return s + v1 + v3 + v4 + v5 + v6 + v9() + v11() + v12()
|
|
+ v13.arr[0] + v14.arr[0] + v15.arr[0]
|
|
- 8;
|
|
}
|
|
]])
|
|
|
|
AT_DATA(dlself.c,
|
|
[[int v1;
|
|
extern int v3, v4;
|
|
extern const int v5, v6;
|
|
extern const char* v7;
|
|
extern const char v8[];
|
|
extern int v9(void);
|
|
extern int (*v10) (void);
|
|
extern int (*v11) (void);
|
|
extern int (*const v12) (void);
|
|
|
|
typedef struct { int arr[1000]; } large;
|
|
extern large v13, v14, v15;
|
|
|
|
int w1;
|
|
extern int w3, w4;
|
|
extern const int w5, w6;
|
|
extern const char* w7;
|
|
extern const char w8[];
|
|
extern int w9(void);
|
|
extern int (*w10) (void);
|
|
extern int (*w11) (void);
|
|
extern int (*const w12) (void);
|
|
extern large w13, w14, w15;
|
|
|
|
int main(void)
|
|
{
|
|
char s = v7[0] + v8[0] + w7[0] + w8[0];
|
|
return s + v1 + v3 + v4 + v5 + v6 + v9() + v11() + v12()
|
|
+ v13.arr[0] + v14.arr[0] + v15.arr[0]
|
|
+ w1 + w3 + w4 + w5 + w6 + w9() + w11() + w12()
|
|
+ w13.arr[0] + w14.arr[0] + w15.arr[0]
|
|
- 16;
|
|
}
|
|
|
|
|
|
int w1;
|
|
static int w2;
|
|
int w3 = 0;
|
|
int w4 = 1;
|
|
const int w5 = 0;
|
|
const int w6 = 1;
|
|
const char* w7 = "\01foo";
|
|
const char w8[] = "\01bar";
|
|
int w9(void) { return 1; }
|
|
int (*w10) (void);
|
|
int (*w11) (void) = w9;
|
|
int (*const w12) (void) = w9;
|
|
large w13;
|
|
large w14 = { { 0 } };
|
|
large w15 = { { 1 } };
|
|
]])
|
|
|
|
AT_DATA(dlselfsyms,
|
|
[[w1
|
|
w3
|
|
w4
|
|
w5
|
|
w6
|
|
w7
|
|
w8$
|
|
^w9*
|
|
w1*
|
|
b.*
|
|
]])
|
|
|
|
|
|
AT_CHECK([$LIBTOOL --mode=compile $CC -c a.c -o sub/a.lo],[0],[ignore],[])
|
|
AT_CHECK([$LIBTOOL --mode=compile $CC -c b.c -o sub/b.o],[0],[ignore],[])
|
|
AT_CHECK([$LIBTOOL --mode=compile $CC -c main.c],[0],[ignore],[])
|
|
AT_CHECK([$LIBTOOL --mode=compile $CC -c dlself.c -o sub3/dlself.lo],[0],[ignore],[])
|
|
|
|
for l1 in '' '-no-undefined'
|
|
do
|
|
for l2 in '' '-export-symbols-regex v.*'
|
|
do
|
|
for l3 in '' '-rpath /nonexistent'
|
|
do
|
|
linkargs="$l1 $l2 $l3"
|
|
for rel in '' ./ `pwd`/
|
|
do
|
|
AT_CHECK([$LIBTOOL --mode=link $CC -o "$rel"sub2/liba.la "$rel"sub/a.lo $linkargs],
|
|
[0],[ignore],[])
|
|
for st in '' '-static'
|
|
do
|
|
AT_CHECK([$LIBTOOL --mode=link $CC $st -o "$rel"main "$rel"main.lo "$rel"sub2/liba.la],
|
|
[0],[ignore],[])
|
|
AT_CHECK([./main],[0])
|
|
for l10 in '' '-export-symbols dlselfsyms'
|
|
do
|
|
AT_CHECK([$LIBTOOL --mode=link $CC $st -o "$rel"sub3/dlself "$rel"sub3/dlself.lo "$rel"sub2/liba.la sub/b.o -dlopen self $l10],
|
|
[0],[ignore],[])
|
|
AT_CHECK([./sub3/dlself],[0])
|
|
done
|
|
done
|
|
done
|
|
done
|
|
done
|
|
done
|
|
|
|
AT_CLEANUP
|