From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1634 invoked by alias); 29 Jul 2007 20:36:41 -0000 Received: (qmail 1622 invoked by uid 22791); 29 Jul 2007 20:36:39 -0000 X-Spam-Check-By: sourceware.org Received: from gateway.codesourcery.com (HELO sparrowhawk.codesourcery.com) (65.74.133.9) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 29 Jul 2007 20:36:37 +0000 Received: from sparrowhawk.codesourcery.com (localhost.localdomain [127.0.0.1]) by sparrowhawk.codesourcery.com (8.13.1/8.13.1) with ESMTP id l6TKaZUx012672; Sun, 29 Jul 2007 13:36:35 -0700 Received: (from mitchell@localhost) by sparrowhawk.codesourcery.com (8.13.1/8.13.1/Submit) id l6TKaYra012661; Sun, 29 Jul 2007 13:36:34 -0700 Date: Sun, 29 Jul 2007 21:06:00 -0000 Message-Id: <200707292036.l6TKaYra012661@sparrowhawk.codesourcery.com> From: Mark Mitchell To: gcc-patches@gcc.gnu.org Cc: law@redhat.com, schwab@suse.de Subject: PATCH: Add .type pseudo-op to 68K soft-float routines Reply-to: mark@codesourcery.com Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2007-07/txt/msg02080.txt.bz2 When building for soft-float GNU/Linux, we use the software floating-point emulation routines in lb1sf68.asm. The symbols for these routines had ELF symbol type STT_NOTYPE because the .asm file did not include any explicit .type pseudo-ops. The linker complains about that when linking with a shared libgcc. This patch adds .type directives to the various entry points defined in the file. Because there are non-ELF 68K ports, we can't do this unconditionally. So, I used a preprocessor test on __ELF__ (as is also done in the ARM port) to decide whether or not to issue the .type directive. I wasn't able to fully test this patch because I don't have soft-float 68K hardware. However, I did test that small programs that didn't link without the patch do link afterwards. I also verified that there are no longer any exported STT_NOTYPE symbols in libgcc_s.so. If there are no objections from the 68K maintainers, I will commit this in 48 hours. -- Mark Mitchell CodeSourcery mark@codesourcery.com (650) 331-3385 x713 2007-07-29 Mark Mitchell gcc/ * config/m68k/lb1sf68.asm (FUNC): New macro. (__mulsi3): Use it. (__udivsi3): Likewise. (__divsi3): Likewise. (__umodsi3): Likewise. (__modsi3): Likewise. (__subdf3): Likewise. (__adddf3): Likewise. (__muldf3): Likewise. (__divdf3): Likewise. (__negdf2): Likewise. (__cmpdf2): Likewise. (__subsf3): Likewise. (__addsf3): Likewise. (__mulsf3): Likewise. (__divsf3): Likewise. (__negsf2): Likewise. (__cmpsf2): Likewise. (__eqdf2): Likewise. (__nedf2): Likewise. (__gtdf2): Likewise. (__gedf2): Likewise. (__ltdf2): Likewise. (__ledf2): Likewise. (__eqsf2): Likewise. (__nesf2): Likewise. (__gtsf2): Likewise. (__gesf2): Likewise. (__ltsf2): Likewise. (__lesf2): Likewise. # gcc diff pushd /home/mitchell/scratch/cf-elf/src/gcc-4.2 svn diff Index: gcc/config/m68k/lb1sf68.asm =================================================================== --- gcc/config/m68k/lb1sf68.asm (revision 177048) +++ gcc/config/m68k/lb1sf68.asm (working copy) @@ -61,6 +61,17 @@ Boston, MA 02110-1301, USA. */ #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x) +/* Note that X is a function. */ + +#ifdef __ELF__ +#define FUNC(x) .type SYM(x),function +#else +/* The .proc pseudo-op is accepted, but ignored, by GAS. We could just define this to the empty string for non-ELF systems, but defining it + to .proc means that the information is available to the assembler if + the need arises. */ +#define FUNC(x) .proc +#endif + /* Use the right prefix for registers. */ #define REG(x) CONCAT1 (__REGISTER_PREFIX__, x) @@ -377,7 +388,7 @@ $_exception_handler: #ifdef L_mulsi3 .text - .proc + FUNC(__mulsi3) .globl SYM (__mulsi3) SYM (__mulsi3): movew sp@(4), d0 /* x0 -> d0 */ @@ -400,7 +411,7 @@ SYM (__mulsi3): #ifdef L_udivsi3 .text - .proc + FUNC(__udivsi3) .globl SYM (__udivsi3) SYM (__udivsi3): #ifndef __mcoldfire__ @@ -476,7 +487,7 @@ L2: subql IMM (1),d4 #ifdef L_divsi3 .text - .proc + FUNC(__divsi3) .globl SYM (__divsi3) SYM (__divsi3): movel d2, sp@- @@ -514,7 +525,7 @@ L3: movel sp@+, d2 #ifdef L_umodsi3 .text - .proc + FUNC(__umodsi3) .globl SYM (__umodsi3) SYM (__umodsi3): movel sp@(8), d1 /* d1 = divisor */ @@ -540,7 +551,7 @@ SYM (__umodsi3): #ifdef L_modsi3 .text - .proc + FUNC(__modsi3) .globl SYM (__modsi3) SYM (__modsi3): movel sp@(8), d1 /* d1 = divisor */ @@ -683,6 +694,7 @@ Ld$div$0: |============================================================================= | double __subdf3(double, double); + FUNC(__subdf3) SYM (__subdf3): bchg IMM (31),sp@(12) | change sign of second operand | and fall through, so we always add @@ -691,6 +703,7 @@ SYM (__subdf3): |============================================================================= | double __adddf3(double, double); + FUNC(__adddf3) SYM (__adddf3): #ifndef __mcoldfire__ link a6,IMM (0) | everything will be done in registers @@ -1414,6 +1427,7 @@ Ladddf$nf: |============================================================================= | double __muldf3(double, double); + FUNC(__muldf3) SYM (__muldf3): #ifndef __mcoldfire__ link a6,IMM (0) @@ -1746,6 +1760,7 @@ Lmuldf$b$den: |============================================================================= | double __divdf3(double, double); + FUNC(__divdf3) SYM (__divdf3): #ifndef __mcoldfire__ link a6,IMM (0) @@ -2187,6 +2202,7 @@ Lround$0: |============================================================================= | double __negdf2(double, double); + FUNC(__negdf2) SYM (__negdf2): #ifndef __mcoldfire__ link a6,IMM (0) @@ -2359,6 +2375,7 @@ Lcmpd$inop: PICJUMP $_exception_handler | int __cmpdf2(double, double); + FUNC(__cmpdf2) SYM (__cmpdf2): link a6,IMM (0) pea 1 @@ -2587,6 +2604,7 @@ Lf$div$0: |============================================================================= | float __subsf3(float, float); + FUNC(__subsf3) SYM (__subsf3): bchg IMM (31),sp@(8) | change sign of second operand | and fall through @@ -2595,6 +2613,7 @@ SYM (__subsf3): |============================================================================= | float __addsf3(float, float); + FUNC(__addsf3) SYM (__addsf3): #ifndef __mcoldfire__ link a6,IMM (0) | everything will be done in registers @@ -3081,6 +3100,7 @@ Laddsf$nf: |============================================================================= | float __mulsf3(float, float); + FUNC(__mulsf3) SYM (__mulsf3): #ifndef __mcoldfire__ link a6,IMM (0) @@ -3295,6 +3315,7 @@ Lmulsf$b$den: |============================================================================= | float __divsf3(float, float); + FUNC(__divsf3) SYM (__divsf3): #ifndef __mcoldfire__ link a6,IMM (0) @@ -3620,6 +3641,7 @@ Lround$0: | and +/-INFINITY. | float __negsf2(float); + FUNC(__negsf2) SYM (__negsf2): #ifndef __mcoldfire__ link a6,IMM (0) @@ -3761,6 +3783,7 @@ Lcmpf$inop: PICJUMP $_exception_handler | int __cmpsf2(float, float); + FUNC(__cmpsf2) SYM (__cmpsf2): link a6,IMM (0) pea 1 @@ -3859,7 +3882,7 @@ Lround$to$minus: #ifdef L_eqdf2 .text - .proc + FUNC(__eqdf2) .globl SYM (__eqdf2) SYM (__eqdf2): link a6,IMM (0) @@ -3875,7 +3898,7 @@ SYM (__eqdf2): #ifdef L_nedf2 .text - .proc + FUNC(__nedf2) .globl SYM (__nedf2) SYM (__nedf2): link a6,IMM (0) @@ -3891,7 +3914,7 @@ SYM (__nedf2): #ifdef L_gtdf2 .text - .proc + FUNC(__gtdf2) .globl SYM (__gtdf2) SYM (__gtdf2): link a6,IMM (0) @@ -3907,7 +3930,7 @@ SYM (__gtdf2): #ifdef L_gedf2 .text - .proc + FUNC(__gedf2) .globl SYM (__gedf2) SYM (__gedf2): link a6,IMM (0) @@ -3923,7 +3946,7 @@ SYM (__gedf2): #ifdef L_ltdf2 .text - .proc + FUNC(__ltdf2) .globl SYM (__ltdf2) SYM (__ltdf2): link a6,IMM (0) @@ -3939,7 +3962,7 @@ SYM (__ltdf2): #ifdef L_ledf2 .text - .proc + FUNC(__ledf2) .globl SYM (__ledf2) SYM (__ledf2): link a6,IMM (0) @@ -3958,7 +3981,7 @@ SYM (__ledf2): #ifdef L_eqsf2 .text - .proc + FUNC(__eqsf2) .globl SYM (__eqsf2) SYM (__eqsf2): link a6,IMM (0) @@ -3972,7 +3995,7 @@ SYM (__eqsf2): #ifdef L_nesf2 .text - .proc + FUNC(__nesf2) .globl SYM (__nesf2) SYM (__nesf2): link a6,IMM (0) @@ -3986,7 +4009,7 @@ SYM (__nesf2): #ifdef L_gtsf2 .text - .proc + FUNC(__gtsf2) .globl SYM (__gtsf2) SYM (__gtsf2): link a6,IMM (0) @@ -4000,7 +4023,7 @@ SYM (__gtsf2): #ifdef L_gesf2 .text - .proc + FUNC(__gesf2) .globl SYM (__gesf2) SYM (__gesf2): link a6,IMM (0) @@ -4014,7 +4037,7 @@ SYM (__gesf2): #ifdef L_ltsf2 .text - .proc + FUNC(__ltsf2) .globl SYM (__ltsf2) SYM (__ltsf2): link a6,IMM (0) @@ -4028,7 +4051,7 @@ SYM (__ltsf2): #ifdef L_lesf2 .text - .proc + FUNC(__lesf2) .globl SYM (__lesf2) SYM (__lesf2): link a6,IMM (0) popd