2003-05-15 * elf/Makefile (distribute): Add basemodnew.c basemodnew.map.in basemodold.c basenew.c baseold.c. (tests): Add basenew baseold. (version-maps): Add basemodnew.map. ($(common-objpfx)basemodnew.map): New rule. ($(objpfx)baseold.out): Likewise. ($(objpfx)basemodnew.so): New dependency. ($(objpfx)baseold): Likewise. ($(objpfx)basenew): Likewise. ($(objpfx)basenew.out): Likewise. * elf/basemodnew.c: New file. * elf/basemodnew.map.in: Likewise. * elf/basemodold.c: Likewise. * elf/basenew.c: Likewise. * elf/baseold.c: Likewise. --- elf/Makefile.test 2003-04-28 14:31:44.000000000 -0700 +++ elf/Makefile 2003-05-16 13:32:52.000000000 -0700 @@ -80,7 +80,9 @@ distribute := rtld-Rules \ reldep9.c reldep9mod1.c reldep9mod2.c reldep9mod3.c \ tst-array1.exp tst-array2.exp tst-array4.exp \ tst-array2dep.c \ - check-textrel.c dl-sysdep.h + check-textrel.c dl-sysdep.h \ + basemodnew.c basemodnew.map.in basemodold.c \ + basenew.c baseold.c include ../Makeconfig @@ -145,7 +147,7 @@ tests += loadtest restest1 preloadtest l neededtest3 neededtest4 unload2 lateglobal initfirst global \ restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \ circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \ - tst-tls10 tst-tls11 tst-tls12 tst-tls13 + tst-tls10 tst-tls11 tst-tls12 tst-tls13 basenew baseold # reldep9 test-srcs = tst-pathopt tests-vis-yes = vismain @@ -172,7 +174,8 @@ modules-names = testobj1 testobj2 testob circlemod1 circlemod1a circlemod2 circlemod2a \ circlemod3 circlemod3a \ reldep8mod1 reldep8mod2 reldep8mod3 \ - reldep9mod1 reldep9mod2 reldep9mod3 + reldep9mod1 reldep9mod2 reldep9mod3 \ + basemodnew basemodold ifeq (yes,$(have-initfini-array)) modules-names += tst-array2dep endif @@ -477,6 +480,28 @@ $(objpfx)order.out: $(objpfx)order $(objpfx)order > $@ (echo "0123456789" | cmp $@ -) > /dev/null +version-maps += basemodnew.map + +$(common-objpfx)basemodnew.map: basemodnew.map.in + cp basemodnew.map.in $@ + +$(objpfx)basemodnew.so: $(common-objpfx)basemodnew.map + +$(objpfx)baseold: $(objpfx)basemodold.so +$(objpfx)basenew: $(objpfx)basemodnew.so + +$(objpfx)basenew.out: $(objpfx)basenew + +$(objpfx)baseold.out: $(objpfx)baseold $(objpfx)basemodnew.so + mv $(objpfx)basemodold.so $(objpfx)basemodold.so.saved + cp $(objpfx)basemodnew.so $(objpfx)basemodold.so + status=0; \ + $(elf-objpfx)$(rtld-installed-name) \ + --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \ + $(objpfx)baseold > $@ || status=1; \ + mv $(objpfx)basemodold.so.saved $(objpfx)basemodold.so; \ + exit $$status + $(objpfx)vismain: $(addprefix $(objpfx),vismod1.so vismod2.so) $(objpfx)vismain.out: $(addprefix $(objpfx),vismod3.so) vismain-ENV = LD_PRELOAD=$(addprefix $(objpfx),vismod3.so) --- elf/basemodnew.c.test 2003-05-16 13:01:44.000000000 -0700 +++ elf/basemodnew.c 2003-05-16 12:55:33.000000000 -0700 @@ -0,0 +1,43 @@ +int +original_foo (void) +{ + return 100; +} + +int +old_foo (void) +{ + return 101; +} + +int +new_foo () +{ + return 102; +} + +int +original_xyz (void) +{ + return 0; +} + +int +old_xyz (void) +{ + return 1; +} + +int +new_xyz () +{ + return 2; +} + +__asm__(".symver original_foo,foo@"); +__asm__(".symver old_foo,foo@VERS_1.1"); +__asm__(".symver new_foo,foo@@VERS_2.0"); + +__asm__(".symver original_xyz,xyz@"); +__asm__(".symver old_xyz,xyz@VERS_1.1"); +__asm__(".symver new_xyz,xyz@@VERS_2.0"); --- elf/basemodnew.map.in.test 2003-05-16 13:01:44.000000000 -0700 +++ elf/basemodnew.map.in 2003-05-16 12:55:41.000000000 -0700 @@ -0,0 +1,8 @@ +VERS_1.1 { + global: foo; xyz; +}; + +VERS_2.0 { + global: foo; xyz; + local: *; +} VERS_1.1; --- elf/basemodold.c.test 2003-05-16 13:01:44.000000000 -0700 +++ elf/basemodold.c 2003-05-16 12:55:52.000000000 -0700 @@ -0,0 +1,11 @@ +int +foo (void) +{ + return 100; +} + +int +xyz (void) +{ + return 0; +} --- elf/basenew.c.test 2003-05-16 13:01:44.000000000 -0700 +++ elf/basenew.c 2003-05-16 13:06:25.000000000 -0700 @@ -0,0 +1,27 @@ +#include + +extern int foo (void); +extern int xyz (void); + +int +do_test (void) +{ + int res = 0; + int ret; + + ret = foo (); + if (ret != 102) + { + printf ("foo () should return 102, but returned %d!\n", ret); + res = 1; + } + + ret = xyz (); + if (ret != 2) + { + printf ("xyz () should return 2, but returned %d!\n", ret); + res = 1; + } + + return res; +} --- elf/baseold.c.test 2003-05-16 13:01:44.000000000 -0700 +++ elf/baseold.c 2003-05-16 13:06:36.000000000 -0700 @@ -0,0 +1,27 @@ +#include + +extern int foo (void); +extern int xyz (void); + +int +do_test (void) +{ + int res = 0; + int ret; + + ret = foo (); + if (ret != 100) + { + printf ("foo () should return 100, but returned %d!\n", ret); + res = 1; + } + + ret = xyz (); + if (ret != 0) + { + printf ("xyz () should return 0, but returned %d!\n", ret); + res = 1; + } + + return res; +}