Explorar el Código

Fixup handling of the .note.ABI-tag section so that it is ARM only,
and so it actually works as intended allowing binaries on ARM to be
debugged.
-Erik

Eric Andersen hace 21 años
padre
commit
54ebe998d5

+ 1 - 9
libc/misc/internals/Makefile

@@ -25,13 +25,9 @@ TOPDIR=../../../
 include $(TOPDIR)Rules.mak
 
 CSRC=__uClibc_main.c tempname.c errno.c __errno_location.c __h_errno_location.c
-
 COBJS=$(patsubst %.c,%.o, $(CSRC))
 
-SSRC=abi-note.S
-SOBJS=$(patsubst %.S,%.o, $(SSRC))
-
-OBJS=$(COBJS) $(SOBJS)
+OBJS=$(COBJS)
 
 all: $(OBJS) interp.o $(LIBC)
 
@@ -56,10 +52,6 @@ $(COBJS): %.o : %.c
 	$(CC) $(CFLAGS) -c $< -o $@
 	$(STRIPTOOL) -x -R .note -R .comment $*.o
 
-$(SOBJS): %.o : %.S
-	$(CC) $(CFLAGS) -c $< -o $@
-	$(STRIPTOOL) -x -R .note -R .comment $*.o
-
 clean:
 	rm -f *.[oa] interp.c *~ core
 

+ 0 - 77
libc/misc/internals/abi-note.S

@@ -1,77 +0,0 @@
-/* Special .init and .fini section support.
-   Copyright (C) 1997, 2001 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   In addition to the permissions in the GNU Lesser General Public
-   License, the Free Software Foundation gives you unlimited
-   permission to link the compiled version of this file with other
-   programs, and to distribute those programs without any restriction
-   coming from the use of this file.  (The Lesser General Public
-   License restrictions do apply in other respects; for example, they
-   cover modification of the file, and distribution when not linked
-   into another program.)
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-/* Define an ELF note identifying the operating-system ABI that the
-   executable was created for.  The ELF note information identifies a
-   particular OS or coordinated development effort within which the
-   ELF header's e_machine value plus (for dynamically linked programs)
-   the PT_INTERP dynamic linker name and DT_NEEDED shared library
-   names fully identify the runtime environment required by an
-   executable.
-
-   The general format of ELF notes is as follows.
-   Offsets and lengths are bytes or (parenthetical references) to the
-   values in other fields.
-
-offset	length	contents	
-0	4	length of name
-4	4	length of data
-8	4	note type
-12	(0)	vendor name
-		- null-terminated ASCII string, padded to 4-byte alignment
-12+(0)	(4)	note data, 
-
-   The GNU project and cooperating development efforts (including the
-   Linux community) use note type 1 and a vendor name string of "GNU"
-   for a note descriptor that indicates ABI requirements.  The note data
-   is four 32-bit words.  The first of these is an operating system
-   number (0=Linux, 1=Hurd, 2=Solaris, ...) and the remaining three
-   identify the earliest release of that OS that supports this ABI.
-   See abi-tags (top level) for details. */
-
-#include <features.h>
-#include <abi-tag.h>		/* OS-specific ABI tag value */
-	
-/* The linker (GNU ld 2.8 and later) recognizes an allocated section whose
-   name begins with `.note' and creates a PT_NOTE program header entry
-   pointing at it. */
-
-#ifdef __HAVE_ELF__
-	.section ".note.ABI-tag", "a"
-#else
-	.section .note
-#endif
-	.align 4
-	.long 1f - 0f		/* name length */
-	.long 3f - 2f		/* data length */
-	.long  1		/* note type */
-0:	.asciz "GNU"		/* vendor name */
-1:	.align 4		
-2:	.long __ABI_TAG_OS	/* note data: the ABI tag */
-	.long __ABI_TAG_VERSION
-3:	.align 4		/* pad out section */

+ 0 - 2
libc/misc/internals/abi-tag.h

@@ -1,2 +0,0 @@
-#define __ABI_TAG_OS 0
-#define __ABI_TAG_VERSION 2,0,0

+ 14 - 0
libc/sysdeps/linux/arm/crt0.S

@@ -109,3 +109,17 @@ _start:
 	/* Crash if somehow `exit' returns anyways.  */
 	bl abort
 
+/* We need this stuff to make gdb behave itself, otherwise
+   gdb will chokes with SIGILL when trying to debug apps.
+*/
+	.section ".note.ABI-tag", "a"
+	.align 4
+	.long 1f - 0f            
+	.long 3f - 2f            
+	.long  1                 
+0:	.asciz "GNU"             
+1:	.align 4                
+2:	.long 0          
+	.long 2,0,0 
+3:	.align 4                 
+