This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [trunk][RFA] Add __i686.get_pc_thunk.bx to libgcc i386 morestack.S
On Tue, May 3, 2011 at 16:39, Chris Demetriou <cgd@google.com> wrote:
> > It is also OK if you s/__i686/__x86/ to correspond to your earlier
> > change. ?Either way is OK.
>
> Well, that change is not in trunk.
> Should that change move to trunk, yes, it's appropriate to change this
> as well (though strictly not *necessary*).
*sigh*
As it turns out, adding __i686.get_pc_thunk.bx to this assembly code
-- *cough* this _preprocessed_ assembly code -- chokes in certain
configurations.
For instance, if you configure with:
??--with-arch-32=pentium3
then libgcc will build with -march=pentium3
The way the symbol-visibility files are built and processed,
morestack.vis is generated from morestack.S, and contains:
? ? ? ? .hidden __i686.get_pc_thunk.bx
morestack.vis is included via -include when compiling morestack.S.
./morestack.vis:4: Error: junk at end of line, first unrecognized
character is `1'
As someone smarter than me might have guessed... in this
configuration, __i686 is defined to be '1'.
So, even if the trunk get_thunk code continues to use
__i686.get_pc_thunk.<reg>, it's necessary to use something different
here.
Kinda feels like I got smacked in the face by walking into my own
rake... *sigh*
Ian, per your previous comment (which I read as pre-approval for this
change 8-), I'm planning to commit the attached as soon as it's done
testing.
chris
-----
[libgcc/ChangeLog]
2011-05-04 Chris Demetriou <cgd@google.com>
* config/i386/morestack.S (__i686.get_pc_thunk.bx): Rename...
(__x86.get_pc_thunk.bx): To this.
(__morestack): Adjust for rename, remove undef of __i686.
[libgcc/ChangeLog]
2011-05-04 Chris Demetriou <cgd@google.com>
* config/i386/morestack.S (__i686.get_pc_thunk.bx): Rename...
(__x86.get_pc_thunk.bx): To this.
(__morestack): Adjust for rename, remove undef of __i686.
Index: libgcc/config/i386/morestack.S
===================================================================
--- libgcc/config/i386/morestack.S (revision 173355)
+++ libgcc/config/i386/morestack.S (working copy)
@@ -278,8 +278,7 @@
movl 4(%esp),%eax # Function argument.
movl %eax,(%esp)
#ifdef __PIC__
-#undef __i686
- call __i686.get_pc_thunk.bx # %ebx may not be set up for us.
+ call __x86.get_pc_thunk.bx # %ebx may not be set up for us.
addl $_GLOBAL_OFFSET_TABLE_, %ebx
call _Unwind_Resume@PLT # Resume unwinding.
#else
@@ -451,20 +450,19 @@
#if !defined(__x86_64__) && defined(__PIC__)
# Output the thunk to get PC into bx, since we use it above.
-# (__i686 was already undef'd above; don't need to worry about it here.)
- .section .text.__i686.get_pc_thunk.bx,"axG",@progbits,__i686.get_pc_thunk.bx,comdat
- .globl __i686.get_pc_thunk.bx
- .hidden __i686.get_pc_thunk.bx
+ .section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
+ .globl __x86.get_pc_thunk.bx
+ .hidden __x86.get_pc_thunk.bx
#ifdef __ELF__
- .type __i686.get_pc_thunk.bx, @function
+ .type __x86.get_pc_thunk.bx, @function
#endif
-__i686.get_pc_thunk.bx:
+__x86.get_pc_thunk.bx:
.cfi_startproc
movl (%esp), %ebx
ret
.cfi_endproc
#ifdef __ELF__
- .size __i686.get_pc_thunk.bx, . - __i686.get_pc_thunk.bx
+ .size __x86.get_pc_thunk.bx, . - __x86.get_pc_thunk.bx
#endif
#endif