diff options
Diffstat (limited to 'sysdeps/sparc')
-rw-r--r-- | sysdeps/sparc/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/sparc/elf/rtld-global-offsets.sym | 7 | ||||
-rw-r--r-- | sysdeps/sparc/fpu/libm-test-ulps | 467 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/dl-machine.h | 6 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/dl-trampoline.S | 58 | ||||
-rw-r--r-- | sysdeps/sparc/sparc64/dl-trampoline.S | 43 | ||||
-rw-r--r-- | sysdeps/sparc/sparc64/multiarch/memcpy.S | 1 | ||||
-rw-r--r-- | sysdeps/sparc/sparc64/multiarch/memset.S | 1 |
8 files changed, 521 insertions, 64 deletions
diff --git a/sysdeps/sparc/Makefile b/sysdeps/sparc/Makefile index 45609d55f1..1dd70e8b55 100644 --- a/sysdeps/sparc/Makefile +++ b/sysdeps/sparc/Makefile @@ -12,8 +12,6 @@ CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_SPARC_GCC=1 endif ifeq ($(subdir),csu) -# get offset to rtld_global._dl_hwcap -gen-as-const-headers += rtld-global-offsets.sym CPPFLAGS-crti.S += -fPIC CPPFLAGS-crtn.S += -fPIC endif diff --git a/sysdeps/sparc/elf/rtld-global-offsets.sym b/sysdeps/sparc/elf/rtld-global-offsets.sym deleted file mode 100644 index ff4e97f2a6..0000000000 --- a/sysdeps/sparc/elf/rtld-global-offsets.sym +++ /dev/null @@ -1,7 +0,0 @@ -#define SHARED 1 - -#include <ldsodefs.h> - -#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem) - -RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap) diff --git a/sysdeps/sparc/fpu/libm-test-ulps b/sysdeps/sparc/fpu/libm-test-ulps index 178c1971b1..29e732c282 100644 --- a/sysdeps/sparc/fpu/libm-test-ulps +++ b/sysdeps/sparc/fpu/libm-test-ulps @@ -28,11 +28,195 @@ float: 1 ifloat: 1 # cacos +Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: cacos (1.5 + +0 i) == +0 - 0.9624236501192068949955178268487368462704 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 # cacosh +Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i": +double: 1 +idouble: 1 +Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i": +double: 1 +idouble: 1 +Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": double: 1 float: 7 @@ -47,8 +231,101 @@ idouble: 1 ifloat: 3 ildouble: 1 ldouble: 1 +Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 # casin +Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-1.5 + +0 i) == -pi/2 + 0.9624236501192068949955178268487368462704 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": double: 1 float: 1 @@ -57,8 +334,71 @@ ifloat: 1 Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: casin (1.5 + +0 i) == pi/2 + 0.9624236501192068949955178268487368462704 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 # casinh +Test "Real part of: casinh (-0 + 1.5 i) == -0.9624236501192068949955178268487368462704 + pi/2 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0 - 1.5 i) == -0.9624236501192068949955178268487368462704 - pi/2 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": double: 5 float: 1 @@ -73,6 +413,16 @@ idouble: 3 ifloat: 6 ildouble: 2 ldouble: 2 +Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i": float: 1 ifloat: 1 @@ -85,6 +435,30 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 # catan Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": @@ -419,23 +793,51 @@ ldouble: 1 Test "cosh_downward (22) == 1792456423.065795780980053377632656584997": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "cosh_downward (23) == 4872401723.124451300068625740569997090344": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "cosh_downward (24) == 13244561064.92173614708845674912733665919": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 + +# cosh_tonearest +Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997": +ildouble: 1 +ldouble: 1 # cosh_towardzero Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 + +# cosh_upward +Test "cosh_upward (22) == 1792456423.065795780980053377632656584997": +ildouble: 1 +ldouble: 1 +Test "cosh_upward (23) == 4872401723.124451300068625740569997090344": +ildouble: 1 +ldouble: 1 +Test "cosh_upward (24) == 13244561064.92173614708845674912733665919": +ildouble: 1 +ldouble: 1 # cpow Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": @@ -954,6 +1356,8 @@ ifloat: 1 Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 # sin_downward Test "sin_downward (1) == 0.8414709848078965066525023216302989996226": @@ -1095,24 +1499,45 @@ ifloat: 1 Test "sinh_downward (22) == 1792456423.065795780701106568345764104225": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "sinh_downward (23) == 4872401723.124451299966006944252978187305": float: 1 ifloat: 1 +ildouble: 2 +ldouble: 2 Test "sinh_downward (24) == 13244561064.92173614705070540368454568168": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 # sinh_towardzero Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305": float: 1 ifloat: 1 +ildouble: 2 +ldouble: 2 Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168": float: 1 ifloat: 1 +# sinh_upward +Test "sinh_upward (22) == 1792456423.065795780701106568345764104225": +ildouble: 1 +ldouble: 1 +Test "sinh_upward (23) == 4872401723.124451299966006944252978187305": +ildouble: 1 +ldouble: 1 +Test "sinh_upward (24) == 13244561064.92173614705070540368454568168": +ildouble: 1 +ldouble: 1 + # sqrt Test "sqrt (2) == M_SQRT2l": ildouble: 1 @@ -1413,10 +1838,20 @@ Function: "atanh": float: 1 ifloat: 1 -Function: Imaginary part of "cacos": +Function: Real part of "cacos": +double: 1 +idouble: 1 ildouble: 1 ldouble: 1 +Function: Imaginary part of "cacos": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 + Function: Real part of "cacosh": double: 1 float: 7 @@ -1440,8 +1875,12 @@ idouble: 1 ifloat: 1 Function: Imaginary part of "casin": -ildouble: 1 -ldouble: 1 +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 Function: Real part of "casinh": double: 5 @@ -1586,10 +2025,22 @@ ldouble: 1 Function: "cosh_downward": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "cosh_tonearest": +ildouble: 1 +ldouble: 1 Function: "cosh_towardzero": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "cosh_upward": +ildouble: 1 +ldouble: 1 Function: Real part of "cpow": double: 2 @@ -1782,6 +2233,8 @@ ifloat: 1 Function: "pow_upward": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: "sin_downward": float: 1 @@ -1818,10 +2271,18 @@ ldouble: 1 Function: "sinh_downward": float: 1 ifloat: 1 +ildouble: 2 +ldouble: 2 Function: "sinh_towardzero": float: 1 ifloat: 1 +ildouble: 2 +ldouble: 2 + +Function: "sinh_upward": +ildouble: 1 +ldouble: 1 Function: "sqrt": ildouble: 1 diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index 1620ca54df..f85683d1b0 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. SPARC version. - Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010, 2011 + Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -341,10 +341,14 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, void *const reloc_addr_arg, int skip_ifunc) { Elf32_Addr *const reloc_addr = reloc_addr_arg; +#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP const Elf32_Sym *const refsym = sym; +#endif Elf32_Addr value; const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); +#if !defined RESOLVE_CONFLICT_FIND_MAP struct link_map *sym_map = NULL; +#endif #if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC /* This is defined in rtld.c, but nowhere in the static libc.a; make the diff --git a/sysdeps/sparc/sparc32/dl-trampoline.S b/sysdeps/sparc/sparc32/dl-trampoline.S index 79ec79fe9e..44794592aa 100644 --- a/sysdeps/sparc/sparc32/dl-trampoline.S +++ b/sysdeps/sparc/sparc32/dl-trampoline.S @@ -1,5 +1,5 @@ /* PLT trampolines. Sparc 32-bit version. - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -48,17 +48,20 @@ _dl_runtime_resolve: .size _dl_runtime_resolve, .-_dl_runtime_resolve /* For the profiling cases we pass in our stack frame - * as the base of the La_sparc64_regs, so it looks + * as the base of the La_sparc32_regs, so it looks * like: - * %l0 %sp + * %l0 %sp + (0 * 8) + * %l1 %sp + (0 * 8) + 4 * ... - * %l7 %sp + (7 * 8) - * %i0 %sp + (8 * 8) + * %l6 %sp + (3 * 8) + * %l7 %sp + (3 * 8) + 4 + * %i0 %sp + (4 * 8) + * %i1 %sp + (4 * 8) + 4 * ... - * %i7 %sp + (15 * 8) - * %f0 %sp + (16 * 8) - * %f16 %sp + (31 * 8) - * framesize %sp + (32 * 8) + * %i6 %sp + (7 * 8) + * %i7 %sp + (7 * 8) + 4 + * struct_ret_ptr %sp + (8 * 8) + * framesize %sp + (9 * 8) */ .globl _dl_profile_save_regs @@ -74,7 +77,7 @@ _dl_profile_save_regs: std %i2, [%sp + ( 5 * 8)] std %i4, [%sp + ( 6 * 8)] std %i6, [%sp + ( 7 * 8)] - ld [%sp + (8 * 8)], %l4 + ld [%fp + (8 * 8)], %l4 retl st %l4, [%sp + (8 * 8)] @@ -91,8 +94,11 @@ _dl_profile_save_regs: _dl_profile_invoke: cfi_startproc - sub %sp, %l0, %sp -1: + add %l0, 7, %l0 + andn %l0, 7, %l0 + add %l0, 2 * 8, %g1 + + sub %sp, %g1, %sp srl %l0, 3, %l7 mov %o0, %l1 mov %i0, %o0 @@ -101,8 +107,10 @@ _dl_profile_invoke: mov %i3, %o3 mov %i4, %o4 mov %i5, %o5 + cmp %l0, 0 mov %fp, %l2 - mov %sp, %l3 + be 2f + add %sp, (11 * 8), %l3 1: ldd [%l2], %g2 add %l2, 0x8, %l2 subcc %l7, 1, %l7 @@ -110,7 +118,7 @@ _dl_profile_invoke: bne 1b add %l3, 0x8, %l3 - jmpl %l1, %o7 +2: jmpl %l1, %o7 nop std %o0, [%sp + ( 9 * 8)] @@ -118,11 +126,12 @@ _dl_profile_invoke: mov %l5, %o0 mov %l6, %o1 - add %sp, %l0, %o2 + add %sp, (11 * 8), %o2 call _dl_call_pltexit - add %sp, (16 * 8), %o3 + add %sp, ( 9 * 8), %o3 - ldd [%sp + (9 * 8)], %i0 + ldd [%sp + ( 9 * 8)], %i0 + ldd [%sp + (10 * 8)], %f0 jmpl %i7 + 8, %g0 restore @@ -142,11 +151,7 @@ _dl_profile_invoke: _dl_runtime_profile: cfi_startproc - cmp %fp, 0 - be,a 1f - mov 104, %g3 - sub %fp, %sp, %g3 -1: save %sp, -104, %sp + save %sp, -104, %sp cfi_def_cfa_register(%fp) cfi_window_save cfi_register(%o7, %i7) @@ -156,20 +161,19 @@ _dl_runtime_profile: mov %i7, %o2 sub %o1, 4*12, %o1 - mov %g3, %l0 mov %o0, %l5 mov %o1, %l6 - call _dl_profile_save_regs + call _dl_profile_save_regs nop mov %sp, %o3 call _dl_profile_fixup add %sp, (9 * 8), %o4 - ld [%sp + (9 * 8)], %o1 - cmp %o1, 0 - bgeu 1f + ld [%sp + (9 * 8)], %l0 + cmp %l0, 0 + bl 1f nop call _dl_profile_invoke diff --git a/sysdeps/sparc/sparc64/dl-trampoline.S b/sysdeps/sparc/sparc64/dl-trampoline.S index 7caece3430..7d74fd0af8 100644 --- a/sysdeps/sparc/sparc64/dl-trampoline.S +++ b/sysdeps/sparc/sparc64/dl-trampoline.S @@ -1,5 +1,5 @@ /* PLT trampolines. Sparc 64-bit version. - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -158,8 +158,11 @@ _dl_profile_save_regs: _dl_profile_invoke: cfi_startproc - sub %sp, %l0, %sp -1: + add %l0, 7, %l0 + andn %l0, 7, %l0 + add %l0, (8 * 8), %g1 + + sub %sp, %g1, %sp srlx %l0, 3, %l7 mov %o0, %l1 mov %i0, %o0 @@ -169,7 +172,8 @@ _dl_profile_invoke: mov %i4, %o4 mov %i5, %o5 add %fp, STACK_BIAS, %l2 - add %sp, STACK_BIAS, %l3 + brz %l0, 2f + add %sp, STACK_BIAS, %l3 1: ldx [%l2], %l4 add %l2, 0x8, %l2 subcc %l7, 1, %l7 @@ -177,7 +181,7 @@ _dl_profile_invoke: bne,pt %xcc, 1b add %l3, 0x8, %l3 - jmpl %l1, %o7 +2: jmpl %l1, %o7 nop stx %o0, [%sp + STACK_BIAS + (16 * 8)] @@ -191,15 +195,18 @@ _dl_profile_invoke: mov %l5, %o0 mov %l6, %o1 - add %sp, %l0, %o2 - add %sp, STACK_BIAS + (16 * 8), %o3 + add %sp, STACK_BIAS + (24 * 8), %o2 call _dl_call_pltexit - add %o2, STACK_BIAS, %o2 + add %sp, STACK_BIAS + (16 * 8), %o3 ldx [%sp + STACK_BIAS + (16 * 8)], %i0 ldx [%sp + STACK_BIAS + (17 * 8)], %i1 ldx [%sp + STACK_BIAS + (18 * 8)], %i2 ldx [%sp + STACK_BIAS + (19 * 8)], %i3 + ldd [%sp + STACK_BIAS + (20 * 8)], %f0 + ldd [%sp + STACK_BIAS + (21 * 8)], %f2 + ldd [%sp + STACK_BIAS + (22 * 8)], %f4 + ldd [%sp + STACK_BIAS + (23 * 8)], %f8 jmpl %i7 + 8, %g0 restore @@ -219,10 +226,7 @@ _dl_profile_invoke: _dl_runtime_profile_0: cfi_startproc - brz,a,pn %fp, 1f - mov 192, %g5 - sub %fp, %sp, %g5 -1: save %sp, -336, %sp + save %sp, -336, %sp cfi_def_cfa_register(%fp) cfi_window_save cfi_register(%o7, %i7) @@ -250,7 +254,6 @@ _dl_runtime_profile_0: mov %i7, %o2 sllx %l0, 3, %o1 - mov %g5, %l0 mov %o0, %l5 mov %o1, %l6 @@ -261,8 +264,8 @@ _dl_runtime_profile_0: call _dl_profile_fixup add %sp, (STACK_BIAS + (32 * 8)), %o4 - ldx [%sp + STACK_BIAS + (32 * 8)], %o1 - brgez,pt %o1, 1f + ldx [%sp + STACK_BIAS + (32 * 8)], %l0 + brlz,pt %l0, 1f nop call _dl_profile_invoke @@ -285,10 +288,7 @@ _dl_runtime_profile_0: _dl_runtime_profile_1: cfi_startproc - brz,a,pn %fp, 1f - mov 192, %g5 - sub %fp, %sp, %g5 -1: save %sp, -336, %sp + save %sp, -336, %sp cfi_def_cfa_register(%fp) cfi_window_save cfi_register(%o7, %i7) @@ -300,7 +300,6 @@ _dl_runtime_profile_1: mov %i7, %o2 add %o1, %o3, %o1 - mov %g5, %l0 mov %o0, %l5 mov %o1, %l6 @@ -311,8 +310,8 @@ _dl_runtime_profile_1: call _dl_profile_fixup add %sp, (STACK_BIAS + (32 * 8)), %o4 - ldx [%sp + STACK_BIAS + (32 * 8)], %o1 - brgez,pt %o1, 1f + ldx [%sp + STACK_BIAS + (32 * 8)], %l0 + brlz,pt %l0, 1f nop call _dl_profile_invoke diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S index 739687f3b8..36c488672d 100644 --- a/sysdeps/sparc/sparc64/multiarch/memcpy.S +++ b/sysdeps/sparc/sparc64/multiarch/memcpy.S @@ -18,7 +18,6 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#include <rtld-global-offsets.h> #if !defined NOT_IN_libc .text diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S index 13533450c2..c717f0c9a5 100644 --- a/sysdeps/sparc/sparc64/multiarch/memset.S +++ b/sysdeps/sparc/sparc64/multiarch/memset.S @@ -18,7 +18,6 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#include <rtld-global-offsets.h> #if !defined NOT_IN_libc .text |