Put __dso_handle in .sdata/.sbss on ia64

Message ID 20190602003003.46487-1-jrtc27@jrtc27.com
State New
Headers show
Series
  • Put __dso_handle in .sdata/.sbss on ia64
Related show

Commit Message

Jessica Clarke June 2, 2019, 12:30 a.m.
The symbol is exposed to C by dso_handle.h, and since it's a single
8-byte pointer, it is just within the threshold for being in the small
data (or bss) section, so code accessing it will use GP-relative
addressing. Therefore we must put it in .sdata/.sbss in case our other
data sections grow too big and we overflow the 22-bit relocation.

libgcc/
	* config/ia64/crtbegin.S (__dso_handle): Put in .sdata/.sbss
	rather than .data/.bss so it can be accessed via gp-relative
	addressing.
---
 libgcc/config/ia64/crtbegin.S | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.20.1

Comments

Jeff Law June 5, 2019, 10:27 p.m. | #1
On 6/1/19 6:30 PM, James Clarke wrote:
> The symbol is exposed to C by dso_handle.h, and since it's a single

> 8-byte pointer, it is just within the threshold for being in the small

> data (or bss) section, so code accessing it will use GP-relative

> addressing. Therefore we must put it in .sdata/.sbss in case our other

> data sections grow too big and we overflow the 22-bit relocation.

> 

> libgcc/

> 	* config/ia64/crtbegin.S (__dso_handle): Put in .sdata/.sbss

> 	rather than .data/.bss so it can be accessed via gp-relative

> 	addressing.

THanks.  Ive installed this on the trunk.

jeff

Patch

diff --git a/libgcc/config/ia64/crtbegin.S b/libgcc/config/ia64/crtbegin.S
index 5b2f55936dd..213ccd7ab8b 100644
--- a/libgcc/config/ia64/crtbegin.S
+++ b/libgcc/config/ia64/crtbegin.S
@@ -45,11 +45,11 @@  dtor_ptr:
 	.type __dso_handle,@object
 	.size __dso_handle,8
 #ifdef SHARED
-	.section .data
+	.section .sdata
 __dso_handle:
 	data8	__dso_handle
 #else
-	.section .bss
+	.section .sbss
 	.align 8
 __dso_handle:
 	.skip	8