Add an elf note on ARM to store the MACHINE_ARCH an executable was built

for. This is useful for software needing to know which architecture a
binary is built for as arm and armv6 have slight differences meaning only
some binaries build for one will work as expected on the other. It is
expected pkgng will be able to make use of this to simplify the logic to
determine which package ABI to use.

Approved by:	re (kib)
This commit is contained in:
Andrew Turner 2013-09-26 07:53:18 +00:00
parent e10b5a023e
commit 27b7672219
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=255874
4 changed files with 18 additions and 0 deletions

View File

@ -9169,6 +9169,8 @@ get_freebsd_note_type (unsigned e_type)
return _("NT_FREEBSD_ABI_TAG");
case NT_FREEBSD_NOINIT_TAG:
return _("NT_FREEBSD_NOINIT_TAG");
case NT_FREEBSD_ARCH_TAG:
return _("NT_FREEBSD_ARCH_TAG");
default:
break;
}

View File

@ -456,6 +456,7 @@
#define NT_FREEBSD_TAG 1
#define NT_FREEBSD_NOINIT_TAG 2
#define NT_FREEBSD_ARCH_TAG 3
/* These three macros disassemble and assemble a symbol table st_info field,
which contains the symbol binding and symbol type. The STB_ and STT_

View File

@ -115,6 +115,20 @@ __start(int argc, char **argv, char **env, struct ps_strings *ps_strings,
exit(main(argc, argv, env));
}
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(int32_t),
.type = ARCH_NOTETYPE,
.name = NOTE_FREEBSD_VENDOR,
.desc = MACHINE_ARCH
};
#ifdef GCRT
__asm__(".text");
__asm__("eprol:");

View File

@ -34,5 +34,6 @@
#define ABI_NOTETYPE 1
#define CRT_NOINIT_NOTETYPE 2
#define ARCH_NOTETYPE 3
#endif