Step 2: base tools: devel/binutils
This commit is contained in:
99
devel/binutils/patches/patch-binutils_readelf.c
Normal file
99
devel/binutils/patches/patch-binutils_readelf.c
Normal file
@@ -0,0 +1,99 @@
|
||||
$NetBSD$
|
||||
|
||||
--- binutils/readelf.c.orig Mon Mar 25 08:06:21 2013
|
||||
+++ binutils/readelf.c
|
||||
@@ -3801,7 +3801,7 @@ process_program_headers (FILE * file)
|
||||
if (elf_header.e_phnum > 1)
|
||||
printf (_("\nProgram Headers:\n"));
|
||||
else
|
||||
- printf (_("\nProgram Headers:\n"));
|
||||
+ printf (_("\nProgram Header:\n"));
|
||||
|
||||
if (is_32bit_elf)
|
||||
printf
|
||||
@@ -6974,6 +6974,11 @@ decode_arm_unwind (struct arm_unw_aux_info * aux,
|
||||
|
||||
remaining = 4;
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ addr.section = SHN_UNDEF;
|
||||
+ addr.offset = 0;
|
||||
+ }
|
||||
|
||||
if ((word & 0x80000000) == 0)
|
||||
{
|
||||
@@ -12665,6 +12670,38 @@ get_gnu_elf_note_type (unsigned e_type)
|
||||
return buff;
|
||||
}
|
||||
|
||||
+static int
|
||||
+process_netbsd_elf_note (Elf_Internal_Note * pnote)
|
||||
+{
|
||||
+ unsigned int version;
|
||||
+
|
||||
+ switch (pnote->type)
|
||||
+ {
|
||||
+ case NT_NETBSD_IDENT:
|
||||
+ version = byte_get((unsigned char *)pnote->descdata, sizeof(version));
|
||||
+ if ((version / 10000) % 100)
|
||||
+ printf (" NetBSD\t0x%08lx\tIDENT %u (%u.%u%s%c)\n", pnote->descsz,
|
||||
+ version, version / 100000000, (version / 1000000) % 100,
|
||||
+ (version / 10000) % 100 > 26 ? "Z" : "",
|
||||
+ 'A' + (version / 10000) % 26);
|
||||
+ else
|
||||
+ printf (" NetBSD\t0x%08lx\tIDENT %u (%u.%u.%u)\n", pnote->descsz,
|
||||
+ version, version / 100000000, (version / 1000000) % 100,
|
||||
+ (version / 100) % 100);
|
||||
+ return 1;
|
||||
+ case NT_NETBSD_MARCH:
|
||||
+ printf (" NetBSD\t0x%08lx\tMARCH <%s>\n", pnote->descsz,
|
||||
+ pnote->descdata);
|
||||
+ return 1;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ printf (" NetBSD\t0x%08lx\tUnknown note type: (0x%08lx)\n", pnote->descsz,
|
||||
+ pnote->type);
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
print_gnu_note (Elf_Internal_Note *pnote)
|
||||
{
|
||||
@@ -12765,6 +12802,23 @@ get_netbsd_elfcore_note_type (unsigned e_type)
|
||||
}
|
||||
break;
|
||||
|
||||
+ /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
|
||||
+ There's also old PT___GETREGS40 == mach + 1 for old reg
|
||||
+ structure which lacks GBR. */
|
||||
+ case EM_SH:
|
||||
+ switch (e_type)
|
||||
+ {
|
||||
+ case NT_NETBSDCORE_FIRSTMACH + 1:
|
||||
+ return _("PT___GETREGS40 (old reg structure)");
|
||||
+ case NT_NETBSDCORE_FIRSTMACH + 3:
|
||||
+ return _("PT_GETREGS (reg structure)");
|
||||
+ case NT_NETBSDCORE_FIRSTMACH + 5:
|
||||
+ return _("PT_GETFPREGS (fpreg structure)");
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
/* On all other arch's, PT_GETREGS == mach+1 and
|
||||
PT_GETFPREGS == mach+3. */
|
||||
default:
|
||||
@@ -12970,6 +13024,10 @@ process_note (Elf_Internal_Note * pnote)
|
||||
else if (const_strneq (pnote->namedata, "GNU"))
|
||||
/* GNU-specific object file notes. */
|
||||
nt = get_gnu_elf_note_type (pnote->type);
|
||||
+
|
||||
+ else if (const_strneq (pnote->namedata, "NetBSD"))
|
||||
+ /* NetBSD-specific core file notes. */
|
||||
+ return process_netbsd_elf_note (pnote);
|
||||
|
||||
else if (const_strneq (pnote->namedata, "NetBSD-CORE"))
|
||||
/* NetBSD-specific core file notes. */
|
||||
Reference in New Issue
Block a user