On Tue, 10 Sep 2013 22:29:38 -0500
Nathan Whitehorn <nwhiteh...@freebsd.org> wrote:

> On 09/10/13 15:56, Baptiste Daroussin wrote:
> > Author: bapt
> > Date: Tue Sep 10 20:56:01 2013
> > New Revision: 255457
> > URL: http://svnweb.freebsd.org/changeset/base/255457
> >
> > Log:
> >    Add support to detect arm vs armv6
> >    
> >    There are two different versions of the ARM ABI depending on the
> >    TARGET_ARCH. As these are sligntly different a package built for
> >    one may not work on another. We need to detect which one we are
> > on by parsing the .ARM.attributes section.
> >    
> >    This will only work on the ARM EABI as this section is part of
> > the ABI definition. As armv6 only supports the ARM EABI this is not
> > a problem for the oabi.
> >    
> >    Older versions of libelf in FreeBSD fail to read the
> >    .ARM.attributes section needed. As armv6 is unsupported on these
> >    versions we can assume we are running on arm.
> >    
> 
> Picking a random commit: I don't suppose we can just use MACHINE_ARCH 
> for these identifiers? It encapsulates everything needed for
> compatibility. -Nathan
> 
> 

I have the attached patch to add a MACHINE_ARCH elf note. It would
remove the need to parse the .ARM.attributes section. NetBSD is doing
something similar to the patch where it appears they have
a .note.netbsd.march section.

Andrew
Index: lib/csu/common/crtbrand.c
===================================================================
--- lib/csu/common/crtbrand.c	(revision 252514)
+++ lib/csu/common/crtbrand.c	(working copy)
@@ -64,3 +64,17 @@
 	.name = NOTE_FREEBSD_VENDOR,
 	.desc = __FreeBSD_version
 };
+
+static const struct {
+	int32_t	namesz;
+	int32_t	descsz;
+	int32_t	type;
+	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
+	char	desc[sizeof(MACHINE_ARCH)];
+} archtag __attribute__ ((section (NOTE_SECTION), aligned(4))) __used = {
+	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
+	.descsz = sizeof(MACHINE_ARCH),
+	.type = ARCH_NOTETYPE,
+	.name = NOTE_FREEBSD_VENDOR,
+	.desc = MACHINE_ARCH
+};
Index: lib/csu/common/notes.h
===================================================================
--- lib/csu/common/notes.h	(revision 252514)
+++ lib/csu/common/notes.h	(working copy)
@@ -34,5 +34,6 @@
 
 #define ABI_NOTETYPE		1
 #define	CRT_NOINIT_NOTETYPE	2
+#define	ARCH_NOTETYPE		3
 
 #endif
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to